以前にマイクロQRコードで時刻を表示する時計を作ったのですが(記事書いてなかった)、スマホ標準のQRコード読み取り機能ではマイクロQRコードに対応していなくて、展示会でお客さんに読み取って貰えないという事象がしばしば発生しました。
そこで今回は、スマホ標準で読み取れるように通常サイズのQRコードで表示する時計を作ることにしました。
目次
マトリクスLEDとLEDドライバTM1640
メインとなる部品は秋月電子で購入した 2色ドットマトリクスLED(赤緑) 8×8ドット LTP-12188M-08 です。秋葉原店2階で15個300円で売っていました。
またLEDドライバとしてTM1640を使用します。これはカソードコモンの16桁7セグLED用なのですが、配線を考えるとマトリクスLEDでも使用することができます。
1つのLEDマトリクスにつきTM1640を1つ使用します。LEDマトリクスはアノードが 8 row, カソードが 8 col x 2色となっているので、7セグドライバのセグメントをrow、グリッド(コモン)をcolに接続します。

これを16セット用意して、Raspberry Pi Pico W(以下Pico W)で制御します。クロックは全体で共通で、データ線はパラレルに制御します。
リアルタイムクロックIC DS1302
DS1302はバックアップ電源端子付きのリアルタイムクロックICで、切り替え可能な抵抗とダイオードを内蔵していています。そのため電池によるバックアップの他、コンデンサを用いてトリクルチャージによるバックアップにも対応しています。
今回はバックアップに静電容量1 Fの電気二重層コンデンサを用いることにしました。
DS1302とその周辺回路の回路図を以下に示します。外付け部品はコンデンサと32.768 kHzの水晶発振子だけです。マイコンとの通信は3本の線を用いる独自のシリアル通信です。
注意点として、Vcc2がメイン電源で、Vcc1がバックアップ電源となっています。逆にしないように気を付けましょう。(一敗)

ロータリーエンコーダ
モード選択などの操作用にクリック付きのロータリーエンコーダを使用することにしました。
回路図を以下に示します。A端子とB端子が回転の情報を得る端子です。プルアップが必要ですが、マイコンの内蔵プルアップを使用するので回路図には登場していません。
S1端子とS2端子は通常のプッシュスイッチと同様に扱えます。こちらもマイコンの内蔵プルアップを使用して動作させます。

全体の回路図
全体の回路図を以下に示します。Pico Wに今まで紹介した回路を接続した形になっています。
LEDマトリクスとTM1640の組はKiCadの階層シート機能を利用して、同一の回路を16セット並べています。データ線はバラバラですが、クロックは一つにまとまっています。
電源はPico WのUSBに5Vを供給して、Pico Wのピンから3.3Vが基板側に供給される形になります。

基板設計
KiCadで基板設計を行いました。KiCadで3D表示した画像を以下に並べます。
基板の寸法は178 mm x 148 mmです。
表面:

裏面:

LEDマトリクスの寸法はデータシートでは1辺31.9 mmとなっていますが、並べたときに入らないと困るので僅かに余裕を持たせて32.0 mm間隔で並べました。
TM1640は対応するLEDマトリクスの裏面に配置しています。
16セットのLEDマトリクスとTM1640の組については、コピペ&スクリプトによるリファレンス書き換えで同じパターンを並べています。この方法の詳細が気になる方は以下の記事を参照してください。
PCBWayで基板製造
設計した基板を製造してもらうのですが、今回はPCBWayから基板製造のオファーを頂きました。
PCBWayの紹介リンクを貼っておきます。このリンクから新規ユーザー登録すると登録者と紹介者(私)にそれぞれクーポンがもらえるようになっています。
製造用のデータはKiCadで使えるJLCPCB用のプラグインであるFabrication Toolkitで出力したデータがPCBWayでもそのまま使えます。

出力したzipファイルを注文ページにアップロードし、基板の枚数や厚さ、色などを指定することができます。
配送会社にOCSを指定して注文したところ、注文から1週間も経たずに基板が到着しました。
基板の色は黒を選択しました。カッコいいのですが反射が気になってしまったので、つや消しの黒の方が良かったかなと少しだけ後悔しました。
基板の品質については何も気になりませんでした。趣味の工作には十分すぎる品質です。

アクリルパネル
前作のQR時計はユニバーサルB基板で作って秋月のB基板用アクリルパネルを取り付けたのですが、それが結構良かったので今作もアクリルパネルを取り付けたいと思いました。
今回はオリジナルサイズなのでアクリルもカスタムで設計する必要があり、アクリルショップのはざいやを利用しました。
まずは商品ページでアクリルの色や厚みとサイズを指定します。今回は表用にグレースモーク(530 K)、裏用に透明(P)を選択し、厚みはともに2 mm、サイズは基板よりも一回り(1 mm)大きくして180 mm x 150 mmとしました。
その後、加工もWeb上で指定することができます。板加工を選択して角丸とねじ穴を開けます。表側に関してはロータリーエンコーダのシャフトが通るための穴も開けます。

アクリル2枚で加工費込みで¥1,249と思ったよりもお手頃な価格で注文できたのでとても満足しています。
部品実装
部品はすべて手作業ではんだ付けしました。設計時は何も考えていなかったのですが、マトリクスLEDは24ピン、TM1640は28ピンあるのでこれを16セットはんだ付けするのは割と大変でした。

諸々を実装して動作テストした後に気付きましたが、DS1302のメイン電源とバックアップ電源が逆になっていたので、パターンカットとジャンパワイヤで対処しました。(前述の回路図は修正後のものです)

またこの画像に写っているICのフットプリントは、16個のTM1640のクロックをドライブするのにPico Wのドライブ能力が足りないと困るのでバッファICを載せられるようにしておいたものです。結局不要だったので回路図からも抜いています。
仕上げ
アクリルパネルを取り付けて、ロータリーエンコーダのつまみを取り付けたらハードウェアの完成です!
ロータリーエンコーダのシャフトが直径4 mmだったのですが、秋月に売っているつまみは内径6 mmのものしか無かったので、内径4 mm、外径6 mmのスペーサーを3Dプリンターで作って隙間を埋めています。

横から見た写真はこんな感じです。アクリルに合わせて表側と裏側でスペーサーの色を変えているのがチャームポイントです。

ソフトウェア
Pico Wのソフトについては長くなりそうなので別の記事で紹介したいと思います。(準備中)
完成するとこんな感じでQRコードを表示できるようになります。

またこの作品の紹介動画をニコニコに投稿しているので、よろしければこちらもご覧ください。