สารบัญ:
วีดีโอ: CRAZY L.O.L SPECTRUM ANALYZER: 6 ขั้นตอน (พร้อมรูปภาพ)
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-13 06:58
วันนี้ฉันอยากจะแบ่งปันวิธีการสร้างเครื่องวิเคราะห์สเปกตรัมเสียง - 36 แบนด์โดยการรวม 4 LoL Shields เข้าด้วยกัน โครงการบ้าๆ นี้ใช้ไลบรารี FFT เพื่อวิเคราะห์สัญญาณเสียงสเตอริโอ แปลงเป็นย่านความถี่ และแสดงแอมพลิจูดของย่านความถี่เหล่านี้บน 4 x LoL Shields
ก่อนเริ่มต้น โปรดดูวิดีโอด้านล่าง:
ขั้นตอนที่ 1: สิ่งที่เราต้องการ
ส่วนประกอบอิเล็กทรอนิกส์หลักมีดังนี้:
- 4 ชิ้น x Arduino Uno R3
- 4 ชิ้น x LoLShield PCB PCBWay (บริการต้นแบบ PCB แบบกำหนดเองแบบเต็มคุณสมบัติ) รองรับแผงวงจรพิมพ์ LoLShield เหล่านี้กับฉัน
- 504 ชิ้น x LED, 3 มม. LoLShield แต่ละตัวต้องการ LED 126 ดวง และเราสามารถเลือกสีและประเภท LED ได้ 4 สี (แบบกระจายและไม่กระจาย)
- 1 pcs x แบบพกพา Charger Power Bank แบตเตอรี่ 10000/20000 mAh.
- 4 ชิ้น x ส่วนหัวชาย 40 พิน 2.54 มม.
- 2 pcs x USB Type A/B สาย อันหนึ่งใช้สำหรับการเขียนโปรแกรม Arduino อีกอันหนึ่งใช้สำหรับจ่ายไฟ Arduino จากแบตสำรอง
- 1 pcs x 3.5 มม. แจ็คสเตอริโอเสียงหญิง.
- 1 pcs x 3.5 มม. 1 ชาย 2 หญิง Audio Splitter Adapter หรือหูฟังหลาย Audio Splitter.
- 1ชิ้นx 3.5มิลลิเมตรเสียงสเตอริโอแจ็คชาย-ชายเชื่อมต่อสายเคเบิ้ล
- สายริบบิ้นสายรุ้ง 1 ม. x 8P
- สายไฟ 1 ม. x สองแกน
- 1 ชิ้น x อะคริลิคใส ขนาด A4
ขั้นตอนที่ 2: แผนผัง
LoLShield เป็นเมทริกซ์ LED แบบชาร์ลีเพล็กซ์ขนาด 9x14 สำหรับ Arduino และการออกแบบนี้ไม่รวมตัวต้านทานจำกัดกระแสใดๆ LED สามารถระบุแอดเดรสแยกกันได้ ดังนั้นเราจึงสามารถใช้เพื่อแสดงข้อมูลในเมทริกซ์ LED ขนาด 9 × 14
LoL Shield ปล่อยให้ D0 (Rx), D1 (Tx) และพินอะนาล็อก A0 ถึง A5 ฟรีสำหรับแอปพลิเคชันอื่น รูปภาพด้านล่างแสดงการใช้งานพิน Arduino Uno สำหรับโครงการนี้:
เครื่องวิเคราะห์สเปกตรัมเสียงของฉันมี 4 x (Arduino Uno + LoLShield) แหล่งจ่ายไฟและแจ็คเสียงสเตอริโอ 3.5 มม. เชื่อมต่อตามแผนผังด้านล่าง:
ขั้นตอนที่ 3: LOL SHIELD PCB & LED SOLDERING
1. LoL SHIELD PCB
. คุณสามารถอ้างถึงการออกแบบ PCB ได้ที่: https://github.com/jprodgers/LoLshield โดย Jimmie P. Rodgers
. PCBWay สนับสนุนแผงวงจรพิมพ์ LoLShield เหล่านี้ให้ฉันด้วยการจัดส่งที่รวดเร็วและ PCB คุณภาพสูง
2. LED SOLDERING
. LoLShield แต่ละตัวต้องการไฟ LED 126 ดวง และฉันใช้ชนิดและสีที่ต่างกันสำหรับ 4x LoLShields ดังนี้:
- 1 x LoLShield: ไฟ LED กระจาย สีแดง 3 มม.
- 1 x LoLShield: ไฟ LED กระจาย สีเขียว 3 มม.
- 2 x LoLShield: ไฟ LED ไม่กระจาย (ใส) สีฟ้า 3 มม.
. การเตรียม LoLShield PCB และ LED
. บัดกรี 126 LED บน LoLShield PCB เราควรตรวจสอบไฟ LED ด้วยแบตเตอรี่หลังจากบัดกรีทุกแถว - 14 LEDs
ท็อป LoLSHIELD
ด้านล่าง LoLSHIELD
. เสร็จสิ้น LoLShield หนึ่งรายการและทำการบัดกรี LoLShield ที่เหลืออีก 3 รายการ
ขั้นตอนที่ 4: การเชื่อมต่อและการประกอบ
. แหล่งจ่ายไฟบัดกรีและสัญญาณเสียงไปยัง 4xLoLShield สัญญาณสเตอริโอใช้ช่องสัญญาณเสียงสองช่อง: ซ้ายและขวาซึ่งเชื่อมต่อกับ Arduino Uno ที่ขาอะนาล็อก A4 & A5
- A4: ช่องสัญญาณเสียงด้านซ้าย
- A5: ช่องสัญญาณเสียงด้านขวา
. การจัดตำแหน่งและติดตั้ง 4 x Arduino Uno บนแผ่นอะคริลิก
. เสียบ 4 x LoLShield เข้ากับ 4 x Arduino Uno
. กาวพาวเวอร์แบงค์ที่ชาร์จแบบพกพาและแจ็คเสียงบนแผ่นอะครีลิค
. เสร็จแล้ว!
ขั้นตอนที่ 5: การเขียนโปรแกรม
คุณควรอ้างอิงถึงวิธีการทำงานของ LoLShield ตามวิธี Charlieplexing และ Fast Fourier Transform (FFT) ที่:
en.wikipedia.org/wiki/Charlieplexing
github.com/kosme/fix_fft
สำหรับ Charlieplexing เราให้ความสำคัญกับ "สามสถานะ" ของพินดิจิทัล Arduino: "สูง" (5V), "LOW" (0V) และ "INPUT" โหมด "INPUT" ทำให้พิน Arduino อยู่ในสถานะอิมพีแดนซ์สูง อ้างอิงที่:
www.arduino.cc/en/Tutorial/DigitalPins
ในโครงการของฉัน คลื่นความถี่เสียงจะแสดงบน 4 x LoL Shield และอธิบายไว้ดังแสดงด้านล่าง:
Arduino แต่ละตัวจะอ่านสัญญาณเสียงที่ช่องสัญญาณซ้าย/ขวาและดำเนินการ FFT
สำหรับ (i=0; i < 64; i++) { Audio_Input= analogRead (RIGHT_CHANNEL); // อ่านสัญญาณเสียงที่ช่อง A5 ทางขวา - ARDUINO 1 & 2 //Audio_Input = analogRead (LEFT_CHANNEL); // อ่านสัญญาณเสียงที่ช่อง A4 ด้านซ้าย - ARDUINO 3 & 4 Real_Number = Audio_Input; Imaginary_Number = 0; } fix_fft(Real_Number, Imaginary_Number, 6, 0); // ทำการแปลงฟูริเยร์อย่างรวดเร็วด้วย N_WAVE=6 (2^6=64) สำหรับ (i=0; i< 32;i++) { Real_Number = 2*sqrt(Real_Number * Real_Number + Imaginary_Number * Imaginary_Number); }
. Arduino 1 - แสดงแถบความถี่แอมพลิจูด 01 ~ 09 ของช่องสัญญาณขวา (A5)
สำหรับ (int x=0; x <14; x++) { สำหรับ (int y=0; y <9; y++) { if (x < Real_Number [y]) // แสดงย่านความถี่ 01 ถึง 09 { LedSign:: Set (13-x, 8-y, 1); // LED ON } อื่น { LedSign:: Set (13-x, 8-y, 0); // LED ปิด } } }
. Arduino 2 - แสดงแถบความถี่แอมพลิจูด 10 ~ 18 ของช่องสัญญาณขวา (A5)
สำหรับ (int x=0; x <14; x++) { สำหรับ (int y=0; y <9; y++) { if (x < Real_Number [9 + y]) // แสดงย่านความถี่ 10 ถึง 18 { LedSign::Set(13-x, 8-y, 1); // LED ON } อื่น { LedSign:: Set (13-x, 8-y, 0); // LED ปิด } } }
. Arduino 3 - แสดงแถบความถี่แอมพลิจูด 01 ~ 09 ของช่องสัญญาณด้านซ้าย (A4)
รหัสจะเหมือนกับ Arduino 1 และช่องสัญญาณเสียงด้านซ้ายเชื่อมต่อกับ Arduino ที่ขาอะนาล็อก A4
. Arduino 4 - แสดงแถบความถี่แอมพลิจูด 10 ~ 18 ของช่องสัญญาณด้านซ้าย
รหัสจะเหมือนกับ Arduino 2 และช่องสัญญาณเสียงด้านซ้ายเชื่อมต่อกับ Arduino ที่ขาอะนาล็อก A4
ขั้นตอนที่ 6: เสร็จสิ้น
เครื่องวิเคราะห์สเปกตรัมแบบพกพานี้สามารถเชื่อมต่อโดยตรงกับแล็ปท็อป/เดสก์ท็อป โทรศัพท์มือถือ แท็บเล็ต หรือเครื่องเล่นเพลงอื่นๆ ผ่านแจ็คเสียงสเตอริโอ 3.5 มม. โครงการนี้ดูบ้า หวังว่าคุณจะชอบมัน!
ขอบคุณสำหรับการอ่านของคุณ !!!