知的好奇心 for IoT

IoT関連の知的好奇心を探求するブログです

micro:bit用のバギー :MOVE miniをmicro:bitの加速度センサーでリモコン操作するプログラムを公開します

みなさん、micro:bitを使ったことがありますか?

MicrosoftのMakeCodeというクラウド上の開発環境でプログラミングができるんですよ。

上のリンクの説明では「ブロック」と「JavaScript」だけしか書かれていませんが、少し前に「Python」にも対応して、「ブロック」でプログラミングしたものが「JavaScript」と「Python」のコードに切り替えて見ることもできるんです。

f:id:IntellectualCuriosity:20210507204144p:plain

micro:bit(MakeCode)の優れているところは、micro:bitが持っている豊富なハードウェアの機能(25個のLED、2個のボタン、加速度センサー、磁気センサー、無線、入出力など)を使うブロックが、創造性を発揮できるように大変良くデザインされているところで、このデザイン(この場合は視覚的な意味ではなく構成という意味)のできの良さが他のブロックプログラミングができる製品とは一線を画していると思います。

 

micro:bitは単体で十分楽しめる製品ですが、Kitronikのような会社がアドバンスドな使い方ができるアクセサリを色々と用意してくれています。

Kitronikから最初に発売されたバギーが「:MOVE mini」で、その改良版が「:MOVE mini MK2」です。(タイヤにゴムが付いただけですが...)

Kitronik :MOVE mini MK2 buggy kit (excl micro:bit)

f:id:IntellectualCuriosity:20210507220749p:plain

この「:MOVE mini MK2」は2個のローテーションサーボと5個のフルカラーLED(NeoPixel)が付いているキットで、価格が£23.95(約3,626円)します。

 

このKitronikから最近新しいバギー「:MOVE Motor」が発売されました。なんと、ライントレースセンサーと超音波距離センサーが付いたにもかかわらず、価格が£1下がってるんです。

Kitronik :MOVE Motor for the BBC micro:bit

f:id:IntellectualCuriosity:20210507225040p:plain

「:MOVE mini」には組み立てた後に、分解しないと電池が取り替えられなかったり、コネクタ部分が細いmicroUSBケーブルしか差し込めないという使い勝手の悪さがありましたが、「:MOVE Motor」はその問題が改善されていて、電池も単4電池3本から単3電池4本に変わったことで持ちが良くなっています。

また、「:MOVE Motor」は車体が組み立て済みでタイヤを取り付けるだけになっているのでとっても楽チンです。

ただ、モーターがローテーションサーボからDCモーター(ギア付き)に変更されていて、「:MOVE mini」のプログラムは動作しません。

 

よくできた弟の「:MOVE Motor」が発売されて、兄の「:MOVE mini」が不憫に思えたので、「:MOVE mini」用のプログラムを公開することにしました。

 

:MOVE miniをmicro:bitの加速度センサーでリモコン操作する

 動作ビデオ

 Aボタンを押しながらmicro:bitを傾けると、傾けた方向に:MOVE miniが動きます。

また、Bボタンを押すと「パレード」が発動して、カラフルにLEDを点滅させながらその場で回転します。(ビデオではBボタンを次に押すまで「パレード」が続きますが、公開プログラムではBボタンを押している間だけ「パレード」が発動するように変更しています。)

 

リモコン用プログラム

リモコン用のプログラムは非常にシンプルです。

AとBのボタンの押され方にしたがって、無線で次のデータを送っています。

(データは”名前”と”値”という組み合わせになっています。)

  • Bボタンが押されている時
    名前:”パレード”、値:1
  • Aボタンが押されている時
    名前:”ピッチ”、値:加速度センサーの前後の傾き(角度)
    名前:”ロール”、値:加速度センサーの左右の傾き(角度) 
  • 何もボタンが押されていない時
    名前:”ピッチ”、値:0
    名前:”ロール”、値:0 

 

バギー用プログラム

 バギー用のプログラムはmicro:bit(MakeCode)にしては複雑で大きなプログラムとなっていると思います。

 でも、実際に行っていることはLEDの制御とローテーションサーボの制御だけなので、プログラムを部分ごとに見ていくと何をしているかが見えてくると思います。

 

LEDの制御

LEDの動きには、次の2つの種類があります。

  • ナイトライダー:青のLEDが左右に動く通常状態の動作です。
  • パレード:LEDがカラフルに点滅するパレード時の動作です。

バギーの電源を入れた時は「ナイトライダー」の動きをするようになっていて、Bボタンが押されている時だけ「パレード」の動きをします。

「ずっと」のループで100ms毎に「ナイトライダー」か「パレード」のLEDの動きを1つ行うようになっています。

 

ローテーションサーボの制御

無線でデータを受信した時に、「ピッチ」と「ロール」の値を左右のローテーションサーボの動作値に合成して出力しています。

また、受信したデータが「パレード」の時は強制的にその場で回転させています。

 

ローテーションサーボに出力する値は、普通のサーボモーターと同じで0〜180までの角度になっています。しかし、動作は普通のサーボモーターとは異なり、90度の時に止まり180度で全速前進、0度で全速後退します。

 

「パレード」時のサーボモーターへの出力はP1(右)とP2(左)両方とも180度ですが、左右のモーターは180度逆の位置に付いているため、左右のモーターが全速で逆回転することになりバギーがその場で回転します。

 

後ひとつ、ローテーションサーボを使う時の注意点を説明します。

ローテーションサーボは90度で停止するハズなのですが、90度が中間の出力値であるため、90度を出力しても完全には止まらずに動いてしまうことが多いです。

このローテーションサーボにはお尻に調整用のネジが付いていて、90度で止まるように調整できますが完全ではありません。

そのため、私の用意したプログラムでは「ピッチ」と「ロール」の値が停止時の値の時には、:MOVE mini用に特別に用意された「stop」ブロックを使って動かないようにしています。