これに反射型の赤外線センサーを取り付けて、ライントレースをしてみました。
ビデオへのリンクです。
上からの写真です。サーボのように見えるのはギヤモーターです。オレンジ色のモジュールが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();
}