私は、小中学生にプログラミングなどを教えるボランティアグループのメンバーになっています。
このグループでは、小中学生に電子回路とマイクロビットプログラミングを教える通年制のワークショップを実施しています。
月1回のペースで合計9回実施し、「電子回路」や「プログラミング」についてそれぞれ数回の講義を行う他、そこで得られた知識を使って、各自に自由に作品をつくってもらおうという活動です。
さて、毎年のことですが今年度もやはり、やりたいことがうまくいかないので方法を教えてほしいという質問をたくさん受けました。
中でも多かったのは、「マイクロビットでふたつのモーターを制御したいが安定して動かない」「マイクロビットと超音波センサ(5V系)を組み合わせたい」「マイクロビットでサーボモーターを制御したい」といった質問でした。
ワークショップでは講義の中でモータードライバを配布していますが、そこで使っているモータードライバは乾電池2本(3V)ではふたつのモーターを安定して動かすことができないようで、電池を3本にして対応しました。
また、一般的なサーボモーターは動作電圧が4.8V〜6V程度のものが多く、サーボモーター用に別電源を準備する必要がありました。超音波センサについても同様です。
やはり、マイクロビットと周辺部品をつないで電子工作をする際には、電源まわりの扱いが何かと大変になります。
こどもが作品に機能を追加したいと思うたびに追加費用がかかってしまうのも心苦しいので、この辺りの課題を前もって解決しておく方法はないかと考えていました。
そんな中「KEYESTUDIOモータードライバー拡張ボード for BBC micro:bit(KS4033)」という製品を見つけました。
以前、このボードに類似の「KEYESTUDIOセンサーシールド(KS0360)」という製品を見つけて調査したのですが(記事は こちら)、今回の「KS4033」は「KS0360」に比べてモータードライバが搭載されているという点が異なります。
これなら、電源電圧が異なる周辺部品をマイクロビットにつなぐ時の問題が解決するだけでなく、モーターの動作も安定して制御できそうです(こどもにモータードライバ単体を体験してもらう機会がなくなってしまうのは残念ですが)。
そんな訳で、今回はこの「KEYESTUDIOモータードライバー拡張ボード(KS4033)」について調べてみることにしました。
この拡張ボードは、ボード下部の青いターミナルの左側から電源供給するようになっています。電源電圧は5V〜10.8Vとのことですので、こども向け電子工作の用途では、ここに乾電池4本をつなぐのが良さそうです。
ボードには5Vレギュレータと3.3Vレギュレータが搭載されており、これらにより5V電源と3.3V電源がつくられます。マイクロビットには常時3.3V電源が供給されますが、周辺部品への電源供給用に「5V」「3V」という端子が用意されており、5Vもしくは3.3Vの電源を取り出すことができます。
この「5V」「3V」電源端子は、「G(グランド端子)」「S(GPIO)」とセットで並んでいるのですが、「5V」端子は「GPIO2〜10」と、「3V」端子は「GPIO11〜16, 19〜20」とそれぞれセットになっており、その組み合わせで使うのが使いやすそうです。なお、「GPIO12, 13, 15, 16」はボードに搭載されているモータードライバの制御信号として使われているので、モータードライバを使う場合はこれらの端子を別用途に使うことはできません。
このボードには「DRV8833」というモータードライバが搭載されています。このドライバはPWM信号(マイクロビットのアナログ出力)で出力電圧(モーターの速度)を制御することができます。ふたつのモーターはボード下部の青いターミナルの中央および右側につなぎます。
今回は、このように単4型Ni-MH電池4本を電源端子につなぎ、ふたつのギヤードモーターを取り付けました。
マイクロビット用プログラムは以下のとおりです。
モーター速度を制御するためのアナログ値を0から1023まで128ピッチで変化させ、それぞれの速度で「モーターA正転→モーターA反転→モーターB正転→モーターB反転→モーターA+B正転→モーターA+B反転→モーター停止」を0.5秒ずつ動作させ、それを繰り返します。
アナログ値が「128」の時は、モーターは振動するだけで回りませんでした。「256」以上で回り始め、アナログ値が大きくなるほど速く回りました。所望どおりの動きです。
上記の動作をさせている時の、各電源端子の電圧をテスターで測定してみました。
その結果、「VM」端子(電池の電圧)は5.7V程度、「5V」端子は4.7V程度、「3V」端子は3.2V程度となりました。モーターの回転速度によって若干の変動はありますが、常に一定の電圧となっており、これならモーターの動作によってマイクロビットやその他の周辺部品が誤動作することもなさそうです。
「A1」「A2」端子間の電圧をテスターで測定し、モーターに供給される電圧を調べてみました。
結果は以下のとおりです。
制御信号のアナログ値によって線形に変化する訳ではなさそうです。
また、アナログ値が1023の時の電圧が5V以上になっていることから、モーターにはレギュレータで落とした電圧ではなく、最大で電池電圧(今回は5.7V)に近い電圧が供給されることが分かります。
こどもが電子工作で使うモーターは3V程度で動作させることが多いと思いますので、今回の電源構成(Ni-MH電池4本)の場合はアナログ値を256あたりに設定するのがちょうど良さそうです。モーターの速度を変化させるなら、アナログ値を200〜300あたりで変化させるといい感じになりそうです。
このボードを使うと、モーターや5V系の周辺部品をマイクロビットと組み合わせ、安定して動かすことができそうです。
これまでは技術的なハードルが高くて諦めていたアイデアを実現できるようになるかもしれません。
一方、うまく動かなくて苦労するという体験が減ってしまうのも、それはそれで惜しいような気がします。今後のワークショップでこのボードを採用するかどうかは、もう少し考えてみたいと思います。
なお、私がマイクロビットの使い方を習得するのにあたっては、以下の書籍を参考にさせていただきました。
初心者向けから、比較的高度なものまで、さまざまな情報が記載されているだけでなく、子供向けの作例も多数掲載されていますので、「プログラミング教育」のための題材さがしなどにもおすすめです。