87
Raspberry Piでスクロールテキスト付きフェイスマスクを作る方法

マスクを着用していると、何を言っているのか相手に伝わりにくいことはありませんか?マスクを着用したまま、ファッションセンスをアピールしながら、テキストで自分を表現できます。このチュートリアルは、「顔に書いてある」という表現に新たな意味を与えます。

フェイスカバーは、ほとんどの人にとって、言葉によるコミュニケーションの妨げにもなります。話す時にマスクを下げる人が多く、残念ながらマスク本来の機能を損ねているのを目にしてきました。鼻と口を覆いながら、どのようにすればはっきりと自分の考えを伝えることができるのでしょうか?

この記事では、 Raspberry Piと8x8のフレキシブルなNeoPixelマトリックスを使って、スクロールするテキスト付きフェイスマスクの作り方をご紹介します。また、16ピクセル幅と32ピクセル幅のマトリックスに対応した2種類のバリエーションもご用意しています。布製のフェイスマスクは、上層が半透明で、口と鼻を完全に覆う必要があります。フェイスマスクを洗う前に、電子機器類はすべて取り外してください。 

Raspberry Pi のスクロールテキストフェイスマスクはどのように機能しますか? 

鼻と口を覆うフェイスマスクを着用し、電源を入れた状態で、ローカル Web ページのフロントエンドに移動し、フェイスマスク上でスクロールするテキストを入力します。 

Raspberry Pi スクロールテキストフェイスマスク

(画像提供:Tom's Hardware)

必要なもの

  • GPIO ヘッダーがあらかじめはんだ付けされているRaspberry Pi 3、 Raspberry Pi 4、またはRaspberry Pi Zero W 、または自分ではんだ付けすることもできます。 
  • 電源/キーボード/マウス/モニター/HDMIケーブル(Raspberry Pi用)
  • 個別にアドレス指定可能な LED を備えた 8x8 フレキシブル NeoPixel マトリックス

    または、2つのフレキシブルな8x8 NeoPixelを接続して16x8マトリックスを作成します。

    または、フェイスシールドバージョン用の32x8フレキシブルNeoPixelマトリックス

  • 1N4001ダイオード
  • 熱収縮チューブ付きはんだ付けキット
  • はんだ付けの手助け
  • ワイヤーカッター/ワイヤーストリッパー
  • ミニホットエアガンまたはヘアドライヤー
  • 小型ブレッドボード
  • ジャンパー線セット(M-F、M-M、F-F)
  • 半透明の前面層を備えた布製フェイスマスク
  • 小型パワーバンク充電器
  • ワニ口クリップ付きテストリードセット 
  • 切断して被覆を剥がしても問題ないミニまたはマイクロUSBケーブル
  • オプション: マスク ブラケット - 呼吸を補助するために、マスクを口から少し離して優しく保持します。
  • オプション: 壁コンセント付き5V電源

パート1:NeoPixel Matrixのセットアップ

このステップでは、基本的な配線を行い、AdafruitのNeoPixel Uberguideで提供されているサンプルコードを実行します。NeoPixelマトリックスには別途5V電源が必要です。このプロジェクトをモバイル化するため、5Vのモバイルバッテリー充電器を使用しています。

1.フレキシブル NeoPixel マトリックス電源入力のGND を ブレッドボードのグランドラインに接続します。(M-M ワイヤ)

Tom's Hardware の最高のニュースと詳細なレビューをあなたの受信箱に直接お届けします。

2. NeoPixelマトリックスの2番目のGND(DINの隣にある接続)をブレッドボードのグラウンドラインに接続します。NeoPixelマトリックスから接続する必要があるGND線は実際には2本あります。1本は5Vの赤い線の隣にあり、2本目のGND線はDINの隣にあります。両方ともGNDに接続してください。

3. Raspberry Pi の任意の GND ピンをブレッドボードのグランド ラインに接続します。

4. 5V 電源のグランドをブレッドボードのグランド ラインに接続します。

5. NeoPixelマトリックスのプラス端子(電源入力)をダイオードのカソード(ストライプ側)に接続します。

6.電源のプラス端子をダイオードのアノード(ストライプのない側)に接続します。

7. GPIO 21をNeoPixelマトリックスのDIN(データ入力)に接続します。(M-F線)

Raspberry Pi スクロールテキストフェイスマスク

(画像提供:Tom's Hardware)

5V パワーバンク充電器を使用して NeoPixel マトリックスに電力を供給するために、古い microUSB ケーブルを用意し、microUSB 側 (USB は残す) を切断して、ワイヤを剥がして赤 (電源) と黒 (アース) のワイヤを露出させました。 

Raspberry Pi スクロールテキストフェイスマスク

(画像提供:Tom's Hardware)

USB ケーブルを切断する準備ができていない場合、従来の 5V 電源を使用して NeoPixel に電力を供給します

このステップの配線では、ワニ口クリップ付きのテストリードを使用して、剥き出しのUSBケーブルをNeoPixelマトリックスの電源入力に接続します。USBケーブルは最後にパワーバンクの充電器に接続しました。

Raspberry Pi スクロールテキストフェイスマスク

(画像提供:Tom's Hardware)

配線接続が完了したら、Adafruit のテスト コードを使用してマトリックスをテストしてみましょう。

1. Raspberry Piを起動します。microSDカードをお持ちでない場合は、  Raspberry Piの初回セットアップ方法、またはヘッドレスRaspberry Piのインストール方法に関する記事をご覧ください。

2.ターミナルを開きます。Ctrl + T を押してください。

3.必要な依存関係をインストールします。

sudo pip3 install rpi_ws281x adafruit-circuitpython-neopixel
sudo python3 -m pip install --force-reinstall adafruit-blinka

4.ソースコード用にこのリポジトリをクローンします。

git clone https://github.com/carolinedunn/scrollingTextMask

5. scrollingTextMask フォルダに移動します。 

cd scrollingTextMask

6.  テストコードfillMatrix.pyを実行する 

sudo python3 fillMatrix.py

NeoPixelマトリックスが赤、緑、青、虹色に点灯したら、おめでとうございます。NeoPixelマトリックスは正常に動作しており、次のステップに進むことができます。そうでない場合は、戻って接続のトラブルシューティングを行ってください。

トラブルシューティングのヒント:

Raspberry PiでGPIOピン21が動作しない場合は、GPIO出力を10、12 または18に変更できます。GeanyまたはThonny (ファイルマネージャーから右クリック)でscrollingTextMaskフォルダにあるfillMatrix.pyを開き、GPIO出力を更新してください。GeanyまたはThonnyの「実行」ボタンは押さないでください。fillMatrix.pyでGPIO出力を変更した場合、このチュートリアルを進めていく中で、他のファイルでも同じ変更を行う必要があることに注意してください。

7.   Ctrl + C キーを押してスクリプトを停止します。 

Raspberry Pi スクロールテキストフェイスマスク

(画像提供:Tom's Hardware)

このステップの最後には、完全に点灯する基本的な動作する NeoPixel マトリックスが完成します。 

パート2:スクロールテキストのテスト 

このセクションでは、NeoPixel マトリックスのスクロール テキスト機能をテストします。

1.パート 1からターミナルを開いていて、まだscrollingTextMaskディレクトリにいる場合は、testMsg.py を実行します。

sudo python3 testMsg.py

「Welcome to Tom's Hardware」というテキストがマトリックス全体にスクロール表示されます。

2. Ctrl + X を押してPython コードを停止します。 

Raspberry Pi スクロールテキストフェイスマスク

(画像提供:Tom's Hardware)

testMsg.py に関するコードノート 

  • fillMatrix.py で GPIO を 21 から変更した場合は、今後対応する変更も行う必要があります。
  • スクロールテキストは「Welcome to Tom's Hardware」に設定されています。次の手順でスクロールするテキストを入力するよう求められます。
  • 「matrixbrightness」は、最大の明るさを得るために 1.0 まで設定できます。
  • 「scrollSpeed」は、マトリックスに表示されるテキストの速度を調整します。数値が小さいほどテキストのスクロール速度が速くなり、数値が大きいほどテキストの表示速度が遅くなります。
  • 「TextColor」はテキストのRGBカラーです。デフォルトではテキストカラーは白(255, 255, 255)に設定されていますが、お好みに合わせて色を変更できます。

Raspberry Pi スクロールテキストフェイスマスク

(画像提供:Tom's Hardware)

Raspberry Pi スクロールフェイスマスクのテキストをカスタマイズします。

3.同じターミナルと同じディレクトリからtestMsgInput.py を実行します。

sudo python3 testMsgInput.py

4. コードが自動的にテキスト入力を促すので、「hello」などお好きなフレーズを入力してください。 

Raspberry Pi スクロールテキストフェイスマスク

(画像提供:Tom's Hardware)

Raspberry Pi のスクロールテキストマスクのフォントを設定する(オプション)

マトリックス上の文字(フォント)が、チュートリアルのサンプル動画でご覧いただいたものと少し異なることにお気づきかもしれません。サンプルコードではRaspberry Pi OSに付属のデフォルトフォントを使用していますが、動画では5x7フォントを使用しています。個人使用目的でフォント5.7.ttfをダウンロードし、Raspberry Piにインストールすることができます。

1.フォント5.7.ttfをダウンロードする

2. 新しいターミナルを開き、5x7.tff を含むフォルダーに移動して、次のように入力します。

sudo cp 5x7.ttf /usr/share/fonts/truetype

 3. GeanyでtestMsgInput.pyを開く

4. 26行目の「font = ImageFont.truetype("LiberationMono-Regular.ttf", 8)」の前に#を追加してコメントアウトします。

5. 28行目のコメントを解除して、 #を削除し、フォントを5x7.ttfに設定します。

6. testMsgInput.pyを保存する

Raspberry Pi スクロールテキストフェイスマスク

(画像提供:Tom's Hardware)

7. testMsgInput.pyを再度実行する

sudo python3 testMsgInput.py

選択した単語またはフレーズを入力します。

Raspberry Pi スクロールテキストフェイスマスク

(画像提供:Tom's Hardware)

Raspberry Pi 用 Flask フロントエンド Web ページ (スクロールテキストマスク)

このステップでは、マトリックスのスクロール テキストを入力するための便利なフロントエンドFlask Web サイトを作成して、ソリューションをモバイル化します。

1. フォントを変更するオプションの手順 (前の手順) を完了した場合は、ファイルapp.pyでも同じ変更を行ってください。

2. ターミナルからscrollingTextMaskディレクトリに移動し、コマンド (sudo python3 app.py) を使用してapp.pyを実行します。

3.Chromiumブラウザを起動します

4. 「http://raspberrypi:5000」(「raspberrypi」がホスト名の場合)または「localhost:5000」に移動します。

5.マトリックス上でスクロールする任意の単語またはフレーズを入力します。

6.別のデバイスでテストします。エントリがマトリックス上で2回スクロールする場合は、別のコンピューターまたはスマートフォン(同じWi-Fiネットワークに接続)でブラウザウィンドウにhttp://raspberrypi:5000」と入力してください。ここでも、ホスト名はraspberrypiと仮定しています。

7.任意のテキストを入力します。テキストがマトリックス上で2回スクロール表示されたら、このスクリプトを起動時に開始するように設定する準備が整いました。

  • 入力されたテキストがマトリックス上でスクロールする回数は、repeats = 2 に変更することで調整できます。repeats = 1 に変更すると、テキストはウェブページへの入力ごとに1回だけスクロールします。テキストを無期限にスクロールさせたい場合は、前の手順で作成したtestMsgInput.py を使用してください。ただし、testMsgInput.py には HTML インターフェースがないため、ご注意ください。
  • 次のフレーズを入力する前に、テキストが完全にスクロールし終わるまでお待ちください。前のフレーズの表示が完了する前に追加のテキストを入力すると、エラーが発生します。
  • フロントエンド Web ページを変更する場合、HTML コードは /home/pi/scrollingTextMask/templates/index.html にあります。

Raspberry Pi スクロールテキストフェイスマスク

(画像提供:Tom's Hardware)

起動時に実行されるように app.py を設定します。

このステップでは、起動時に常にapp.pyコードが実行されるように Pi を設定します。

1.ターミナルを開く

2. 入力

sudo nano /home/pi/.bashrc

3.   .bashrcの 下部に次のテキストを入力します。

sudo python3 /home/pi/scrollingTextMask/app.py

4. Ctrl + X キーを押して終了し、Y キーを押して保存します。

5. Pi をシャットダウンします

Raspberry Pi スクロールテキストフェイスマスク

(画像提供:Tom's Hardware)

パート3:Raspberry Piのスクロールテキストマスクでモバイル化 

このステップでは、ソリューションを真にモバイルなものにします。Raspberry Piをシャットダウンして前のステップから完全に切り離した状態で、まず配線を確認し、必要に応じて写真を撮ります。 

1.配線をすべて取り外します

2.マトリックスの電源入力と USB ケーブルの間に、 カソードとアノードを持つダイオードを正しくはんだ付けします。

Raspberry Pi スクロールテキストフェイスマスク

(画像提供:Tom's Hardware)

3.露出した配線を熱収縮チューブで覆います。ヘアドライヤーまたはヒートガンで熱収縮チューブを密封します。

4. NeoPixelのアース線をUSBケーブルに半田付けします。アース線の間に少し線を追加して、プラス線と揃える必要がある場合があります。露出した線は熱収縮チューブで覆います。ヘアドライヤーまたはヒートガンで熱収縮チューブを密閉します。

Raspberry Pi スクロールテキストフェイスマスク

(画像提供:Tom's Hardware)

はんだ付けが完了すると、NeoPixel マトリックスの電源入力に USB 接続が確立されます。 

Raspberry Pi スクロールテキストフェイスマスク

(画像提供:Tom's Hardware)

5.次に、DINとGNDを2本のメス-オスケーブルでRaspberry Piに接続します。DINをGPIO 21(または前の手順でGPIOピンを変更した場合)に接続します。GNDをRaspberry Piの任意のGNDピンに接続します。

6.ワイヤーが外れないように注意しながら、NeoPixel マトリックスを半透明の布地の前面が付いたフェイスマスクにゆっくりと差し込みます。

7. PiとNeoPixel USBに電源を投入します。USB出力が2つあるパワーバンクチャージャーであれば、1つのパワーバンクチャージャーでPiとNeoPixelの両方に電源を供給できます。Raspberry Pi 4は、USB Type-C出力のパワーバンクチャージャーで電源を供給できます。

8. Pi が起動したら、同じ WiFi ネットワーク上の任意のコンピューターまたはモバイル デバイスに移動し、 「 http://raspberrypi:5000」にアクセスして単語またはフレーズを入力してセットアップをテストします。

入力したテキストがフェイスマスク上でスクロール表示されたら、おめでとうございます。このプロジェクトは完了です。

本当に外出先でのソリューションとして、モバイル プランとホットスポット機能を備えたスマートフォンをお持ちの場合は、自宅の WiFi から切り離すことができます。 

1. スマートフォンからホットスポット機能を有効にします。 

Raspberry Pi スクロールテキストフェイスマスク

(画像提供:Tom's Hardware)

2. Raspberry Pi デスクトップから、WiFi をスマートフォンのホットスポットに設定し、スマートフォンのホットスポットのパスワードを入力します。 

Raspberry Pi スクロールテキストフェイスマスク

(画像提供:Tom's Hardware)

3. スマートフォンのブラウザからhttp://raspberrypi:5000に移動し、フロントエンドの Web ページにアクセスします。 

Raspberry Pi スクロールテキストフェイスマスク

(画像提供:Tom's Hardware)

ボーナス構成

このプロジェクトには、幅 16 ピクセルと 32 ピクセルの構成用の Python ファイルの 2 つの追加バージョンが含まれています。

Raspberry Piのスクロールテキストマスク用の16x8 NeoPixelマトリックスを作成するには、フレキシブルな8x8 NeoPixelマトリックスが2つ必要です。2つ目のNeoPixelマトリックスは1つ目のマトリックスから電源を供給されるため、追加の電源は必要ありません。

1.プライマリ NeoPixel のDOUT を2 番目の NeoPixel マトリックスのDINに接続します。

2. 8x8 NeoPixelsマトリックスを両方並べて、絶縁テープで固定します。 

Raspberry Pi スクロールテキストフェイスマスク

(画像提供:Tom's Hardware)

3. NeoPixelを、半透明の布マスクに挿入します。NeoPixelを装着するには、両端の高さが7.8cmの布マスクが必要です。

4. Pi とメインの NeoPixel マトリックスの電源を入れます

5.ターミナルからPython コード 16-textMsg.py を実行します。

sudo python3 /home/pi/scrollingTextMask/16Matrix/16-testMsgInput.py

6. 8x8 マトリックスのコードに何らかの変更 (フォント、テキストの色、スクロール速度) を加えた場合は、16Matrix フォルダー内のファイルにも同じ変更を加える必要があります。

7. 8x8 マトリックスの場合と同じように 16-app.py を構成してセットアップを続行します。

Raspberry Pi スクロールテキストフェイスマスク

(画像提供:Tom's Hardware)

Raspberry Pi用32x8 NeoPixelマトリックス スクロールテキストマスク

32x8のフレキシブルなNeoPixelマトリックスはすぐにご購入いただけ、8x8マトリックスと同じ構成で接続できます。32x8のNeoPixelマトリックスは幅が広すぎてフェイスマスク内には収まりませんが、フェイスシールドの上には問題なく収まります。

Raspberry Pi スクロールテキストフェイスマスク

(画像提供:Tom's Hardware)

1.パート 1 の手順に従って、柔軟な 32x8 NeoPixel マトリックスを接続します。

2.ターミナルからPython コード 32-textMsg.py を実行します。

sudo python3 /home/pi/scrollingTextMask/32Matrix/32-testMsgInput.py

3. 8x8 マトリックスのコードに何らかの変更 (フォント、テキストの色、スクロール速度) を加えた場合は、32Matrix フォルダー内のファイルにも同じ変更を加える必要があります。

4. 8x8 マトリックスの場合と同じように32-app.py を構成してセットアップを続行します。

5.マトリックスの前面を半透明の布で包み、ホットグルーでフェイスシールドに固定します。

6. Pi とメインの NeoPixel マトリックスの電源を入れます。

さらに、王冠の静止画像を表示したい場合は、32-crown.pyというファイルも利用できます。コードを実行してください。

sudo python3 /home/pi/scrollingTextMask/32Matrix/32-crown.py

Raspberry Pi スクロールテキストフェイスマスク

(画像提供:Tom's Hardware)

結論:

このチュートリアルが楽しく、そして役に立つものになれば幸いです。このプロジェクトは、「あなたの顔に全てが書かれている」という言葉に新たな意味を与えてくれます。