子供に「みぎ」「ひだり」を覚えてほしいので、ArduinoとXBeeを使ってラジコンを作りました

完成品の画像


コントローラーがめちゃくちゃ大きいです。

使用したもの

Arduino Uno R3 ×2
XBee ZB(S2C)ワイヤアンテナ型 ×2

デュアルモータードライバDRV8835

タミヤ ユニバーサルプレート (2枚セット)
タミヤ ユニバーサルプレート用スライドアダプター
タミヤ スポーツタイヤセット (56mm径)
タミヤ ボールキャスター (2セット入)
タミヤ ダブルギヤボックス(左右独立4速タイプ)

その他ブレッドボード、電源、キーボード用キーなど。

以前にも似たような車を作りました。
touch-sp.hatenablog.com
以前使用したモータードライバは異臭と煙を出して壊れたため、今回新しいものをSwitch Scienceから購入しました。
www.switch-science.com

Arduinoスケッチ

コントローラー側

const int buttonON = LOW;

const int buttonPin_1 = 7;
const int buttonPin_2 = 8;
const int buttonPin_3 = 9;
const int buttonPin_4 = 10;
const int buttonPin_5 = 11;

void setup() {
  pinMode(buttonPin_1, INPUT_PULLUP);
  pinMode(buttonPin_2, INPUT_PULLUP);
  pinMode(buttonPin_3, INPUT_PULLUP);
  pinMode(buttonPin_4, INPUT_PULLUP);
  pinMode(buttonPin_5, INPUT_PULLUP);
  Serial.begin(9600);
}

void loop() {
 if(digitalRead(buttonPin_1) == buttonON){
  Serial.write(0);
 }
 if(digitalRead(buttonPin_2) == buttonON){
  Serial.write(1);
 }
 if(digitalRead(buttonPin_3) == buttonON){
  Serial.write(2);
 }
 if(digitalRead(buttonPin_4) == buttonON){
  Serial.write(3);
 }
 if(digitalRead(buttonPin_5) == buttonON){
  Serial.write(4);
 }
}

車側

const int mode_pin = 7;

const int right_enbl = 5;
const int right_phase = 6;

const int left_enbl = 9;
const int left_phase = 10;

void setup() {
  pinMode(mode_pin, OUTPUT);
  pinMode(right_enbl, OUTPUT);
  pinMode(right_phase, OUTPUT);
  pinMode(left_enbl, OUTPUT);
  pinMode(left_phase, OUTPUT);
  Serial.begin(9600);

  //modeはHIGH
  digitalWrite(mode_pin, HIGH);
  
  //right_wheelストップ
  digitalWrite(right_phase, HIGH);
  analogWrite(right_enbl, 0);

  //left_wheelストップ
  digitalWrite(left_phase, HIGH);
  analogWrite(left_enbl, 0);
}

void loop() { 
  if(Serial.available()>0){
    int read_serial;
    read_serial = Serial.read();

    //ストップ
    if(read_serial==0){
      analogWrite(right_enbl, 0);
      analogWrite(left_enbl, 0);
    }

    //前進
    if(read_serial==1){
      digitalWrite(right_phase, HIGH);
      analogWrite(right_enbl, 200);
      
      digitalWrite(left_phase, HIGH);
      analogWrite(left_enbl, 200);
    }

   //右回り
    if(read_serial==2){
      digitalWrite(right_phase, LOW);
      analogWrite(right_enbl, 180);

      digitalWrite(left_phase, HIGH);
      analogWrite(left_enbl, 180);
    }

    //後進
    if(read_serial==3){
      digitalWrite(right_phase, LOW);
      analogWrite(right_enbl, 200);
      
      digitalWrite(left_phase, LOW);
      analogWrite(left_enbl, 200);
    }

    //左回り
    if(read_serial==4){
      digitalWrite(right_phase, HIGH);
      analogWrite(right_enbl, 180);

      digitalWrite(left_phase, LOW);
      analogWrite(left_enbl, 180);
    }
  }
}

最後に

残念ながら子供は女の子です。全く食いついてくれませんでした。