profile-photo

大型表示時計

50mmサイズの7セグメント表示を作成し、時計に応用


時計は色々作ってきた。小型のOLED表示のものなどはコンパクトで良いのだが、歳を取ると何とも見にくい。
書斎の壁掛けの時計が壊れたのを機に、壁掛けLED時計を作ってみた。
大型の表示器を使った時計は以前から検討はしていたが、ドットマトリクスは消費電力が多そうだし、大型の7セグメントLEDは、あるものの産業用途のものが殆どで、コスト的に手が出なかった。
しかし、7セグなら3Dプリンターで作ることができそうだと思いついた。
ただし、I/Oのピン数が沢山要る。そこで、表示と時計機能を別々のCPUに分けることにした。
CPU間はI2C通信で行い、
①マスター側はESP-WROOM2を使用し、計時とNTPでの補正を行い、結果をI2CでスレーブCPUに伝える。
②スレーブ側はArdino Pro/Miniとし、I2Cで得られた情報を表示することに徹する。
と言う構成にすることにした。

 

100

マスターCPU基板。
フリー版のEAGLEでは、今回の時計フルサイズの基板は設計できない。なので、マスターとスレーブを別の基板に分けた。
7セグ表示器も個々に接続端子を出したので、左右に分離して作成することした。

110

マスターCPU基板の部品面。
殆どの部品はハンダ面に実装したので、 表示器を接続するコネクタしか付いていない。

200

スレーブCPU基板
スレーブ側はArduino Pro/Miniを搭載。
基板は、7セグLEDのためのパスラインが殆どだ。

210

各セグメントの限流抵抗が見える。
表示のパスを渡るので、ディスクリート抵抗を使い、ラインをまたいで信号を取り出している。
3ピンのコネクタは、PIR接続用。

300

マスターとスレーブの基板を接続したところ
I2Cには温・湿度センサーもぶら下がっている。
マスターCPUは常に時刻と温度、湿度のデータをスレーブ送っている(通信の応答やハンドシェークは無く、垂れ流し…)

310

ケースに収めたところ。
ケースは3Dプリンタで印刷したが、大きい面積を印刷するのは得意では無いので、広い面はアクリル板を張っている。

350

ケースに収めた後の正面。
LEDを乳白のアクリルに当てて散乱させ、セグメントの形を投影している。

L100

LED実装基板のパターン図
写真を取り忘れて、納めてしまったので、PCBのパターン図を掲載しておいた。

L110

7セグメント表示器も3Dプリンタで印刷して作った。
こういう用途には3Dプリンタは誠に便利だ。

L200

表示器も横幅が大きすぎるので全桁をまとめて印刷できない。
今後の別の用途も考慮して、一桁ずつ印刷、後で接着した。
アクリル接着剤がPLAにも有効なので、印刷物やアクリル板を組み合わせる構造が作りやすい。

L300

表示器にLED基板を実装したところ。
7セグのバスラインを通すために、コネクタは縦に取り付けた。

L500

表示の一桁分
スリットから基板上のチップLEDが見える。
このままでは、ポイントが光るだけだが、乳白のアクリルに投影するとちゃんと7セグに見えるのだ。

L510

表示の動作確認をしているところ

L520

写真はアクリルでは無いが、白紙に投影しても同じ事。数字の表示を確認することができた。

マスターCPU

◎Wi-Fi接続:
①起動後2秒経った時に、GPIO0を読んで、LOWならサーバーモードで起動する。
 HIGH(NO-Jumper)ならクライアントモードで起動する。
②サーバーモード
 A/Pが未設定の時はサーバーを起動する。
②-1 端末で本機のアクセスポイントに接続する。
 サーバーモード時のSSIDは「ESP+Macアドレス」、WEPキーは「password」
②-2 端末のブラウザで本機のサーバーにアクセスする。(URLは、192.168.4.1)
②-3 上のWEBサイトからインターネット接続に使用するA/PのSSIDとWEPキー(パスワード)を入力する
②-4 本機は、指定された情報をSPIFFS(ESP内蔵フラッシュメモリ)内の"/wifi_settings.txt"に保存する。
③クライアントモード
 通常動作はクライアントモードを使用する。
③-1 クライアントモードで起動した時、本機はSPIFFSから上の情報を読み出し、Wi-FiのA/Pに接続する。

◎時計:
 ①ESP内蔵のRTCを使用する。
①-1 ディープスリープから起動した時に、現在時刻をRTCメモリーに書き込む
①-2 スリープ時間もRTCメモリーに書き込む
 ②スリープ時間をRTCから読み出した時刻に加算して、現在時刻を得る。
 ③ディープスリープが規定回数に達したら、Wi-Fiに接続し、NFTPから時刻を得、RTCにセットする。

◎I2C通信
 スレーブ側に時刻・温度・湿度の情報をLEDに表示する

スレーブCPU

◎表示:
 ①タイマ割り込みで、4桁の7セグメントを順次表示する。
  7セグメントLEDはカソードコモン
秒コロンは、アナログ出力で1秒おきに点滅させる。
 ②表示の点灯と消灯
  表示を行う時点で、PIRセンサの状態を見て、人がいない場合は、表示を行わない。
 ③モード切替
モード切替スイッチの状態によって、「時刻表示」または「温・湿度表示」を切り替える。

◎I2C通信
 マスター側から送られた時刻・温度・湿度の情報をLEDに表示する


参考までにハードウェア・ソフトウェアの情報を。ただしこれらは僕の覚えであり、正確に改版を反映していない可能性があります。この通り作って動かないからと、怒らないで欲しい。