เรื่องราวเบื้องหลัง
พี่เคยสงสัยว่า เครื่องดนตรีที่เรืองแสง มันจะดูเป็นยังไงในที่มืดวะ
เพื่อให้รูปแบบแสงไฟมันตอบสนองกับเสียงดนตรีได้บ้าง การวิเคราะห์สเปกตรัมเสียง (audio spectrum analysis) ก็ดูจะเป็นวิธีที่เข้าท่า
เครื่องดนตรีที่พี่เลือกคือ อูคูเลเล่ เพราะมีชุด DIY ขายในราคาไม่แรง แถมพี่ก็มีไอเดียคร่าวๆ ว่าจะยัด LED เข้าไปยังไง
ลองดูผลงานแบบเร็วๆ กัน: อูคูเลเล่คอนเสิร์ต พร้อมองค์ประกอบแสง 3 ส่วน (แถบ LED 2 แถบในเฟรตบอร์ด, วงแหวน LED 1 วงรอบรูเสียง)
**อัพเดท 1:** ตอนนี้พี่ทำ LED Ukulele อันที่ 2 (ใหญ่กว่า) แล้ว และเพิ่มเอฟเฟกต์ไฟลุกด้วย ดูด้านล่างเลย







ไอเดียสำหรับอนาคต:
- ใช้ LED แสดงรูปแบบการจับคอร์ด หรือแม้แต่โน้ตเดี่ยวๆ ง่ายๆ จากข้อมูลที่ส่งมาจากมือถือแบบไร้สาย (พี่เคยเห็นไอเดียประมาณนี้มาเหมือนกัน)
เทคโนโลยีหลัก: การวิเคราะห์สเปกตรัมแบบ FFT แบบเรียลไทม์
"สมอง" ของโปรเจกต์นี้คือ Arduino Nano ที่ทำหน้าที่วิเคราะห์ Fast Fourier Transform (FFT) ให้กับสัญญาณเสียงที่จับได้จาก ไมโครโฟนแบบอิเล็กเตรท Adafruit MAX4466
- การประมวลผลเสียง: ไมโครโฟนจะจับการสั่นสะเทือนของเสียงแบบกว้างจากภายในตัวอูคูเลเล่
- การแมปความถี่: อัลกอริทึม FFT จะแยกคลื่นเสียงที่ซับซ้อนออกเป็นช่วงความถี่ย่อยๆ (ต่ำ, กลาง, สูง) จากนั้นก็จะแมปช่วงความถี่เหล่านี้เข้ากับองค์ประกอบแสง 3 ส่วนที่แตกต่างกัน
- องค์ประกอบแสง:
- แถบเฟรตบอร์ด: แถบ LED แบบ WS2812B 2 แถบแนวตั้ง ซ่อนอยู่ใต้สาย
- วงแหวนรูเสียง: วงแหวน LED 16 ดวง ล้อมรอบจุดศูนย์กลางของเครื่องดนตรี
- การควบคุมทั้งหมด: LED ที่ควบคุมทีละดวงได้ทั้งหมด 30 ดวง ถูกควบคุมโดยใช้ ไลบรารี FastLED
วิศวะลูเทียร์ขั้นเทพ + อิเล็กทรอนิกส์
การฝังวงจรอิเล็กทรอนิกส์เข้าไปในเครื่องดนตรีอะคูสติกไม้เนี่ย มันมีปัญหาการผลิตให้ปวดหัวอยู่หลายข้อเลย:
- เฟรตบอร์ดแบบปรับแต่ง: เพื่อให้มีที่ว่างสำหรับ PCB ของ LED (~สูง 3mm) โดยไม่ทำให้เล่นลำบาก เราเลยต้องสอดแผ่น โฟมยาง หนา 2mm เข้าไประหว่างเฟรตบอร์ดกับคอนีค เพื่อเป็นฉนวนและสร้างช่องว่างสำหรับเดินสายไฟที่ซับซ้อน
- วงจรฝังตัว: Arduino Nano, แบตเตอรี่ (NiMH ขนาด AA 4 ก้อน) และโพเทนชิออมิเตอร์สำหรับปรับความสว่าง ถูกบรรจุทั้งหมดเข้าไปในตัวบอดี้ โดยเจาะช่องพิเศษสำหรับพอร์ต USB และปุ่มเลือกโหมด
- การจัดการพลังงาน: ใช้ตัวเก็บประจุ (Capacitor) 470µF เพื่อรักษาเสถียรภาพของสายไฟระหว่าง 3.3V กับ GND ป้องกันไม่ให้ไฟกระพริบเพราะสัญญาณรบกวนจากตัวประมวลผล
โหมดการแสดงผลแบบอินเทอร์แอคทีฟ
มีสวิตช์แบบกดติดอยู่บนตัว ให้ผู้เล่นสามารถสลับโหมดการแสดงผลได้หลากหลาย:
- สเปกตรัมมาตรฐาน: ยอด (Peak) ของเสียงจะตรงกับการ "กระโดด" ของแสงบนเฟรตบอร์ด
- เอฟเฟกต์ไฟ: จำลองเปลวไฟที่ลุกโชนขึ้นตามความดังและความซับซ้อนของฮาร์มอนิก
- สีทึบ / โหมดแมนนวล: ปรับได้ด้วยโพเทนชิออมิเตอร์บนตัว เพื่อใช้ในสภาพแวดล้อมการแสดงที่ต่างกัน
ฮาร์ดแวร์
อูคูเลเล่
ทุกอย่างเริ่มจากซื้อ ชุด DIY ประกอบอูคูเลเล่ ที่เหมาะสมก่อน สิ่งที่ผมคิดว่าสำคัญที่สุดมีดังนี้:
- "ขนาด" ของเฟรตบอร์ด เนื่องจากต้องมี พื้นที่สำหรับติดตั้ง PCB ของ LED และเดินสายไฟ ผมจึงเลือกใช้ คอนเสิร์ตอูคูเลเล่ (หรือที่เรียกกันว่า "23 นิ้ว" ความยาวประมาณ 38 ซม.) อูคูเลเล่โซปราโน่ที่พบเห็นทั่วไปนั้นเล็กเกินไปสำหรับโปรเจกต์แบบนี้แน่นอน ถ้าใช้ฮาร์ดแวร์อิเล็กทรอนิกส์ตามที่อธิบายด้านล่าง จาก "การศึกษาทางทฤษฎี" ของผม ผมคิดว่าความกว้างของเฟรตบอร์ดควรจะประมาณ 4 ซม. ที่จุดแคบสุด และระยะห่างระหว่างเฟรตที่ 1-12 (ซึ่งผมอยากใช้แสดงผลการวิเคราะห์สเปกตรัมเสียง) ก็ควรจะมากกว่า ~1 ซม. สำหรับเฟรตที่ใกล้กันที่สุด (เช่น เฟรตที่ 10, 11, 12) อย่างไรก็ตาม ถ้าผมจะทำโปรเจกต์นี้อีกครั้ง ผมอาจจะเลือกอูคูเลเล่ขนาดใหญ่ขึ้นไปอีก นั่นคือ เทนเนอร์อูคูเลเล่ เพราะสุดท้ายแล้ว — อาจเป็นเพราะความคลาดเคลื่อนในการผลิต และเครื่องมือ/ทักษะช่างของผมที่มีจำกัด — ผมทำตามแผนเดิมไม่ได้ ผมต้องการพื้นที่ก่อสร้างมากขึ้นเพื่อใส่ PCB LED ทั้งหมดให้เข้า หรือไม่ก็ต้องใช้ PCB LED ที่เล็กกว่า (PCB LED ที่ผมใช้มีเส้นผ่านศูนย์กลางประมาณ 9-10 มม. และสูง ~3 มม.)
- อัพเดท 1: ระหว่างทางผมก็เจอชุด DIY อูคูเลเล่ที่ "ใหญ่ขึ้น" (คือ 23" หรือเทนเนอร์อูคูเลเล่) ที่เหมาะสม แต่มันก็ยังพบว่า ความกว้างของเฟรตบอร์ดที่ปลายบนยังแคบเกินไปที่จะวาง LED 4 ดวงเรียงกัน ถึงอย่างนั้น ก็ยังสามารถใส่ LED ได้ 4 ดวงภายในแต่ละเฟรตที่ 1 ถึง 11
- ต้องแน่ใจว่าชุด DIY อูคูเลเล่ที่ซื้อมานั้นมาพร้อมกับ คอและเฟรตบอร์ดที่แยกจากกัน (เพราะระหว่างสองชิ้นนี้คุณต้องใส่ PCB LED เข้าไป) สำหรับเฟรตบอร์ด ต้องแน่ใจว่าความหนาของมัน (ปกติ 4mm) เข้ากันได้กับ PCB LED ที่คุณเลือก (ในกรณีผม PCB LED สูง ~3mm) เพื่อให้มีพื้นที่ติดตั้งเพียงพอ บางทีการหาเฟรตบอร์ดหนา 6 มม. อาจเป็นไอเดียที่ดี ช่วยลดความท้าทายในการผลิตลงได้บ้าง
- ชุด DIY ส่วนใหญ่มาพร้อมกับ ลูกบิดปรับเสียง (Tuning Pegs) คุณภาพต่ำ พวกนั้นมักจะทำให้เสียงเพี้ยนง่าย คุณอาจจะได้อูคูเลเล่ที่ไฟสวยแต่เสียงแย่สุดๆ ดังนั้น การหา ลูกบิดปรับเสียงที่เหมาะสม แยกมาด้วยก็เป็นความคิดที่ดี แล้วแบบไหนที่เรียกว่าเหมาะสม? มีลูกบิดแบบที่ตั้งตรง และอีกแบบที่ทำมุม 90° (ใช้เกียร์หนอนและพินิยอน) ในส่วนหัว (Headstock) ของอูคูเลเล่ ผมชอบแบบหลังมากกว่า ทั้งสองแบบแสดงอยู่ในภาพในแกลเลอรี่ด้านล่าง ข้อควรระวัง: จากประสบการณ์ผม ไม่มีมาตรฐานสำหรับเส้นผ่านศูนย์กลางของรูสำหรับลูกบิดในหัวอูคูเลเล่ ดังนั้นต้องแน่ใจว่าคุณได้ของที่ขนาดตรงกัน ผมโชคดีที่มีลูกบิดเก่าๆ อยู่ที่บ้านพอดีกับรูพอดี
ส่วนอิเล็กทรอนิกส์
เพราะพื้นที่มันจำกัด (นี่มันอูคูเลเล่นะ ไม่ใช่กีตาร์) พี่เลยเลือกใช้Arduino Nano หน่วยความจำและความเร็วของมันน่าจะพอสำหรับการวิเคราะห์สเปกตรัมเสียง และมันก็ใช้งานกับไลบรารี FastLED ที่ใช้ควบคุม LED PCB ที่พี่ต่อกับแถบไฟแบบ WS2812B ได้สบายๆ
เพื่อให้เสียงจากอูคูเลเล่ไปถึง Arduino Nano พี่ตัดสินใจใช้เบรกเอาท์บอร์ดจาก Adafruit (Adafruit MAX4466 Electret Microphone) ซึ่งบันทึกเสียงด้วยไมโครโฟนอิเล็กเตร็ตแบบบรอดแบนด์และปรับเกนได้ เลยสามารถปรับระดับเสียงเข้าไปยัง Arduino ได้ (เพราะพี่ก็ไม่รู้เหมือนกันว่าเสียงกระจายตัวในตัวอูคูเลเล่ยังไง) และตัวบอร์ดก็เล็กพอที่จะเข้าไปในพื้นที่จำกัดในตัวอูคูเลเล่ได้ ตัวตัวเก็บประจุ 470µF ระหว่างขา 3.3V กับ GND ของ Arduino Nano ช่วยลดสัญญาณรบกวนในสายไฟเลี้ยง 3.3V (ไม่งั้นไฟ LED สองตัวแรกในแต่ละแถบบนฟิงเกอร์บอร์ดจะกระพริบเอา ลองถอดมันออกตอนทดสอบบนเบรดบอร์ดดูสิ น้องจะเข้าใจเลยว่าพี่พูดถึงอะไร)
พี่เพิ่มโพเทนชิโอมิเตอร์เข้าไปด้วย เพื่อปรับความสว่างของไฟ LED จะได้ปรับให้เข้ากับแสงรอบข้างได้ ไฟสว่างเกินไปในห้องมืดๆ มันอาจจะรบกวนสายตาได้ อีกอย่าง ถ้าแหล่งจ่ายไฟเริ่มอ่อน หรือไฟ LED ทุกดวงติดเต็มที่พร้อมกัน แรงดันอาจตกจนทำให้ Arduino ทำงานไม่เสถียรได้
พี่เพิ่มปุ่มกดธรรมดาๆ ไว้สำหรับเลือกรูปแบบแสง/โหมดการทำงานต่างๆ ซึ่งสามารถเปลี่ยนได้ง่ายๆ ในซอฟต์แวร์ (เช่น เพิ่มหรือลบรูปแบบใหม่) ถ้ากดปุ่มนี้ระหว่างที่โค้ดส่วน setup กำลังทำงาน (ง่ายๆ ก็กดมันก่อนจ่ายไฟให้วงจรอิเล็กทรอนิกส์) ไฟ LED ทั้งหมดจะติดและดับหนึ่งรอบ เป็นวิธีเช็คการทำงานและการต่อของไฟ LED แบบเร็วๆ
แถบไฟ LED (RGB, แอดเดรสแยกได้) ที่มีขายทั่วไปมักมีไฟ LED เรียงห่างเท่าๆ กัน แต่เพราะระยะระหว่างเฟรตบาร์มันไม่เท่ากัน เลยไม่เหมาะกับโปรเจคนี้ พี่เลยไปเจอLED เดี่ยวแบบ WS2812b (คือ LED RGB ที่มีไอซี WS2811 บนบอร์ดเลย ดูรูปด้านล่าง) ซึ่งควบคุมด้วยไลบรารี FastLED ได้เหมือนแถบไฟ WS2812B ทั่วไป ต้องแน่ใจว่าความสูงของ LED PCB เหล่านี้พอดีกับความหนาของฟิงเกอร์บอร์ดน้องด้วยนะ โชคไม่ดีที่พี่ให้ลิงค์ร้านที่ซื้อมาไม่ได้ เพราะเจ้าของร้านเลิกขายแล้ว :-(


ที่เหลือก็คือ ลวด, ตะกั่วบัดกรี - และความอดทน.... (ทำไมต้องอดทน? LED PCB 30 ตัว แต่ละตัวมีจุดบัดกรี 6 จุดที่ชิดกันมาก บวกกับเครื่องมือและฝีมือที่มีอยู่... น้องจะเข้าใจเอง...)
ขั้นตอนการประกอบ ตอนที่ 1: ติดตั้ง LED ลงบนอูคูเลเล่
ส่วนที่สำคัญและกังวลที่สุดสำหรับพี่คือ จะทำฟิงเกอร์บอร์ดที่บรรจุ LED PCB นี้ได้มั้ย ดังนั้น...
...พี่เลยเริ่มด้วยการทำเครื่องหมายตำแหน่งสำหรับ LED PCB ไว้ที่ด้านหลังของฟิงเกอร์บอร์ด หลังจากนั้นก็เจาะหลุมตื้นๆให้ตรงกลางตำแหน่งที่ทำไว้ และลึกพอที่จะใส่ LED PCBจากด้านหลังของฟิงเกอร์บอร์ดได้ (~3mm สำหรับของพี่) ถ้าฟิงเกอร์บอร์ดหนากว่านี้ (อย่างที่บอกไว้ข้างต้น ถ้า 6 mm) ก็จะมีพื้นที่สำหรับบัดกรีและเดินสายมากขึ้น แต่พี่มีแค่ฟิงเกอร์บอร์ดหนา 4 mm เท่านั้น
ตอนนี้แหละที่พี่ต้องยอมรับความจริงว่า บริเวณช่วงบนของเฟรตบอร์ดที่มันแคบๆ (เฟรตที่ 1 ถึง 5) นี่ พี่ทำความแม่นยำที่ต้องใช้เพื่อวาง PCB LED 4 ตัวให้อยู่ภายในเฟรตเดียวไม่ได้เลยสักที นี่แหละที่ทำให้ท้ายที่สุดพี่ต้องยอมใช้แค่ 2 PCB LED ในเฟรตที่ 1-5 และ 4 PCB LED ในเฟรตที่ 6-10 (รวมแล้วก็ 10 + 20 = 30 PCB LED)





ต่อมา พี่ก็ติด PCB LED เข้าไปในรอยเจาะด้วยกาวงานฝีมือธรรมดาๆ เนื่องจาก PCB LED แต่ละตัวมีจุดบัดกรี 6 จุด (GND 2 จุด, VCC 2 จุด, Din 1 จุด, Dout 1 จุด) พี่เลยตัดสินใจวางแนวตามที่เห็นในภาพด้านบน ระวังเรื่องทิศทางการไหลของข้อมูล (Data Flow) ให้ดีนะ! เพราะถึงแม้จะมีจุด GND และ VCC ที่เชื่อมต่อกันภายในตัวอยู่ 2 จุด แต่มีจุด DataIn และ DataOut แค่จุดเดียว ดังนั้นลำดับ/ทิศทางการเชื่อมต่อและแนวการวาง PCB LED ตรงนี้สำคัญมาก การวางแนวและการจัดเรียงที่เลือกไว้ทำให้การเชื่อมต่อสาย GND และ VCC ของ PCB LED แต่ละตัวทำได้ตรงไปตรงมา
อีกอย่าง (เพราะข้อเท็จจริงที่ว่าพี่ทำ LED 4 ตัวในทุกเฟรตไม่ได้น่ะแหละ) พี่เลยแบ่ง LED ออกเป็น 2 สาย (String) แยกกัน เพื่อประหยัดพื้นที่ติดตั้งอันมีค่า สาย GND และ VCC สำหรับ LED สายที่สองจะถูกต่อตรงไปยังตำแหน่งที่เหมาะสมบน LED สายแรก (เลยช่วยประหยัดสาย VCC และ GND แยกสำหรับสายที่สองได้)
ทีนี้ก็ถึงเวลาติดตั้งเฟรตบอร์ดที่มี PCB LED อยู่แล้วเข้ากับคอ (Neck) ของยูคูเลเล่ ถ้าน้องสามารถเดินสายไฟเชื่อมต่อ LED เป็นเส้นตรงสมบูรณ์แบบได้ล่ะก็ อาจจะคิดถึงการกัดร่องสำหรับสายไฟลงไปบนคอก็ได้ พี่ก็ลองใช้เทปทองแดงเหมือนกันนะ แต่ด้วยลักษณะทางกายภาพ (Topology) มันทำให้พี่ไม่สามารถได้การสัมผัสทางไฟฟ้าที่ดีพอได้
แต่เท่าที่เห็นในภาพด้านล่างน่ะ ในกรณีของพี่สายไฟที่เชื่อมต่อกันน่ะมันไม่ได้เรียงเป็นเส้นตรงเลยสักนิด ยิ่งไปกว่านั้น แม้ว่ารอยเจาะจะพอดีกับ PCB LED แต่จุดบัดกรีกลับยื่นออกมานอกรอยเจาะ พี่เลยตัดสินใจใช้โฟมยาง ("Moosgummi") หนาประมาณ 2 มม. พี่ใช้กาวอเนกประสงค์/กาวงานฝีมือเพื่อติดโฟมยางนั้นไว้ระหว่างเฟรตบอร์ดกับคอ นี่เป็นขั้นตอนการผลิตที่ละเอียดอ่อนที่สุดขั้นตอนหนึ่งเลย เพราะมันแก้ไขไม่ได้แล้ว เหมือนตอนที่เราจะประกอบยูคูเลเล่ธรรมดา (ไม่มี LED) จากชุด DIY เราต้องอัดสามชั้นนี้ (คอ, โฟม, เฟรตบอร์ด) ให้แน่นพักหนึ่งด้วยแรงกดที่พอดี ตัวเลขแรงกดเท่าไหร่? พี่ก็ไม่รู้เหมือนกัน ฟังเสียงช่างภายในใจน้องสิ หรือถ้าต้องการข้อมูลเพิ่มเติมเกี่ยวกับการประกอบชิ้นส่วนต่างๆ ให้กลายเป็นยูคูเลเล่ ก็ลองหาดูวิดีโอสอนประกอบได้
พี่ดีใจมากที่พบว่ายังสามารถควบคุม LED ทั้งหมดได้