นาฬิกา Arduino LED Matrix ไร้ปุ่มพร้อมเซ็นเซอร์ ADXL335
ครั้งนี้ผมจะมาอธิบายวิธีสร้างนาฬิกาที่น่าสนใจบน 8x8 LED matrix ซึ่งไม่มีปุ่มใด ๆ และปรับตั้งค่าด้วยการเคลื่อนไหวที่แตกต่างกัน นี่เป็นอีกหนึ่งในคอลเล็กชันนาฬิกาที่ไม่เหมือนใครของผม ซึ่งคุณสามารถดูได้จาก เพลย์ลิสต์นาฬิกา ของผม อนึ่ง ผมสร้างนาฬิกานี้เมื่อหลายปีก่อนบน matrix ที่ทำเองจาก 64 ดวงของ LED สีเหลืองขนาด 5mm และคุณสามารถดูได้จาก ลิงก์ที่ให้มา

แตกต่างจากครั้งก่อน ครั้งนี้นาฬิกาถูกสร้างขึ้นบน matrix สำเร็จรูป และผมจะอธิบายรายละเอียดวิธีสร้าง พร้อมด้วยแผนผังวงจร และโค้ด
นอกจากนี้ นาฬิกาที่สวยงามเรือนนี้เป็นผลงานของ Mark Wilson ซึ่งคุณสามารถดูโปรเจกต์ต้นฉบับได้ที่ เว็บไซต์ ของเขา
อุปกรณ์นี้ค่อนข้างง่ายต่อการสร้างและประกอบด้วยส่วนประกอบหลายอย่าง:
- Arduino Nano Microcontroller
- 8x8 LED matrix แบบ common anode
- DS3231 Realtime clock module
- ADXL335 Accelerometer module
- LDR resistor
- i 74HC595 shift register IC

โปรเจกต์นี้เก่ามากย้อนไปถึงปี 2012 ดังนั้นโค้ดจึงจำเป็นต้องคอมไพล์ด้วย Arduino IDE เวอร์ชั่น 1.0.6 หรือเก่ากว่าเพื่อให้คอมไพล์ได้โดยไม่มีข้อผิดพลาด โฟลเดอร์ Matrix Clock มีไลบรารีที่จำเป็นทั้งหมด จึงไม่ต้องติดตั้งเพิ่มเติม นอกจากนี้ ในแท็บ "PINS" มีแผนผังการเชื่อมต่อที่แสดงอยู่ ซึ่งมีข้อผิดพลาดเล็กน้อยในการระบุ cathode และ anode ของไดโอดใน matrix อย่างไรก็ตาม ผมขอแนะนำให้คุณใช้แผนผังวงจรที่ผมนำเสนอไว้ด้านล่างนี้ โดยแผนผังหนึ่งสำหรับกรณีที่คุณใช้ 8x8 matrix สำเร็จรูปแบบ common anode และอีกแผนผังหนึ่งสำหรับ matrix แบบ DIY ขอกล่าวถึงว่า matrix สีเดียวแบบ common anode และ common cathode นั้นจริง ๆ แล้วมีฮาร์ดแวร์ที่เหมือนกัน เพียงแต่สลับแถวและคอลัมน์เท่านั้น นอกจากนี้ ในโปรเจกต์ต้นฉบับใช้ IMU sensor ชนิด AM3X แต่เนื่องจากโมดูลนี้ไม่มีการผลิตแล้ว ผมจึงใช้ ADXL335 sensor module แทน

ตอนนี้ เพื่อให้อุปกรณ์ทำงานได้ตามปกติ ควรไปที่แท็บ IMU.cpp ในบรรทัด:
return Voltage/VoltsPerG*100.0; -> เพื่อแทนที่ค่า 100.0 ด้วย 150.0
IMU sensor module ควรวางไว้ในตำแหน่งที่เห็นในรูปภาพ ตอนนี้เรามาดูกันว่าอุปกรณ์นี้ทำงานอย่างไรในความเป็นจริง นาฬิกานี้มีโหมดการแสดงผลหลายโหมดที่สามารถเปลี่ยนได้โดยการหมุนตัวเรือน 90 องศา เมื่อเปิดเครื่อง เวลาปัจจุบันจะปรากฏขึ้น โดยชั่วโมงจะแสดงอยู่ตรงกลางด้วยฟอนต์ขนาด 5×7 และนาทีจะแสดงอยู่ที่ขอบ ด้วยความละเอียด 5 นาที (พูดให้ถูกต้องคือ ระยะห่างระหว่างไดโอดสองดวงคือ 5 นาที)

ตอนนี้ หากเราหมุนไปทางซ้าย 90 องศา มันจะแสดงอุณหภูมิห้องปัจจุบันเป็นองศาเซลเซียส

หมุนไปทางซ้ายอีก 90 องศา และเราจะเข้าสู่โหมดที่เวลาถูกเขียนเป็นคำพูด

และด้วยการหมุนครั้งต่อไป เราจะได้เอฟเฟกต์ที่เรียกว่า Matrix screen effect

สุดท้าย ด้วยการหมุนกลับไปยังตำแหน่งเดิม เวลาปัจจุบันจะถูกนำเสนออีกครั้ง
ถัดไป ผมจะอธิบายการตั้งค่านาฬิกานี้
- หากต้องการให้เกิดเอฟเฟกต์ Random Pseudo Words ให้ทำตามลำดับต่อไปนี้:
หงายหน้าขึ้น -> คว่ำหน้าลง
- สำหรับการตั้งค่าชั่วโมง ลำดับคือ:
ขึ้น -> ซ้าย -> ลง -->> ขวา = ตั้งค่าแล้ว
- สำหรับการตั้งค่านาที:
ทำซ้ำ ขึ้น -> ซ้าย -> ลง -- >> ขวา = ตั้งค่าแล้ว
ในทำนองเดียวกัน เราสามารถเปลี่ยนความไวของ LDR resistor และความสว่างของการแสดงผลได้

และสุดท้ายบทสรุปสั้น ๆ แม้ว่าโปรเจกต์นี้จะมีอายุมากกว่า 10 ปีแล้ว แต่แนวคิดในการแทนที่ปุ่มกลไกด้วย IMU sensor นั้นยอดเยี่ยมมาก ทุกวันนี้ เป็นไปได้ที่จะสร้างนาฬิกาแบบนี้ด้วย njs2812 matrix ซึ่งจะทำได้ง่ายมาก ราคาถูก และยังมีความเป็นไปได้ที่จะสร้างเอฟเฟกต์สีได้หลากหลาย ผมเสนอสิ่งนี้เป็นแนวคิดสำหรับ DIYer ที่เชี่ยวชาญด้านการเขียนโปรแกรมมากกว่าผม
รายละเอียดทางเทคนิคเพิ่มเติม
การโต้ตอบด้วยท่าทาง
นาฬิกานี้ตัดปุ่มแบบดั้งเดิมออก โดยใช้การจัดวางและการเคลื่อนไหวทางกายภาพเพื่อควบคุมการตั้งค่าทั้งหมด
- Inertial Sensing: มีคุณสมบัติ ADXL335 3-axis accelerometer ตัว Arduino จะตรวจสอบเวกเตอร์แรงโน้มถ่วงเพื่อพิจารณาว่าด้านใดของนาฬิกาที่หงายขึ้น
- Orientation-Aware UI: การพลิกนาฬิกาไปด้านต่างๆ สามารถวนดูโหมดต่างๆ (Time, Date, Temperature) หรือปรับความสว่างได้ การเขย่าอุปกรณ์สามารถเรียกใช้ฟังก์ชัน "Snooze" หรือ "Reset" ได้
ฮาร์ดแวร์แสดงผล
- Matrix Multiplexing: ขับเคลื่อนด้วย 8x8 or 32x8 LED Matrix พร้อม MAX7219 driver สิ่งนี้ช่วยให้สามารถเลื่อนข้อความได้อย่างราบรื่นและแสดงตัวเลขขนาดใหญ่ที่อ่านง่าย
- RTC Precision: ผสานรวมกับ DS3231 Real-Time Clock ทำให้มั่นใจว่าเวลาจะยังคงแม่นยำภายในไม่กี่วินาทีต่อเดือน แม้จะมีการออกแบบแบบไร้ปุ่มและมีการโต้ตอบ