Word Clock tuỳ biến cho Home Assistant / ESPHome

Word clock tuỳ biến, đồng bộ thời gian từ Home Assistant và hiển thị thêm dữ liệu sensor (thời tiết, lịch đổ rác…). Có file OpenSCAD để chỉnh bố cục chữ/icon, chạy WS2812 và ESPHome, kèm hướng dẫn in & lắp ráp.

👁️
1.5K
Lượt Xem
❤️
49
Lượt Thích
📥
227
Lượt Tải
Cập Nhật Apr 18, 2026
Chi tiết
Tải xuống
Bình Luận
Khoe bản in
Remix

Mô tả

Chiếc word clock này có thể tích hợp với Home Assistant để không chỉ hiển thị giờ mà còn hiển thị dữ liệu từ nhiều loại sensor khác nhau (vd: lịch đổ rác, thời tiết, v.v.)

  • Có thể dùng nhiều màu khác nhau để thể hiện mức độ của sensor dạng số, hoặc một trong nhiều giá trị có thể có của sensor dạng text

Thời gian sẽ tự đồng bộ theo thời gian của Home Assistant và hiển thị chính xác tới từng phút:

  • Hiển thị bằng chữ theo bước 5 phút, ví dụ: o'clock, five past, ten past, quarter past, twenty past, twentyfive past, half past, twentyfive to, twenty to, quarter to, ten to, five to
  • Bốn chấm ở hàng dưới cùng dùng cho độ chi tiết từng phút; ví dụ “ten past eleven” kèm 3 chấm nghĩa là 11:13

Có kèm file nguồn OpenSCAD để bạn chỉnh bố cục chữ và icon rất dễ, ví dụ đổi sang ngôn ngữ khác hoặc dùng icon khác.

Nếu máy in của bạn được căn chỉnh (calibrate) chuẩn, bạn có thể in theo kiểu để chữ và icon gần như “tàng hình” hoàn toàn khi không sáng.

Cũng có thể chạy không cần Home Assistant, nhưng khi đó bạn sẽ phải tự viết code.

Để thay icon, bạn chỉ cần tải các icon dạng SVG bạn muốn từ https://pictogrammers.com/library/mdi/, đặt chung thư mục với file .scad và tham chiếu (reference) trong file. Kích thước và vị trí sẽ chạy đúng “out-of-the-box”. Bạn có thể thêm tối đa 6 icon, nhưng phần hiển thị phút ở dưới có thể làm hơi chật, nên khuyến nghị 4 icon.

Phần cứng bổ sung bắt buộc

  • Dây LED WS2812 Addressable RGB loại 60 LEDs/m. Bạn cần 121 LEDs, tức hơi hơn 2m; tuy nhiên nếu chịu hàn thêm một chút thì có thể tiết kiệm vài LED (xem phần Assembly Instructions)
  • Một microcontroller chạy được ESPHome (vd: D1 mini)
  • Mỗi loại 4 cái: ốc M3, đai ốc (nut), và long đền (washer). Mình dùng ốc 10mm, nhưng tầm ~8 đến 16mm là ổn.
  • Một tấm giấy can (tracing paper) hoặc vật liệu tương tự để làm diffuser
  • Dụng cụ hàn
  • Một miếng perfboard 40mm x 60mm. Không bắt buộc tuyệt đối, nhưng nếu không có thì bạn sẽ cần chỉnh lại cơ chế gắn microcontroller
  • Tùy chọn: một ít đầu nối JST hoặc tương tự (1 đầu 2 dây, 1 đầu 3 dây)
  • Nếu máy in của bạn không in được first layer thật hoàn hảo, bạn có thể cần film dán kính xe (automotive tinting foil) hoặc tương tự để làm chữ lúc tắt đèn khó thấy hơn
  • Về mặt kỹ thuật, LED strip nên được điều khiển bằng logic 5V. Nhiều microcontroller (bao gồm D1 mini) dùng logic 3.3V. Thường 3.3V vẫn đủ để chip LED nhận là mức high, nhưng nếu không chạy thì bạn có thể thử LED strip khác hoặc thêm mạch logic level shifter vào mạch
  • Không bắt buộc nhưng hữu ích cho test và cân chỉnh:
    • Multimeter
    • Breadboard

Gợi ý filament

Tấm stencil chứa chữ lý tưởng nhất nên dùng loại filament không quá đục, vì bạn muốn LED xuyên qua chỉ 1 lớp filament đen. Mình thấy PLA đen của Elegoo chạy rất tốt và giá cũng rẻ.

Hướng dẫn in

  • Không cần supports cho bất kỳ phần nào của model
    • Một số chi tiết dùng lớp bridging “hy sinh”, in xong bạn có thể chọc một cây đinh xuyên qua để lấy ra
  • Một số phần đã tích hợp sẵn brim trong model. Brim được canh để vừa bed có chiều sâu 210mm. Nếu bed của bạn sâu hơn, bạn có thể chỉnh printer_max_y để brim dày/đã hơn
  • Trước tiên bạn nên in 2 chi tiết test để chắc chắn tolerance và chất lượng first layer đạt:
    • nut_test.stl là housing cho một con đai ốc M3. Khi slice, đặt print pause ngay trước khi phần khoét đai ốc bị lấp, rồi nhét đai ốc vào. Nếu tolerance bị chật/lỏng, chỉnh trong file OpenSCAD rồi thử lại
    • stencil_test.stl để test tấm cho ánh sáng xuyên qua hiển thị chữ, đặc biệt là first layer
      • File này có first layer height 0.15mm, nhớ set đúng trong slicer
      • In ra, đảm bảo in mượt; khi đã in xong phần đó, kiểm tra LED có xuyên qua đủ sáng không
        • Lưu ý: nhiều khả năng bạn sẽ không chạy LED ở full brightness được trừ khi cấp nguồn riêng cho LED tách khỏi microcontroller (xem bên dưới)
      • Nếu chữ không đủ sáng, thử chỉnh “stencil_first_layer_height” trong file OpenSCAD (nhớ set first layer height tương ứng trong slicer) và/hoặc đổi filament.
      • Lưu ý: nếu lớp xuyên sáng nhìn bị lồi lõm/không đều, thì gần như chắc là với mức calibration hiện tại, máy in của bạn khó in đúng cả tấm. Nếu không làm first layer đủ đẹp, bạn có thể cân nhắc set stencil_first_layer_height = 0, đồng thời thay font sang loại phù hợp cho stencil (tức là chữ không có “lỗ” bị rời/đứt đoạn)
  • Tất cả chi tiết nên in đúng orientation gốc của file
  • Phần frame cần chèn pause trong slicer ngay trước khi các khe chứa đai ốc bị phủ kín để bạn nhét đai ốc vào trong lúc đang in

Hướng dẫn cấu hình ESPHome

  • Có sẵn một file yaml và wordclock.h; file .h thì không cần chỉnh. Printables không cho upload file .yaml hoặc .h, nên các file đó sẽ bị thêm đuôi .txt ở cuối, bạn cần xóa đuôi này.
  • Nếu bạn có chút kinh nghiệm với ESPHome, việc chỉnh code để hiển thị thông tin của bạn sẽ khá đơn giản
    • Trong Home Assistant, bạn cần định nghĩa một số sensor để cung cấp dữ liệu muốn hiển thị. Dùng template sensors để “cô đọng” dữ liệu sẵn có cũng rất hữu ích. Ví dụ mình có các sensor trong Home Assistant về tải phấn hoa (pollen) theo từng loại, hoặc dự báo nhiệt độ theo giờ; mình dùng template sensor để tạo tổng có trọng số theo mức độ mình dị ứng từng loại, và để lấy nhiệt độ thấp nhất trong 24h tiếp theo
    • Với giá trị dạng số, có các ngưỡng (threshold) quyết định lúc nào đổi màu (tắt → xanh lá → vàng → cam → đỏ → tím)
    • Với sensor dạng text, bạn có thể tạo một map để gán giá trị với màu
  • Nếu bạn chỉnh layout chữ trong OpenSCAD, ví dụ đổi ngôn ngữ, bạn sẽ cần chỉnh mapping từ các từ sang index và length dọc theo LED strip. Lưu ý là do cách nối LED, cứ mỗi dòng xen kẽ sẽ đếm từ phải sang trái

Hướng dẫn lắp ráp

Dùng hình đính kèm để tham khảo theo các bước này.

  • Cắt LED strip thành các đoạn mỗi đoạn 11 LED và dán vào các rãnh trên led_plate.stl
    • Nếu bạn không đủ 121 LED, có thể bỏ các LED ứng với các chữ trong ma trận mà không thuộc từ nào hoặc icon nào, rồi nối bắc cầu các đoạn đó bằng dây. Tuy nhiên sẽ cần chỉnh lại offset trong code
  • Hàn dây để nối các đoạn LED theo kiểu zig-zag bắt đầu từ góc trên trái và kết thúc ở góc dưới phải (tức là mối nối giữa hàng 1 và hàng 2 sẽ nằm bên phải khi bạn nhìn vào mặt LED; mối tiếp theo bên trái, v.v.)
  • Hàn thêm dây ở góc trên trái và góc dưới phải để lát nữa nối về microcontroller. Nếu bạn dùng đầu JST để nối các dây này với dây từ microcontroller thì sau này tháo lắp sẽ dễ hơn, nhưng hàn thẳng cũng được (nếu hàn thẳng thì chừa dây dài hơn chút cho dễ lắp)
    • 3 dây từ phía trên, 2 dây từ phía dưới (tức là bỏ dây data ở phía dưới)
      • Bơm nguồn (power injection) từ cả hai phía giúp giảm sụt áp dọc theo LED strip, nhưng không bắt buộc
    • Nhớ đánh dấu dây để biết dây nào là dây nào
Xen kẽ - Cân chỉnh độ sáng

Trừ khi bạn định cấp nguồn LED bằng nguồn rời, bạn nên giới hạn độ sáng để đảm bảo không bao giờ kéo quá ~300–400mA từ chân 5V của microcontroller (tùy trường hợp, nên xem datasheet cho chắc). Với cấu hình có sẵn, tối đa chỉ khoảng ~30 LED sáng cùng lúc, nên bạn muốn giới hạn dòng khoảng ~10mA/LED

  • Cài ESPHome lên microcontroller bằng file yaml đính kèm. Nhớ upload wordlock.h vào esphome/includes/
    • Để test ban đầu, giảm brightness trong int brightness = 160; trong file yaml xuống giá trị thấp hơn, ví dụ 50
  • Dùng breadboard để nối các dây từ LED vào 5V, GND và một chân data (mình dùng D4; nếu bạn dùng chân khác thì nhớ chỉnh code tương ứng) trên microcontroller
    • Set sao cho bạn có thể đo dòng lấy từ cổng 5V bằng multimeter
  • Cấp nguồn cho microcontroller. Khi nó hiển thị giờ (giả sử mọi thứ ổn), ghi lại dòng lấy từ chân 5V rồi chia cho số LED đang sáng. Sau đó tăng brightness và nạp lại qua ESPHome. Lặp lại cho tới khi đạt độ sáng vừa ý mà không kéo quá nhiều dòng. Mình dùng 160 thì ổn, nhưng còn tùy LED strip bạn dùng.
Lắp ráp - tiếp tục
  • Hàn microcontroller lên perfboard. Nếu dùng connectors, hàn dây của connectors lên perfboard luôn. Bạn cần 2 dây 5V, 2 dây GND và 1 dây data.
  • Đặt tấm stencil vào frame cẩn thận. Đảm bảo phía dưới frame không có vật nhọn vì bề mặt stencil có thể hơi dễ hư. Mặt mịn quay xuống, tức là hướng ra phía ngoài
  • Cắt diffuser theo kích thước, nhớ khoét chỗ cho các trụ ốc, rồi đặt lên trên stencil
  • Đặt các baffles lên trên
  • Nếu bạn hàn dây từ LED strip trực tiếp vào perfboard thì làm ngay lúc này, trước khi đặt LED plate. Nếu dùng connectors thì đảm bảo đã hàn xong hết, còn cắm nối có thể để sau
  • Đặt LED plate lên trên baffles. Khi lật frame úp xuống, 3 sợi dây sẽ đi ra ở góc trên phải
  • Lấy bỏ các lớp “hy sinh” trong lỗ của wall mount. Đặt wallmount cạnh vị trí 3 sợi dây đi ra và bắt bằng 2 ốc M3 + 2 long đền
    • Nếu lớp hy sinh ngay trên đai ốc chưa được làm sạch kỹ, có thể cần dùng lực để đẩy ốc xuyên qua, nhưng vẫn sẽ ổn
  • Lấy 2 phần của giá đỡ microcontroller (có thể cần cạo lại các chỗ khoét bằng dao mổ/scalpel tùy bridge in ra đẹp hay không), kẹp microcontroller ở giữa, rồi bắt vào 2 lỗ như bên trên
  • Nếu bạn dùng connectors cho dây, giờ có thể cắm nối
  • Xong rồi :-)

Giấy phép

Tác phẩm này được cấp phép theo

Creative Commons — Attribution — Noncommercial — Share Alike

CC-BY-NC-SA

Yêu cầu ghi công
Remix & phái sinh Được phép
Sử dụng thương mại Không được phép

File mô hình

TẤT CẢ FILE MÔ HÌNH (17 Tập tin)
Đang tải files, vui lòng chờ...
Vui lòng đăng nhập để bình luận.

Chưa có bình luận nào. Hãy là người đầu tiên!

Vui lòng đăng nhập để khoe bản in của bạn.

Chưa có bản in nào được khoe. Hãy là người đầu tiên!

Remix (0)