タミヤ マイコンロボットをM5AtomS3で動かしてみた
micro:bitでプログラミングできるクローラーロボットキットを買ってみました。micro:bit V1.5が付属しています。
折角(?)なので、micro:bitと同じ形状のユニバーサル基板にM5Atomを載せて、M5Atomでフォロを動かしてみました。
今回はM5Atomでしたが、micro:bitユニバーサル基板に載せるだけなので、ArduinoでもM5Stampでも同じように置き換えることが出来ます。
micro:bitとクローラーロボットのインターフェイスは▼の通り
PIN | クローラーロボットの機能 |
P8 | スピーカー |
P19 | 超音波距離センサー(I2C:SCL) |
P20 | 超音波距離センサー(I2C:SDA) |
P13 | モーター右(PWM制御) |
P14 | モーター左(PWM制御) |
P15 | モーター右のブレーキ(HIGHで停止) |
P16 | モーター左のブレーキ(HIGHで停止) |
超音波距離センサーはI2C接続
I2Cアドレス 0x2C
コマンド | ||
---|---|---|
測定開始 | 55 | 1:読み取り可能 |
レジスタアドレス | ||
計測値 | 14 | 下位バイト |
計測値 | 15 | 上位バイト |
計測値 | 16 | 上位と下位の合計 |
モーターはPWM制御
周波数 1KHz、解像度 10Bit
アナログ出力値 | 動作 |
1023 | 正回転最大 |
511 | 停止 |
0 | 逆回転最大 |
コレに合わせてM5Atomとmicro:bitユニバーサル基板のエッジコネクタを対応を決めます。
ピン数が足りないので、micro:bitの[A][B]ボタンはG2ピンで処理します。
M5Atomには5Vの電源が必要なので、micro:bitエッジコネクタの3V端子に5V昇圧コンバータを接続して5V電源を作っています。
実装面積を取るために、表面実装用のチップ抵抗を使用しています。 見えない(くらい小さい)ですが、ちゃんと抵抗が付いています。 |
GROVEコネクタは入手困難なので、手持ちのコードを切って変換コネクタを作っています。
M5AtomS3のPWM出力
ArduinoのPWM出力は analogWrite( ) を使うだけの簡単仕様なのですが、M5AtomS3ではこのやり方だとLCDのバックライトが連動して動作してしまい、画面の明るさが変わってしまいます。明るくなるだけならマシなのですが、暗くなると画面が見えません (;´・ω・)
M5AtomS3(ESP32)ではLED制御用のコマンドを使用してPWM出力を行います。
ledcSetup(PWMチャンネル, 周波数, 解像度)
PWMチャンネルの周波数と解像度(ビット数)を設定します。
PWMチャンネルは0~3の4チャンネル使用できます。
解像度はアナログ値の範囲設定で14Bitまで指定できます。
タミヤ マイコンエロボット工作キットでは 1KHz、10Bit(0~1023の範囲指定)を使用しています。
ledcAttachPin(GPIOピン番号, PWMチャンネル)
GPIOピンに出力するPWMチャンネルを紐づけます。
複数のGPIOピンに同じPWMチャンネルを割りつける事も出来るみたいです。
※ちゃんと検証してないので、間違ってるかも
ledcWrite(PWMチャンネル,アナログ値)
アナログ値の設定は、GPIOピンに対してではなくPWMチャンネルに対して行います。
超音波距離センサー
普通にI2C接続のセンサーユニットなので、特筆すべきことはないのですが読み取り開始
I2Cアドレス0x2Cに55を送信して、1Byte受信
受信した値が1なら読み取り可能。
センサー値の読み取り
I2Cアドレス0x2Cに14を送信して、2Byte受信
下位・上位の順で2バイトのデータを受信できるので2バイト整数に変換
距離計算
([センサー値] - 160) ÷2 × 0.315 で 反応距離(mm)が得られます。