準備編

Micro:bit
小型スピーカー
DFPlayer
マイクロSDカード
ブレッドボード
ワニ口クリップ- オスジャンパワイヤ
電池

配線する

この図に沿って配線する

配線した状態


マイクロSDカード側の準備

マイクロSDカード内に二桁の数字のフォルダを作成
その中にmp3のファイル名を三桁の数字に変更して保存する

Micro:bitにDFPlayerの拡張ブロックをインストールする

MakeCodeの『拡張機能』から『DFPlayer』で検索すると上記の画面になるので、
選択して拡張ブロックをインストールする

インストールされたブロック


サンプルプログラムを作成

DFPlayerの接続している端子を設定してボリュームを初期化。
起動がわかるようにLEDを点灯。

ボタンAでフォルダから001.mp3のファイルを再生
ボタンBで次の曲を再生
ボタンABでポーズ

スピーカーからノイズ・・・

プログラムを書き込むやスピーカーから「ドドドドドドド」小刻みなノイズが。。
PCとUSB接続していたので外して、外部給電に変更。

単4電池2本だと再生されず、単4電池3本にするとノイズも止まって
きれいに再生された。

エルボーについて考える

エルボーに合わせて合いの手が出るということは、
エルボーが放たれたということを検知しなければならない。

エルボー・バットとは:
自身の片腕を曲げて片肘を突き出し、振り上げたり振り下ろしたりして相手に叩きつける。

キックボクシングの経験から考えるに、
肘の動きとしては、以下のような流れになる。

①肘(実際には腰)を後ろに引く
②肘を上部に引き上げながら
③前方へ振り下ろし
④手首を胸に引き寄せることで肘を最大可動域まで伸ばす

再考

しかしよく考えるとこれは昔通っていたジムで教わった
「相手の眉を切らせて不戦勝」のための裏技エルボーだ、これではない。

正統派なかち上げ式エルボーに変更したい。
①肘(実際には腰)を後ろに引く
②肘を脇に引きつけながら
③前方上部へ突き出し
④手首を胸に引き寄せることで肘を最大可動域まで伸ばす

加速度センサーについて考える

加速度計は加速度をX、Y、Zの三つの値で表す。これらの値は、大きさ(量)と方向の両方を表している。

micro:bitが地面と平行に保たれ、LEDディスプレイが上を向き、エッジコネクタが手前を向いている状態で、X値は左右の加速度を測定する。Yは自分から離れた方向または自分に戻る方向の加速度を測定し、Zは上下の加速度を測定する。

つまり、XとYは2つの水平面の加速度を表し、Zは垂直面の加速度を表す。

Datasheet:加速度センサーから得られる値

micro:bitを平らにすると、XとYの加速度が0に近く、Zの加速度が-1024に近くになるようだ。
これは重力がmicro:bitに対して下向きに作用していることを示すとのこと。ボードを裏返し、LEDが床に最も近くなるようにすると、仕様ではZ値は+1024とプラスの値になる。またmicro:bitを勢いよく振ると、加速度が±2048まで上がるのが分かる。これは、この加速度計が最大値±2048ミリグラムを測定するように設定されているためで、実際の数値はそれよりも高い可能性があるとのこと。

Datasheet:ジェスチャー検出

micro:bitは以下のジェスチャーを認識することができる

上、下、左、右、フェイスアップ、フェイスダウン、自由落下、3g、6g、8g、シェイク

→3g、6g、8gのジェスチャは、デバイスがこれらのレベルのGが加わったときに適用される。

エルボーと加速度

ではエルボーをする際の加速度はどうなるだろうか?

①肘(実際には腰)を後ろに引く →Y軸がマイナス方向
②肘を脇に引きつけながら →X軸がゼロに近い
③前方上部へ突き出し →Y軸がプラス方向&X軸もプラス方向
④手首を胸に引き寄せることで肘を最大可動域まで伸ばす →X軸が急速にゼロへ&Y軸はプラス方向

エルボーの動きを計測する

エルボーした際の肘の動きの加速度センサーの値をとってみる。micro:bitを2つ使って1つは肘に装着してその加速度センサーの値をもう1つのmicro:bitへ渡してPC上で表示させる。

何度かエルボーした値は以下のようになった。
①肘を引く②肘を横に回す③肘を突き出すの動作時の値を取得した。

■1回目のデータ
①X:648,Y:620,Z:64
②X:940,Y:-4,Z:940
③X:1016,Y:568,Z:416

■2回目のデータ
①620,216,396
②720,604,629
③1132,172,-17

■3回目のデータ
①940,56,144
②1052,288,508
③152,-688,320

値が定まっていない・・・

結局10回以上テストしてみたが数値がバラバラ。。。
テストの条件がよくないのかも。。ちゃんとサポーターとかで固定して同じ条件を出さないとだめか。

あと今のテストプログラムだとAボタンを押したあとに計測しているが、それだと動きの1点の計測になるのでもう少し幅をもたせたいが、ずっと取得するとどの動作がどの数値かが分からないので、そこの工夫が必要。