2020年5月25日月曜日

BalaCでライントレース

M5StackからBalaCという倒立振子のキットが発売されました。M5StickC、モータードライバが載った基板、ギヤモーター、ホイール、充電池がセットになっています。
これに反射型の赤外線センサーを取り付けて、ライントレースをしてみました。
ビデオへのリンクです。


上からの写真です。サーボのように見えるのはギヤモーターです。オレンジ色のモジュールがBalaCに同梱されているM5StickCで、基板を固定するためのねじ穴が2個追加されています。先端に付いている基板が追加した赤外線センサー部分です。


裏側です。i2cのインターフェイスとモータードライバがBalaCの基板に載っています。青い充電池があるので、モーターを回しても余裕です。M5StickCにUSBを接続すれば、この充電池に充電されるようです。


側面です。


赤外線センサー基板を含む先端部分です。適当なボールキャスターが無かったので、アルミのスピンナーを流用しています。

赤外線センサー基板の表側です。

赤外線センサー基板の裏側です。



回路図です。赤外線センサーはTCRT5000です。フォトトランジスタは、コレクタをLEDのアノードに接続し、約1.2Vで動作しています。M5StickCのVoutが5Vなので、このような回路にしています。




ソースコードの主要部分です(LCDの制御などを省いています)。モーター制御のi2cは正しい使い方かどうかわかりませんが、動いています。

#include <M5StickC.h>

void setup() {

  M5.begin();
  Wire.begin(0, 26); //SDA,SCL
}

void loop() {
  
  int16_t sLeft=analogRead(32);
  int16_t sRight=analogRead(33);
  int16_t diff=(sLeft-sRight)/35;
  drive (30+diff, 30-diff);
  delay(20);
}

void drive(int16_t spL, int16_t spR) {
  drvMotor(0, (int8_t)constrain(spL, -127, 127));
  drvMotor(1, (int8_t)constrain(-spR, -127, 127));
}

void drvMotor(byte ch, int8_t sp) {
  Wire.beginTransmission(0x38);
  Wire.write(ch);
  Wire.write(sp);
  Wire.endTransmission();
}