Arduino UNOで作るベルリンクロック – DIY LEDマトリクス時計
ベルリンクロックとは
ベルリンクロック(Mengenlehreuhr、セット理論時計)は1975年にベルリンで設置された世界初のデジタル時計と言われています。4段のランプで時刻を表現します:
- 第1段(赤・4灯): 5時間単位(1灯=5時間)
- 第2段(赤・4灯): 1時間単位(1灯=1時間)
- 第3段(黄・11灯): 5分単位(1灯=5分、3灯ごとに赤で15分/30分/45分表示)
- 第4段(黄・4灯): 1分単位(1灯=1分)
- 最上部の丸いランプ: 秒ごとに点滅
例:第1段2灯+第2段3灯=13時、第3段6灯+第4段2灯=32分 → 13:32
必要な部品
| 部品 | 数量 | 備考 |
|---|---|---|
| Arduino UNO | 1 | |
| MAX7219(LEDドライバIC) | 1 | 8桁7セグ/マトリクス驅動用。単体ICまたはブレークアウト基板 |
| RTCモジュール(DS1307等) | 1 | I2C接続(A4=SDA, A5=SCL) |
| 5mm黄色LED | 13 | 5時間・5分・1分表示用 |
| 5mm赤色LED(またはRGBの赤) | 11 | 1時間・15/30/45分表示用 |
| 抵抗 10kΩ | 1 | MAX7219のISETピン用(輝度調整) |
| 抵抗 220Ω | 1 | 秒表示LED用 |
| ユニバーサル基板・ブレッドボード・配線材 | 適宜 |
配線概要
MAX7219接続
- Pin 1 (DIN) → Arduino D12
- Pin 12 (LOAD/CS) → Arduino D10
- Pin 13 (CLK) → Arduino D11
- Pin 4, 9 → GND
- Pin 19 → VCC (5V)
- Pin 18 (ISET) → 10kΩ抵抗経由でVCC(輝度設定)
LEDマトリクス配線
MAX7219の DIG0〜DIG4 を各行のコモン(アノード)に、SEG A〜G, DP を各列(カソード)に接続。5分表示行は11個あるため DIG1 と DIG2 で分割駆動。秒表示LEDは Arduino D13 に 220Ω 抵抗経由で直結。
RTC (DS1307) 接続
- SDA → A4, SCL → A5, VCC → 5V, GND → GND
- バックアップ用コイン電池(CR2032)必須
ソフトウェア
使用ライブラリ
LedControl.h(wayoda/LedControl) - MAX7219制御Wire.h- I2C通信(RTC用)
スケッチのポイント
- RTCから時刻読み取り(BCD→10進変換)
- 時間・分をベルリンクロック形式(5時間、1時間、5分、1分)に分解
- 各行の点灯パターンをビットマップ(バイト)で生成
LedControl.setRow()で MAX7219 の各ディジット(行)に転送- 秒LEDは1秒ごとにトグル(割り込み不使用、ループ内でミリ秒チェック)
- 分が変わった時のみ表示更新(無駄な通信削減)
コード抜粋(核心部分)
// 時間分解
int vijfuren = hour / 5; // 5時間単位
int eenuren = hour % 5; // 1時間単位
int vijfmin = minute / 5; // 5分単位 (0-11)
int eenminuut = minute % 5; // 1分単位
// 5分行は11個なので2ディジットに分割
// digitaal() 関数で 0-11 をビットパターンに変換
lc.setRow(0, 4, vijfuren); // DIG4: 5時間
lc.setRow(0, 3, eenuren); // DIG3: 1時間
lc.setRow(0, 1, vijfmin_low); // DIG1: 5分下位
lc.setRow(0, 2, vijfmin_high); // DIG2: 5分上位
lc.setRow(0, 0, eenminuut); // DIG0: 1分
製作のコツ・トラブルシュート
- MAX7219のセグメント配線順序に注意:DPがMSB、AがLSB側(データシート確認必須)
- ISET抵抗は 68kΩ 程度で安定(20kΩだと発熱で消灯する事例あり)
- 赤・黄LEDの順方向電圧差で輝度差が出る場合、直列抵抗で調整
- RTCの初期時刻設定用スケッチを別途用意すると便利
- ユニバーサル基板への実装時、配線ミス防止のためソケット使用推奨
拡張アイデア
- 日付・曜日表示モード追加(RTC情報活用)
- 光センサーで自動輝度調整
- NTP同期対応(ESP32等へ移植)
- アクリルケース・レーザーカットパネルで製品化
参考資料
- Wikipedia: Mengenlehreuhr
- MAX7219データシート
- LedControlライブラリGitHub
製造プロセス
- 鳩時計:歴史、職人技、現代への進化
- 砂時計:歴史、職人技、現代的魅力
- 時計の進化:日時計から精密クォーツ時計まで
- Rpibot:組み込みシステム学習向け低コスト拡張性モバイルロボット
- Arduino POVクロック:残像効果で浮かび上がるLED時計を自作する
- インフィニティミラー時計:終わりなき美しさと正確な時刻の融合
- RCおよびRL回路の時定数計算をマスターする
- 信頼性の高いRTL検証のためのVerilogシミュレーション技術
- Verilogクロックジェネレータ:設計と実装ガイド
- Pythonのtime.sleep()をマスター:ベストプラクティス、マルチスレッド、実例
- Python 日付と時刻の完全マスター:実践的ガイド