micro: Maqueen の解析

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() で値を取得できる。

項目ピン番号入出力備考
左前LED8出力1でオン
右前LED12出力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()