Audio Spectrum Visualiser พร้อมการเลือกสี
ผมสนใจในความเป็นไปได้ของ “Neopixel” RGB LED แบบ addressable ผมอยากเรียนรู้วิธีการควบคุมและนำมาใช้ในโปรเจกต์ที่ท้าทาย ผมเคยอ่านเจอหลายโปรเจกต์ที่ใช้แถวและเมทริกซ์ของ LED เพื่อแสดง spectrum เสียง คล้ายกับจอแสดงผลแบบมีไฟบน graphic equalizers
ผมลองคิดถึงอะไรที่แตกต่างออกไปเล็กน้อย แล้วถ้าเป็นแถวแนวตั้งของ LED โดยที่ความถี่ต่ำจะอยู่ที่ด้านล่าง ความถี่สูงจะอยู่ที่ด้านบน และแอมพลิจูดของแต่ละย่านความถี่จะปรากฏเป็นความสว่างของ LED แต่ละดวงล่ะ? แล้วเพลงก็จะ "เต้นเป็นจังหวะ" ไปตามแถวนี้ ผมไม่ใช่คนแรกที่คิดหรือทำสิ่งนี้แน่นอน แต่ผมยังไม่เคยเห็นการประยุกต์ใช้แบบนี้โดยเฉพาะมาก่อน
ถ้าความสว่างของ LED ถูกควบคุมด้วยเพลง แล้วสีของ LED จะสามารถตั้งค่าได้โดยผู้ใช้ของอุปกรณ์ได้หรือไม่?
วิธีการทำงาน

วงจรและโค้ดสำหรับอุปกรณ์นี้ทำงานในสองโหมด โหมดเหล่านี้ถูกเลือกด้วยสวิตช์โหมดที่อยู่ด้านขวาของแผงด้านหน้า เมื่อสวิตช์โหมดอยู่ในตำแหน่งซ้ายมือ โหมด Colour Set จะถูกเปิดใช้งาน
โหมด Colour Set ช่วยให้ผู้ใช้สามารถตั้งค่าช่วงสีของ LED strip โดยใช้ potentiometers ทั้ง 5 ตัว โดยเฉพาะอย่างยิ่ง จากซ้ายไปขวา potentiometers จะปรับ:
1. Value - ความสว่างโดยรวมของ LED strip
2. Saturation - การตั้งค่านี้จะค่อยๆ เปลี่ยน Hues ระหว่างสีสดใสและสีขาวบริสุทธิ์
3. Top Hue - ระบุว่า Hue (สี) ใดอยู่ที่ด้านบนของ LED strip
4. Bottom Hue - ระบุว่า Hue (สี) ใดอยู่ที่ด้านล่างของ LED strip
เมื่อ LED strip มี Hue มากกว่าหนึ่ง ลำดับสีจะตามลำดับของ spectrum สีเสมอ: แดง, ส้ม, เหลือง, เขียว, น้ำเงิน, ม่วง
ในการเลือก Hue เดียวสำหรับ LED strip ทั้งหมด เพียงแค่วาง potentiometers ของ Top Hue และ Bottom Hue ในตำแหน่งเดียวกัน
5. Spread - ควบคุมว่า Hues กระจายตัวกว้างแค่ไหนตลอด LED strip จากรวมตัวกันตรงกลางไปจนถึง “อัดรวมกัน” ที่ปลายทั้งสองข้าง
ผมใช้โมเดลสี Hue, Saturation และ Value (HSV) ในการควบคุม LED แทนที่จะเป็นพารามิเตอร์ RGB เพราะ HSV ให้ผลลัพธ์ที่ผมต้องการโดยตรง บทความนี้ อธิบายและเปรียบเทียบโมเดลสี HSV และ RGB โชคดีที่ไลบรารี Adafruit Neopixel ที่ใช้ในโค้ดรองรับทั้ง RGB และ HSV
เมื่อสวิตช์โหมดอยู่ในตำแหน่งขวามือ โหมด FFT จะถูกเปิดใช้งาน ในโหมดนี้ potentiometers จะถูกปิดใช้งาน
โหมด FFT (Fast Fourier Transform) รับอินพุตจากการเชื่อมต่อหูฟังของเครื่องเล่นเพลง โดยใช้ FFT จะคำนวณส่วน Value (ความสว่าง) ของการตั้งค่า HSV สำหรับแต่ละย่านความถี่ จากนั้นจะรวมพารามิเตอร์ Value นี้เข้ากับสีที่ผู้ใช้เลือกแล้วส่งไปยัง LED ที่เหมาะสม บทความนี้ ให้คำอธิบายที่เข้าใจง่ายเกี่ยวกับ Fourier transforms การคำนวณจริงนั้นเกินความเข้าใจของผม แต่ก็นับเป็นอีกครั้งที่ชุมชน Arduino ที่ใจกว้างได้เข้ามาช่วยเหลือในรูปแบบของไลบรารี ArduinoFFT
วงจร
แผนภาพวงจร

ในแผนภาพนี้ อุปกรณ์ที่ระบุว่าเป็น Arduino Nano (Rev3.0) แท้จริงแล้วคือ Arduino Nano Every
อุปกรณ์ที่ระบุว่าเป็น Voltage Regulator 5V แท้จริงแล้วคือ 5V buck converter อะแดปเตอร์ 9VDC จ่ายไฟให้ Nano ผ่านขา Vin และจ่ายไฟให้ buck convertor หน้าที่ของ buck convertor คือจ่ายไฟ 5V ให้ LED strip Nano สื่อสารกับ LED strip ผ่านขา D3
ผมใช้วงจรอินพุตเสียง (ที่ด้านซ้ายบนของแผนภาพ) ที่อธิบายรายละเอียดในโปรเจกต์นี้:
https://create.arduino.cc/projecthub/shajeeb/32-band-audio-spectrum-visualizer-analyzer-902f51.
วงจรนี้ใช้วขา REF และ 3.3V ของ Nano และป้อนเข้าสู่ A0 analog input
potentiometers ทั้งห้าตัวใช้สำหรับตั้งค่าสีและช่วงสีของ LED strip การตั้งค่าทั้งห้าอธิบายไว้ในส่วน Code โดยจะถูกอ่านโดย A1 ถึง A5 analog inputs ของ Nano
สวิตช์โหมดใช้สำหรับเลือกโหมด Colour Set หรือ FFT ตำแหน่งสวิตช์ถูกอ่านที่ขา D2 ของ Nano
ไฟล์ Fritzing สามารถดาวน์โหลดได้ในส่วน Schematics ด้านล่าง
การประกอบบน Breadboard

ผมรวมแผนภาพนี้สำหรับผู้ที่ต้องการสำรวจและปรับเปลี่ยนวงจรเหมือนที่ผมทำ การประกอบบน Breadboard ยังเป็นวิธีที่หงุดหงิดน้อยที่สุดในการทดสอบโค้ดและส่วนประกอบทั้งหมด ไฟล์ Fritzing สามารถดาวน์โหลดได้ในส่วน Schematics ด้านล่าง
อีกครั้งที่นี้ อุปกรณ์ที่ดูเหมือน voltage regulator จริงๆ แล้วคือ 5V buck converter คอนโทรลเลอร์ที่แสดงเป็น Arduino Nano (Rev3.0) แท้จริงแล้วคือ Arduino Nano Every สายสีแดงทั้งหมดจ่ายไฟ 5V สายสีส้มจ่ายไฟ 9V และสายสีดำเชื่อมต่อกับ ground
การประกอบบน Prototype Board และกล่อง

แผนภาพนี้สามารถดาวน์โหลดได้ในส่วน Schematics ด้านล่าง บอร์ดที่แสดงในภาพมีขนาดใหญ่กว่าที่ผมใช้ แต่ก็ช่วยให้ผมสามารถแสดงเค้าโครงได้ชัดเจนยิ่งขึ้น

โดยการตั้ง resistors ขึ้นและเพิ่มการเชื่อมต่อบางส่วนในรู ผมสามารถบีบส่วนประกอบลงบนบอร์ดขนาด 7 ซม. x 3 ซม. ได้ มันพอดีกับ enclosure ที่ผมเลือก และยังมีพื้นที่เหลือเฟือ
Nano ถูกวางตำแหน่งโดยให้ USB connector ยื่นเลยขอบบอร์ดเล็กน้อย ผมเจาะรูเข้าถึงผ่าน enclosure เพื่อเชื่อมต่อสาย USB ได้ ซึ่งทำให้ผมสามารถ reprogram Nano ได้โดยไม่ต้องถอดออก
ผมใช้ rubber cement เพื่อจัดวาง Nano บนบอร์ดในตอนแรก จนกระทั่งจุดบัดกรีทำให้มันยึดอยู่กับที่
ผมตัดสินใจติดตั้ง JST connectors ระหว่างบอร์ดและส่วนประกอบที่ติดตั้งบนแผง สิ่งนี้อาจจะดูเกินความจำเป็นสำหรับ prototype แต่เมื่อมีเวลา ผมก็แค่อยากทำความคุ้นเคยกับ connectors เหล่านี้ ผมยังสงสัยว่าในที่สุดผมอาจจะอยากจัดเรียงสิ่งต่างๆ ใหม่เล็กน้อย

ผมได้รวมแบบร่างการสร้างของผมไว้ในส่วน Custom Parts and Enclosures สิ่งเหล่านี้สามารถช่วยคุณประหยัดเวลาในการวัด จัดตำแหน่ง และติดตั้งส่วนประกอบได้ คุณยังสามารถใช้มันเพื่อพิมพ์สัญลักษณ์สำหรับส่วนควบคุมได้

ภาพนี้แสดงฐานของการประกอบ LED column โปรเจกต์นี้ต้องการให้ LED strip มี 29 LEDs ด้านหลังของ LED strip เป็นแบบมีกาวในตัว ผมจึงติดมันลงบนแท่ง aluminum ขนาด 1/2”x1/8” ผมต้องการกระจายแสงของ LED และคิดถึง neoprene tubing ซึ่งมักจะมีสีขาวโปร่งแสง ผมพบท่อดังกล่าวที่มีเส้นผ่านศูนย์กลางภายใน 12 มม. ซึ่งพอดีกับแท่งและ LED strip แสงยังกระจายไม่ถูกใจผม และผมจะทดลองกับวัสดุอื่นๆ ลูกสาวคนโตของผมซึ่งเป็นศิลปิน ได้แนะนำ mylar film
ข้อมูล Frontmatter ดั้งเดิม
title: "Audio Spectrum Visualiser with Colour Selection" description: "Choose the colours of the LED strip using Hue/Saturation/Value parameters, flick the switch and watch your music come to life through FFT." author: "marcaubin" category: "Lights & LEDs" tags: - "audio" - "lights" - "art" views: 8021 likes: 5 price: 2450 difficulty: "Intermediate" components: - "1x Arduino Nano Every" - "1x Buck Converter 9vdc to 5vdc" - "5x Potentiometer 10k ohm" - "1x Audio Cable" - "1x Audio Connector, 3.5mm stereo, panel mount" - "1x Aluminum Bar, 1/2\"x1/8\", cut length to fit LED strip" - "1x Pre-perforated Prototype Board, 3cm x 7cm min." - "2x Resistor 100k ohm" - "1x Barrel Connector for Wall Adapter" - "1x Addressable RGB LED Strip, 29 LEDs are needed for this project" - "1x Neoprene Tubing, 12mm internal diameter, cut length to fit LED strip" - "1x Switch SPST or SPDT" - "1x Audio Y Adapter" - "3x Resistor 4.7k ohm" - "1x Resistor 10k ohm" - "1x JST Connectors and Crimper (optional)" - "1x Junction Box, 158 x 90 x 60 mm" - "1x Soldering iron (generic)" - "2x Capacitor 100 nF" - "1x Wall Adapter 9vdc" tools: [] apps: - "1x Arduino IDE" downloadableFiles: - "https://projects.arduinocontent.cc/9da57b9b-309e-4c8e-a8f1-a609d4c8a035.ino" - "https://projects.arduinocontent.cc/9da57b9b-309e-4c8e-a8f1-a609d4c8a035.ino" documentationLinks: [] passwordHash: "061892dea928bfba631fc88ba6d54df16a6e021123b139348f75c182be61274a" encryptedPayload: "U2FsdGVkX18lI13bJ91HB6f9aPEpetcfRKl3uBt3bFr8wv6B6sc8zs2ST8qtABD7I1ggvy90R4SiTHQhWEu2PsozqUPyGyfSkmn9pfcc8o0=" seoDescription: "Build an Audio Spectrum Visualiser with Arduino. Customise LED strip colours via Hue/Saturation/Value and FFT for music animation." videoLinks: [] heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/audio-spectrum-visualiser-with-colour-selection-e198fe_cover.jpg" lang: "th"