高精度ワードクロック:分単位で時刻を文字表示
必要な部品と用品
| 部品 | 数量 | 備考 |
|---|---|---|
| Arduino Nano R3 | 1 | 部品の完全なリストはプロジェクトページ参照 |
プロジェクト概要
分解能で時刻を言葉で表示するArduinoベースのワードクロックです。秒はリニア表示で示します。詳細はプロジェクトサイトをご覧ください。

主な機能
- ワードクロックモード(分単位で時刻を英語で表示)
- デジタル時計モード
- アナログ時計モード
- 温度・湿度表示(DHT22センサー使用)
- ゲームモード:ライフゲーム、サイモン、テトリス
- マスタークロックからの同期信号でスレーブ動作可能、無い場合は内蔵RTC(DS3231)で自立動作
- PIRセンサーまたはドップラーレーダーによる人感検知で自動消灯機能
- サイズ:500mm × 500mm、重量約5.5kg、壁掛け設計
- 四隅のタッチパッドで設定・操作
ワードクロックの設計レベル比較
ワードクロックには複雑さのレベルがあります:
- シンプル(5分刻み): 「5分前」「10分前」などブロック単語で表示。LED約20個で構成可能だが、決まった形式のみ。
- 中級(11×10マトリクス+4隅LED): 110個のLEDで数字や簡易画像も表示可能。5分刻みだが隅のLEDで1〜4分を補完。Raspberry Pi制御で多色LED対応例も。
- 上級(16×16=256 LEDマトリクス): 本作はこのタイプ。1分単位の言葉表示、「午前」「午後」「夜」なども表現可能。温度を言葉で表示するものも。大量のLEDを活かし多彩な表示モードを実装。配線が複雑だが、PCB実装で薄型化可能。手配線の場合は500mm角が現実的な上限。
本プロジェクトの主な変更点
- 専用PCBを使わず、安価な既製モジュールとベロボード(ユニバーサル基板)のみで構築
- ケースは14mm厚MDFを2枚重ね(背面板を10mm小さくし、正面から見ると14mm厚に見える設計)
- Wouter Devinck版(21mm厚)より深い34mmだが、黒い背面板とガラスのセットバックで薄く見せる工夫
- LEDマトリクスをフロントボードに直接実装(PCB不要)
- タッチセンサーにTTP223モジュール採用(ガラス取り付けボルトと兼用)
- MAX7219ドライバーボードは既製LEDマトリクス基板を改造して使用
- Arduino Nano採用で小型化
- PIRセンサーで不在時自動消灯(無効化可能)
- 輝度自動調整用トリマー抵抗を底面からアクセス可能に配置
- マスタークロックから30秒ごとの同期パルス入力対応(無い場合はRTCでフリーラン)
- ソフトウェアは「カタルーニャ版」Pijuanaクロックをベースに英語化・改良
- 言葉による温度表示を削除、代わりに同期ステータス・PIR ON/OFF・秒のリニア表示を追加
- 英語表記を自然な言い回しに調整("MINUTE"単数形、"A QUARTER"、正午・真夜中の表現、"OCLOCK"のアポストロフィー削除等)
- DS3231 RTCモジュールの充電池を非充電池に変更(抵抗R5除去)
- 4mmフロートガラス(エッジ研磨)をシカゴファスナーで固定(タッチパッド兼用、着脱可能)
- 前後2重の防塵シール採用
- 設定モードで右下ボタン長押しで秒を00にリセット可能
ケース設計
手配線マトリクス対応で奥行き34mm(背面シール2mm+背面MDF14mm+前面MDF14mm+ガラス4mm)。背面板を黒くし、正面板より10mm小さくすることで、正面から見たときに14mm厚に見える視覚効果を狙っています。



操作インターフェース
表示パネル四隅にTTP223タッチセンサーモジュールを配置。シカゴファスナーのボルトがタッチパッドを兼ねます。モードによってボタン機能が変わります。


表示モード:時計・環境


起動時はバージョン番号、製作者名、クロック名をスクロール表示。

表示モード:ゲーム

ライフゲーム: コンウェイのライフゲーム。無限グリッド上のセルが生死を繰り返すシミュレーション。

サイモン: 記憶力ゲーム。コンピューターが示すシーケンスを真似する。失敗時にスコア表示。

テトリス: ソ連生まれのタイルマッチパズル。ボタン操作の改善余地あり。
プロトタイピングとテスト
MAX7219モジュール付属のドットマトリクスLEDでミニチュア試作が可能。配線変更でソフトウェアとマッピングを合わせれば、実物大の1/8サイズでワードレイアウトやコードを検証できます。

テスト用スケッチで各LEDを順次点灯し、配線確認が可能。

テストスケッチ: MAX7219_LED_Test.zip
時刻→単語マッピング表

独自の言い回しに合わせてマッピングを調整可能。エクセルファイルで管理: Word+to+Time+Translations.xlsx
電源設計
共通12V電源からMP1584ベースのベロボードで5V降圧。クロック基板にも独自ヒューズ装備。消費電流は低輝度30mA〜高輝度250mA。最低500mA以上の5V電源推奨。PIR有効時は大幅節電可能。


モジュール間接続
MAX7219モジュールはデイジーチェーン接続。最初のモジュールのみNano直結。電源は両端から供給し電圧降下を防止。Nano〜最初のMAX7219間は極力短く配線。

組み立て手順概要
- ビニールステッカー印刷・ガラスカット・MDFカット
- 前面板にLED用穴あけ(256箇所:6mm貫通+18mm皿穴)
- 塗装(前面白、背面黒)、エッジテープ貼り
- 背面板を前面板にネジ止め
- 電源ベロボード×3枚製作
- MAX7219モジュール4枚を改造(90度ピンヘッダー追加、電流制限抵抗を22kΩに交換)
- モジュール類を背面板に取り付け
- 前面板に256個LEDをマトリクス配線(カソードバス10mm高、アノードバス2mm高、パネルピンで支持)
- 配線完了後、ガラスパネルをシカゴファスナーで固定(タッチセンサー同時取り付け)
- 動作テスト・輝度キャリブレーション
所要時間の目安はプロジェクトページの表を参照。プロトタイピング・プログラミングにさらに40時間程度見込み。
ビニールステッカー製作
Inkscapeで設計(Wouter Devinck氏のオリジナルを改変)。反転印刷(文字部分が抜ける)で注文。アプリケーションテープをディフューザーとして残す工夫。貼り付けは石鹸水スプレーで位置合わせしながら。


ガラス: 4mmフロートガラス500mm角、エッジ研磨、5mm穴4箇所(シカゴファスナー用)。アセトン脱脂後、手袋着用で貼り付け。

前面板加工詳細
25mmピッチで256箇所の中心をマーキング、オートセンターポンチで打点、6mmドリルで貫通、20mm皿取りビットで皿穴加工(ジグで深さ統一)。白塗装で反射率確保、外周を黒塗りでガラスのセットバックを隠蔽。四隅に5mm穴でシカゴファスナー通し、裏面でフォアスタナービットでセンサー用リベート加工。









壁掛け金具
額縁用フックをフレームに埋め込み、2インチ皿ネジで壁固定。防塵シールが圧縮されるテンションで取り付け。

タッチセンサー取り付け
TTP223モジュールのセンターパッドに5mm穴を開け、シカゴファスナーボルトを通す。ボルトはプラスチックワッシャーで絶縁。モジュール上のLEDはニッパーで除去し省電力化。





電子部品・モジュール詳細
LED仕様
- 5mm白色フラットトップLED × 256個
- 順方向電圧 3.2〜3.8V、順方向電流 20mA(最大30mA)
- 視野角 120度、輝度 13000mcd
- 信頼できるサプライヤーから購入推奨(安物は数週間で劣化する事例あり)

DHT22 温湿度センサー
左ピン: 3-5V、中央: データ、右: GND。2秒に1回更新。ケース内温度を測らないよう上部と左側ベントをテープで塞ぎ、背面板下部に通気孔を設け外気を導入。


Arduino Nano ピン配置
主要ピン: D2/D3=外部割り込み、D3/D5/D6/D9/D10/D11=PWM、D10=SS, D11=MOSI, D12=MISO, D13=SCK(SPI)、D13=内蔵LED、A4=SDA, A5=SCL(I2C)、A6/A7=アナログ専用。USB-シリアル変換はFTDI FT232RL。


TTP223 タッチセンサーモジュール
ガラス取り付けボルトで固定、ボルトがタッチパッド兼用。LEDは除去。四隅に4個使用。


DS3231 AT24C32 高精度RTCモジュール
付属のリチウムイオン充電池を非充電式コイン電池(CR2032等)に変更するため、基板上の充電抵抗R5を除去。




MAX7219 ディスプレイモジュール
既製品を購入し、オンボードのLEDマトリクスソケットに90度ピンヘッダーを追加ハンダ付けして外部マトリクス接続用に改造。電流制限抵抗R1をLED仕様に合わせて交換(本プロジェクトでは22kΩで約20mAに設定)。



LDR(光センサー)
背面板下部に配置。明るさで抵抗値変化(明約500Ω〜暗約10MΩ)。隣に輝度キャリブレーション用トリマー抵抗のアクセス穴。



防塵シール
- 背面板: 2mm厚ソフトフォームラバー、粘着シート、エッジから5mm内側に貼り付け。壁掛け時に圧縮され密閉。
- 前面板ガラス裏: 自己融着ゴムテープを板エッジから5mm内側に貼り付け。シカゴボルト穴周りに小さなゴム片を追加でガラス割れ防止。



回路図
Nano接続図、4つのMAX7219モジュールとLEDマトリクスの接続図(各マトリクスは前のモジュールから90度回転配置)






LEDマトリクス配線実装
4つのマトリクス(各64 LED)を背面から配線。カソードバス(垂直/水平)はパネルピンで10mm浮かせ、アノードバス(直交方向)はLEDリード線で2mm浮かせて支持。モジュールごとに回転方向が異なるため、背面から見ると配線マッピングが複雑。カラーコード配線表に従い、50芯0.5mmケーブルで接続。






LED実装手順
LEDリード線をジグで4か所曲げ(計1024回)、カソードをアノードから90度曲げてマトリクスに挿入。配線表に従いMAX7219モジュールの90度ピンヘッダーへ半田付け。モジュールごと16本の配線。







MAX7219モジュール改造詳細
既存LEDマトリクスコネクタの下部に90度ピンヘッダー2組(8ピン×2)を半田付け。表面実装部品(R1, C1, C2)と干渉しないようピン長を調整。電流制限抵抗R1を22kΩに交換(LED順方向電圧3.2-3.8V@20mAに対応)。




自動輝度調整のキャリブレーション
- Mini USBポートにPC/スマホを接続、シリアルモニターを開く(例: Slick USB 2 Serial Terminal)
- クロック再起動後、シリアル出力に
light readingとbrightが表示される - 設置場所で周囲光が最大になる状態で、トリマー抵抗(背面板右下のアクセス穴から精密ドライバーで調整)を回し、
light reading = 600(またはソフトウェア設定値)、bright = 15に合わせる - これ以上回しても
brightは 15 を超えない。全範囲で暗くしたい場合はlight readingを 600 未満に設定 - 最大電流はMAX7219のR1で決まるため、LED仕様に合ったR1を選定済みであること


Mini USBポート増設
背面板右側にMini USBメスソケットを切り出し、90度変換ケーブル(25cm)の被覆を剥いて内部配線。プログラミングと輝度調整用。

PIRセンサーによる自動消灯(オプション)
ワードクロックメニューでON/OFF切替可能。ON時は人感検知で点灯、無検知で設定時間後に消灯。表示に"PIR ON"/"PIR OFF"を5秒表示。PIRモジュールは壁埋め込みスイッチボックスに収納(ガラス越しでは動作しないため)。電源スイッチと共用。





ドップラーレーダー制御オプション
PIRの代わりにドップラーレーダーモジュール(マイクロ波センサー)をケース内部に内蔵可能。ガラス・プラスチックを透過検知可能(検知距離約5m)。15分ごとに検知チェックし、無検知なら消灯。PIR同様メニューでON/OFF。




時刻設定手順
デジタル時計モードで左下タッチ長押しで設定モード入り。時刻点滅中に:右上=インクリメント、左上=デクリメント、左下1回目=時設定、2回目=分設定、3回目=確定終了、右下=秒を00リセット。

マスタークロック同期
30秒ごとの同期パルス入力がある場合、設定モード以外で自動同期(0秒パルスは無視、20秒過ぎと20秒前のみ補正)。同期時は"SYNC"表示。内蔵RTC(温度補償水晶)単体でも高精度。

ソフトウェア構成とカスタマイズ
メインスケッチ Brett_wordclock_v4_3.ino 含むモジュール群とサードパーティライブラリで構成。GitHubで公開: https://github.com/brettoliver/wordclock
主要モジュール
brightness.cpp/h: 自動輝度調整character.cpp/h: 文字(数字)パターン定義credits.cpp/h: エンドクレジット(バージョン、製作者、年)display.cpp/h: 表示・LED制御life.cpp/h: ライフゲームserial.cpp/h: シリアルメニューsimon.cpp/h: サイモンゲームtemphum.cpp/h: 温湿度表示tetris.cpp/h: テトリスtime.cpp/h: ワードクロック・デジタル時計ロジックtimeanalog.cpp/h: アナログ時計touchbuttons.cpp/h: タッチボタン・モード切替
サードパーティライブラリ
- Chronodot (DS3231用)
- DHT (DHT22用)
- LedControl (MAX7219用)
- stc (テトリス用)
- pitches.h (音階周波数)
コード変更のポイント
単語定義: time.h でLED座標を配列で定義。例: const byte w_the[3] PROGMEM = { 0, 0, 3 }; は左上(0,0)から横3つ点灯で "THE" 表示。

点灯ルール: time.cpp で時刻条件ごとに単語呼び出しを記述。例: 0時0分なら "THE TIME IS TWELVE OCLOCK AT NIGHT" となるようルール記述。

アナログ時計の針動作改良コード(srdevil氏提供)もコメント欄に掲載。短針が15分過ぎで次の数字方向へ動くよう修正。
コードダウンロード
- Brett_wordclock_v4_5.zip (Arduino IDEで読み込み)
参考リポジトリ
- Wouter Devinck版: github.com/wouterdevinck/wordclock
- Pijuana版: github.com/svcabre/wordclock
- 本プロジェクト: github.com/brettoliver/wordclock (回路図・コード含む)
カスタムパーツ・エンクロージャー
ビニールステッカー設計ファイル: brett11_print_ready_6bbpMTDyFa.svg (Inkscape形式、自由に変更可能)
回路図
- メイン基板接続図
- MAX7219モジュール01〜04 各LED接続図
画像は元記事のSchematicsセクションを参照。
製造プロセス
- 鳩時計:歴史、職人技、現代への進化
- Raspberry Piで単一GPIOピンを使ってアナログセンサーを測定
- Arduinoで作るレトロNumitron管時計:シンプル、信頼性高く、省エネ
- DIY Arduinoワードクロック – 文字で時刻を表示する洗練されたリアルタイムクロック
- Arduino で作るイスラム教礼拝時刻付きリアルタイムクロック
- Arduino Dueと3.2インチTFTで作る温度監視付きリアルタイムクロック
- イタリア語ワードクロック自作:Arduino Nano、NeoPixel、LCD、RTCで時刻を文字で表示
- DS1302 RTCとArduino UNOで作る信頼性の高い目覚まし時計
- シリコーン3Dプリント:アディティブ・マニュファクチャリングの次なるフロンティア
- 生産ボトルネック解消:製造効率を劇的に高める5つの実証済みツール
- Python timeit():実行時間測定の実例付きガイド