ミニLEDマトリックス時計 – Arduino Nano駆動のコンパクト時計
必要な部品と材料
- Arduino Nano R3 × 1
- Maxim DS3231M 高精度RTC(I2C、±5ppm) × 1
- タクトスイッチ(モーメンタリ) × 2
- LEDマトリックスモジュール 32×8(MAX7219 4-in-1) × 1
必要な工具
- はんだごて
使用するソフトウェア
- Arduino IDE
プロジェクトの概要
Nick Hall氏の「Nick's LED Projects」で公開されている4枚の8×8マトリックスを使った時計プロジェクトをベースに、MAX7219ドライバ内蔵の32×8マトリックスモジュール(4枚一体型、AliExpressで格安入手可能)で動作するようコードを最小限変更して移植しました。

主な機能
- ベーシックモード: 大きな数字で時刻表示
- スライドモード: 数字がスクロールして切り替わる
- スモールモード: 小さな数字で秒まで表示
- ワードクロックモード: 「ten past twelve」のように単語で時刻表示
- 日付表示
- 12/24時間制切替
- 輝度調整
- ランダムモード: 数時間ごとに表示モードを自動切替
- プッシュボタン2つで全設定操作可能
回路構成はシンプル:マトリックスモジュール、Arduinoボード、RTCモジュール、設定用タクトスイッチ2個のみ。必要なライブラリと改造済みコードはコードセクションからダウンロード可能です。
回路図

ソースコード
/*********************************************************************** Mini Clock v1.0, Jul 2014 by Nick Hall Distributed under the terms of the GPL. For help on how to build the clock see my blog: https://123led.wordpress.com/ Tested on IDE v1.6.5 ***********************************************************************/ #include "LedControl.h" #include// フォントライブラリ #include // DS1307/DS3231 RTC #include "RTClib.h" // RTCライブラリ #include // Alexander Brevig氏のButtonライブラリ // LEDマトリックス設定 // pin 12 = DataIn, pin 11 = CLK, pin 10 = LOAD LedControl lc = LedControl(12, 11, 10, 4); // 4デバイス(最大8) // グローバル変数 byte intensity = 7; // デフォルト輝度 (0-15) byte clock_mode = 0; // デフォルト表示モード (0=basic) bool random_mode = 0; // ランダムモード (0=OFF) byte old_mode = clock_mode; // 前モード記憶 bool ampm = 0; // 0=24h, 1=12h byte change_mode_time = 0; // ランダムモード時の次回切替時刻 unsigned long delaytime = 500; int rtc[7]; // RTC出力格納 char days[7][4] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; char daysfull[7][9] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; char suffix[4][3] = { "st", "nd", "rd", "th" }; // 日付サフィックス #define NUM_DISPLAY_MODES 3 #define NUM_SETTINGS_MODES 4 #define SLIDE_DELAY 20 // スライドアニメ速度 (ms) #define cls clear_display RTC_DS1307 ds1307; Button buttonA = Button(2, BUTTON_PULLUP); Button buttonB = Button(3, BUTTON_PULLUP); void setup() { digitalWrite(2, HIGH); digitalWrite(3, HIGH); digitalWrite(4, HIGH); Serial.begin(9600); int devices = lc.getDeviceCount(); for (int address = 0; address < devices; address++) { lc.shutdown(address, false); lc.setIntensity(address, intensity); lc.clearDisplay(address); } #ifdef AVR Wire.begin(); #else Wire1.begin(); #endif ds1307.begin(); if (!ds1307.isrunning()) { Serial.println("RTC is NOT running!"); ds1307.adjust(DateTime(__DATE__, __TIME__)); } printver(); digitalWrite(13, HIGH); } void loop() { switch (clock_mode) { case 0: basic_mode(); break; case 1: small_mode(); break; case 2: slide(); break; case 3: word_clock(); break; case 4: setup_menu(); break; } } // 以下、各表示モード・ユーティリティ関数の実装(原文のコードを整形・コメント日本語化) // plot(), clear_display(), fade_down(), printver(), puttinychar(), putnormalchar(), // small_mode(), basic_mode(), slide(), slideanim(), word_clock(), scroll(), // display_date(), switch_mode(), run_mode(), set_next_random(), // setup_menu(), set_random(), set_ampm(), set_intensity(), levelbar(), // set_time(), set_value(), get_time() // 詳細はダウンロード版コードを参照してください。
ライブラリ
使用ライブラリ(コードセクションからダウンロード):
- LedControl.h
- FontLEDClock.h
- RTClib.h
- Button.h
製造プロセス
- 鳩時計:歴史、職人技、現代への進化
- Arduino Mini ボスバトルゲーム:レトロ風LCDゲームプロジェクト
- 12メートル先から見える大型LEDマスタークロック(アラーム機能付き)を自作しよう
- Arduino UNOで作るベルリンクロック – DIY LEDマトリクス時計
- アナログ風LED POVクロック – Arduino Nanoで作る残像時計
- PIRセンサー連動 インタラクティブLEDマトリクスドアディスプレイ - ホリデーグリーティング
- 音声反応型 8 LED ライトディスプレイ
- スマートArduino四足歩行ロボットの製作:ステップバイステップガイド
- ホットグルー棒で作るLEDマトリックスランプ - カラフルなディスプレイを自作
- 555タイマーと4017カウンタによるLEDシーケンサ構築:周波数分周とデバウンス
- MATLAB行列完全マスター:作成・参照・操作・削除の基礎