กลับไปหน้ารวมไฟล์
digital-6012-led-clock-b9c989.md

นี่คือนาฬิกาเรือนแรกที่พี่สร้างขึ้นในปี 2004 สมัยนั้นพี่ทำนาฬิกาด้วยไอซีดิจิตอลล้วนๆ

พี่ใช้ชิฟต์เรจิสเตอร์ (Shift Register) ขนาด 4 บิต เลยต้องใช้ตั้ง 33 ตัว! และเพื่อดับเบานซ์ (debounce) สวิตช์ 4 ตัว พี่ก็ใช้ลอจิกเกต NAND มาช่วยจัดการ ส่วนการสร้างสัญญาณนาฬิกา 1 Hz นั้น พี่ใช้ไอซีแบ่งความถี่ (divider) หลายตัวมาช่วยลดความถี่จากคริสตัล 1 MHz ลง ด้านหน้าตัวเรือน พ่อตาพี่เป็นคนสลักให้

แต่นาฬิกาเรือนนี้ก็โดนส่งขึ้นไปนอนบนห้องเก็บของ (อัตติก)

ตอนนี้พี่เกษียณแล้ว เลยหยิบมาปัดฝุ่นสร้างใหม่ด้วย Arduino นี่คือรูปนาฬิกาแบบเดิมที่พี่ทำไว้

original clock

พี่สร้างนาฬิกาใหม่โดยใช้การเชื่อมต่อ LED ทั้งหมด 60 + 12 จุด เลยต้องใช้ชิฟต์เรจิสเตอร์ 8 บิต จำนวน 9 ตัว อยู่ๆ พี่ก็ไปเจอ MM5451 ซึ่งเป็นชิฟต์เรจิสเตอร์ 35 บิต บนปริ้นท์บอร์ดที่ติดตั้งหน้าจอ 7-Segment LED ไว้ 5 ตัว พี่เลยเจาะแผงด้านหน้าแล้วติดตั้งหน้าจอพวกนั้นเข้าไป ดูรูปด้านล่างได้เลย

พี่เขียนรูทีนสำหรับอ่านและตั้งค่า RTC ขึ้นมาเอง เลยไม่ต้องโหลดไลบรารี RTC มาใช้ พี่ใช้พัลส์ 1 Hz SQW จาก RTC ผ่านพินอินเตอร์รัพต์ (interrupt pin) หมายเลข 2 บน Arduino ในลูปหลัก (main loop) โปรแกรมจะตรวจสอบสถานะของสวิตช์ 4 ตัว ซึ่งด้วยสวิตช์ 4 ตัวนี้ เราสามารถสร้างฟังก์ชันได้ถึง 16 แบบ

ด้านเทคนิค: การรักษาเวลาด้วย I2C และอนิเมชันซ้อนหลายชั้น

โปรเจคนี้เผยให้เห็นเลเยอร์ที่ซ่อนอยู่เบื้องหลังการเปลี่ยนเวลาเป็นแสงสว่างแบบเรียบง่าย:

  • เลเยอร์ระบุตัวตน: โมดูล RTC DS3231 ทำหน้าที่เหมือนดวงตาจับเวลาความละเอียดสูง วัดทุกวินาทีได้แม่นยำด้วยคริสตัลภายในที่ชดเชยอุณหภูมิ
  • เลเยอร์แปลงสัญญาณ: ระบบใช้พินดิจิตอลความเร็วสูงเพื่อรับพัลส์ PWM ความเร็วสูง เพื่อประสานงานงานสำคัญที่เกี่ยวกับการควบคุมแสง
  • เลเยอร์อินเตอร์เฟซภาพ: วงแหวน LED 60+12 ดวง ให้ฟีดแบ็คภาพความละเอียดสูงสำหรับสถานะ "ชั่วโมง/นาที/วินาที" (เช่น วงนอก = วินาที, วงใน = ชั่วโมง)
  • เลเยอร์ลอจิกประมวลผล: โค้ด Arduino ใช้กลยุทธ์ "การแมปพิกเซล" (หรือการจับเวลาซ้อนชั้น): มันตีความค่าจาก RTC และจับคู่กับดัชนี LED เพื่อสร้างรูปแบบการแสดงเวลาที่ปลอดภัยและเป็นจังหวะ
  • ลูปการสื่อสารแบบไดอะล็อก: ค่าของเวลาจะถูกส่งไปยัง Serial Monitor เป็นจังหวะในช่วงปรับเทียบเริ่มต้น เพื่อประสานสถานะ

โครงสร้างพื้นฐานฮาร์ดแวร์-นาฬิกา

  • Arduino Nano: "สมอง" ของโปรเจค จัดการการสุ่มตัวอย่าง I2C แบบหลายทิศทางและประสานการซิงค์วงแหวน LED
  • วงแหวน LED (60/12 ดวง): ให้ "หน้าปัดเวลา" ที่แม่นยำสูงและเชื่อถือได้สำหรับทุกจุดบนนาฬิกา
  • DS3231 RTC: ให้การรักษาเวลาที่มีความจุสูงและเชื่อถือได้เพื่อความแม่นยำในระยะยาว
  • โครงหุ้มพิมพ์ 3 มิติ: ให้อินเตอร์เฟซทางกายภาพที่ชัดเจนและดูโปรเฟสชันนัล พร้อมปกป้องชิ้นส่วนภายใน
  • แหล่งจ่ายไฟ 5V 2A: สำคัญสำหรับการจ่ายกระแสที่ชัดเจนและประหยัดพลังงานให้กับ LED สว่าง
  • สาย Micro-USB: ใช้สำหรับโปรแกรม Arduino และเป็นอินเตอร์เฟซหลักสำหรับตัวควบคุมระบบ

ฟังก์ชันทั้ง 16 แบบมีดังนี้:

ฟังก์ชัน 1111: หน้าจอ: ว่างเปล่า LED: แสดงเวลา

ฟังก์ชัน 1110: หน้าจอ: แสดงเวลา LED: แสดงเวลาและอายุของดวงจันทร์ (ดูวิดีโอด้านล่าง) LED ที่กะพริบอยู่ที่ตำแหน่งที่ 46 หารด้วย 2 = 23 ดวงจันทร์มีอายุ 23 วัน LED ที่กะพริบจะเคลื่อนที่ 2 ตำแหน่งต่อวัน ดังนั้นสี่เฟสของดวงจันทร์คือ: เมื่อ LED กะพริบที่ตำแหน่งศูนย์ หมายถึง: ดวงจันทร์ดับ (new moon) ที่ตำแหน่ง 15 (หารด้วยสอง = 7.5 วัน) = ข้างขึ้นครึ่งแรก (first quarter) ที่ตำแหน่ง 30 (หารด้วยสอง = 15 วัน) = ดวงจันทร์เต็มดวง (full moon) ที่ตำแหน่ง 45 (หารด้วยสอง = 22.5 วัน) = ข้างแรมครึ่งหลัง (last quarter) จากดวงจันทร์ดับถึงดวงจันทร์ดับครั้งถัดไปคือ 29.5 วัน

ฟังก์ชันถัดไปทั้งหมดสำหรับ LED จะเป็น: แสดงเวลาและอายุของดวงจันทร์ (ยกเว้นฟังก์ชัน 1011) ดังนั้นพี่จะบอกแค่ว่าหน้าจอแสดงอะไรในฟังก์ชันถัดไป

ฟังก์ชัน 1101: วันที่

ฟังก์ชัน 1100:

มุมสูงสุดของดวงอาทิตย์ (ขึ้นอยู่กับละติจูด)

ฟังก์ชัน 1011: วินาที

ฟังก์ชัน 1010: จำนวนวันนับตั้งแต่วันที่ 1 มกราคม

ฟังก์ชัน 1001: เวลาพระอาทิตย์ขึ้น (ขึ้นอยู่กับละติจูด)

ฟังก์ชัน 1000: วันของสัปดาห์

ฟังก์ชัน 0111: ปี

ฟังก์ชัน 0110: ความยาวของวัน (หน่วยชั่วโมง)

ฟังก์ชัน 0101: มุมเอียงของโลก

ฟังก์ชัน 0100: ปรับตั้งค่า (เวลา, วันที่, การปรับเวลา และเรจิสเตอร์ aging ของ RTC)

ฟังก์ชัน 0011: อายุของดวงจันทร์ (หน่วยวัน)

ฟังก์ชัน 0010: วินาทีนับตั้งแต่เที่ยงคืน (สูงสุด = 86400)

ฟังก์ชัน 0001: เวลาพระอาทิตย์ตก (ขึ้นอยู่กับละติจูด)

ฟังก์ชัน 0000: มุมสูงจริงของดวงอาทิตย์ (ขึ้นอยู่กับละติจูด)

ขั้นตอนการทำงานและควบคุมนาฬิกาแบบอัตโนมัติ

กระบวนการจำลองนาฬิกาดิจิทัลนี้ออกแบบมาให้มีประสิทธิภาพสุดๆ:

  1. จัดเตรียมพื้นที่ทำงาน: จัดวางวงแหวน LED และโมดูล RTC ลงในเคสให้ถูกต้อง แล้วต่อสาย I2C ให้เรียบร้อย อย่าลืมเช็คขั้วนะน้อง!
  2. ตั้งค่าการซิงค์แบบพลังสูง: ในสเก็ตช์ Arduino ให้เริ่มต้นการสื่อสารกับ shift register และเรียก rtc.begin() พร้อมกำหนดพินต่างๆ ในฟังก์ชัน setup() ให้เรียบร้อย
  3. ลูปการทำงานภายใน: นาฬิกาจะทำการตรวจสอบเวลาอย่างต่อเนื่องด้วยประสิทธิภาพสูง และอัพเดทตำแหน่งไฟ LED ในแบบเรียลไทม์ตามเวลาปัจจุบัน
  4. ผสานการแสดงผลและข้อมูล: ดูเถิด นาฬิกาของเธอจะกลายเป็นสัญญาณสถานะที่มีจังหวะ พร้อมกะพริบและเปลี่ยนไปตามการตั้งค่าตารางเวลาของเธอเอง

แนวทางการพัฒนาต่อในอนาคต

  • เพิ่ม OLED Identity Dashboard: ต่อจอ OLED ขนาดเล็กด้านหลังนาฬิกาเพื่อแสดง "วันที่/วัน" หรือ "อุณหภูมิ (C)" สวยๆ
  • ซิงค์กับเซ็นเซอร์สภาพอากาศหลายตัว: ต่อ "เซ็นเซอร์สัมผัส" พิเศษเพื่อสั่ง "ปิดการเตือน" แบบไร้สายด้วยความแม่นยำสูงผ่านลอจิก
  • เพิ่มการซิงค์กับคลาวด์: สร้างเว็บแดชบอร์ดเฉพาะทางบนสมาร์ทโฟนผ่าน WiFi/BT เพื่อติดตามและบันทึกประวัติเวลารวมอย่างแม่นยำ
  • ปรับแต่งโปรไฟล์ขั้นสูง: เพิ่มฟีเจอร์ "ปรับความสว่างอัตโนมัติ" ในโค้ด เพื่อให้รูปแบบการแสดงผลเปลี่ยนไปตามแสงแวดล้อมโดยอัตโนมัติด้วยเซ็นเซอร์วัดแสง!

นาฬิกาดิจิทัลแบบ 60+12 LED นี้เป็นโปรเจกต์ที่เพอร์เฟกต์สำหรับสายวิทย์-ช่าง ที่มองหาเครื่องมือบอกเวลาที่มีปฏิสัมพันธ์และน่าสนใจมากกว่าปกติ!

[!TIP] ใช้ RTC แบบ DS3231 แทน DS1307 เพื่อความแม่นยำในระยะยาว จะได้ไม่ต้องมาปรับเวลาใหม่บ่อยๆ นะตัว!

ข้อมูล Frontmatter ดั้งเดิม

apps:
  - "1x Arduino IDE"
  - "1x FastLED Library"
  - "1x RTClib Library"
author: "digital_clock_maker"
category: "Gadgets, Home & Automation"
components:
  - "1x MM5451"
  - "1x High Accuracy Pi RTC (DS3231)"
  - "60x 5 mm LED: Green"
  - "4x Toggle Switch, (On)-Off-(On)"
  - "1x Rotary Encoder with Push-Button"
  - "1x Arduino UNO"
  - "72x Resistor 330 ohm"
  - "5x 7 Segment LED Display, InfoVue"
  - "12x 5 mm LED: Red"
  - "9x Shift Register- Serial to Parallel"
description: "A professional and advanced timepiece project that uses a unique NeoPixel-based dual-ring display (60 for minutes/seconds, 12 for hours) to create a high-precision, colorful digital clock."
difficulty: "Intermediate"
documentationLinks: []
downloadableFiles:
  - "https://projects.arduinocontent.cc/d23a5962-1cd0-4d6e-9b02-fbebd93f71f4.ino"
encryptedPayload: "U2FsdGVkX1+1hGCQ/uB/ycvcXLEf6pgWbNT7vhxXQ/SycR2pFXjR6uLECkBj1hnDHyhiIR5rscxFGWCT/lNaqRk5nR1dNXsnRo04Ij8Dy6o="
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/digital-6012-led-clock-b9c989_cover.jpg"
lang: "en"
likes: 2
passwordHash: "439a22da45e3551f3c229de1405b9a5948b882c60974000895009025de861e49"
price: 2450
seoDescription: "An advanced and playsomely interactive 60+12 LED clock for beginners interested in Arduino neopixel-ring and RTC-to-horology projects."
tags:
  - "led-clock"
  - "neopixels"
  - "dual-ring"
  - "arduino-clock"
  - "advanced-horology"
  - "advanced"
title: "นาฬิกาดิจิตอล 72 แอลอีดี สไตล์อนาล็อก ตึงๆ วัยรุ่น!"
tools: []
videoLinks:
  - "https://www.youtube.com/embed/fgGiz1g3AkE"
views: 5837