8 ชิ้นของ WS2812B 8x8 RGB LED Matrix ที่เชื่อมต่อแบบ Daisy-chain
โปรเจกต์นี้เริ่มต้นจากความรู้สึกรักชาติอย่างเปี่ยมล้นในช่วงสัปดาห์วันชาติ ประกอบกับความปรารถนาที่จะสร้างสรรค์เนื้อหาใหม่ๆ ให้กับ Youtube Channel ของผม ทันใดนั้น ผมก็นึกขึ้นได้ว่าผมมีแผง 8x8 RGB LED Matrix บางส่วนที่ซื้อมาเมื่อปีที่แล้วและทิ้งไว้ในกล่อง (ไม่ได้เก็บฝุ่นนะ แค่รอเวลาที่เหมาะสม!)
ผมจึงตัดสินใจปัดฝุ่นพวกมัน และนำมารวมกับแผง 8x24 Matrix ที่ผมเคยเชื่อมต่อแบบ daisy-chain ไว้เมื่อช่วงวันหยุดปลายปีที่ผ่านมา (หากคุณสนใจการเชื่อมต่อแผงนั้น คุณสามารถ คลิกที่นี่เพื่อดูรายละเอียดเพิ่มเติม) เมื่อรวมกันแล้ว ผมก็ได้จอแสดงผล 16x32 Matrix ขนาดใหญ่ที่พร้อมสำหรับกราฟิกความละเอียดสูงขึ้น
ความท้าทายทางเทคนิค: เมื่อซอฟต์แวร์ไม่ให้ความร่วมมือ
ในทางวิศวกรรม การควบคุม LED จำนวนมหาศาล (512 ตัวในกรณีนี้) มักจะเกี่ยวข้องกับเครื่องมืออย่าง Glediator ซึ่งเป็นซอฟต์แวร์ยอดนิยมสำหรับการควบคุม LED Matrix ผ่าน Serial protocol อย่างไรก็ตาม เส้นทางนี้ไม่ได้โรยด้วยกลีบกุหลาบ ผมลองใช้ Arduino UNO สองตัว และแม้แต่ Arduino MEGA, ลองเปลี่ยนพอร์ต USB บน PC และแม้กระทั่งติดตั้ง x64 RXTX comms สำหรับ Java จากหลายแหล่งเพื่อแก้ไขปัญหาการเชื่อมต่อ แต่ท้ายที่สุด โปรแกรมก็ยังคงไม่สามารถตรวจพบ COM Port ได้
หลังจากที่ผมใช้ความพยายามอย่างมากในการดีบั๊กซอฟต์แวร์จนเกือบจะยอมแพ้ ผมก็ตัดสินใจที่จะเลิกพึ่งพาซอฟต์แวร์สำเร็จรูป และกลับไปใช้วิธีที่เรียบง่ายที่สุดแต่ทรงพลัง
โซลูชันทางวิศวกรรมแบบ Manual
ผมมีความคิดแวบเข้ามาในหัวว่า: ผมควรจะซื้อแผง 16x32 ที่สร้างสำเร็จรูปมาเลยดีไหม? หรือควรจะใช้ Adafruit Matrix Library ดี? แต่ดูเหมือนฮาร์ดแวร์ที่มีอยู่ของผม (ซึ่งมักจะเป็น Addressable LEDs อย่าง WS2812B) ไม่ค่อยเข้ากันได้กับไลบรารีเหล่านั้นในการตั้งค่าปัจจุบันของผม ผมจึงท้าทายตัวเองอีกครั้งว่า: "เราแค่อยากจะแสดงรูปร่างง่ายๆ (อย่างธงชาติ) มันจะยากแค่ไหนกันเชียว?"
คำตอบคือ: ท้าทายในเรื่องของความอดทน!
ผมเลือกใช้ FastLED Library ซึ่งเป็นหัวใจสำคัญในการควบคุม Addressable LEDs ในระดับ Register โดยการตั้งโปรแกรมสีสำหรับ LED แต่ละตัวแยกกัน หรือที่เรียกว่า Manual Pixel-by-Pixel Mapping

ในแง่ของ Code logic ผมต้องจัดการ Array สี CRGB leds[512] โดยกำหนด Index ของ LED แต่ละตัวให้ตรงกับเลย์เอาต์ทางกายภาพของแผง เนื่องจากการเชื่อมต่อแบบ daisy-chain แผงที่มีขนาดต่างกัน ลำดับพิกเซลจึงไม่ได้เป็นไปตามลำดับเชิงเส้นตามธรรมชาติ ดังนั้น ผมจึงต้องใช้ Coordinate Mapping และใส่สีลงในโค้ดทีละบรรทัด เช่น:
- ช่วงพิกเซลสีน้ำเงินสำหรับแถบด้านบน
- ช่วงพิกเซลสีแดงสำหรับแถบด้านล่าง
- การคำนวณพื้นที่สำหรับสามเหลี่ยมสีขาวและตำแหน่งของพระอาทิตย์สีเหลือง
มันเป็นแนวทางแบบ "ลงแรงด้วยมือ" อย่างแท้จริงในโลกของการเขียนโค้ด
ติดตามผลงานของผม (ลิงก์โซเชียลมีเดีย):
หากคุณชื่นชอบโปรเจกต์ Hardcore Maker แบบนี้ โปรดติดตามผมได้ที่:
