世界一深い賽銭箱があると,ついお賽銭を入れたくなりませんか?
今回作ったしくみは,スピーカーを内蔵したATOM Echoと距離が測定できるToF Unitを使用し,距離の変化をトリガーとして何らかのリアクションを返す(今回の場合は音を鳴らす)しくみとして汎用的に使用できます。
将来的に他の距離が測れるユニット(Ultrasonic Unit)や全く別のユニットを使用したトリガーにも対応する予定です。
- ATOM Echo
- ToF Unit
ATOM Echoと接続するためのGROVEケーブルも付属しています。 - 賽銭箱
セリアで購入 - 超強粘着 粘着ゲル 両面テープ CROCODILE GRIP
ダイソーで購入。ATOM EchoやToF Unitを賽銭箱に固定するのに使用。強めに貼れてはがせるので便利 - 音源ファイル(WAV)
動画で使用している音源は以下の2つのファイルを結合して1つのファイルにしています。- Springin' Sound Stockの演出にある「落下 2」
- Springin' Sound Stockの生活にある「お賽銭 1」
VSCodeのPlatformIO IDEが必要です。Windows 11上で動くVSCodeで動作確認をしています。
使用する音源ファイル(WAV形式)をsound-effect.wav
という名前でdata
フォルダに置いてください。SPIFFS(SPI Flash File System)に転送して使用します。
ファイルを置いたら,PlatformIO メニューから「Upload Filesystem Image」を選択するか,コマンドラインからpio run --target uploadfs
を実行してSPIFFS にアップロードします。
実際に使用する場所にATOM EchoとToFセンサーを設置してください。
USBケーブルを挿して起動すれば,自動的にデフォルトの距離を測定してその平均値を閾値として設定します。閾値が決まると測定準備は完了です。ATOM EchoのLEDが緑色に点灯し,距離の測定が始まります。測定距離が短くなる(今回の例ではお金が賽銭箱を通った)とトリガーが発火し,落下音がします。
測定距離の閾値とは,ToFセンサーの測定値がこの値以下になったらトリガーが発火し,リアクションを返す(今回の場合は音を鳴らす)値です。
初めて起動する場合,もしくはATOM Echoのボタンを押したまま起動した場合に閾値設定モードになります。デフォルトでは距離を10回測定(測定するたびにATOM EchoのLEDが青点滅する)し,その平均値を閾値とします。
閾値はATOM Echoの不揮発記憶装置(NVS: Non-Volatile Storage)に記録されるので,次に起動するときは記録された閾値を使うようになります。再度設定し直したい場合は,ATOM Echoのボタンを押しながら起動させてください。
ToF Unitは測定精度が±3%なので,閾値との±3%以内の距離の違いは誤差として扱います。
起動時には距離測定が有効(ATOM EchoのボタンのLEDが緑色に点灯)になっています。この状態でATOM Echoのボタンを押すと,LEDが消灯して距離測定を無効にします。ATOM Echoのボタンを押すごとに有効・無効が切り替わります。
M5Burnerで配布するファームウェアを作成するには,PlatformIOメニューにあるPROJECT TASKSからCustomの下にある「Generate User Custom」を選択します。
ビルドが完了すると,platformio.ini
のenv
セクションにあるcustom_firmware_dir
で指定したディレクトリ(デフォルトはfirmware
)に配布用のファームウェア(.bin
ファイル)が生成されます。
配布用ファームウェアには音源ファイルが埋め込まれ,一緒に配布することができるようになります。埋め込まれた音源ファイルは起動時にSPIFFSに同名のファイルがあるか確認し,なければSPIFFSに書き込みます。
配布用ファームウェアを書き込んで初めて起動する場合,SPIFFSをフォーマットし,音源ファイルの書き込みが行われるため,測定開始になるまでに20秒くらいかかります。
M5Burnerでのファームウェアの配布方法はM5Burner v3の使いかたを参照してください。