Đồng hồ ánh sáng ban ngày tự chế với điều khiển thời gian và không gian

Công nghệ10 tháng 11, 2026·5 phút đọc

Một kỹ sư đã tự chế chiếc đồng hồ analog 24 giờ, dùng dải đèn LED quanh viền để hiển thị khoảng thời gian có ánh sáng ban ngày theo vĩ độ và kinh độ. Dự án kết hợp RP2040, CircuitPython và bộ điều khiển cơ học cho phép thay đổi thời gian, vĩ độ và vị trí trong múi giờ.

Đồng hồ ánh sáng ban ngày tự chế với điều khiển thời gian và không gian

Một chiếc đồng hồ analog chu kỳ 24 giờ với dải đèn LED quanh viền hiển thị chính xác khoảng thời gian có ánh sáng ban ngày tại vị trí của nó. Đi kèm là một hộp điều khiển cho phép người dùng xoay núm để thay đổi thời gian và trượt thanh để chọn vĩ độ.

Dự án này đáng chú ý vì nó biến một phép tính thiên văn phức tạp thành thứ gì đó hiện diện thường trực trên tường — không phụ thuộc vào máy tính hay điện thoại — và cho thấy cách một lập trình viên có thể kết hợp phần cứng, phần mềm nhúng và thiết kế cơ khí trong một sản phẩm hoàn chỉnh.

Đồng hồ ánh sáng ban ngày trên tườngĐồng hồ ánh sáng ban ngày trên tường

Cấu tạo và nguyên lý hoạt động

Chiếc đồng hồ có chu kỳ 24 giờ, với nửa đêm ở vị trí dưới cùng và buổi trưa ở trên cùng. Các đèn LED quanh chu vi sẽ chiếu sáng khoảng thời gian ban ngày hiện tại, dựa trên vĩ độ và kinh độ của nơi đặt đồng hồ.

Phần chuyển động kim là một bộ máy 24 giờ mua sẵn trên thị trường. Tác giả thiết kế thân đồng hồ và thân hộp điều khiển bằng công cụ Cuttle.xyz, sau đó cắt các miếng ghép trên máy cắt laser tại không gian sáng tạo miễn phí của thư viện địa phương.

Chu vi đồng hồ được thiết kế vừa đúng 48 bóng neopixel trên một dải Adafruit, để các đèn chia đều cho các giờ trong ngày. Phần trang trí bên ngoài lấy từ mặt thiên văn của đồng hồ thiên văn Zytglogge ở Bern, Thụy Sĩ — tác giả số hóa một bức ảnh, chỉnh sửa và thu phóng cho đúng tỉ lệ.

Hộp điều khiển thời gian và không gianHộp điều khiển thời gian và không gian

Hộp điều khiển thời gian và không gian

Hộp điều khiển được thiết kế để tương tác trực tiếp với cách tính ánh sáng ban ngày:

  • Núm xoay phía dưới điều khiển thời gian, mỗi lần bấm nhảy một tuần. Các bước nhảy đột ngột thể hiện thời điểm bắt đầu và kết thúc của giờ tiết kiệm ánh sáng ban ngày (DST).
  • Công tắc bên hông bật chế độ ghi đè thời gian và không gian; khi tắt, núm xoay sẽ điều khiển độ sáng của đèn viền.
  • Thanh trượt dọc là bộ chọn vĩ độ, được thiết kế để bản đồ thế giới theo phép chiếu Equal Earth khớp với chiều dài thanh trượt.
  • Công tắc ba nấc "kinh độ tương đối" ở trên cùng đặt vị trí trong múi giờ hiện tại — tức là tính ánh sáng ban ngày theo mép tây, giữa hay mép đông của múi giờ đó.

Vì kim đồng hồ không nối với phần điện tử, kim không thể tự nhảy khi thay đổi kinh độ vượt qua ranh giới múi giờ. Trong cùng một múi giờ thì không cần dịch kim, nên công tắc này chỉ đặt vị trí tương đối trong múi giờ mặc định, giúp nhìn thấy sự khác biệt ánh sáng ban ngày giữa các vị trí đó ở cùng một thời điểm trong ngày.

Sơ đồ mô phỏng ánh sáng ban ngàySơ đồ mô phỏng ánh sáng ban ngày

Phần cứng và phần mềm

Đồng hồ chạy trên vi điều khiển Adafruit Feather RP2040. Toàn bộ linh kiện nằm trong hộp điều khiển, trừ dải neopixel quanh mặt đồng hồ được nối với vi điều khiển bằng dây bện thủ công và vài đầu nối — nhờ vậy có thể thay đổi khoảng cách giữa đồng hồ và hộp điều khiển mà không cần hàn thêm. Dải neopixel được cấp nguồn qua bo mạch, cắm bằng adapter thông thường.

Vì RP2040 không có kết nối Internet hay Bluetooth, tác giả dùng thêm một RTC (real-time clock — đồng hồ thời gian thực) để giữ giờ. Phần mềm được viết bằng CircuitPython, tận dụng thư viện asyncio để tách việc theo dõi trạng thái các bộ điều khiển (thanh trượt có đổi vị trí không, công tắc có gạt không, núm có xoay không) khỏi việc tính lại màu của từng neopixel.

Tác giả chuyển các phép tính mặt trời mọc và lặn từ bản triển khai Rust của bạn mình, dựa trên công cụ tính năng lượng mặt trời của NOAA. Mã nguồn đã được công khai, kèm lưu ý rằng đây là dự án cá nhân viết cho nhu cầu của chính mình.

Một lỗi thú vị từng xảy ra: tác giả tưởng mình chuyển đổi sai từ Rust sang CircuitPython, nhưng vấn đề thực chất nằm ở cách xử lý datetime khác nhau giữa Python và CircuitPython.

Góc nhìn

Với lập trình viên và kỹ sư phần cứng tại Việt Nam, dự án này là ví dụ gọn gàng về việc một sản phẩm nhúng hoàn chỉnh không nhất thiết phải phức tạp: một vi điều khiển phổ thông, một thư viện bất đồng bộ và một chút tính toán thiên văn là đủ. Cách tách vòng lặp đọc cảm biến khỏi phần xử lý hiển thị bằng asyncio cũng là mẫu thiết kế đáng học cho các dự án IoT có nhiều đầu vào.

Điểm đáng chú ý khác là quy trình: thiết kế cơ khí bằng công cụ trên web, cắt laser tại không gian sáng tạo cộng đồng, rồi lập trình bằng ngôn ngữ bậc cao. Mô hình này cho phép một người vừa làm phần mềm vừa làm phần cứng mà không cần xưởng sản xuất riêng — phù hợp để thử nghiệm nhanh các ý tưởng thiết bị hiển thị thông tin môi trường xung quanh thay vì qua màn hình điện thoại.

Nguồn: hannahilea.com · Quy trình biên tập

Chia sẻ:FacebookX