ビクトリア朝風時計ディスプレイ:350個のLEDと1つの制御ボードですべてを制御
以前のブログ「ビクトリア朝時代の21セグメント式ディスプレイを再現」では、日曜大工(DIY)の友達(およびMakerの並外れた存在)であるスティーブ・マンレイと私がビクトリア朝時代の21セグメント式ディスプレイの現代的な解釈をどのように作成しようとしているのかを説明しました。元のディスプレイを照らしていた小さな白熱電球ではなく、Adafruit Industries LLCの4684など、3色のWS2812B LEDを使用しています。
同様に、「当時」の最先端技術であった複雑な電気機械式スイッチを使用してすべてを制御する代わりに、ビクトリア朝時代のエンジニアと発明家にとっては非常に難解な、最新のマイクロコントローラユニット(MCU)を使用しています。
スティーブと私は2人とも10文字のディスプレイを作成しています。これらの1つがどのようなものなのかを理解していただくため、図1に、真ちゅう色の塗料をスプレーした3Dプリントされたフロントパネルを使用した、スティーブの初期実装ディスプレイを示します。このケースでは、スティーブは簡単なパターンをテストして、すべてのLEDが機能していることを確認しようとしていました。
図1:ビクトリア朝時代の21セグメント式ディスプレイの現代的解釈である10文字ディスプレイの初期実装。(画像提供:スティーブ・マンレイ)
スティーブの3Dプリンタが20インチにわたるディスプレイを加工できなかったため、疑似真ちゅうパネルが半分ずつに分割されていることがわかります。また、スティーブは、文字の外縁を囲む10個の大きな「穴」をフロントパネルに作成しました。一方、私のフロントパネルは、真ちゅう仕上げのアクリルの単一片からレーザー光線で切り抜いたものです(図2)。
図2:10文字ディスプレイの主な要素。レーザーで切断されたアクリル製の疑似真ちゅうパネルが手前に見えます。このパネルの後ろには、高さ64 mm、幅50 mm、厚さ10mmの3Dプリントシェルが10個あります。上部には、裏返した10個のLEDボードがあり、5個の2ボードサブアセンブリとしてグループ化されています。(画像提供:マックス・マックスフィールド氏)
各回路基板は、幅50mm、高さ64mmです。これらのボードは、5つの2ボードサブアセンブリにグループ化されています。また、ボードと同じサイズで厚さ10mmの3Dプリントシェルも10個あります。レーザー切断した私の疑似真ちゅうパネルの場合、レーザーは各文字を形成する21のセグメントを切り抜き、セグメント間に0.7mmの薄いストリップを残すことができました。
スティーブと私はこれまで、通常は友好的な競争を通じて同様のプロジェクトに取り組んできました。たとえば、数年前に作成した精巧なストップウオッチなどがあります(参照:Create a Cunning Chronograph with Arduino)。実を言うと、LEDの数や相対的位置などの基本ルールについては以前に合意していましたが、MCU、リアルタイムクロック(RTC)などに関しては通常、各自の方法で取り組んできました。このアプローチの問題点は、コードの共有や交換がほぼ不可能になることです。
ひいては、新しいプロジェクトに取り掛かるたびに、既に存在しているものを独自に再開発することになり、時間と労力の無駄になります。このため、そのような場合は、二人がディスプレイの駆動に使用する単一の制御ボードを作成することにしました。さらに、今後数年間のプロジェクトを推進するために必要なすべての「ベルとホイッスル」を備えたボードを作成することにしました。
私たちが製作したビクトリア朝風ディスプレイ制御ボード
私たちは、多くのブレインストーミング、交渉、妥協を経て、自分たちが抱えていたすべてのニーズを満たす設計を思いつきました。おそらく、これについて説明するための最良の方法は、ボードを見せて(図3)、さまざまな部品について手短に紹介することです。
左側の中央には、SparkFun Electronics製DEV-14058型のTeensy 3.6であるメインプロセッサがあります。これは、180メガヘルツ(MHz)(240MHzにオーバークロック可能)で動作する32ビットArm Cortex-M4Fプロセッサと、1メガバイト(Mバイト)のフラッシュ、256キロバイト(Kバイト)のSRAM、4KバイトのEEPROMを備えています。
図3:DEV-14058型Teensy 3.6プロセッサボード(Arm Cortex-M4Fコアベース)から始まる、同社制御ボードの初期バージョン(左側)(画像提供:スティーブ・マンレイ)
ボードの向こう側にあるTeensyの後ろには、ディスプレイの輝度や音に対する感度など、必要なものすべてを制御するために使用できる2つのポテンショメータがあります。Teensyの右側には、MCUのコミットされていない入出力(I/O)ピンにアクセスするために使用できるヘッダがあります。
Teensyの前には、CR2032コイン電池があり、システムから主電源が切断されたときにRTCを維持するために使用されます。右側のCR2032の前には、追加のI2Cベースのセンサとアクチュエータをボードに接続するために使用できるヘッダがあります。左側のCR2032の前には、8つの3ピンヘッダグループがあり、各グループが0ボルトのピン、5ボルトのピン、データのピンで構成されています。各グループはWS2812 LEDのストリングを駆動できます。また、Teensyには、8つのストリングを同時に駆動できるOcto LED Libraryが関連付けられています。
21セグメント式ディスプレイの場合、7個の短いセグメントにはそれぞれ1つのLEDがあるのに対し、14個の長いセグメントにはそれぞれ2つのLEDがあるので、1文字あたり35個のLEDが使用可能となるため、10文字の表示では合計350個のLEDが使用可能となります。各LEDには24ビットのデータが必要であり、LEDへのデータロードに使用するクロックは800キロヘルツ(kHz)で動作します。これは、単一のMCUピンからすべてのLEDを駆動する場合、データチェーンのロードに((35 x 10) x 24) / 800,000 = 10.5ミリ秒(ms)かかることを意味します。
これに対し、TeensyのOcto Libraryを使用し、10文字を5つの2文字ペアに分割した場合は、この時間を((35 x 2) x 24) / 800,000 = 2.1ミリ秒に短縮することができます。さらに良いことに、Octo LibraryはTeensyのダイレクトメモリアクセス(DMA)エンジンを使用してこのアップロードをバックグラウンドで実行できるため、驚くほど精巧な照明効果の計算など他のタスクを実行できるようにメインプロセッサを解放します。
ボードの中央にある5つのモーメンタリ押ボタンスイッチは、メニューへのアクセス、モードと効果の選択、値(日付と時刻など)の入力に使用します。また、ボードの端に取り付ける緑色のネジブロック端子を使用して、キャビネットに取り付ける5つのスイッチを並列に接続することもできます。また、上記の押ボタンと同じタスクを実行するのに使用できる赤外線(IR)制御機能も搭載することにしました。IR検出器は中央のボタンの下にあります。このボタンの上には、周囲光に基づいてディスプレイの輝度を制御できる光依存抵抗(LDR)があります。LDRの上にはエレクトレットマイクロフォンがあり、これを使用してディスプレイを音に反応させることができます。これらのデバイスはすべて、ボードから取り外してキャビネットに取り付け、緑色のネジブロック端子を使用してボードに接続できます。
ボードの右側には、Seeed Technologyの102010328 Seeeduino XIAOがあります。XIAOは、切手と同じ大きさしかありませんが、256Kバイトのフラッシュメモリと64KバイトのSRAMを備えた、48MHzで動作するATSAMD21G18 32ビットArm Cortex-M0+プロセッサコアを搭載しています。XIAOは、IR制御信号を処理してTeensyに供給するために使用されます。これはやり過ぎと見なされるかもしれませんが(Teensyを使用すれば、ほぼ確実にIRを直接処理できるため)、「『分割統治』アプローチを取った方が、私たちの生活が長期的にははるかに楽になる」と私たちは判断しました。
面実装デバイス(SMD)はボードの下に配置されます。これらのデバイスに搭載されているのは、Maxim IntegratedのDS3231SN# RTC、NXPの低電力ステレオオーディオコーデック「SGTL5000XNAA3R2」、LogiSwitch のスイッチデバウンスチップ「LS119-S」、電圧レベルシフタとして機能する、Toshiba Electronic Devices and Storage Corpのオクタルバストランシーバ「74HCT245」です。
図4に、ディスプレイの背面に取り付けられた赤い制御ボードを示します。また、同じ図に示されている緑色の配電盤には、必要に応じて追加の3.3ボルトセンサを駆動するために使用できる頑丈な3.3ボルトレギュレータが搭載されています。
図4:10文字のディスプレイの組み立て。画像の右側に赤い制御ボードがあります。左側の緑色のボードは、ボードとディスプレイに給電するために使用されます。(画像提供:マックス・マックスフィールド氏)
ディスプレイの右側には青いプロトタイピングボードがありますが、ここでは表示されていません。つまり、以上により赤、緑、青(RGB)のボードが揃ったことになりますが、これには笑いたくなりました。理想的には、配電盤は赤で、制御ボードは緑にすべきでしたが、赤の基板での配電に必要な厚めの銅を使用するには、ボードのファブによってなぜか大幅なコストペナルティが課せられました。このため、私たちはお金を節約するために必要なことをしたわけです。
制御ボードのプログラミング
次のステップでは、ディスプレイを駆動するコードの記述を開始する必要があるため、本当のお楽しみが始まります。私たちが使用する予定の1つのアプローチは、背景色、前景色、マスクのコンセプトを作成することです。マスクビットを0に設定すると、対応するセグメントに背景色が表示されます。同じマスクビットを1に設定した場合は、前景色が表示されます。ここで興味深い点は、前景色と背景色の両方を黒や白などの動かない色にできることです。あるいは、前景色と背景色のいずれかまたは両方を動く色にすることもできます。たとえば、虹のストライプをディスプレイ全体に波打たせるなどです。
まとめ
これら新しく鋳造されたビクトリア朝風の時計ディスプレイを使用して実行する予定の実験が他にも数多くあります。たとえば、マイクロフォンとオーディオコーデックチップを使用して、音声反応モードを作成する予定です(参照:Audio-Reactive Artifact with Arduino Part 1およびPart 2)。私が実験したいもう1つのことは、文字を左または右に傾けることでディスプレイ上で「スライド」させる機能を追加することです(参照:Adding Motion and Orientation Sensing to Hobby Projects)。
締めくくりのことばを申し上げると、123年前の1898年にオリジナルの21セグメント式ディスプレイの特許を申請したジョージ・ラファイエット・メースンのことを考え続けています。私たちが今日のテクノロジーを使って自分のアイデアを再現しているのを目にすることができたら、ジョージはどう思っただろうかと、ふと考えるのです。

Have questions or comments? Continue the conversation on TechForum, Digi-Key's online community and technical resource.
Visit TechForum