これまでDFRobotのDFR0548(4chDCモータドライバー)を使ったロボットの無線制御について紹介しました。
Microbit:DC motor制御(DFROBOTボード)
Microbit:DC motor制御(DFROBOT DFR0548ボード)その2
送信側のコントロールプログラムの変更に伴い、受信側のプログラムも変更しました。
また今回、受信側はオリジナルの基板のものを用いています。(制御用の関数の中身も変わっています。)
送信側の変更点は、
これまで送信側のマイクロビットを傾けると一回だけ送信命令が送られていました。
例えば、ロゴが上になったのイベントが発生すると、一回無線で送信が送られます。
傾けた状態で連続で無線で送信が送られるように変更しました。
送信側
送信側コード解説
最初だけ
のブロック中に無線グループの設定
を行います。
ずっと
ブロックでは、マイクロビットの傾きをモニターしていて、その値を右左(X軸)、上下(Y軸)を変数に入れています。その際、-1023から1023を-40から40の値にリスケールしています。
無線で送信
するときには”名前”と”値”のペアーにして送信します。
上下は、前後に動かす命令なので”go"とし、左右は、左右に曲がるので"turn"、ボタンは、腕を動かすので"arm"という名前にしています。
上下・左右は、入力内にあるブロックを用いてイベントを検知し、その中にもし・・なら
のWhileループを入れて、傾きの値で判断して、無線で送る
を使って名前と値を送りつづけます。
ボタンイベントは、これまで通りの1回の無線を送信します。
右側にある無線で受信した時
は、送信側のマイクロビットの動作テストもかねてのコードです。(受信側では、このコードに命令に対応した関数を入れることになります。)
もし・・なら
の条件分岐を行います。まず、送信されてきたものの”名前”が異なるので、”名前”で条件分岐します。その後さらに、値で条件分岐をします。
受信側
受信側コード解説
最初だけ
のブロック中に無線グループの設定
を行います。
動作に対応した関数を作成します。例えば、前進ならば、右モーター、左モーターの回転方向と回転のパワーなどをそれぞれのロボットに合わせて、それぞれのIOポートに出力していきます。
前進、行進、右回り、左回り、停止などの関数を作っていきます。
送信側で作成した無線で受信した時
と同じものを作成します。その中にそれぞれの命令に対して、動作する関数を配置していきます。
右側にあるボタンイベントは、動作確認用のものです。無線が通信の問題か、それとも動作する関数の問題かを切り分けるためのものです。ご自身のロボットに対応したテストを記述してください。
※なお、今回は、これまで使っていたDFROBOTの基板ではなく、我々の仲間が製作したオリジナルの基板を用いているので、関数の中身が異なっています。(久喜ロボットクラブ)
オリジナルの基板の特徴は、マイクロビットを取り付ける方向が、DC基板に対して水平にさせること、モータへの出力電圧を可変抵抗で制限できることです。DFROBOTの基板は、入力電圧を制限かけずに出力しているので、モータの定格よりも高い電圧がかかる可能性があります。連続でかけ続けるとモータが焼けてしまいます。制限をかけるには前回の記事(Microbit:DC motor制御(DFROBOT DFR0548ボード)その2 にあるように、Speedを落として使うことが必要になります。
今回作成したコードは
https://github.com/SGyutan/krc_microbit
に上げています。