なすてっく

なすのものづくり記録。モヤモヤしたのはこっち→ https://nas-rik.hatenablog.com/

超初心者がM5Stackを使っておうちイベントを作った話~途中経過~

はじめに

本記事はM5Stackアドベントカレンダー2021 21日目の記事です.

身内向けイベント作成するのが趣味 かつ 電子工作ほぼ未経験の初心者がM5Stackを使っておうちイベントのための開発ごっこをしてみた話です. 全くの初心者でもM5Stackと先人の知恵(インターネット)さえあればこんなことができるんだなあ,と感動したので記事にしてみました. 今のところ,技術的な内容はほぼありませんが,ご容赦ください.

(なお,筆者のレベルとしては,C++でごくごく簡単な数値計算を書いたことはあるが,ライブラリなどは呪文のようなものだと思っている…くらいです)

本来であれば,この場で「こういうイベントができました!」というのを発表したかったのですが,色々と全く間に合わず経過報告になってしまいました(納期を切らない作業,よくない). 後日全編公開したいです.

おうちイベント is 何

今回やりたかったのは「おうちイベントのための電子工作」です. おうちイベントとは,身内でやる用にワンオフで自作したリアル脱出ゲームやボードゲームのようなもの,と思っていただければ良いかと思います(私が勝手にこう呼んでいるだけです).

私がこれまで作成してきたものは完全にアナログゲームで,プレイヤーとのインタラクションは人(仕掛け人)と話すか,せいぜい部屋の探索・鍵開け程度のことしかできませんでした. ここに電子工作を取り入れれば,プレイヤーへの反応が自動化できて,仕掛けの幅が一気に広がるのでは…!? というわけで,ディスプレイが付いていて取り回しがしやすそう&先人の知恵がインターネット上にたくさんありそうなM5Stackを導入することにしました.

一応,過去に作成したおうちイベントを貼っておきます.  https://twitter.com/echo_nas/status/1330388298288816130  https://twitter.com/echo_nas/status/1390849840720973825

M5Stackを使って作りたい機能

  • くす玉を割ると音楽が流れる
  • カードをタッチするとディスプレイ上で動画が流れる

イデアは色々と出てくるのですが,何しろ開発経験がありません.できそうなところから取り組みます. 今回のイベントでは上記2つの機能をM5Stackを使って作ってみることにしました.以下,これらの機能の実装について,なんにもわからんなりにゴニャゴニャした記録です. こんなにわからないのにとりあえず動いてくれるの本当にありがたいです.豊富なライブラリと大量の先人の知恵! 凄すぎる……

くす玉を割ると音楽が流れる機能

家にある時突然くす玉が現れるのはそれはそれで面白い気はするのですが,ただくす玉が割れるだけではつまらないので音楽を流すことにします.もちろん,「タイミングを見計らって人力で」なんてシラケちゃうので,ここは自動で.

くす玉が割れた判定をどうするか,ですが,M5Stackのコンパクトなボディを生かして,本体をくす玉の中に入れてしまうことにしました.そして内蔵の加速度センサを使って,一定以上の加速度が発生したらSDカード内に保存したMP3を流す,ということにしました.

お借りした先人の知恵はこちら:

上記2つのサンプルコードを組み合わせたら簡単にできました. LCD表示はナシ,停止は電源ボタン押せばイイやということで何も考えず,キモの部分は多分これだけ.想定した機能は作れました.か,簡単すぎる…

 M5.IMU.getAccelData(&accX,&accY,&accZ);
 if(sqrt(accX*accX+accY*accY+accZ*accZ) < 0.5){
playMP3("/sound.mp3");}

「設置中に少し動かしただけでウッカリ動作してしまう」という結構大きな問題があるのですが,今回はスルー(運用でカバー)することにしました.くす玉が発見されるまでの間の待機電力が心配だったので,M5Stack用のバッテリーを別途購入しました.数時間持てば問題ないので,今のところ大丈夫そう.

ちなみにこのイベントは「誕生日祝い」.誕生日といったらドラクエ3のオープニングでしょう,ということで,くす玉を割るとドラクエの序曲が流れます. ロト編と天空編どちらの序曲にするかで1週間悩みました.本機能の実装よりも明らかに長い. IMG_5074.jpg ▲ある日突然部屋に現れるくす玉.ドンキホーテで買ったザル×2に紙とリボンをぺたぺた貼りました.M5Stackは垂れ幕の裏に隠れています.

カードをタッチするとディスプレイ上で動画が流れる

さて,こちらの機能がまだ未完成です…. 初めてM5Stackに触ってみた時に作ったのが[「FelicaでタッチしたらGoogle Spreadsheetに自動で書き込む」というもの]だったのですが,これを応用して作ろうと思います.

このときお借りした先人の知恵はこちら:

初めてM5Stackに触るところからこれを作るまではそれなりに大変だったのですが,色々と調べながらなんやかんやで結局3日くらいで完成しました.ライブラリが充実していること,参考資料が多いことは本当に何よりもえらい,これが,文明……凄すぎる………

さて,タッチするところまでは動作が確認できていますので,あとはこれをトリガーにして動画再生する仕組みが必要です.下記2つの記事を参考に,なんとかならないか…と検討しているところです. 1つ目の記事はタイトル通り,Bluetoothキーボードとして,M5Stackのボタンを押すとキーボードのコマンドを送信する仕組みについて.2つ目の記事は,動画ソフトVLCを使ってセンサー入力をトリガーにして動画再生ができるよという話です.

これらを組み合わせてどういうことがしたいかというと,

  • PC:ディスプレイに接続し,VLCを立ち上げて動画の最後(暗転にしておく)を表示しておく
  • M5Stack:BluetoothキーボードとしてPCに認識させておく.Felicaのカードがタッチされたらキーボードの「p」キーのコマンドを送信.VLCで巻き戻し再生が始まる!

…というのを作ろうとしています.思ったよりしんどいです.鋭意作成中!

おわりに

尻切れな記事になってしまって+技術的記述のほぼ無い記事で恐縮ですが,組み込み系?プログラミングの知識が全く無いところからこれだけスッと形にできてしまうパッケージ,あまりにも凄すぎる!!!ということで,勢いのまま記事にしました. どんどん活用してもっと面白いことしていきたいです.読んでいただいた方,ありがとうございました.続きをお楽しみに…!!!