高精度LEDマトリクスクロック:DS3231 RTC・BME280環境センサー・BH1750光センサー・ESP-01 NTP同期搭載
必要な部品と材料
| 部品 | 数量 | 備考 |
|---|---|---|
| Arduino Nano R3 | 1 | |
| DS3231M RTCモジュール | 1 | 安価なものでOK。充電抵抗除去推奨 |
| BME280環境センサー(温湿度・気圧) | 1 | |
| BH1750光センサー | 1 | 自動輝度調整用 |
| MAX7219 32x8 LEDマトリクス | 1 | |
| 10µFコンデンサー | 2 | |
| ESP8266 ESP-01 | 1 | NTP時刻同期用(オプション) |
| LM3940IT-3.3(3.3V LDO) | 1 | ESP-01用電源 |
| レベルシフターボード | 1 | ESP-01用(5V⇔3.3V変換) |
プロジェクト概要
Nick氏のLED Word Clockに触発されて制作。彼のコードをベースに、複数センサー追加、ボタン操作、ESP-01によるNTP同期機能を実装しました。
主な機能:
- BH1750: 周囲光に応じて自動輝度調整、夜間は表示OFF
- BME280: 温度・湿度・気圧表示
- ESP-01: pool.ntp.orgからUNIX時刻取得。未使用時はWiFiスリープで省電力
- ボタン操作: 光センサー設定、フォント切替、NTP/DST/UTC設定が可能
- フォント: 6種類追加(dotmatrixtool.comで作成)
- ワードクロック拡張: 表示単語増加、PROGMEM活用でRAM節約
- DST/UTC/BST自動計算: メニューで有効/無効・オフセット設定可能
- EEPROM保存: 設定は電源断後も保持
コードリポジトリ: https://github.com/Ratti3/miniclock
ESP-01 NTP同期の動作ログ例
Arduino : Sent NTP request to ESP01
ESP01 : NTP request received from Arduino [attempt 1 of 3]
Connecting to SSID: TheInternets....connected
SSID: TheInternets, IP Address: 192.168.0.135
Signal Strength (RSSI): -42 dBm
Sending NTP packet to: 195.195.221.100 [attempt 1]
Sending NTP packet to: 195.195.221.100 [attempt 2]
UNIX1562848457
Disabling WiFi....ok
ケース制作中。光センサーの閾値はご自身の環境に合わせて調整してください(開発時は窓際の明るい環境で調整)。



...(多数の製作過程写真)...
配線まとめ
DS3231, BH1750, BME280: SCL = A5, SDA = A4, VCC = 3.3V
LEDマトリクス: CLK = D11, CS = D10, DIN = D12, VCC = 5V
スイッチ: D2=メニュー, D3=日付/+, D4=温度/-, D5=表示オプション
ESP-01(オプション): D7=ESP_TX, D6=ESP_RX
主な設定パラメータ(EEPROM保存対応)
// 時計設定
byte intensity = 2; // [200] 初期輝度 0-15
byte clock_mode = 0; // [201] 表示モード
bool random_mode = 0; // [206] ランダム表示モード
bool random_font_mode = 0; // [207] ランダムフォント
bool ampm = 0; // [208] 12/24時間制
// 光センサー設定
byte display_mode = 5; // [202] 表示ON/OFFモード
bool auto_intensity = 1; // [209] 自動輝度調整
byte hour_off_1 = 21; // 消灯判定時刻1
byte hour_off_2 = 22; // 消灯判定時刻2
byte hour_off_3 = 23; // 消灯判定時刻3
// フォント設定
byte font_style = 2; // [203] 大きいフォントスタイル
byte font_offset = 1; // [204] フォントオフセット
byte font_cols = 6; // [205] フォント列数
// DST/NTP/UTC設定
bool dst_mode = 1; // [210] DST有効
bool ntp_mode = 1; // [211] NTP有効
byte ntp_adjust = 1; // NTP取得後の調整秒数
int8_t utc_offset = 0; // [213] UTCオフセット(時間)
byte ntp_dst_hour = 2; // 日次同期実行時刻(DST使用時は2時推奨)
byte ntp_max_retry = 3; // NTPリトライ回数
byte ntp_timeout = 45; // タイムアウト秒数(×リトライ回数)
// WiFi設定(ESP-01にシリアルで渡す)
const byte ssid_len = 8;
const char ssid[] = "YourSSID";
const byte pass_len = 12;
const char pass[] = "YourPassword";
// SSID+パスワード合計72文字以内
製造プロセス
- Arduino で作るイスラム教礼拝時刻付きリアルタイムクロック
- ArduinoでBluetooth経由でLEDを制御 – シンプルDIYガイド
- アナログ風LED POVクロック – Arduino Nanoで作る残像時計
- ホットグルー棒で作るLEDマトリックスランプ - カラフルなディスプレイを自作
- Windows 10 CortanaでBluetooth経由でArduinoのLEDを制御
- Arduino Nanoで作る8×8 LEDマトリックスのフリップクロック - 自作リアルタイムクロック
- Arduino Unoで8×8 LEDマトリックスを制御:ステップバイステップガイド
- GPS搭載高精度クロック - 安価で信頼性の高い時計製作
- Bluetooth対応8×8 LEDマトリックス スクロール文字表示 Arduinoプロジェクト
- Arduino MegaとMAX72XX LEDマトリックスで作るクラシック「アステロイド」ゲーム
- DS1302 RTCとArduino UNOで作る信頼性の高い目覚まし時計