นี่คือ คิวบ์ LED RGB ขนาด 6x6x6 (แบบแอโนดร่วม) ควบคุมด้วยแอป Bluetooth โดยใช้ Arduino Nano ตัวนี้ ปรับขนาดได้ง่ายมาก จะเอาเป็น 4x4x4 หรือ 8x8x8 ก็จัดได้ตามใจชอบ โปรเจกต์นี้ได้แรงบันดาลใจมาจาก [GreatScott] ตัวพี่เลยตัดสินใจทำเวอร์ชันที่จัดเต็มขึ้นหน่อย โดยใช้ LED ขนาดใหญ่กว่า (8mm) ระยะห่างน้อยกว่า + เพิ่ม การสื่อสารผ่าน Bluetooth เข้าไป ทำให้การเพิ่มฟังก์ชันใหม่ๆ ง่ายขึ้นโคตรๆ และยังเปิดโอกาสให้ เขียนแอปมาควบคุมคิวบ์ ได้ด้วย อย่างเช่น พี่เขียนโค้ด เกมงู (Snake Game) ให้เล่นได้เลย (ดูตัวอย่างในวิดีโอที่ 3 ท้ายโพสต์) นอกจากนั้นพี่ยังเพิ่ม โหมด Audio Visualizer ที่ให้คิวบ์แสดงภาพตามเสียงจากอินพุต AUX เช่น เพลง โดยใช้ชิป MSGEQ7 (มีวิดีโอตัวอย่างให้ดูท้ายโพสต์) และที่สำคัญ พี่เขียนแอปพลิเคชัน AnimationCreator ขึ้นมาด้วย ใช้ Java เขียนนะ มี UI ใช้ง่ายสำหรับสร้างและปรับแต่งอนิเมชัน ทำให้ใครๆ ก็สร้างอนิเมชันแบบ custom ขึ้นมาได้เร็วมาก ดังนั้น Sketch + แอป Bluetooth ตัวนี้จึงเป็นเหมือนเฟรมเวิร์กสำหรับคิวบ์ LED ทุกรูปแบบ และด้วย Animation Creator คุณก็ไม่ต้องกังวลกับการเขียนโค้ดอนิเมชันเองให้วุ่นวาย
ภาพรวมโปรเจกต์
"Cubo Volumetric Display" คือเมทริกซ์ LED RGB ความหนาแน่นสูงขนาด 6x6x6 ที่ทำหน้าที่เป็นผืนผ้าใบ 3 มิติสำหรับงานศิลปะดิจิทัลและเกม โดยการบัดกรี LED RGB จำนวน 216 ดวง เข้าด้วยกันเป็นโครงตาข่ายแม่นยำ โปรเจกต์นี้สร้างพื้นที่ 3 มิติขึ้นมาให้สามารถแสดงอนิเมชัน, ภาพจากเสียง (visualizer) และแม้แต่ เกม "Snake" เวอร์ชัน 3D ได้เลย ควบคุมผ่าน แอป Bluetooth ที่เขียนขึ้นเอง และ โปรแกรมสร้างอนิเมชัน Java (Animation Creator) โปรเจกต์นี้สาธิตวิศวกรรมอิเล็กทรอนิกส์ระดับสูง ตั้งแต่การมัลติเพล็กซ์ความเร็วสูงไปจนถึงการจัดการกำลังไฟแบบกระแสคงที่
ลงลึกเรื่องเทคนิค
- Constant Current Multiplexing (TLC5940 Chain):
- ตัวเลขเบื้องหลัง: การขับ LED RGB 216 ดวง ต้องควบคุมแคโทดทั้งหมด 648 ตัว เพื่อจัดการกับสิ่งนี้บน Arduino Nano โปรเจกต์นี้จึงใช้ ชิป TLC5940 จำนวน 7 ตัวต่อแบบ Daisy Chain แต่ละ TLC5940 ให้ช่องสัญญาณ PWM 16 ช่อง ความละเอียด 12 บิต พร้อมฟังก์ชัน จำกัดกระแสคงที่ (Constant Current) ในตัว สิ่งนี้ทำให้แน่ใจว่า LED ทุกดวงในคิวบ์มีความสว่างเท่ากัน ไม่ว่าจะมี LED อีกกี่ดวงที่กำลังติดอยู่
- Daisy Chaining: ข้อมูลถูกส่งออกจาก Arduino ผ่าน SPI ชิปทั้ง 7 ตัวทำหน้าที่เสมือนรีจิสเตอร์แบบ shift ขนาดยักษ์ 112 ช่อง ทำให้ Nano สามารถตั้งค่าความเข้มสีสำหรับทั้งเลเยอร์ได้ในครั้งเดียวด้วยการส่งข้อมูลความเร็วสูง
- Volumetric Scanning & POV:
- คิวบ์ไม่ได้จุด LED ทั้ง 216 ดวงพร้อมกัน แต่ใช้หลักการ Persistence of Vision (POV) แทน โดยมันจะจุด LED ในแนวนอนทีละเลเยอร์ (6x6) ด้วยการสลับเปิดปิดผ่านทั้ง 6 เลเยอร์ที่ความถี่สูงกว่า 60Hz ดวงตาของมนุษย์เราจะเห็นเป็นภาพ 3 มิติที่ต่อเนื่อง ไม่กระพริบ
- High-Side Switching: เพื่อจัดการกับกระแสของ LED RGB 36 ดวง (สูงสุดถึง 2.1 แอมป์ต่อเลเยอร์) ระบบนี้ใช้ MOSFET ประเภท P-Channel รุ่น IRF9540 พวกมันทำหน้าที่เป็นสวิตช์ความเร็วสูง เปิด-ปิดไฟเลี้ยง (แอโนดร่วม) ให้กับแต่ละเลเยอร์ภายใต้การควบคุมของ Arduino
- Java-Based Animation Modeling:
- โปรเจกต์นี้รวม แอปพลิเคชันสร้างอนิเมชัน (Animation Creator) ที่เขียนขึ้นเองมาให้ด้วย ซอฟต์แวร์นี้มี GUI แบบ 3D ที่ให้ผู้ใช้คลิกที่ "ว็อกเซล" แต่ละจุดเพื่อตั้งสีและเฟรมได้ จากนั้นซอฟต์แวร์จะคอมไพล์พิกัด 3 มิติเหล่านั้นให้เป็นสตรีมข้อมูลไบนารีที่ถูกออกแบบให้เหมาะสมกับโปรโตคอลซีเรียลของ Bluetooth
- Audio and Game Logic:
- MSGEQ7 Integration: ในโหมด visualizer คิวบ์จะแมปแถบความถี่ 7 แถบจากชิป MSGEQ7 ไปเป็น "กราฟแท่งความถี่" แบบ 3D ที่เติบโตขึ้นจากพื้นของคิวบ์
- 3D Snake: ตรรกะของเกมจะจัดการอาร์เรย์ของพิกัด
(x, y, z)สำหรับลำตัวของงู การตรวจจับการชน (Collision detection) จะถูกคำนวณใหม่ในทุกเฟรม โดยตรวจสอบตำแหน่งว็อกเซลที่เป็นไปได้ทั้งหมด 216 ตำแหน่ง
วิศวกรรมและการประกอบ
- แม่แบบสำหรับประกอบ (Prototyping Jig): ความแม่นยำคือหัวใจของงานนี้ รุ่นพี่ใช้แม่แบบไม้เจาะรูเพื่อยึด LED ขนาด 8mm ให้เรียงเป็นตาราง 6x6 แบบเป๊ะๆ ตอนประกอบแต่ละชั้น วิธีนี้ช่วยให้คิวบ์สุดท้ายออกมาสี่เหลี่ยมจัตุรัสสมบูรณ์ และสาย "บัส" ด้านใน (ทำจากทองแดงชุบดีบุก) ตรงดิ่งไม่บิดเบี้ยว
- การจัดการสายริบบิ้น (Ribbon Cable Management): เพื่อไม่ให้กลายเป็นรังหนูของสายไฟ 216 เส้น เราจึงใช้สายริบบิ้นสายรุ้ง 40 พิน ในการเชื่อมต่อระหว่างบอร์ดฐานกับ MOSFET ของแต่ละชั้น และเฮดเดอร์ของ TLC5940
- การคำนวณกำลังไฟ (Power Budgeting): คิวบ์ที่ติดสีขาวเต็มที่ทุกดวงในทางทฤษฎีอาจกินกระแสเกิน 10 แอมป์ ($216 \times 3 \text{ สี} \times 20\text{mA}$) แต่ว่าในหนึ่งช่วงเวลาจะมีแค่ชั้นเดียวที่ทำงาน ดังนั้นกระแสสูงสุดจริงๆ จะเหลือประมาณ 2.2A เท่านั้น ต้องใช้ Power Supply 5V 4A ที่จ่ายไฟได้มั่นคงเท่านั้น ไม่งั้นไฟตกตอนเล่นอนิเมชั่นหนักๆ แน่นอน ห้ามช็อตนะตัวนี้
- การจัดการสถานะในเฟิร์มแวร์ (Firmware State Management): สเก็ตช์ Arduino ทำตัวเป็นตัวเรนเดอร์แบบพาสซีฟ มันคอยฟังข้อมูลเฟรมใหม่จาก โมดูลบลูทูธ HC-05 และเก็บไว้ในบัฟเฟอร์ชั่วคราว สถาปัตยกรรมแบบแยกส่วนนี้ทำให้เราสร้างอนิเมชั่นซับซ้อนได้ไม่จำกัด เพราะงานประมวลผลหนักๆ ถูกจัดการโดยแอปบนคอมหรือมือถือแทน
ลิงก์ไปยังสเก็ตช์ Arduino และแอปบลูทูธ:
RGBCube_Arduino Sketch (Github)+Animation Creator.jar
Cubo Bluetooth App (Github)
รายการชิ้นส่วนสำหรับสร้างคิวบ์:
216x LED RGB (Common Anode) (8mm) -> 6x6x6=216
สายริบบิ้น (Ribbon Cable) (ยาว 1 เมตร 40 พิน น่าจะพอ)
เฮดเดอร์ตัวผู้และตัวเมีย (Female and Male Headers) (อย่างน้อย 4x40 พิน แต่ละแบบ)
สายทองแดง/เงินชุบดีบุก ขนาด 0.8 มม. (ยาวประมาณ 25 เมตร) (หาซื้อได้ตามเว็บขายของออนไลน์ทั่วไป)