ชื่อโปรเจกต์: นาฬิกาดิจิทัล Arduino เรือนแรกที่ไม่มีโมดูล RTC
เพื่อนๆ เรามักจะใช้โมดูล RTC ในการดึงค่าเวลาเสมอ แต่ผมได้ลองทำนาฬิกาโดยไม่มีโมดูล RTC ผมล้มเหลวไปสองครั้งด้วยเหตุผลสำคัญสองประการ คือความเร็วในการประมวลผลของ Arduino ทำให้ค่านาทีผิดพลาดเมื่อผมเขียนโค้ดว่า if seconds >59 minutes=minutes+1 และเมื่อผมใช้ฟังก์ชัน millis() วินาทีก็เพิ่มขึ้นเท่านั้น ไม่ลดลงเป็น 0 เมื่อถึง 60 หรือ 24
ตอนนั้นผมเหนื่อยมาก เลยทำการดีบักในวันถัดมา ผมได้เพิ่มฟังก์ชันบางอย่างที่สมบูรณ์แบบมาก จนผมดีใจและตื่นเต้นสุดๆ! เพราะหลังจากทดสอบทั้งหมดแล้ว มันทำงานได้อย่างราบรื่นและไม่มีข้อผิดพลาดเลย!
มันยากมากสำหรับผมในการเขียนโค้ด แต่ผมก็จะแชร์โค้ดให้คุณถ้าคุณพบว่ามันมีประโยชน์ และถ้าคุณทำสำเร็จ โปรดแชร์ในช่องคอมเมนต์และกดปุ่ม Respect ด้วย เพื่อให้โปรเจกต์ของผมเป็นที่นิยมและผู้คนจำนวนมากสามารถนำแนวคิดจากโปรเจกต์ของผมไปใช้ได้
เพื่อนๆ ผมลืมบอกไปว่าคุณต้องบัดกรีหน้าจอ LCD ให้ดีขึ้นเพื่อผลลัพธ์ที่ดี หรือมิฉะนั้นมันอาจจะไม่ทำงาน หากคุณดูโค้ด นาฬิกาจะเริ่มจากเวลาเที่ยงคืนในเขตเวลา IST ดังนั้นผมจึงได้ให้คำแนะนำในโค้ดเพื่อเปลี่ยนค่า minutes, hours, seconds ตามเวลาของคุณ
รายละเอียดทางเทคนิคเพิ่มเติม
การจับเวลาด้วยซอฟต์แวร์ล้วนๆ
โปรเจกต์ที่มุ่งมั่นนี้สร้างนาฬิกาข้อมือดิจิทัลที่ทำงานได้อย่างสมบูรณ์ ซึ่งรักษาเวลาโดยใช้เพียง 16MHz ceramic resonator ภายในของ Arduino เท่านั้น
- การรักษาเวลาด้วย Interrupt : ใช้ Timer interrupt ความถี่สูง (ทุก 1ms) เพื่อเพิ่มตัวนับ "Milliseconds" จากนั้นเฟิร์มแวร์จะแปลงค่านี้เป็น Seconds, Minutes และ Hours โดยใช้อัลกอริทึมคณิตศาสตร์ที่ได้รับการปรับแต่งอย่างเข้มงวดเพื่อป้องกันการคลาดเคลื่อนสะสม
- โปรไฟล์การใช้พลังงานที่ประหยัดเป็นพิเศษ : Arduino จะอยู่ใน "Power-Down Sleep Mode" ตลอดเวลา 99% เมื่อกดปุ่ม นาฬิกาจะ "Wakes Up" (ตื่นขึ้น), แสดงเวลาบน OLED หรือ 7-Segment screen และเข้าสู่โหมด Sleep อีกครั้งทันที
การสร้างต้นแบบ
- ผังวงจรที่ผ่านการยืนยันด้วย Fritzing : วงจรถูกย่อขนาดให้เล็กที่สุดเท่าที่จะเป็นไปได้โดยใช้ Fritzing เพื่อให้แน่ใจว่าแบตเตอรี่, Arduino และหน้าจอแสดงผลจะพอดีกับสายรัดข้อมือมาตรฐานได้อย่างสบาย