Shelf Clock – Đồng hồ kệ (remix DIY-Machines)

Shelf Clock là mẫu đồng hồ kệ remix từ ý tưởng trên Youtube, dùng ESP32 và LED WS2812B, có nhiều chế độ hiển thị (giờ/ngày/nhiệt độ/visualizer), kèm danh sách STL cần in và hướng dẫn lắp ráp cơ bản.

👁️
2.1K
Lượt Xem
❤️
64
Lượt Thích
📥
114
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ả

Đây là cái đồng hồ mình làm cho con gái mình, remix lại từ một ý tưởng mình từng thấy trên Youtube một lần (https://www.youtube.com/c/DIYMachines/videos).

Code của mình ở đây gần như chẳng giống gì với ý tưởng gốc.
(code gốc ở https://github.com/DIY-Machines/DigitalClockSmartShelving)
Nhiều ý tưởng tính năng lấy từ https://github.com/helpquick/7-Segment-WiFi-Clock
Nó cũng là một visual audio meter.
https://www.youtube.com/watch?v=hknXNxCtM_E

Nó có rất nhiều tính năng, gồm có:
Clock Mode
Date Mode
Temperature Mode
Humidity Mode
Nhiều chế độ Lightshow (kiểu như hiển thị Snake và Matrix)
Nhiều chế độ Music Visualizer
Scoreboard
Count-down Timer
Count-up Timer
New Years Mode
Text Scroller
Web Interface.

Nó dùng phần cứng sau:
LOLIN32 featherboard (ESP-WROOM-32)
DS3231 AT24C32 IIC RTC Clock Module
Cảm biến nhiệt độ DHT11
Cảm biến điện trở quang (Photosensitive Resistance Sensor)
SparkFun Sound Detector
BTF-LIGHTING WS2812B RGB 5050SMD (cái của mình dùng 271 LED, nhưng có thể đổi)
Mình dùng buzzer máy tính 5V làm loa.
Transistor NPN BC548 với điện trở 1k hoặc 2.2k (xin lỗi mình quên cái nào) làm ampli 5V đơn giản.

Mình làm cả đống cài đặt, và có khả năng lưu thành preset trong NVS.

Do nó xài quá trời dung lượng NVS cho Preferences và AutoConnect nên mình phải tạo một partition scheme mới cho ESP32 4M: dời NVS lên ngay trước SPIFFS rồi cắt bớt một ít dung lượng (cách này dễ hơn là cố làm cho nó boot App từ vị trí bộ nhớ khác (không phải 0x10000) sau khi tăng size NVS gốc). Mình có kèm file csv và text cho phần này trong parttition-info.txt

Lưu ý: Mình không viết C, cũng không viết Javascript hay CSS luôn. Nhưng hễ có cái gì muốn làm thì thường mình chắp vá được bằng cách dựa vào vô số ví dụ của những người giỏi hơn ngoài kia. Code này không hẳn là “code của mình”, mà là mình tìm hiểu rồi trộn khoảng 50 ví dụ lại với nhau; chẳng có phần nào viết tối ưu hay cho đàng hoàng. Mình xài global variables tùm lum, không giải phóng bộ nhớ, thậm chí còn không init biến đúng cách. Mình biết đủ để hiểu là mình làm sai khá nhiều thứ. Mình cứ hack tới khi nó chạy được, mà đa phần là vừa đủ chạy thôi. Nếu bạn thích code này và thật sự rành, cứ thoải mái làm lại cho đúng bài bản. Nếu bạn chỉ ra giúp mình chỗ nào mình sai nặng thì cứ chỉ cách đúng, mình sẽ thử sửa.
Tổng cộng gần 7000 dòng (kèm luôn code trang web), nên mong mọi người “nương tay” chút cho một tay ngang không được đào tạo. :)

Mình có kèm các STL đã chỉnh sửa mà mình dùng để làm cái của mình: cơ bản là bản nhỏ hơn của DIY-Machines và nhiều món hơn, và mình thêm diffuser rời thay vì bản multi-filament của họ, để có thể in trên máy in 3D một màu khổ nhỏ của mình (210x210mm). Các bản 3D mình làm bằng TinkerCAD ở đây: https://www.tinkercad.com/things/fyxXr27PCph
Các ống bọc kệ (shelf sleeves) mình in bằng bamboo PLA, loại này nghẹt nozzle liên tục nên nếu bạn không cần nó giống gỗ thật thì né ra sẽ đỡ cực nhiều.
Diffuser LED in bằng PLA trắng.
Phần khung/scaffolding in bằng bất kỳ PLA nào mình có sẵn.

In số lượng mỗi món như sau:
1 - Placement_template.stl (sẽ fit trong không gian 1055mm x 320mm)
37 - Lid-diffuser.STL
37 - LED Mount.STL
36 - Scaffolding.STL
1 - Scaffolding - Arduino Housing.STL
10 - Sleeve1-Bottom & Sides.STL
7 - Sleeve2-Top with Light.STL
12 - Sleeve3-Vertical Middle.STL
7 - Sleeve4-Middle with Light.STL
1 - Sleeve5-For Ardunio.STL hoặc Sleeve5-For Ardunio with Mic-hole.STL
1 - Back-Cover.STL
1 - Back-Cover-plug.STL
1 - Arduino-Mount Insert.STL
1 - Corner Stand-off Legs.STL

In bộ này sẽ lâu kinh khủng, cỡ 300+ giờ, nên nhớ cân nhắc coi có thật sự muốn dành cả tháng tới để làm cái này không.

Hướng dẫn lắp ráp:
In hết tất cả chi tiết.
Cắt LED thành từng dải 7 LED.
Thiếc (tin) cả 6 đầu dây trên mỗi dải (lát nữa sẽ nhẹ việc hơn rất nhiều).
Gắn các miếng scaffolding lên một tấm ván gì đó (mình có làm sẵn template khoan, dùng nó thì sẽ đặt vừa trên tấm 1055 x 320mm, không có gờ). Nhớ để phần lõm cho đèn drop lights hướng xuống.
Dán thanh gắn LED lên scaffolding bằng keo nến hoặc super glue.
Dán dải LED lên thanh gắn bằng keo nến hoặc super glue.
Đấu dây các dải LED với nhau theo hướng dẫn trong file LEDs.png (trong diagrams.zip): nhớ nối 5V với 5V và GND với GND, và để ý chiều mũi tên trên dải khi nối Data từ dải này qua dải kia.
Mình khuyên nên chạy thêm dây 5V và GND bổ sung tới từng segment để giảm sụt áp; sụt áp sẽ biểu hiện bằng việc càng về xa càng mờ, tới LED cuối cùng thì bị ngả vàng trong khi đáng ra phải là màu trắng.
Lắp mạch sao cho nhét vừa vào segment góc trên-bên phải; mình làm được thì bạn cũng làm được, hoặc chia qua các segment khác nếu cần, nhưng nhớ đi dây đúng theo rãnh đi dây để sleeve gài vào hết cỡ.
Khoan một lỗ phía sau, gắn nắp che dây.
Gắn chân stand-off.
Gắn French cleat để treo lên tường.
Bạn sẽ thấy AutoConnect lần chạy đầu tiên xuất hiện như một thiết bị Ad-Hoc riêng (esp32ap) trong danh sách WiFi của điện thoại; bạn dùng nó để cấu hình WiFi ban đầu (cho nó join vào WiFi nhà).
Nếu router của bạn “dễ tính” và cho phép MDNS, bạn sẽ truy cập được ESP32 tại http://shelfclock sau khi AutoConnect xong và reboot; nếu không thì bạn phải tự tìm IP mà nó được cấp. Bản test mới nhất của phần mềm sẽ cố gắng scroll IP cho tới khi bạn đổi setting đó.

Khoảng cách giữa diffuser LED (in 100% infill) và LED giúp xử lý phần lớn hotspot từ LED. Đổi lại sẽ bị hắt sáng (bleed through) qua các kệ, nên nếu bạn coi hình có 9 ảnh nhỏ, sẽ thấy cách mình xử lý: xịt sơn đen (chỉ khoảng 1 inch tính từ mép xuống). Mình làm một cái jig bằng bìa carton để xịt 37 cái cho đỡ cực. Mình cắt một lỗ vừa khít để ống sleeve luồn qua miếng carton, rồi dán băng keo sơn màu xanh (blue painters tape) phủ lên lỗ (và phủ lên cả mép sleeve). Dùng dao rọc thật bén, mình cắt bỏ phần băng keo phía trong, chỉ chừa lại viền, rồi xịt sơn (nhớ che luôn các lỗ droplight để tránh sơn bay từ trong ra ngoài). Mỗi miếng băng keo che như vậy mình dùng được khoảng 3–4 lần là bắt đầu dính ngược sang sleeve nên phải cắt cái mới. Lúc đầu mình thử nhiều thứ như băng keo ống gió kim loại 3M, nhưng cuối cùng sơn xịt đen mờ (matte black) là dễ nhất.

Lập trình ESP32 nằm ngoài phạm vi hướng dẫn này, nhưng bạn có thể tự tìm hiểu; mình có kèm file csv partition tùy chỉnh và các dòng cấu hình cần thiết cho những phần khác, cứ research thêm là ra.
Mình dùng Arduino IDE 1.89, và các thư viện + phiên bản được liệt kê trong file ảnh libraries.png (trong diagrams.zip).
Nhưng nhớ là bạn cần tạo một bản ESP32 mới có kiểu partition khác (mình có kèm các file và setting cần thiết: default_nvs.csv & partition-info.txt).
Trước hết thêm build environment "https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json" và libraries, sau đó sửa file "C:\Users\username\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\boards.txt" và bỏ file csv vào đúng vị trí trong partitions.txt, restart IDE, chọn board mới "ESP32 Dev Module", chọn partition scheme mới "Default (512KB NVS) (1.3MB APP/1.0MB SPIFFS)", compile rồi upload code, sau đó đẩy data files bằng ESP32 Sketch Data upload.
Cũng lâu rồi nhưng hình như "ESP32 Sketch Data upload" là một add-in cho IDE cần cài thêm, ESP32FS thì phải.

Future WIP:
Mình có làm một bản PlatformIO và VScode chưa test 100% trên toàn bộ phần cứng, nhưng sẽ dễ cấu hình ESP hơn; nó sẽ tự thêm các libraries cần thiết và chỉnh partitions. https://github.com/MacGyverr/ShelfClock-v2
Mình cũng làm một PCB custom cho bản mới (giả sử bạn dùng 38 Pin ESP-32D Dev Board) để lắp ráp dễ hơn, mình vẫn đang test; khi nào chắc ổn mình sẽ kèm gerber để bạn đặt in ở hãng PCB nào cũng được, tầm $2. Nó cũng dùng INMP441 rẻ thay cho mạch audio SparkFun mắc tiền.

Các link mình biết là mình đã lấy ví dụ code từ đó:
https://github.com/DIY-Machines/DigitalClockSmartShelving
https://github.com/helpquick/7-Segment-WiFi-Clock
https://github.com/FastLED/FastLED/wiki/Overview
https://github.com/mattncsu/FastLED_examples
http://84.107.155.75/forum/index.php?action=view&id=300 (tất cả bài nhạc RTTL)

Mình upload bộ code viết “hơi tệ” của mình "ShelfClock-github.zip" ở đây: (đã cập nhật, nhưng tự chịu rủi ro khi dùng)
https://github.com/MacGyverr/ShelfClock
Code sẽ làm nhiều người rối vì mình có các segment “giả” cho phần scrolling, và về cơ bản mình “remap” LED để làm các kiểu view và chế độ hiển thị khác nhau. (lưu ý thật ra chỉ có 4 segment đầy đủ; để hiển thị đủ 7 segment hoàn chỉnh thì phải thêm khoảng 100 LED nữa và nhìn sẽ kỳ)

Mình upload video ở đây. https://www.youtube.com/watch?v=FABxgoq68Fs&list=PLkV6jp60iXvjmrqkrMTHSjlMShLybMzkE

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 (19 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)