1 คะแนน โดย GN⁺ 2026-02-10 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • โปรเจ็กต์ที่ควบคุม นาฬิกาควอตซ์แบบอนาล็อกราคาประหยัด ด้วย โมดูล ESP8266 และ Arduino sketch เพื่อซิงก์เวลากับเวลาอินเทอร์เน็ต
  • รับเวลาจาก เซิร์ฟเวอร์ NTP ทุก 15 นาทีเพื่อคงความแม่นยำ และมีฟังก์ชัน ปรับเวลาออมแสงอัตโนมัติ
  • ดัดแปลงโดยแยก ขดลวดมอเตอร์สเต็ปปิงแบบ Lavet ของนาฬิกาออกมาให้ ESP8266 ควบคุมได้ และใช้ ชิป EERAM เพื่อบันทึกตำแหน่งเข็มชั่วโมง เข็มนาที และเข็มวินาที แม้ไฟดับ
  • ตอนตั้งค่าเริ่มต้น สามารถกำหนดตำแหน่งเข็มนาฬิกาผ่าน อินเทอร์เฟซหน้าเว็บ ที่ ESP8266 ให้บริการ และหลังจากนั้นดูสถานะนาฬิกาแบบภาพด้วย SVG หรือ HTML Canvas ได้จากหน้าสถานะ
  • เป็นตัวอย่างโอเพนซอร์สของการสร้าง นาฬิกาซิงก์เครือข่ายที่แม่นยำ ด้วยฮาร์ดแวร์ราคาถูก และแสดงให้เห็นการประยุกต์ใช้ เทคโนโลยีควบคุม Embedded IoT ในทางปฏิบัติ

ภาพรวมโปรเจ็กต์

  • ESP8266 WiFi Analog Clock คือระบบที่ใช้โมดูล WEMOS D1 Mini ESP8266 และ Arduino sketch เพื่อรับเวลาในท้องถิ่นจากเซิร์ฟเวอร์ NTP(Network Time Protocol) โดยอัตโนมัติและแสดงผล
    • เชื่อมต่อกับเซิร์ฟเวอร์ NTP ใหม่ทุก 15 นาทีเพื่อรักษาความแม่นยำของนาฬิกา
    • มีฟังก์ชันปรับ Daylight Saving Time อัตโนมัติ
  • โปรเจ็กต์นี้อิงกับ นาฬิกาควอตซ์แบบอนาล็อกราคาประหยัด และผสานการดัดแปลงฮาร์ดแวร์เข้ากับการควบคุมด้วยซอฟต์แวร์

ฮาร์ดแวร์

  • นาฬิกาที่ใช้คือ นาฬิกาควอตซ์แบบอนาล็อกที่ซื้อจาก Walmart ในราคา 3.88 ดอลลาร์
  • เปิด quartz movement ของนาฬิกา แล้วแยก ขดลวดมอเตอร์สเต็ปปิงแบบ Lavet ภายในออกจาก quartz oscillator จากนั้นบัดกรีสายสำหรับเชื่อมต่อ ESP8266 เข้ากับสายแต่ละเส้น
    • movement ส่วนใหญ่ประกอบแบบสแน็ปเข้าล็อกโดยไม่มีสกรู
    • สายของขดลวดเล็กกว่าขนาดเส้นผม จึงต้องระมัดระวังอย่างมากในการจัดการ
  • วงจรที่ประกอบเสร็จแล้ววาง EERAM IC และชิ้นส่วนอื่น ๆ บน perfboard

การทำงานของซอฟต์แวร์

  • สเก็ตช์ AnalogClock.ino ทำให้ ESP8266 เปรียบเทียบเวลาจริงกับเวลาที่นาฬิกาแสดงอยู่ 10 ครั้งต่อวินาที
    • หากนาฬิกาช้า ก็จะเร่งเข็มวินาทีให้เดินเร็วขึ้นเพื่อซิงก์
    • หากนาฬิกาเดินเร็ว ก็จะรอจนกว่าเวลาจริงจะตามทัน
  • การขยับเข็มวินาทีทำโดยจ่าย bipolar pulse ให้กับขดลวดมอเตอร์ Lavet
    • ต้องปรับ ค่าคงที่ PULSETIME ตามคุณลักษณะของมอเตอร์ และจากการทดลองพบว่า 30ms เหมาะสม
  • นาฬิการาคาประหยัดไม่มีระบบฟีดแบ็กตำแหน่งเข็ม จึงสูญเสียข้อมูลตำแหน่งเมื่อไฟดับ
    • เพื่อแก้ปัญหานี้จึงใช้ Microchip 47L04 Serial EERAM(4Kbit SRAM + EEPROM backup)
    • บันทึกตำแหน่งเข็มชั่วโมง เข็มนาที และเข็มวินาทีทุกวินาที แล้วกู้คืนเมื่อเปิดไฟอีกครั้ง

การตั้งค่าเริ่มต้นและเว็บอินเทอร์เฟซ

  • เมื่อรันสเก็ตช์ครั้งแรก ESP8266 จะให้บริการ หน้าเว็บแบบเรียบง่าย เพื่อให้ผู้ใช้กำหนดตำแหน่งเริ่มต้นของเข็มนาฬิกา
  • หลังจากนั้น ESP8266 จะจดจำตำแหน่งเข็มโดยใช้ข้อมูลที่บันทึกไว้ใน EERAM
  • ระหว่างการทำงาน จะมี หน้าสถานะ (status page) ให้ใช้งาน และรองรับโหมดการแสดงผล 3 แบบดังนี้
    • แสดงกราฟิกหน้าปัดแบบ SVG
    • แสดงหน้าปัดด้วย HTML Canvas
    • แสดงสถานะแบบข้อความล้วน

ใบอนุญาตและข้อมูลทางเทคนิค

  • โปรเจ็กต์นี้เผยแพร่ภายใต้ MIT License
  • สัดส่วนภาษาหลักคือ C++ 64.1% , C 35.9%
  • ที่เก็บบน GitHub มี 252 ดาว (star) และ 2 ฟอร์ก (fork)
  • แท็กหัวข้อที่เกี่ยวข้อง: arduino, esp8266, clock, analog-clock, ntp, hardware-construction

ความสำคัญ

  • เป็นตัวอย่างเชิงปฏิบัติของการเปลี่ยนนาฬิการาคาถูกให้เป็น นาฬิกาอัจฉริยะแบบซิงก์ Wi‑Fi
  • เป็นกรณีศึกษาของ การควบคุมเวลาความแม่นยำสูงและการทำเว็บอินเทอร์เฟซ ด้วย ESP8266 และสภาพแวดล้อม Arduino
  • เป็นแหล่งอ้างอิงโอเพนซอร์สสำหรับการเรียนรู้ การดัดแปลงฮาร์ดแวร์ IoT และเทคโนโลยีการซิงก์เฟิร์มแวร์

1 ความคิดเห็น

 
GN⁺ 2026-02-10
ความคิดเห็นจาก Hacker News
  • โปรเจ็กต์นี้เจ๋งมาก
    ส่วนที่น่าสนใจเป็นพิเศษคือชิป “SRAM with EEPROM backup”
    ชิปนี้ทำให้สามารถบันทึกตำแหน่งของเข็มนาฬิกาแบบถาวรได้ทุกครั้งที่มีการขยับ โดยไม่ทำให้ อายุการเขียน ของ EEPROM หมดไปเหมือน EEPROM ทั่วไป
    ราคาต่อชิ้นก็ต่ำกว่า 1 ดอลลาร์ จึงเป็นชิ้นส่วนที่มีประโยชน์สำหรับงานอดิเรกหรือโปรเจ็กต์ขนาดเล็ก
    • ถ้าจะสรุปหลักการทำงานของชิปนี้ ผมคิดว่าเป็นแบบนี้
      มีทั้ง SRAM และ EEPROM อยู่ในแพ็กเกจเดียวกันพร้อมคอนโทรลเลอร์ และมี คาปาซิเตอร์ขนาดเล็ก (4.7µF) อยู่ใกล้ ๆ
      SRAM จะเก็บข้อมูลไว้ตราบใดที่ยังมีไฟเลี้ยง ส่วน EEPROM จะเก็บข้อมูลได้ถาวรแม้ไฟดับ แต่มีข้อจำกัดเรื่องจำนวนครั้งในการเขียน
      เมื่อคอนโทรลเลอร์ตรวจพบว่าแรงดันไฟเริ่มตก ก็จะดัมพ์ข้อมูลจาก SRAM ลง EEPROM ทันที
      คาปาซิเตอร์จะจ่ายพลังงานในช่วงจังหวะนี้เพื่อให้ EEPROM เขียนข้อมูลได้
      เมื่อไฟกลับมา ข้อมูลจาก EEPROM ก็จะถูกคัดลอกกลับเข้า SRAM อีกครั้ง
      ข้อเสียคือความจุเล็กเพียง 4 กิโลบิต แต่ถ้าแก้ปัญหาแบบนี้ได้ด้วยเงิน 1 ดอลลาร์ ก็ถือว่าคุ้มมาก
    • ไม่แน่ใจว่าเป็นเทคโนโลยีแบบเดียวกันหรือเปล่า แต่ลิงก์สินค้าของ Adafruit ก็น่าสนใจ
    • ผมก็ชอบใช้ FRAM กับงานแบบนี้เหมือนกัน
      โดยเฉพาะถ้าเก็บ debug log เป็น ring buffer ก็จะมีประโยชน์มาก เพราะสามารถเก็บ crash log ของระบบ embedded ได้แม้จะไม่ได้ต่อกับพีซีสำหรับพัฒนา
  • แม้ใน Walmart จะเห็นราคา $3.88 แต่เพราะมี นโยบายตั้งราคาแบบไดนามิกตามพื้นที่และผู้ใช้ ในพื้นที่ของผมกลับแสดงเป็น $5.92
    ลิงก์สินค้า
  • ที่บ้านผมมี นาฬิกาอะตอมิกของ Seiko ที่คาดหวังจะปรับเวลาอัตโนมัติด้วยสัญญาณ WWVB
    แต่ที่ที่ผมอยู่ตอนนี้สัญญาณอ่อนเกินไป ทำให้การตั้งเวลาด้วยมือลำบากมาก
    เลยเขียน โค้ด Arduino เองเพื่อจำลองสัญญาณนาฬิกาอะตอมิกจากทั่วโลก โดยใช้ ESP32 และเซิร์ฟเวอร์ NTP
    การได้ไปดูประวัติและความแตกต่างของสัญญาณออกอากาศนาฬิกาอะตอมิกของแต่ละประเทศก็น่าสนใจไม่น้อย
    • แต่ต้องระวังว่า การส่งสัญญาณที่ความถี่เดียวกับ WWVB อาจ ผิดกฎหมาย ได้
  • อยากเห็นใครสักคนดัดแปลงนาฬิกาโปรเจ็กชันแบบนี้
    ความสว่างของโปรเจ็กชันสีแดงกำลังเหมาะสำหรับตอนกลางคืน แต่ไม่มี การซิงก์ผ่าน Wi‑Fi เลยตั้งเวลาให้ตรงด้วย NTP หรือ GPS ไม่ได้
    ส่วนโปรเจ็กเตอร์เชื่อมกับตัวเครื่องด้วยสายแพ ribbon cable เลยดูเหมือนจะสนุกดีถ้าได้ลอง reverse engineer
    ถ้าเป็นไปได้ก็น่าจะดีถ้าใช้ LED matrix แสดงข้อมูลอื่นนอกจากเวลาไว้บนเพดานได้ด้วย
    มีสินค้าลักษณะนั้นอยู่เหมือนกัน แต่แพงมากแบบ buyfrixos.com
    • ผมเคยทำเวอร์ชันที่ความสว่างต่ำกว่านี้เอง
      ลิงก์บทความที่ผมทำ
    • สินค้าที่ลิงก์ไว้มีฟังก์ชัน “Atomic Time” ด้วย ดูเหมือนจะซิงก์ผ่านสัญญาณ WWVB
      ผมเองก็ใช้นาฬิกาแขวนราคาถูกแบบนี้อยู่หลายเรือน และ แทบไม่มีความคลาดเคลื่อนของเวลาเลย
      ผมคิดว่ามันอาจมี jitter น้อยกว่า NTP ด้วยซ้ำ
    • ผมก็ชอบนาฬิกา WWV/WWVB เหมือนกัน
      ไม่เคยต้องตั้งเวลาเลยสักครั้ง และมันก็ตรงกับนาฬิกา NTP ภายในไม่เกิน 1 วินาที
      แต่กับนาฬิกาเตาอบหรือนาฬิกาไมโครเวฟนี่อยากปิดทิ้งจริง ๆ
    • จริง ๆ แล้วพอเริ่มดัดแปลงอะไรแบบนี้ สุดท้ายก็มักสรุปได้ว่า ราคาสินค้าสำเร็จรูปนั้นสมเหตุสมผล เมื่อเทียบกับค่าชิ้นส่วนและเวลาที่ต้องใช้
    • ผมมีนาฬิกาดิจิทัลที่ซื้อจาก Temu อยู่หลายเรือน และมี ปัญหาเวลาค่อย ๆ เดินเร็วขึ้น
      ผ่านไปเดือนหนึ่งก็เร็วไปประมาณ 1 นาที เลยอยากให้มันมีฟังก์ชันซิงก์ผ่าน Wi‑Fi
  • ผมชอบ กลิ่นอายของการแฮ็ก แบบนี้มาก
    เดี๋ยวนี้สินค้าหลายอย่างปิดระบบมากขึ้นเรื่อย ๆ จนทำให้คิดถึงของเรียบง่ายที่ยังแกะเล่นและดัดแปลงได้
    ถ้าวันหนึ่งไม่ต้องทำงานประจำแล้ว ผมอยากทำ เครื่องใช้ไฟฟ้าที่เรียบง่าย เชื่อถือได้ และเป็นมิตรกับแฮ็กเกอร์ ด้วยตัวเอง
    เห็นโปรเจ็กต์แบบนี้แล้วน่าทึ่งจริง ๆ
  • ถ้าอยากเลอะมือน้อยกว่านี้ ขอแนะนำ Crazy Clock
    ผมซื้อให้ลูกสาว แต่ตอนนี้พักใช้อยู่ เพราะ เสียงติ๊ก ๆ ที่ไม่สม่ำเสมอ รบกวนตอนอ่านหนังสือ
    ถึงอย่างนั้นก็ยังเป็นประสบการณ์ที่สนุกมาก
    • โหมด “Early clock” จะทำให้นาฬิกาเดินเร็วไว้ 0~10 นาที จึงเหมาะกับการ กันสาย
      แต่ถ้าในบ้านมีนาฬิกาหลายเรือน ก็ต้องตั้งใจใช้ดูอยู่เรือนเดียวถึงจะได้ผล
  • ถ้ามีงบมากขึ้นอีกหน่อย ก็ยังมีนาฬิกาขนาดใหญ่ที่ส่งเสียง ‘ตุ้บ’ ทุก ๆ 30 วินาที
    แนะนำ Gents Turret Movement
    ผมเคยใช้มันทำ นาฬิกาแม่เหล็กไฟฟ้าแบบใช้ tuning fork
    โดยขับมันด้วย tuning fork และลอจิก 74xx แทนแหล่งกำเนิดเวลาที่แม่นยำ
    • นาฬิกาแบบ tuning fork พวกนี้เจ๋งจริง ๆ
      สงสัยว่าทำไม Accutron ถึงยังไม่ทำนาฬิกาแบบนี้อีก
      วิธีใช้ความถี่เรโซแนนซ์นั้น คล้ายกับนาฬิกาควอตซ์ แต่ดูน่าดึงดูดกว่ามากในเชิงภาพ
  • เวลาออกแบบ วงจร H-bridge สำหรับสเต็ปเปอร์มอเตอร์ ต้องคำนึงถึงกระแสย้อนกลับให้ดีเสมอ
    ไม่อย่างนั้นอาจเกิดสไปก์จนทำงานผิดพลาดหรือถึงขั้น ไมโครคอนโทรลเลอร์เสียหาย ได้
    ทางที่ดีควรแยกแรงดันเกตด้วย ออปโตทรานซิสเตอร์ และจ่ายไฟให้มอเตอร์แยกต่างหาก
  • ผมเพิ่งดูวิดีโอ YouTube เรื่อง “เปลี่ยนขยะราคา €0 ให้เป็นเด็คตัดต่อวิดีโอราคา €400”
    และยังมี โปรเจ็กต์บน GitHub ด้วย
    • ไอเดีย นำคอนโทรลเลอร์ VCR มาใช้ซ้ำเป็นอุปกรณ์รับอินพุตดิจิทัล นั้นยอดเยี่ยมมาก
      เด็คเก่าหรือคอนโทรลเลอร์ LANC ยังเหลืออยู่เยอะ จึงมีคุณค่าให้นำมาใช้งานต่อได้มาก
  • โปรเจ็กต์นี้เจ๋งก็จริง แต่ดูเหมือนอาจมี time drift เกิดขึ้นได้
    ถึงนาฬิกาจะรู้เวลาที่ถูกต้อง แต่ถ้าความเร็วการขับจริงค่อย ๆ เพี้ยน ก็อาจทำให้ความคลาดเคลื่อนสะสมมากขึ้นเรื่อย ๆ
    โดยเฉพาะถ้าตั้งค่าคงที่ PULSETIME ผิดไปแค่ 1ms ก็อาจเริ่มเห็นผลต่างภายในวันเดียว
    แน่นอนว่ามอเตอร์สเต็ปเปอร์แบบ Lavet ในทางทฤษฎีจะรักษา การก้าวตามความถี่ ได้ค่อนข้างคงที่ แต่ก็อาจมีอคติจากการสึกหรอหรือสัญญาณรบกวนได้
    อย่างไรก็ตาม สำหรับระดับนาฬิกาแขวน ความคลาดเคลื่อนนั้นอาจน้อยจนมองข้ามได้
    • มอเตอร์สเต็ปเปอร์แบบ Lavet ควบคุมการทำงานด้วยจำนวนพัลส์ ดังนั้นสิ่งสำคัญคือจำนวน ไม่ใช่ความกว้างของพัลส์
      ดู คำอธิบายใน Wikipedia จะเข้าใจได้ง่ายขึ้น
    • pulsetime เป็นเพียงเวลาที่ใช้ในการขยับหนึ่งสเต็ปเท่านั้น
      ตราบใดที่ไม่มีสเต็ปตกหล่น ก็จะ ไม่เกิดความคลาดเคลื่อนสะสม
      กล่าวคือ แค่รักษาจำนวนสเต็ปให้ถูกต้องก็เพียงพอ