2018年6月2日土曜日

2つのmicro:bitで無線コントロールカーを作ってみた

0. はじめに

小中学生へのプログラミング教育用教材について興味があり、これまで下記のエントリを書いてきました。


どちらも Raspberry Pi 上の Scratch 1.4 を用いて物の制御を行う、という内容になっています。

しかし、この方法では以下の問題があり、やや敷居が高いのが難点です。

  • Raspberry Pi を初めて触る方にとっては物品の準備やOSのインストールから始めなければならないこと
  • Raspberry Pi 上ではScratch の新しいバージョン2が動作するものの、Flashベースのため動作が遅く、さらに電子工作に必ずしも適していないという点から、古いバージョン1.4を使わざるを得ない場面が多いこと

そこで、今回は目先を変えてBBC micro:bit をプログラミング教材として用いた場合に何が可能かを試してみました。BBC micro:bit とは、イギリスの英国放送協会 (BBC) が小学生の教育用に開発したマイコンボードです。

用いたのは以下のものです。


下図が完成状態です。
micro:bitを2つ持っていなかったので、コントローラー用の1台は、スイッチサイエンスにより開発されたmicro:bitの互換機であるchibi:bitを用いました。もちろん、chibi:bitでなくmicro:bitを用いても同じです。

chibi:bitには、スマートフォン用のモバイルバッテリーを電源として用いてます。


今回作成したのはタイトルにもあるように無線コントロールカーです。完成品の動画が下記になります。

2台のmicro:bitがBLEで通信して、バギーカー上のmicro:bitが車体を動かしています。


1. プログラム

プログラムはmicro:bitの公式サイトでプログラミング用のブロックを組み合わせることで作成します。

まず、受信側(機体側)のプログラムです。


送信機から 0 (静止)、1(前進)、2(左折)、3(右折)に対応する数値が送られてきますので、それに応じて2つの連続回転サーボを動かしています。

(P1, P2)のピンに対し、(90, 90)を出力すると静止です。
(0, 180)は全速で前進、(180, 0)は全速で後退、
(0, 0)は全速で左回転、(180, 180)は全速で右回転です。

上記のプログラムでは後退を用いず、左回転と右回転は速度を遅めにするためそれぞれ(80, 80)、(95, 95)と設定しています。これらは好みやモーターの特性によると思いますので、お好みで調整します。

次に、送信側のプログラムです。


こちらはあまり美しいプログラムにはなっていません。

micro:bitには「ボタンが押されたら」というイベントハンドラはあるのですが、「ボタンから指を離したら」というイベントハンドラがありません。

そのため、そのままでは「ボタンAを押したら」、「ボタンBを押したら」、「ボタンAとBを同時押したら」という3パターンしか動作を作れません。

このプログラムでは前進、左回転、右回転、静止、の4つの動作を作りたかったので、上記のプログラムではイベントハンドラを用いず、200msごとにボタンの状態をチェックすることにしています。

さらに、そのままでは最悪200msごとに通信が行われてしまいます。それを避けるために、現在のボタンの状態を表すstateという変数を導入し、stateの値が変化した場合のみ通信を行う、ということをしています。

上記を実現するため、「もし~なら~でなければ」の分岐命令を4重に組み合わせることになり、プログラミングの講義ではあまり教えたくないようなプログラムになってしましました。

2. まとめ

最後に、この題材の良いところと悪いところを列挙します。

良いところ
  • 普段使っているPC(Windowsなど)でブロックによるプログラミングができる
  • BLEによる通信が簡単
  • PCから切り離してもスタンドアロンで動作するプログラムが簡単に書ける(Raspberry Piでそれをやろうとするとそれなりに大変)
  • 連続回転サーボは標準のブロックだけで制御できるのでmicro:bitと相性が良い
悪いところ
  • 作ってみればわかりますが、:MOVE miniの機体の組み立てが、見た目ほどフレンドリーではない
  • 「ボタンを離したら」というイベントハンドラがないので表現できる状態が少ない
そんなところでしょうか。

どんな環境を用いる場合も当てはまりますが、後は用意する題材の工夫次第で十分面白い講義ができるのではないかと思いました。



「ラズパイ4対応 カラー図解 最新 Raspberry Piで学ぶ電子工作」、「実例で学ぶRaspberry Pi電子工作」、「Raspberry Piではじめる機械学習」を執筆しました。

0 件のコメント:

コメントを投稿