Arduino UNO製 シンプル高精度デジタル時計:RTC不要・抵抗/ポテンショメータなし
概要
外部RTC(リアルタイム・クロック)を使わず、Arduino UNO単体で動作するデジタル時計の改良版です。既存チュートリアルの問題点(ループ処理時間依存の秒カウント、外部プルアップ抵抗、コントラスト用ポテンショメータ、バックライト制御不可)をすべて解決。内蔵プルアップ、PWMによるLCDコントラスト/バックライト制御、ミリ秒ベースの正確な時刻更新を実現しました。
必要なパーツ
- Arduino UNO ×1
- Adafruit 16×2 LCD(白文字/青背景) ×1
- タクト・スイッチ 12mm ×2(時刻設定用)
- ハーフサイズ・ブレッドボード ×1
- ジャンパー・ワイヤー ×1式
抵抗もポテンショメータも一切不要です。
主な改良ポイント
1. 正確な1秒カウント(ミリ秒ベース)
従来はloop()の実行時間に依存して秒がズレていましたが、millis()を用いたイベント・ドリブン方式に変更。フレーム依存を排除し、delay()も不要に。
2. ボタンは内蔵プルアップで接続
pinMode(buttonPin, INPUT_PULLUP); // 外部抵抗不要
ATmega328Pの内部プルアップ(約20-50kΩ)を活用。スイッチはGNDと接続し、押下でLOWになるアクティブ・ロー構成。
3. LCDコントラストをPWMで制御
従来の可変抵抗(Voピン)をPWM出力(例:D9)に置き換え。analogWrite(contrastPin, value)でコントラストをソフトウェア調整可能。初期値はスケッチ内で設定。
4. バックライトもPWMで輝度制御/消灯可能
バックライト・アノード(Aピン)をPWMピン(例:D10)へ接続。analogWrite(backlightPin, 0-255)で明るさ自在。夜間消灯や省電力化にも対応。
配線概要
| LCDピン | Arduino接続 | 備考 |
|---|---|---|
| VSS | GND | |
| VDD | 5V | |
| Vo (コントラスト) | D9 (PWM) | analogWriteで調整 |
| RS | D12 | |
| RW | GND | 書き込み専用 |
| E | D11 | |
| D4-D7 | D5-D8 | 4ビット・モード |
| A (バックライト+) | D10 (PWM) | 輝度制御用 |
| K (バックライト-) | GND |
タクト・スイッチ2個:それぞれD2, D3に接続し、INPUT_PULLUP設定。
スケッチのポイント
LiquidCrystalライブラリ使用(標準付属)- 時刻保持変数:
h, m, s(時/分/秒) prevMillisで前回更新時刻を保存、1000ms経過で秒インクリメント- ボタン長押し/短押しで「時設定/分設定」モード切替
- 設定モード時はコロン点滅で表示
精度について
Arduino UNOのセラミック発振子は±0.5%程度の誤差があり、1日で約43秒ズレます。長期運用にはRTC(DS3231等)推奨ですが、「RTCなしでここまで簡単に作れる」学習用・短期用途には最適です。
動画デモ
記事内に短いデモ動画へのリンクあり。設定操作から通常動作まで確認できます。
まとめ
「抵抗ゼロ、ポテンショメータゼロ、RTCゼロ」で動くArduino時計の決定版。内蔵プルアップとPWM活用で部品点数を最小限に抑え、コードもシンプル。初心者が「時計を作る」第一歩として最適なプロジェクトです。GitHubやFritzingファイルも公開済み。
製造プロセス
- 鳩時計:歴史、職人技、現代への進化
- 砂時計:歴史、職人技、現代的魅力
- 時計の進化:日時計から精密クォーツ時計まで
- Arduinoで作るレトロNumitron管時計:シンプル、信頼性高く、省エネ
- Arduino で作るイスラム教礼拝時刻付きリアルタイムクロック
- 高精度ワードクロック:分単位で時刻を文字表示
- 12メートル先から見える大型LEDマスタークロック(アラーム機能付き)を自作しよう
- DS1302 RTCとArduino UNOで作る信頼性の高い目覚まし時計
- デジタル調達:ポストパンデミック成功への確かな道筋
- デジタルトランスフォーメーションを加速する7つの主要ドライバー
- 航空宇宙産業の卓越性:タイムリーかつ正確なインサイトで競争優位を確保