IMG_5122

MONOXIT の無線ロボット MI100ファームウェアを書き換えられるようになったので、ファームウェアをプログラミングしてライントレースをやってみました。

今までは PCからプログラムのコマンドを Bluetooth で送受信することで、MI100 を制御してきました。これが、MI100 本体内のプログラムだけで動くなら、無線の送受信にかかるタイムラグがなくなって反応が速くなると考えたからです。

MI100 のファームウェアプログラミングは、Arduino のプログラミングと同じことなんで、C言語でプログラミングすることになります。

大まかな流れとしては、もともとの MI100firmware を改造してライントレースのプログラムを追加するという作業になります。


そのライントレースの様子です;



PC から無線で制御するライントレースの様子はこちら;

(→・無線ロボット MI100改 でライントレースをやってみた(決定版?)


比較するとスムーズさが全然違いますね。

ファームウェアでは、プログラムのループが速すぎて delay を入れないとうまくライントレースしない程でした。(動画のプログラムは delay を 50ms入れています。)

逆に、delay を 250ms ほど入れると、PC から無線で制御しているプログラムと同じくらいの反応速度になります。これは、1回のループでコマンドの送受信を3回行っているので、1回の Bluetooth通信で約80ms ほどかかっている計算になります。


という訳で、反応速度(ループの速度)はファームウェアをプログラミングした方が圧倒的に速いのですが、もともと MI100 はプログラミングを手軽に楽しく学ぶツールとして開発されたものなので、方向性が違ってきてしまいます。

手軽に Ruby でプログラミングを楽しんで、それ以上のことを hack したくなったらファームウェアを C言語で書くというのもいいのかもしれません。
(Arduino のプログラミングは C を使う良い練習台になりそうです。)


でも、せっかくなら MI100 の本体で mruby が動けばいいですね。
現状ではハードウェアの能力が足りないのですが、将来的には MI200(?) などで mrubyプログラミングなどと想像してしまいます。



以下、ファームウェアのライントレースプログラムです;
(turnRgbLed を実装したブランチ turnLedRgbSpike
 →・https://github.com/noanoa07/MI100firmware/tree/turnLedRgbSpike
 にある MI100firmware.ino を元にして、以下を追加します。)
 
------------------------------------------------------------------------------------------
void setup(){
  …

  turnRgbLed(100, 100, 100);
  motorSpeed = 300;
}

void loop(){
  …

  delay(50);
  int dark = 10;
  int bright;

  bright = light;
  if(bright >= dark) {
    // Turn Right (15ms)
    analogWrite(M_PWMA, motorSpeed);
    analogWrite(M_PWMB, motorSpeed);
    digitalWrite(M_AIN1, LOW);
    digitalWrite(M_BIN1, LOW);
    digitalWrite(M_AIN2, LOW);
    digitalWrite(M_BIN2, HIGH);
    delay(15);
    stopMotors();
    }
  else {
    // Turn Left (15ms)
    analogWrite(M_PWMA, motorSpeed);
    analogWrite(M_PWMB, motorSpeed);
    digitalWrite(M_AIN2, LOW);
    digitalWrite(M_BIN2, LOW);
    digitalWrite(M_AIN1, HIGH);
    digitalWrite(M_BIN1, LOW);
    delay(15);
    stopMotors();
  } 
}
------------------------------------------------------------------------------------------


⚪︎関連記事;