NeoPixel Ring Clock
2026/Aug/25 7M4MON
2021年版からのリメイク
この時計は、2021年に製作した「7セグ&LEDリング時計」を、 約5年ぶりに作り直したものです。
当時の「中央の時刻表示と、その周囲を巡る光」という構成を受け継ぎながら、 今回はハードウェアとプログラムを全面的に見直しました。 NeoPixelリングは16灯とし、DS3231による時刻同期、AUTO/FIX切替、 輝度設定、シリアル操作を追加しています。
LEDリングの演出も新たに構成し、現在の秒を基準として 1分間で完結する15種類のアニメーションを実装しました。
時刻を数字で確認するだけでなく、リングを巡る光と色で「1分の流れ」を楽しむ時計です。 Arduino Nano互換機、DS3231リアルタイムクロック、TM1637 4桁表示器、16灯WS2812 NeoPixelリングを使用しています。
アニメーション一覧
アニメーション番号は0~14です。すべて時計の現在秒を基準に進み、1分で一連の 変化が完結します。
| ID | 名前 | 1分間の変化 |
|---|---|---|
| 0 | プリズム分光 | 0秒では全周が白色です。12時位置からCWへ約3.75秒ごとに1灯ずつ、白からその位置に対応する虹色へ滑らかに補正し、60秒で一周分の虹を完成させます。 |
| 1 | 虹色波紋 | 約3.75秒ごとに進む現在位置を中心として、距離ごとに色相の異なる明るい波紋が左右へ半周まで広がります。先端を明るく保ちながら内側へ残光を残し、広がりの終盤で全体が滑らかに消えます。中心位置は1分で一周します。 |
| 2 | ダブルレインボーコメット | 反対側の2光点が別位相の虹色へ変化しながら8秒で一周します。両方の尾にも虹の色差が付き、1分かけて半周まで伸びて60秒で全周を覆います。 |
| 3 | 虹色アコーディオン | 0秒では全周に四周分へ圧縮した虹を表示します。12時からCWへ進む白い境界の後ろで一周分の通常の虹へ戻し、30秒で半周、60秒で全周の解凍が完了します。 |
| 4 | カラードロップ | 虹色の粒が12時位置から左右交互に6時方向へ落下し、下側から左右へ堆積します。約3.75秒ごとに1粒増え、60秒で全周を埋めます。 |
| 5 | 虹色回転セクター | CWに周回するセクター内へ一周分の虹を配色します。虹の色相もゆっくり循環し、セクターは約3.75秒ごとに1灯ずつ伸びて60秒で全周へ成長します。 |
| 6 | スペクトル万華鏡 | 12時と6時を軸に、左右対称の虹模様を全周表示します。模様全体の色相が1分かけて一巡し、60秒で開始色へ滑らかに戻ります。 |
| 7 | 4連レインボーパルス | 約3.75秒ごとに虹色範囲が1灯ずつ増えます。1灯分の時間に、範囲全体と明るい先頭光が同期して4回、滑らかに点灯・消灯します。光が位置間を波打つ演出はなく、60秒で全周に達します。 |
| 8 | レインボールーレット | 全周の虹をCWへ高速回転させ、一定の割合で減速します。1分間で24周し、終盤は停止位置へゆっくり近づき、60秒で12時位置を赤にして停止します。 |
| 9 | 双方向レインボープログレス | 12時から2つの白い境界がCW/CCWへ同時に進みます。境界の後ろを暗い反転虹から明るい正順虹へ変え、30秒で全周の約半分、60秒で両境界が6時に合流して全周が明るい虹になります。 |
| 10 | 虹色往復セクター | 虹色セクターが周回方向と色順を交互に反転しながら1灯ずつ伸びます。セクターは移動点を中心に保ち、60秒で全周へ成長します。 |
| 11 | 虹色蓄積 | 12時位置からCWへ、位置ごとに異なる虹色を徐々に点灯します。約3.75秒ごとに1灯進み、60秒で一周分の虹が完成します。 |
| 12 | 回転レインボー | 全周に一周分の虹色を常時表示し、その配色全体を60秒かけてCWへちょうど1回転させます。 |
| 13 | レインボーペインター | 尾を持たない白い輝点が1周3.75秒でCWへ16周します。各周で割り当てられたLEDを通過すると位置対応の虹色が定着し、その色を残したまま次へ進み、最終周の終盤に16灯の虹が完成します。 |
| 14 | プリズム対向スイープ | 12時からCWへ位置固定の虹色区間が伸びます。尾を持たない白い光点が反対側から近づきながら合流先の色へ徐々に変化します。合流ごとに1灯増え、60秒で虹が完成します。 |
ANIM SETとANIM NEXTはアニメーション固定モードへ移行します。ANIM AUTOは 現在の分に対応する固定順へすぐに復帰します。通常表示でのMode短押しでも、現在の アニメーション固定とAUTO復帰を交互に切り替えられます。
AUTOの15分サイクル
AUTOではランダム選択を行いません。毎時0・15・30・45分にプリズム分光(0) から開始し、見た目が近いアニメーションが隣り合わない番号順を繰り返します。
分オフセット 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
ANIM 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
操作
- 通常表示でMode短押し: AUTOでは現在のアニメーションを固定し、FIXでは現在時刻に対応するAUTOアニメーションへ復帰
- 通常表示のAUTOで+/−: TM1637とリングの明るさをレベル3~7の5段階で増減(アニメーション再現に必要な最低値を3に制限し、操作終了から2秒後にEEPROMへ保存)
- 通常表示のFIXで+/−: アニメーションを次/前へ移動(長押しで連続移動)
- 通常表示でMode長押し: 時設定
- 時設定でMode短押し: 分設定
- 分設定でMode短押し: 秒を00にしてDS3231へ保存
- 設定中の+/−: 値の増減(長押しでリピート)
- 設定中のMode長押し: 変更を破棄
DS3231には表示中の現地時刻をそのまま保存します。UTC変換やDST補正は行いません。 夏時間へ切り替える場合は、通常の時刻設定で時を変更します。
通常表示でModeを単押しすると、固定へ切り替えた場合はFIX、AUTOへ戻した場合は AUTOを1秒間表示してから時刻表示へ戻ります。
シリアルコマンド
115200 bps、LFまたはCRLFで送信します。大文字・小文字は区別しません。 コマンド名の区切りは空白とアンダースコアのどちらも使用できます。
TIME GET
TIME SET 2026-08-09 21:35:00
RTC GET
STATUS
INFO
HELP
ANIM GET
ANIM NEXT
ANIM AUTO
ANIM SET 0
INFOはファームウェア版、リング灯数、オフセット、反転設定、RTCおよびSQW同期状態を 表示します。SQW=SYNCEDは同期中、WAITINGはRTCを認識しているがSQWをまだ検出して いない状態、OFFはRTC未接続を表します。
配線
| 機能 | Nanoピン |
|---|---|
| オンボードNeoPixel 3灯 | D2(基板内、未使用) |
| DS3231 SQW | D3 |
| +ボタン | D4 |
| Modeボタン | D5 |
| −ボタン | D6 |
| NeoPixel DATA | D10 |
| TM1637 CLK | D11 |
| TM1637 DIO | D12 |
| DS3231 SDA | A4 |
| DS3231 SCL | A5 |
ボタンは各ピンとGNDの間へ接続します。 DS3231のSQWをD3へ接続すると、1 Hz信号の立下りをポーリングし、RTCの秒境界へ 時刻とリングアニメーションを同期します。D3は内部プルアップを使用します。SQWが 未接続または停止した場合も、従来どおりI2C読出しとソフトウェア時計で動作を継続します。
アニメーションの着想と権利表示
リング演出の種類と視覚的な方向性は、Alexander(sfrwmaker)が2016年に公開した Arduino Clock with Neopixel Ring Animation から着想を得ています。
参照リポジトリには明示的なライセンスファイルが確認できなかったため、本プロジェクトの 8種類の演出は動作の観察結果と仕様から新規に書き起こしており、参照コードを転載して いません。第三者へ配布する場合は、着想元の最新の利用条件も別途確認してください。