micro: Maqueen は micro:bit を載せて走らせることのできるロボットプラットフォームである。DFROBOT社製で、 SWITCH SCIENCE から3,000円強で購入することができる。ちなみに、組み立て方その他はこのページに掲載されている。
プログラミングには、Scratch 3.0 をベースにした MIND+ というものを使うらしいが、githubにある拡張モジュールを使って、Microsoft MakeCode でプログラミングすることもできる。
とはいえ、MicroPython でも使えないことはなかろうと、いろいろと調べてみた。結果的には(全ての機能ではないものの)使えることがわかり、さっそく micro:witch に取り込んでみた。(いずれ公開予定)
この記事では、micro: Maqueen の各種デバイスをどのように制御するかについて調べたことをまとめる。元ネタは先ほどの拡張モジュールのソースファイル(maqueen.ts)である。
GPIO関係
ありがたいことに Maqueen のボード上には、デバイスの横にP8 のようにシルク印刷されている。まさに、左前の赤いLEDがP8と書かれているのだが、これは micro:bit のpin8に接続されていることを意味するので、プログラムから適切にアクセス(Pythonなら pin8.write_digital(1) のように)すれば、LEDが光る。
裏面にはライントレース用のフォトリフレクタがあるが、左側はP13と書かれており、 pin13 に接続されていることがわかるので、Python ならば pin13.read_digital() で値を取得できる。
項目 | ピン番号 | 入出力 | 備考 |
左前LED | 8 | 出力 | 1でオン |
右前LED | 12 | 出力 | 1でオン |
左フォトリフレクタ | 13 | 入力 | 反射があれば1 |
右フォトリフレクタ | 14 | 入力 | 反射があれば1 |
DCモータ
左右のDCモータはi2cバスを使って接続されている。デバイスのアドレスは 0x10 である。モータを扱うには3バイトのデータを書き込む必要がある。
最初のバイトは左右のモーターの区別で、M1なら0x00、M2なら0x02を指定する。(左右のどちらがM1, M2だったか忘れた。後で記載する)
2番めのバイトは回転方向で、前転なら0x00、後転なら0x01を指定する。(左右のモータは逆向きに付けられているが、同じ値の指定で前進・後退する)
3番めのバイトは回転スピードで、0から255の値を指定する。
バイト位置 | 意味 | 値 | 備考 |
0 | モータ指定 | M1=0x00, M2=0x02 | |
1 | 回転方向 | 前転=0x00, 後転=0x01 | |
2 | 回転スピード | 0から255までの整数値 |
モータを使って戸惑ったのは、モータを回転させている途中で回転方向を切り替えても反応しないということだった。何らかの理由で回転の指示がキャンセルされてしまう。いったん回転スピードを0にして止めてから100msほど待てば、逆回転させることができた。
サーボ
ボードにサーボを取り付けることができるらしく、これもi2cバスで接続されているらしい。(まだ使ったことがない)資料によると、2バイトのデータを書き込むことでサーボを制御できるようだ。(動作未確認なので注意)
バイト位置 | 意味 | 値 | 備考 |
0 | サーボ指定 | S1=0x14, S2=0x15 | |
1 | 角度 | 0から180までの整数値 |
フルカラーLED
ボード上にはフルカラーLEDが4つある。ただ、先の資料には記載がなく、使い方はよくわからない。NeoPixel として使えるのかも。余裕があれば調べる予定。
<2020/6/25追記>
フルカラーLEDはやはりNeoPixel で利用できた。pin15から4個のNeoPixelとして設定する。MicroPython であれば以下のようなコードで、全てのLEDを白点灯できる。
import neopixel
import microbit
_np15=neopixel.NeoPixel(microbit.pin15,4)
_np15[0]=(255,255,255)
_np15[1]=(255,255,255)
_np15[2]=(255,255,255)
_np15[3]=(255,255,255)
_np15.show()