- Dự án điều khiển đồng hồ quartz analog giá rẻ bằng module ESP8266 và Arduino sketch để đồng bộ với thời gian Internet
- Lấy thời gian từ máy chủ NTP mỗi 15 phút để duy trì độ chính xác, đồng thời có tính năng tự động điều chỉnh giờ mùa hè
- Tách cuộn dây động cơ bước Lavet của đồng hồ để ESP8266 có thể điều khiển, và dùng chip EERAM để lưu vị trí kim giờ, kim phút, kim giây ngay cả khi mất điện
- Trong lần thiết lập ban đầu, người dùng chỉ định vị trí kim đồng hồ qua giao diện trang web do ESP8266 cung cấp; sau đó có thể trực quan hóa trạng thái đồng hồ trên trang trạng thái bằng SVG hoặc HTML Canvas
- Đây là một ví dụ mã nguồn mở cho thấy có thể tạo ra đồng hồ đồng bộ mạng chính xác từ phần cứng giá rẻ, đồng thời minh họa ứng dụng thực tiễn của kỹ thuật điều khiển IoT nhúng
Tổng quan dự án
- ESP8266 WiFi Analog Clock là hệ thống dùng module WEMOS D1 Mini ESP8266 và Arduino sketch để tự động lấy giờ địa phương từ máy chủ NTP(Network Time Protocol) và hiển thị
- Kết nối lại tới máy chủ NTP mỗi 15 phút để giữ độ chính xác của đồng hồ
- Bao gồm tính năng tự động điều chỉnh giờ mùa hè (Daylight Saving Time)
- Dự án dựa trên đồng hồ quartz analog giá rẻ, kết hợp giữa chỉnh sửa phần cứng và điều khiển bằng phần mềm
Cấu hình phần cứng
- Chiếc đồng hồ được sử dụng là đồng hồ quartz analog mua tại Walmart với giá 3,88 USD
- Mở bộ máy quartz của đồng hồ, tách cuộn dây động cơ bước Lavet bên trong ra khỏi bộ dao động quartz, rồi hàn dây vào từng đầu dây để kết nối với ESP8266
- Hầu hết các bộ máy được lắp theo kiểu ngàm, không dùng vít
- Dây của cuộn coil mỏng hơn cả sợi tóc nên cần thao tác cực kỳ cẩn thận
- Mạch hoàn chỉnh được lắp trên perfboard với IC EERAM và các linh kiện khác
Hoạt động phần mềm
- Sketch AnalogClock.ino khiến ESP8266 so sánh thời gian thực và thời gian đang hiển thị trên đồng hồ 10 lần mỗi giây
- Nếu đồng hồ chạy chậm, kim giây sẽ được đẩy nhanh để đồng bộ
- Nếu đồng hồ chạy nhanh, hệ thống sẽ chờ cho tới khi thời gian thực bắt kịp
- Việc di chuyển kim giây được thực hiện bằng cách áp xung lưỡng cực (bipolar pulse) vào cuộn dây động cơ Lavet
- Tùy thuộc đặc tính động cơ, cần điều chỉnh hằng số PULSETIME; thực nghiệm cho thấy 30ms là phù hợp
- Đồng hồ giá rẻ không có phản hồi vị trí kim nên khi mất điện sẽ mất thông tin vị trí
- Để khắc phục, dự án dùng Microchip 47L04 Serial EERAM(4Kbit SRAM + EEPROM backup)
- Vị trí kim giờ, kim phút, kim giây được lưu mỗi giây và khôi phục khi cấp điện lại
Thiết lập ban đầu và giao diện web
- Khi sketch chạy lần đầu, ESP8266 cung cấp một trang web đơn giản để người dùng đặt vị trí ban đầu của các kim đồng hồ
- Sau đó ESP8266 ghi nhớ vị trí kim nhờ dữ liệu lưu trong EERAM
- Trong quá trình hoạt động, hệ thống cung cấp trang trạng thái (status page) với ba chế độ hiển thị sau
- Hiển thị mặt đồng hồ bằng đồ họa SVG
- Hiển thị mặt đồng hồ bằng HTML Canvas
- Hiển thị trạng thái chỉ bằng văn bản
Giấy phép và thông tin kỹ thuật
- Dự án được phát hành theo giấy phép MIT
- Thành phần ngôn ngữ chính là C++ 64.1%, C 35.9%
- Kho lưu trữ GitHub có 252 sao (star) và 2 fork
- Các thẻ chủ đề liên quan: arduino, esp8266, clock, analog-clock, ntp, hardware-construction
Ý nghĩa
- Một ví dụ thực tiễn về việc biến đồng hồ giá rẻ thành đồng hồ thông minh đồng bộ qua Wi‑Fi
- Trường hợp điển hình về điều khiển thời gian chính xác và triển khai giao diện web bằng ESP8266 và môi trường Arduino
- Tài liệu tham khảo mã nguồn mở để học về chỉnh sửa phần cứng IoT và kỹ thuật đồng bộ firmware
1 bình luận
Ý kiến trên Hacker News
Phần khiến tôi thấy đặc biệt thú vị là con chip “SRAM with EEPROM backup”
Nó cho phép lưu vĩnh viễn vị trí kim đồng hồ mỗi khi kim di chuyển, mà không làm hao mòn tuổi thọ ghi như EEPROM thông thường
Giá cũng dưới 1 đô, nên là một linh kiện rất hữu ích cho dân hobby hoặc các dự án quy mô nhỏ
SRAM và EEPROM nằm trong cùng một package cùng với bộ điều khiển, và có một tụ điện nhỏ (4.7µF) ở gần đó
SRAM giữ dữ liệu khi còn nguồn, còn EEPROM lưu dữ liệu vĩnh viễn ngay cả khi mất điện nhưng có giới hạn số lần ghi
Khi bộ điều khiển phát hiện điện áp giảm xuống, nó lập tức dump nội dung của SRAM sang EEPROM
Tụ điện sẽ cấp năng lượng vào đúng thời điểm đó để EEPROM có thể ghi dữ liệu
Khi nguồn được khôi phục, dữ liệu từ EEPROM lại được chép ngược về SRAM
Nhược điểm là dung lượng chỉ có 4 kilobit, nhưng nếu có thể giải quyết vấn đề này với 1 đô thì hoàn toàn đáng giá
Đặc biệt nếu lưu log debug dưới dạng ring buffer thì rất hữu ích, vì có thể giữ lại crash log của hệ thống nhúng ngay cả khi không kết nối với PC phát triển
Liên kết sản phẩm
Nhưng nơi tôi đang sống bây giờ tín hiệu quá yếu, nên việc chỉnh thủ công rất phiền
Vì vậy tôi đã tự viết mã Arduino dùng ESP32 và máy chủ NTP để mô phỏng tín hiệu đồng hồ nguyên tử trên toàn thế giới
Tìm hiểu lịch sử và sự khác biệt giữa tín hiệu phát sóng đồng hồ nguyên tử của từng nước cũng khá thú vị
Độ sáng của phần chiếu màu đỏ rất vừa phải vào ban đêm, nhưng nó không có đồng bộ Wi-Fi, nên không thể chỉnh giờ bằng NTP hay GPS
Phần projector được nối với thân máy bằng cáp ribbon, nên nếu reverse engineering thì có vẻ sẽ khá vui
Lý tưởng nhất là có thể dùng LED matrix trên trần nhà để hiển thị thêm thông tin ngoài thời gian
Có những sản phẩm như vậy thật, nhưng rất đắt, như ở buyfrixos.com
Liên kết bài viết của tôi
Tôi cũng dùng vài chiếc đồng hồ treo tường giá rẻ kiểu này, và hầu như không bị sai giờ
Tôi nghĩ nó thậm chí có thể có jitter thấp hơn NTP
Chưa từng phải chỉnh giờ lần nào, và nó khớp với đồng hồ NTP trong phạm vi 1 giây
Chỉ là tôi muốn tắt mấy cái đồng hồ trên lò nướng hay lò vi sóng đi thôi
Chỉ một tháng là đã nhanh hơn khoảng 1 phút, nên tôi ước gì chúng có tính năng đồng bộ Wi-Fi
Giờ nhiều sản phẩm ngày càng khép kín, nên tôi thấy nhớ cảm giác tự làm ra những món đồ đơn giản và có thể hack được
Một ngày nào đó nếu thoát khỏi công việc mưu sinh, tôi muốn tự làm đồ gia dụng đơn giản, đáng tin cậy và thân thiện với hacker
Nhìn những dự án như thế này thực sự rất đáng ngưỡng mộ
Tôi mua cho con gái, nhưng tiếng tích tắc không đều làm con bé mất tập trung khi học nên giờ đang để không
Dù vậy, đó vẫn là một trải nghiệm khá vui
Tuy nhiên nếu trong nhà có nhiều đồng hồ thì phải quyết tâm chỉ nhìn một cái mới hiệu quả
Giới thiệu Gents Turret Movement
Tôi đã dùng nó để làm một đồng hồ điện cơ dùng tuning fork
Nó vận hành bằng tuning fork và logic 74xx thay vì một nguồn thời gian chính xác
Tôi không hiểu vì sao Accutron vẫn chưa làm lại kiểu đồng hồ này
Cách dùng tần số cộng hưởng tương tự đồng hồ quartz nhưng hấp dẫn hơn nhiều về mặt thị giác
Nếu không, các spike có thể gây lỗi hoạt động hoặc thậm chí làm hỏng vi điều khiển
Lý tưởng nhất là dùng optotransistor để cách ly điện áp cổng, và cấp nguồn riêng cho motor
Cũng có cả dự án GitHub
Vẫn còn khá nhiều deck đời cũ và bộ điều khiển LANC, nên giá trị tận dụng là rất lớn
Dù đồng hồ biết giờ chính xác, nếu tốc độ vận hành thực tế lệch đi từng chút thì sai số tích lũy có thể sẽ tăng dần
Đặc biệt nếu hằng số PULSETIME sai chỉ 1ms thì có thể tạo ra khác biệt chỉ sau một ngày
Tất nhiên, về lý thuyết thì stepper motor Lavet giữ được các bước theo dao động tần số cố định, nhưng hao mòn hoặc nhiễu cũng có thể tạo ra thiên lệch
Dù vậy, ở mức đồng hồ treo tường thì sai số đó có lẽ không đáng kể
Xem giải thích trên Wikipedia sẽ dễ hiểu hơn
pulsetimechỉ đơn giản là thời lượng để tiến một bướcChừng nào không bị mất bước thì sẽ không có sai số tích lũy
Nói cách khác, chỉ cần giữ số bước đếm chính xác là đủ