วันนี้พี่จะมาสอนทำนาฬิกาจาก LED Matrix ด้วย Arduino กับโมดูล RTC กันนะน้อง งานนี้จัดว่าเป็นโปรเจคระดับกลาง (Intermediate) เลย ไม่ต้องมีพื้นฐานอะไรมากมายก็ทำได้สบายๆ พี่พยายามอธิบายให้เข้าใจง่ายที่สุดแล้ว หวังว่าน้องๆ จะทำตามได้แบบพี่ทำเลย ถ้าชอบผลงานพี่ อย่าลืมกดติดตามช่องพี่ด้วยนะ จะได้มีกำลังใจทำโปรเจคเจ๋งๆ มาให้ดูอีกเรื่อยๆ เอาล่ะ เริ่มกันเลยดีกว่า........
Marquee Information: MAX7219 LED Matrix Clock
นาฬิกาแบบ 7-Segment ธรรมดามันก็ใช้ได้แหละ แต่ข้อเสียคือมันแสดงตัวอักษรหรือแอนิเมชันสวยๆ ไม่ได้เลย นี่แหละคือจุดเด่นของ LED Matrix Clock มันใช้บล็อค LED แดงจิ๋วๆ หลายพันดวงต่อกันเป็นพืด ด้วยการขับโดยชิป MAX7219 และใช้บัสข้อมูล SPI ทำให้ Arduino ของเราสามารถเลื่อนข้อความ แสดงวันที่ หรือแม้แต่แอนิเมชันสภาพอากาศได้ลื่นไหล เหมือนมีป้ายโฆษณาเล็กๆ อยู่ในบ้านเลย!
สถาปัตยกรรม Daisy-Chain แบบ SPI (MAX7219)
การจะต่อ LED 256 ดวง (จากเมทริกซ์ 8x8 จำนวน 4 บล็อค) เข้ากับขาของ Arduino Uno โดยตรงน่ะ... เป็นไปไม่ได้! มันไม่มีขาให้ต่อตั้ง 256 ขาแน่นอน
- ชิป MAX7219 นี่คือ IC ที่ออกแบบมาเพื่อควบคุมบล็อค LED ขนาด 8x8 โดยเฉพาะ ใช้แค่สายข้อมูล 3 เส้น:
DIN, CLK, CS(Data, Clock, Chip Select) - ความเจ๋งของโปรโตคอล SPI คือการ "ต่อหาง (Daisy-Chain)"
- เอาขา
DOUTของชิปตัวแรก ไปต่อเข้ากับขาDINของชิปตัวที่สอง แล้วตัวที่สองก็ต่อไปตัวที่สาม... - Arduino ของเราก็จะมองเห็นบล็อค LED ทั้งสี่บล็อคนี้เป็นจอใหญ่ๆ ขนาด 32x8 พิกเซลแผ่นเดียวเลย!
ตรรกะการเลื่อนข้อความ (MD_Parola)
การจะมาโปรแกรมควบคุมจุด LED แต่ละจุดในตารางใหญ่ๆ แบบนี้ทีละไบต์น่ะ มันเมื่อยมือชัวร์
- เราเลยใช้ไลบรารีสุดทรงพลัง
<MD_Parola.h>เข้ามาช่วย - มันมีฟอนต์สวยๆ และตรรกะแอนิเมชันให้ใช้เพียบ
- การทำงาน: เราไปดึงเวลาอย่าง
15:30:00จาก โมดูล DS3231 RTC - แล้วก็สั่ง
P.displayText("15:30:00", PA_CENTER, 50, 2000, PA_SCROLL_LEFT, PA_SCROLL_LEFT); - Arduino จะแปลงข้อความนั้นเป็นบัฟเฟอร์ของพิกเซลแล้วเลื่อนมันจากขวาไปซ้ายบนจอแดงใหญ่ๆ อัตโนมัติ ให้ความรู้สึกเหมือนป้ายไฟวิ่งในห้างเลยตัวนี้!
รายการอุปกรณ์ที่ต้องจัด (Visual Output Loadout)
- Arduino Uno/Nano + โมดูลนาฬิกาจริง DS3231 (I2C)
- โมดูลจอ Dot Matrix FC-16 MAX7219 แบบ 4-in-1 (ต้องเป็นรุ่นที่ต่อหางกันได้นะน้อง ห้ามเอารุ่นบล็อคเดี่ยวๆ มา!)
- Adaptor 5V 2A (สำคัญมาก! ถ้าน้องสั่ง
P.print("HELLO")แล้ว LED แดงทั้ง 256 ดวงติดพร้อมกันเต็มสปีด ไฟจากพอร์ต USB ของ Arduino อาจดับได้ อย่าช็อตนะตัวนี้!)