M5StickCの赤外線LEDでレゴテクニック RCトラックレーサーを動かす

レゴの中でも、レゴテクニックのシリーズはいろいろな機械の動作メカニズムがレゴで再現されていて、大人が作ってもとても面白いものです。その中でも、Lego Power Functionモーターという赤外線受信器とモーター、ライトなどを組み込むことができるモデルがあります。これを1つ持っていたので、M5Stackから動かしてみました。 レゴテクニック RCトラックレーサー 42065

これ、M5Camera を搭載するのにちょうどいいサイズで、レゴですから簡単にM5Cameraを固定して運転席視点のカメラ映像を楽しむことができます。 これに使われているモーターは、動くレゴとして有名なMindStormsのモーターとはまた違う種類なので、直接M5Stackに接続することは難しそうです。しかし、赤外線で制御するので、制御コマンドを解析してArduino用のライブラリが作成され、公開されていました。 Arduino-PowerFunctions

そして、M5Stack系では、M5StickCに内蔵のIR LEDがあるので、このライブラリを使って、M5StickCで動くリモコンを作ってみました。

ハードウェア

レゴテクニックRCトラックレーサー 42065 にM5Cameraを乗せていますが、M5Cameraは今回の制御には使っておらず、車両からの映像を撮るのに使っています。

赤外線を受ける部分は後部にあります。通常はレゴセットに付属するコントローラーで制御しますが、今回代わりにM5StickCから赤外線を出して制御します。

左右のキャタピラーは独立したモーターで制御されるので、本当は少なくとも前進・後退 x 2系統で4つの入力ができるスイッチが必要ですが、とりあえず手元にあったDual Button Unitで2ボタン、あとM5StickCの本体についている一番大きいボタン(Aボタン)の3つで制御しました。Dual Button Unitのボタンを押している間、対応する側のキャタピラが前進に入り、両方同時押しすると真っ直ぐ前に進みます。M5StickCのAボタンを押すと、両側のキャタピラが後進に入ります。

コントローラーとしては、M5StickCにDual Button Unitを接続して使用しています。はじめはM5StickCにIR LEDが内蔵されていることを忘れていて、M5Stack BasicにIR REMOTEモジュールをつける構成でないとだめかと考えていましたが、側面に小さな穴があってそこに出ていました。

ソフトウェア

Arduino IDEのスケッチをM5StickCに書き込みます。事前に、Arduino-PowerFunctionsをインストールしておく必要があります。 なお、M5StickC.h をインクルードした状態ではArduinoボードのオンボードLEDのGPIOピンが定義されている LED_BUILTIN マクロが未定義なためにコンパイルエラーが起こったので、 PowerFunctions.h を編集して、M5StickCの内蔵LEDが接続されている GPIO10 を

#define LED_BUILTIN 10

として加えることで、コンパイルを通しました。

動作確認

動作しているところの動画