แต่ก่อนพี่ใช้นาฬิกาตั้งโต๊ะที่ใช้ถ่านกระดุม 3 เรือน เพื่อเช็คเวลาในโซนต่างๆ พี่อยู่ที่ฮัมบูร์ก เยอรมนี ส่วนครอบครัวอยู่ที่เดนเวอร์กับแคลิฟอร์เนีย เริ่มเบื่อกับการเปลี่ยนถ่านราคาแพงทุกเดือน เลยตัดสินใจหยิบ [Arduino](https://s.shopee.co.th/7fUgFAWSki) ที่วางรกๆ อยู่มาทำเป็นนาฬิกา 3 โซนเวลาแทน
ตอนเปิดเครื่องครั้งแรก เราจะตั้งค่าวันที่ เวลา และวันในสัปดาห์ผ่านเมนูได้เลย จากนั้นหน้าจอจะแสดงตำแหน่งของพี่คือ HAM (ฮัมบูร์ก) พร้อมเวลาและวันที่ท้องถิ่นในบรรทัดแรก ส่วนบรรทัดที่สองจะแสดงเวลาอีก 2 โซนที่เราตั้งไว้ แค่ปรับโค้ดนิดหน่อยก็สลับลำดับการแสดงผลได้แล้ว
สุดท้าย พี่ไม่อยากให้แสงจ้าทั้งคืน เลยเพิ่มโค้ดให้หรี่หน้าจออัตโนมัติตอนพี่นอน ตามตารางเวลาที่ตั้งไว้
ด้วย DS3231 RTC ที่มีแบตเตอรี่ในตัว นาฬิกาจะจำเวลาได้แม้จะตัดไฟออก
พี่บัดกรีหัวต่อแบบ stackable ขนาด 1x4 (4 พิน) ลงบนตำแหน่งบัดกรีว่างที่ด้านหลังบอร์ด Uno สำหรับพิน SCL, SDA, VCC และ GND เพื่อติดตั้ง DS3231
ขั้นตอนการทำ:
ขั้นตอนที่ 1: บัดกรีหัวต่อ 1x4 ลงบนตำแหน่งบัดกรีว่างด้านหลังบอร์ด UNO สำหรับพิน SCL, SDA, VCC และ GRD
ขั้นตอนที่ 2: ใส่แบตเตอรี่กระดุม CR2032 ลงในโมดูล DS3231 RTC IC2
ขั้นตอนที่ 3: ต่อโมดูล DS3231 เข้ากับด้านหลังของ Uno โดยใช้หัวต่อ 1x4 ที่เพิ่งบัดกรีไป ตรวจสอบให้ดีว่าพินตรงกันระหว่าง Uno กับ DS3231
ขั้นตอนที่ 4: ต่อ DF Robot [LCD](https://s.shopee.co.th/6AfsSPcAnb) Keypad shield เข้ากับด้านบนของ Uno
ขั้นตอนที่ 5: คัดลอก/วางโค้ดลงในซอฟต์แวร์ Arduino แล้วอัปโหลดลง Uno
ขั้นตอนที่ 6: ใช้ปุ่มบน Keypad ในการเปลี่ยนวันที่และเวลา โดยกดปุ่ม Select เพื่อเลื่อนระหว่างเมนู และใช้ปุ่มขึ้น/ลงเพื่อปรับค่า ใช้ปุ่มซ้าย/ขวาเพื่อเลื่อนระหว่างชั่วโมง -> นาที หรือ ปี -> เดือน -> วัน
ขั้นตอนที่ 7: กด Select เมื่อตั้งค่าวันที่/เวลาเสร็จ หน้าจอจะแสดงวันที่และเวลาของโซนเวลาท้องถิ่นของคุณ พร้อมกับเวลาอีก 2 โซน
ขั้นตอนที่ 8: ถ้าอยากเปลี่ยนโซนเวลา ให้ไปแก้การคำนวณของ hour1 และ hour2 ในส่วนที่คอมเมนต์ว่า //change time zone 1 calculation โดยเปลี่ยนตัวเลขหลัง - 9 รวมถึงตำแหน่งของ lcd.print("M "); และ lcd.print("PT "); ด้วย อย่าลืมว่าบรรทัดที่สองของจอมีแค่ 16 ตัวอักษรนะ
ขั้นตอนที่ 9: ถ้าอยากเปลี่ยนเวลาที่จอหรี่ไฟ/สว่าง ให้ไปปรับโค้ดในส่วนที่คอมเมนต์ว่า // Turn off light after 10 pm, turn back on after 8 am - this is in a 24 hour clock
ข้อมูลเทคนิคเพิ่มเติม
Global Chronometric Hub
โปรเจกต์นี้เปลี่ยน Arduino Uno ให้เป็นแดชบอร์ดแสดงหลายโซนเวลา เหมาะสำหรับออฟฟิศสากลหรือติดตามเวลาครอบครัวต่างประเทศ
- UTC Offset Mapping: Arduino ติดตาม "Master UTC Time" ผ่าน DS3231 RTC จากนั้นเฟิร์มแวร์จะใช้ค่าออฟเซตที่ตั้งโปรแกรมได้ (เช่น -5 สำหรับนิวยอร์ก, +1 สำหรับลอนดอน, +7 สำหรับกรุงเทพฯ) ในการคำนวณเวลาแต่ละโซน
- HMI Navigation: ใช้ LCD Keypad Shield ทำให้ผู้ใช้สามารถเลื่อนดูเมืองต่างๆ ทั่วโลกที่ตั้งไว้ล่วงหน้า และดูเวลาและวันที่ปัจจุบันบนจอแสดงผล 16x2
ความแม่นยำ
- High-Precision Time Base: คริสตัลใน DS3231 ที่ได้รับการชดเชยอุณหภูมิ ทำให้ความคลาดเคลื่อนของนาฬิกาน้อยกว่า 1 นาทีตลอดทั้งปี