Arduinoで作る日付・時刻付き高信頼クロック:RTC + I2C LCD + 3ボタン設定
概要
DS1307/DS3231等のRTC(リアルタイム・クロック)モジュールとI2C接続LCDを用いた、実用的な日付・時刻表示クロックです。3つのプッシュ・ボタンでコード書き換えなしに時刻・日付を設定可能。多くの自作プロジェクトのベースとして長年改良を重ねてきた設計です。
必要なパーツ
- Arduino UNO ×1
- I2Cモジュール付き16×2 LCD(白/青) ×1
- RTCモジュール(DS1307/DS3231等) ×1
- タクト・スイッチ 12mm ×3(メニュー/増/減)
- 10kΩ抵抗 ×3(プルダウン用)
- ジャンパー・ワイヤー、ブレッドボード
接続図(I2Cバス共有)
LCDとRTCは同一I2Cバス(A4=SDA, A5=SCL)を共有。プルアップ抵抗はモジュール基板上に実装済みのものを利用。
| 信号 | Arduinoピン | 備考 |
|---|---|---|
| SDA | A4 | LCD & RTC共通 |
| SCL | A5 | LCD & RTC共通 |
| ボタン1 (Menu) | D2 | 10kΩでGNDへプルダウン |
| ボタン2 (Up) | D3 | 10kΩでGNDへプルダウン |
| ボタン3 (Down) | D4 | 10kΩでGNDへプルダウン |
使用ライブラリ
Wire.h(Arduino標準)RTClib.h(Adafruit等)LiquidCrystal_I2C.h
動作ロジック
- 通常時:RTCから日時を取得し、LCDに「YYYY/MM/DD HH:MM:SS」形式で表示
- Menuボタン押下で設定モードへ遷移
- 設定モードではMenuボタン連打で「年→月→日→時→分→秒」の項目を順送り
- Up/Downボタンで数値増減
- 再度Menu長押し(またはタイムアウト)でRTCへ書き込み、通常表示へ復帰
コード構成のポイント
loop()内でボタン状態をポーリング、デバウンス処理込み- 設定項目ごとに上限/下限チェック(月1-12、日1-31等)
- RTC書き込みは
rtc.adjust(DateTime(...))で一括実行 - I2Cアドレス競合対策:LCD(0x27/0x3F)、RTC(0x68)で固有
実装上のヒント
- DS3231なら温度補償内蔵で月差±2分以内の高精度
- コイン電池(CR2032)で停電時も時刻保持
- I2C配線は短く、ツイストペア推奨(ノイズ対策)
- LCDのI2Cアドレスが不明な場合はI2Cスキャナ・スケッチで確認
拡張例
- アラーム機能追加(ブザー/リレー制御)
- 温湿度センサー(DHT22/BME280)追加で環境モニタ化
- ESP8266/ESP32置き換えでNTP同期・Web表示化
- ケース化して卓上時計として常設
リソース
完全なスケッチ、Fritzing配線図(.fzz)、Instructables公開版へのリンクは記事内の「Code」「Schematics」セクションを参照。
まとめ
RTCとI2C LCD、3ボタンという定石構成で「作ってすぐ使える」信頼性の高いクロックを実現。プルダウン抵抗が必要な分、前記事(ID:1007017580)より部品点数は増えるが、電源オフ時も時刻を維持し、長期運用に耐える実用品になります。多機能化のベースとしても最適な土台です。
製造プロセス
- Arduinoで作るレトロNumitron管時計:シンプル、信頼性高く、省エネ
- 高精度ワードクロック:分単位で時刻を文字表示
- Arduino Dueと3.2インチTFTで作る温度監視付きリアルタイムクロック
- Arduino UNOで作るベルリンクロック – DIY LEDマトリクス時計
- DS1302 RTCとArduino UNOで作る信頼性の高い目覚まし時計
- C++日付と時刻の完全ガイド:ctimeライブラリの活用
- Pythonで現在の日付と時刻を取得する実践ガイド
- Python 日付と時刻の完全マスター:実践的ガイド
- Java日付時刻完全ガイド:Date/Calendar/SimpleDateFormat/printf
- Java 8 新Date/Time API徹底解説:堅牢で使いやすい日付時刻処理
- 新規ワクチン・バイオ医薬品のタイムリーな生産を確保する