用 Arduino UNO 制作柏林时钟 – DIY LED 矩阵时钟
组件与物料
| 组件 | 数量 | 备注 |
|---|---|---|
| Arduino UNO | 1 | |
| MAX7219 LED 驱动芯片 | 1 | 常用于 LED 矩阵模块 |
| RTC 实时时钟模块 (DS1307) | 1 | |
| 5mm 黄色 LED | 13 | 小时/分钟指示 |
| 5mm 红色 LED | 11 | 可用 RGB LED 替代 |
| 电阻 10kΩ | 1 | MAX7219 电流设定 |
项目介绍
柏林时钟 (BerlinUhr / Mengenlehreuhr) 诞生于 1975 年,是世界上第一款数字时钟。它用四行灯光以集合论方式显示时间:
- 第 1 行 (红) – 5小时制,每灯代表 5 小时
- 第 2 行 (红) – 单小时,每灯代表 1 小时
- 第 3 行 (黄) – 5分钟制,每灯代表 5 分钟 (共 11 灯)
- 第 4 行 (黄) – 单分钟,每灯代表 1 分钟
- 顶部圆灯 – 每秒闪烁一次
例如:2盏5小时灯 + 3盏单小时灯 + 6盏5分钟灯 + 2盏单分钟灯 = 13:32。
电子电路设计
- Arduino 通过 I2C (A4=SDA, A5=SCL) 读取 DS1307
- 4 根信号线驱动 MAX7219:DataIn=D12, CLK=D11, LOAD=D10
- 板载 LED (D13) 作为秒闪烁指示
- MAX7219 引脚连接:
Pin 4,9 → GND; Pin 19 → VCC;
Pin 18 (ISet) 接 68kΩ 电阻限流;
Pin 1 (DIN) ← D12; Pin 12 (LOAD) ← D10; Pin 13 (CLK) ← D11 - MAX7219 输出端:DIG0~4 驱动 5 行 LED 共阴,SEG A~G+DP 驱动列共阳 (通过 LedControl 库发送字节)
LED 排布与接线
原理图展示 LED 矩阵共阴/共阳接法。秒指示 LED 直连 D13 并串联 220Ω 电阻。
代码逻辑
- 使用
LedControl库驱动 MAX7219 readTime()从 DS1307 读取 BCD 编码时间并转十进制printTime()将时分转换为柏林时钟编码:
vijfuren = hour/5(5小时位数)
eenuren = hour%5(单小时位数)
vijfmin = minute/5(5分钟位数,需拆分两字节)
eenminuut = minute%5(单分钟位数)digitaal()将 0~11 映射为 8 位列模式 (荷兰语变量名)- 主循环每秒翻转 D13 LED,每分钟更新显示
代码
完整代码已内嵌,依赖 LedControl 库 (GitHub: wayoda/LedControl)。
原理图
Fritzing 面包板布局图与原理图,展示 MAX7219 与 LED 矩阵的详细接线。
制造工艺
- 布谷鸟钟:历史、工艺与现代演变
- 沙漏:历史、工艺与现代魅力
- 计时演进史:从日晷到精密石英表的技术跨越
- Rpibot:面向嵌入式系统学习的低成本可扩展移动机器人平台
- Arduino POV 时钟:自制视觉暂留 LED 显示器
- DIY Arduino单词时钟 – 极简优雅的实时文字显示
- 无限镜面时钟:极致优雅与精准计时的融合
- 掌握RC与RL电路时间常数计算
- Verilog 仿真技术指南:构建可靠 RTL 验证环境
- Verilog 时钟发生器设计与实现指南
- 精通 Python time.sleep():最佳实践、多线程与实战案例
- Python 日期时间处理实战:time 与 calendar 模块完全指南