สารบัญ:

โปรแกรมสร้างภาพเสียง RGB LED Strip ที่ไม่สามารถระบุที่อยู่ได้: 6 ขั้นตอน (พร้อมรูปภาพ)
โปรแกรมสร้างภาพเสียง RGB LED Strip ที่ไม่สามารถระบุที่อยู่ได้: 6 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: โปรแกรมสร้างภาพเสียง RGB LED Strip ที่ไม่สามารถระบุที่อยู่ได้: 6 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: โปรแกรมสร้างภาพเสียง RGB LED Strip ที่ไม่สามารถระบุที่อยู่ได้: 6 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: รีวิวไฟเส้น 6 เมตร ARGB สว่างแสงสวยโคตรคุ้ม AqaLight สั่งงานผ่านมือถือได้ 2024, พฤศจิกายน
Anonim
Image
Image

ฉันมีแถบ LED RGB 12v รอบตู้ทีวีมาระยะหนึ่งแล้ว และมันถูกควบคุมโดยไดรเวอร์ LED ที่น่าเบื่อ ซึ่งช่วยให้ฉันเลือกสีที่โปรแกรมไว้ล่วงหน้าได้หนึ่งสีจากทั้งหมด 16 สี!

ฉันฟังเพลงมากมายที่ทำให้ฉันมีแรงบันดาลใจแต่การจัดแสงไม่ได้ช่วยปรับอารมณ์ให้เหมาะสม ในการแก้ไขที่ตัดสินใจนำสัญญาณเสียงที่ส่งไปยังลำโพงของฉันผ่าน AUX (แจ็ค 3.5 มม.) ให้ประมวลผลและควบคุมแถบ RGB ตามลำดับ

ไฟ LED จะตอบสนองต่อเสียงเพลงตามขนาดของเสียงทุ้ม (ต่ำ) เสียงแหลม (กลาง) และความถี่สูง

ช่วงความถี่ – สีมีดังนี้:

ต่ำ – สีแดง

กลาง-เขียว

สูง – น้ำเงิน

โปรเจ็กต์นี้เกี่ยวข้องกับงาน DIY มากมายเพราะวงจรทั้งหมดถูกสร้างขึ้นตั้งแต่เริ่มต้น สิ่งนี้น่าจะค่อนข้างง่ายหากคุณตั้งค่าบนเขียงหั่นขนม แต่ค่อนข้างท้าทายที่จะบัดกรีบน PCB

เสบียง

(x1) แถบ LED RGB

(x1) Arduino Uno/Nano (แนะนำให้ใช้ Mega)

(x1) TL072 หรือ TL082 (TL081/TL071 ก็ใช้ได้เหมือนกัน)

(x3) TIP120 ทรานซิสเตอร์ NPN (TIP121, TIP122 หรือ N-Channel MOSFET เช่น IRF540, IRF 530 ก็ใช้ได้เช่นกัน)

(x1) 10kOhm โพเทนชิโอมิเตอร์เชิงเส้น

(x3) ตัวต้านทาน 100kOhm 1/4 วัตต์

(x1) 10uF ตัวเก็บประจุด้วยไฟฟ้า

(x1) ตัวเก็บประจุเซรามิก 47nF

(x2) ขั้วต่อสัญญาณเสียง 3.5 มม. – ตัวเมีย

(x2) แบตเตอรี่ 9V

(x2) ขั้วต่อสแน็ปแบตเตอรี่ 9V

ขั้นตอนที่ 1: ทำความเข้าใจเกี่ยวกับประเภทของแถบ LED RGB

ทำความเข้าใจเกี่ยวกับประเภทของแถบ LED RGB
ทำความเข้าใจเกี่ยวกับประเภทของแถบ LED RGB

แถบ LED มีพื้นฐานอยู่ 2 ชนิด ได้แก่ ชนิด "แอนะล็อก" และชนิด "ดิจิทัล"

แถบอะนาล็อก (รูปที่ 1) มีไฟ LED ทั้งหมดที่เชื่อมต่อแบบขนานและทำหน้าที่เหมือน LED สามสีขนาดใหญ่หนึ่งดวง คุณสามารถตั้งค่าแถบทั้งหมดให้เป็นสีใดก็ได้ที่คุณต้องการ แต่คุณไม่สามารถควบคุมสีของ LED แต่ละดวงได้ ใช้งานง่ายและราคาไม่แพงนัก

แถบประเภทดิจิทัล (รูปที่ 2) ทำงานในลักษณะที่ต่างออกไป พวกเขามีชิปสำหรับ LED แต่ละดวงเพื่อใช้แถบคุณต้องส่งข้อมูลที่เข้ารหัสแบบดิจิทัลไปยังชิป อย่างไรก็ตาม นี่หมายความว่าคุณสามารถควบคุม LED แต่ละดวงแยกกันได้! เนื่องจากชิปที่มีความซับซ้อนเป็นพิเศษจึงมีราคาแพงกว่า

หากคุณพบว่าเป็นการยากที่จะระบุความแตกต่างระหว่างแถบอนาล็อกและแถบดิจิตอล

  1. แบบอนาล็อกใช้ 4 พิน ขั้วบวกทั่วไป 1 ตัว และเนกาทีฟ 3 ตัว เช่น หนึ่งตัวสำหรับ RGB แต่ละสี
  2. ชนิดดิจิทัลใช้ 3 พิน บวก ข้อมูล และกราวด์

ฉันจะใช้แถบประเภทแอนะล็อกเพราะ

  1. มี Instructables น้อยหรือไม่มีเลยที่สอนวิธีสร้างแถบประเภทแอนะล็อกแบบโต้ตอบเพลง ส่วนใหญ่เน้นที่ประเภท Digital และง่ายต่อการตอบสนองต่อดนตรี
  2. ฉันมีแถบประเภทแอนะล็อกวางอยู่รอบๆ

ขั้นตอนที่ 2: ขยายสัญญาณเสียง

การขยายสัญญาณเสียง
การขยายสัญญาณเสียง
การขยายสัญญาณเสียง
การขยายสัญญาณเสียง
การขยายสัญญาณเสียง
การขยายสัญญาณเสียง

สัญญาณเสียงที่ส่งออกผ่านแจ็คเสียงคือ

สัญญาณแอนะล็อกที่แกว่งภายใน +200mV และ -200mV ปัญหาคือเราต้องการวัดสัญญาณเสียงด้วยอินพุตอนาล็อกตัวใดตัวหนึ่งของ Arduino เนื่องจากอินพุตแบบอะนาล็อกของ Arduino สามารถวัดแรงดันไฟฟ้าได้ระหว่าง 0 ถึง 5V เท่านั้น ถ้าเราพยายามวัดแรงดันลบในสัญญาณเสียงจาก Arduino จะอ่านได้เพียง 0V และเราจะจบลงที่ด้านล่างของสัญญาณ

เพื่อแก้ปัญหานี้ เราต้องขยายและชดเชยสัญญาณเสียงเพื่อให้อยู่ในช่วง 0-5V ตามหลักการแล้ว สัญญาณควรมีแอมพลิจูด 2.5V ซึ่งแกว่งประมาณ 2.5V เพื่อให้แรงดันไฟต่ำสุดเป็น 0V และแรงดันไฟสูงสุดคือ 5V

การขยายเสียง

แอมพลิฟายเออร์เป็นขั้นตอนแรกในวงจร โดยจะเพิ่มแอมพลิจูดของสัญญาณจากประมาณ + หรือ - 200mV เป็น + หรือ - 2.5V (ตามอุดมคติ) ฟังก์ชันอื่นของแอมพลิฟายเออร์คือการปกป้องแหล่งกำเนิดเสียง (สิ่งที่สร้างสัญญาณเสียงตั้งแต่แรก) จากส่วนที่เหลือของวงจร สัญญาณที่ขยายออกจะจ่ายกระแสทั้งหมดจากแอมพลิฟายเออร์ ดังนั้นโหลดใดๆ ที่ใส่ลงในวงจรในภายหลังจะไม่ "รู้สึก" โดยแหล่งกำเนิดเสียง (ในกรณีของฉัน โทรศัพท์/iPod/แล็ปท็อป) ทำได้โดยการตั้งค่าหนึ่งใน op-amps ในแพ็คเกจ TL072 หรือ TL082 (fig 2) ในการกำหนดค่าแอมพลิฟายเออร์ที่ไม่กลับด้าน

แผ่นข้อมูลของ TL072 หรือ TL082 บอกว่ามันควรจะขับเคลื่อนด้วย +15 และ -15V แต่เนื่องจากสัญญาณจะไม่ถูกขยายให้สูงกว่า + หรือ - 2.5V จึงสามารถเรียกใช้ op-amp ด้วยค่าที่ต่ำกว่าได้ ฉันใช้แบตเตอรี่เก้าโวลต์สองก้อนต่ออนุกรมเพื่อสร้างแหล่งจ่ายไฟ + หรือ - 9V

ต่อสาย +V (พิน 8) และ –V (พิน 4) เข้ากับ op-amp ต่อสัญญาณจากแจ็คโมโนเข้ากับอินพุตที่ไม่กลับด้าน (พิน 3) และเชื่อมต่อพินกราวด์ของแจ็คกับค่าอ้างอิง 0V บนแหล่งจ่ายแรงดันไฟฟ้าของคุณ (สำหรับฉันนี่คือจุดเชื่อมต่อระหว่างแบตเตอรี่ 9V สองก้อนในซีรีย์) ต่อตัวต้านทาน 100kOhm ระหว่างเอาต์พุต (พิน 1) และอินพุตกลับด้าน (พิน 2) ของ op-amp ในวงจรนี้ ฉันใช้โพเทนชิออมิเตอร์ 10kOhm ต่อสายเป็นตัวต้านทานแบบปรับค่าได้เพื่อปรับเกน (ปริมาณที่แอมพลิฟายเออร์ขยาย) ของแอมพลิฟายเออร์ที่ไม่กลับด้านของฉัน วางสายหม้อเรียวเชิงเส้น 10K นี้ระหว่างอินพุตกลับด้านและการอ้างอิง 0V

DC Offset

วงจร DC offset มีสององค์ประกอบหลัก: ตัวแบ่งแรงดันและตัวเก็บประจุ ตัวแบ่งแรงดันไฟฟ้าทำจากตัวต้านทาน 100k สองตัวต่อสายเป็นอนุกรมจากแหล่งจ่ายไฟ 5V ของ Arduino ไปยังกราวด์ เนื่องจากตัวต้านทานมีความต้านทานเท่ากัน แรงดันไฟฟ้าที่ทางแยกระหว่างพวกมันจะเท่ากับ 2.5V ชุมทาง 2.5V นี้เชื่อมโยงกับเอาต์พุตของแอมพลิฟายเออร์ผ่านตัวเก็บประจุ 10uF เนื่องจากแรงดันไฟฟ้าที่ด้านแอมพลิฟายเออร์ของตัวเก็บประจุเพิ่มขึ้นและลดลง จะทำให้ประจุสะสมและผลักออกจากด้านข้างของตัวเก็บประจุที่ต่อกับทางแยก 2.5V ชั่วขณะ ซึ่งทำให้แรงดันไฟฟ้าที่ทางแยก 2.5V แกว่งขึ้นและลง โดยมีศูนย์กลางอยู่ที่ 2.5V

ดังที่แสดงในแผนผัง ให้ต่อขั้วลบของตัวเก็บประจุ 10uF เข้ากับเอาต์พุตจากเครื่องขยายเสียง เชื่อมต่ออีกด้านหนึ่งของฝาปิดเข้ากับทางแยกระหว่างตัวต้านทาน 100k สองตัวที่มีสายแบบอนุกรมระหว่าง 5V กับกราวด์ เพิ่มตัวเก็บประจุ 47nF จาก 2.5V ลงกราวด์ด้วย

ขั้นตอนที่ 3: การสลายตัวของสัญญาณเป็นผลรวมของไซนัสที่อยู่กับที่ - ทฤษฎี

การสลายตัวของสัญญาณเป็นผลรวมของไซนัสที่อยู่กับที่ - ทฤษฎี
การสลายตัวของสัญญาณเป็นผลรวมของไซนัสที่อยู่กับที่ - ทฤษฎี

สัญญาณเสียงที่ส่งออกผ่านแจ็ค 3.5 มม. อยู่ในช่อง

ช่วง 20 Hz ถึง 20 kHz สุ่มตัวอย่างที่ 44.1 kHz และแต่ละตัวอย่างถูกเข้ารหัสแบบ 16 บิต

ในการแยกแยะความถี่องค์ประกอบพื้นฐานที่ประกอบเป็นสัญญาณเสียง เราใช้การแปลงฟูริเยร์กับสัญญาณ ซึ่งจะแยกสัญญาณให้เป็นผลรวมของไซนูซอยด์ที่อยู่กับที่ กล่าวอีกนัยหนึ่ง การวิเคราะห์ฟูริเยร์จะแปลงสัญญาณจากโดเมนเดิม (มักเป็นเวลาหรือช่องว่าง) เป็นการแทนค่าในโดเมนความถี่และในทางกลับกัน แต่การคำนวณโดยตรงจากคำจำกัดความมักจะช้าเกินไปที่จะนำไปใช้ได้จริง

ตัวเลขแสดงให้เห็นว่าสัญญาณมีลักษณะอย่างไรในโดเมนเวลาและความถี่

นี่คือจุดที่อัลกอริธึม Fast Fourier Transform (FFT) มีประโยชน์มาก!

ตามคำจำกัดความ

FFT คำนวณการเปลี่ยนแปลงดังกล่าวอย่างรวดเร็วโดยการแยกตัวประกอบเมทริกซ์ DFT เป็นผลคูณของปัจจัยกระจัดกระจาย (ส่วนใหญ่เป็นศูนย์) ด้วยเหตุนี้ มันจึงจัดการลดความซับซ้อนของการคำนวณ DFT จาก O(N2) ซึ่งจะเกิดขึ้นหากเราใช้คำจำกัดความของ DFT กับ O(N log N) โดยที่ N คือขนาดข้อมูล ความแตกต่างของความเร็วอาจมีขนาดมหึมา โดยเฉพาะอย่างยิ่งสำหรับชุดข้อมูลขนาดยาวที่ N อาจเป็นหลักพันหรือหลายล้าน เมื่อมีข้อผิดพลาดในการปัดเศษ อัลกอริธึม FFT จำนวนมากมีความแม่นยำมากกว่าการประเมินคำจำกัดความ DFT โดยตรงหรือโดยอ้อม

ในแง่ง่ายๆ ก็หมายความว่าอัลกอริทึม FFT เป็นวิธีที่เร็วกว่าในการคำนวณการแปลงฟูริเยร์ของสัญญาณใดๆ โดยทั่วไปจะใช้กับอุปกรณ์ที่มีกำลังประมวลผลต่ำ

แนะนำ: