Categories: 工作・開発

ESP32-S3で楕円形LEDマトリックスのアナログ時計を製作、座標補正で円形表示を実現

LEDマトリックスでアナログ時計を表現しようとすると、いくつかの課題に直面する。正方形や長方形のマトリックスでは円形の文字盤を綺麗に表現できず、秒針の動きもカクカクしがちだ。また、時針と分針を視認しやすくしつつ、時刻マーカーは控えめにするバランス調整も難しい。

週末を使ってこれらの課題に取り組んだBareBlank氏が、ESP32-S3ベースのPixie M1ボードと289個のLEDを使ったアナログ時計をRedditで公開した。楕円形の17×21マトリックスを使いながら、座標補正により真円に近い表示を実現している。

楕円形マトリックスを円形に補正

このプロジェクトで使用されているのは、Axiometa社の289ピクセル(17×21)WS2812B LEDマトリックスだ。物理的には楕円形だが、コード内でXY座標マッピングを調整することで、視覚的に円形に見えるよう補正している。中心座標(cx、cy)と最大半径(maxR)を調整することで、異なるサイズや形状のマトリックスにも対応できる設計だ。

秒針のアニメーションには「ピンポン」と呼ばれるスムーズな往復動作が実装されている。1ピクセルから次のピクセルへ滑らかに移動する様子は、Redditに投稿された動画で確認できる。分針はソフトピンク、時針は青、秒針はオレンジで表示され、それぞれが点滅しながらゆっくりと進む。

時刻マーカーには特別な配慮がされている。12個の時刻マーカーは黄緑色で表示されるが、FastLEDライブラリのnscale8_video関数を使って極めて暗く調整されており、針の視認性を妨げない。この輝度はコード内で自由に変更可能だ。

ハードウェア構成はシンプルで、Axiometa Pixie M1(ESP32-S3ベース)のGPIO 6からLEDマトリックスのデータ入力(DI)に接続し、5V電源とGNDを共通化するだけとなっている。Pixie M1はArduino IDEのボードリストに標準で含まれているため、セットアップも容易だ。

時刻同期にはWiFi経由のNTPサーバーを使用しており、SSID とパスワードを設定すれば自動的に正確な時刻を維持する。FastLEDライブラリで個別にアドレス可能なLEDを制御し、各針の色と動きを細かく調整している。

3Dプリントケースの設計ファイル(STL形式)もGitHubリポジトリに含まれている。Pixie M1ボードを内部に収納できる構造で、スナップフィットまたはネジ止め方式が選択可能だ。電源とデータ線用のケーブルチャネルも設けられている。

GitHubには、ファームウェア、座標マッピング、3Dケースデータ、組み立てガイドがすべて公開されており、MITライセンスで提供されている。Redditのモデレーターから「Open Source Hero」のユーザーフレアを授与されたことで、BareBlank氏のアカウントにはr/arduinoでの投稿やコメント時に特別な表示がされるようになった。

製作者は「輝度と色をまだ微調整中だが、動きと全体的な見た目には満足している」とコメントしている。コードの調整に丸一日を費やし、適切な見た目を見つけたという。

関連情報

Pixie Oval LED Clock(GitHub)
Analog Clock on ESP32S3(Reddit)

FabScene編集部

FabScene編集部