リモートコントロール(RC)戦車をつくる【XBeeコントロール受信機】 [RC戦車]
XBeeコントロール受信機を作製します。
RC戦車搭載のArduino Pro Miniとモータドライバが5V仕様なので、XBeeとの接続するためにBee3.3V⇔5V変換アダプタを使います。
XBeeエクスプローラ5Vマイコン用
"https://www.switch-science.com/catalog/1166/"
コネクタは6ピンインターフェースに合わせて、L字型をチョイスして付けました。
【スケッチ】
RC戦車搭載のArduino Pro Miniとモータドライバが5V仕様なので、XBeeとの接続するためにBee3.3V⇔5V変換アダプタを使います。
XBeeエクスプローラ5Vマイコン用
"https://www.switch-science.com/catalog/1166/"
コネクタは6ピンインターフェースに合わせて、L字型をチョイスして付けました。
【スケッチ】
/******************************************************************************* XBeeコントロール受信機 ++++++ note ++++++ ・ペアとして、XBeeコントロール送信機が必要 ・ジョイスティックの方向と出力値のマッピング 7 8 9 ↑ 4 ← 5 → 6 ↓ 1 2 3 *******************************************************************************/ #define VERSION "1.00a0" #define SPEED_0 0 //モータへの電圧(スピード)を3種類用意 #define SPEED_1 153 //0~255(MAX):Vref電圧を3Vまでに制限 int val = 0; //ジョイスティックからの受信データを一時格納する変数を定義 // set pin numbers: // 右キャタピラ用ピン const int R_Vref = 5; //D5(PWM) const int R_OUT1 = 3; //D3 const int R_OUT2 = 4; //D4 // 左キャタピラ用ピン const int L_Vref = 6; //D6(PWM) const int L_OUT1 = 7; //D7 const int L_OUT2 = 8; //D8 // 初期化(電源投入/リセット時1回のみ実行): void setup() { // initialize the motor driver pin as an output(Arduinoにモータドライバへのピンが出力であることを伝える) pinMode(R_Vref, OUTPUT); pinMode(R_OUT1, OUTPUT); pinMode(R_OUT2, OUTPUT); pinMode(L_Vref, OUTPUT); pinMode(L_OUT1, OUTPUT); pinMode(L_OUT2, OUTPUT); Serial.begin(9600); //9600bpsでシリアルポートを開く } // main loop: void loop() { if(Serial.available() > 0){ //受信したデータが存在する val = Serial.read(); //受信データを読み込み、その値をvalに代入 switch(val){ case '8': //前進 analogWrite(R_Vref, SPEED_1); //モータドライバのスピードを指定 analogWrite(L_Vref, SPEED_1); digitalWrite(R_OUT1, LOW); //貫通電流防止(ストップ) digitalWrite(R_OUT2, LOW); digitalWrite(L_OUT1, LOW); digitalWrite(L_OUT2, LOW); digitalWrite(R_OUT1, HIGH); digitalWrite(R_OUT2, LOW); digitalWrite(L_OUT1, HIGH); digitalWrite(L_OUT2, LOW); break; case '6': //右超信地旋回 analogWrite(R_Vref, SPEED_1); //モータドライバのスピードを指定 analogWrite(L_Vref, SPEED_1); digitalWrite(R_OUT1, LOW); //貫通電流防止(ストップ) digitalWrite(R_OUT2, LOW); digitalWrite(L_OUT1, LOW); digitalWrite(L_OUT2, LOW); digitalWrite(R_OUT1, LOW); digitalWrite(R_OUT2, HIGH); digitalWrite(L_OUT1, HIGH); digitalWrite(L_OUT2, LOW); break; case '4': //左超信地旋回 analogWrite(R_Vref, SPEED_1); //モータドライバのスピードを指定 analogWrite(L_Vref, SPEED_1); digitalWrite(R_OUT1, LOW); //貫通電流防止(ストップ) digitalWrite(R_OUT2, LOW); digitalWrite(L_OUT1, LOW); digitalWrite(L_OUT2, LOW); digitalWrite(R_OUT1, HIGH); digitalWrite(R_OUT2, LOW); digitalWrite(L_OUT1, LOW); digitalWrite(L_OUT2, HIGH); break; case '2': //後進 analogWrite(R_Vref, SPEED_1); //モータドライバのスピードを指定 analogWrite(L_Vref, SPEED_1); digitalWrite(R_OUT1, LOW); //貫通電流防止(ストップ) digitalWrite(R_OUT2, LOW); digitalWrite(L_OUT1, LOW); digitalWrite(L_OUT2, LOW); digitalWrite(R_OUT1, LOW); digitalWrite(R_OUT2, HIGH); digitalWrite(L_OUT1, LOW); digitalWrite(L_OUT2, HIGH); break; case '9': //右前進緩旋回 analogWrite(R_Vref, SPEED_0); //右キャタピラの速度を遅く(停めて) analogWrite(L_Vref, SPEED_1); //左キャタピラの速度を速く digitalWrite(R_OUT1, LOW); //貫通電流防止(ストップ) digitalWrite(R_OUT2, LOW); digitalWrite(L_OUT1, LOW); digitalWrite(L_OUT2, LOW); digitalWrite(R_OUT1, HIGH); digitalWrite(R_OUT2, LOW); digitalWrite(L_OUT1, HIGH); digitalWrite(L_OUT2, LOW); break; case '7': //左前進緩旋回 analogWrite(R_Vref, SPEED_1); //右キャタピラの速度を速く analogWrite(L_Vref, SPEED_0); //左キャタピラの速度を遅く(停めて) digitalWrite(R_OUT1, LOW); //貫通電流防止(ストップ) digitalWrite(R_OUT2, LOW); digitalWrite(L_OUT1, LOW); digitalWrite(L_OUT2, LOW); digitalWrite(R_OUT1, HIGH); digitalWrite(R_OUT2, LOW); digitalWrite(L_OUT1, HIGH); digitalWrite(L_OUT2, LOW); break; case '3': //右後進緩旋回 analogWrite(R_Vref, SPEED_0); //右キャタピラの速度を遅く(停めて) analogWrite(L_Vref, SPEED_1); //左キャタピラの速度を速く digitalWrite(R_OUT1, LOW); //貫通電流防止(ストップ) digitalWrite(R_OUT2, LOW); digitalWrite(L_OUT1, LOW); digitalWrite(L_OUT2, LOW); digitalWrite(R_OUT1, LOW); digitalWrite(R_OUT2, HIGH); digitalWrite(L_OUT1, LOW); digitalWrite(L_OUT2, HIGH); break; case '1': //左後進緩旋回 analogWrite(R_Vref, SPEED_1); //右キャタピラの速度を速く analogWrite(L_Vref, SPEED_0); //左キャタピラの速度を遅く(停めて) digitalWrite(R_OUT1, LOW); //貫通電流防止(ストップ) digitalWrite(R_OUT2, LOW); digitalWrite(L_OUT1, LOW); digitalWrite(L_OUT2, LOW); digitalWrite(R_OUT1, LOW); digitalWrite(R_OUT2, HIGH); digitalWrite(L_OUT1, LOW); digitalWrite(L_OUT2, HIGH); break; case '5': //中立ニュートラル(Stop) analogWrite(R_Vref, SPEED_0); //モータドライバのスピードを指定 analogWrite(L_Vref, SPEED_0); digitalWrite(R_OUT1, LOW); //貫通電流防止(ストップ) digitalWrite(R_OUT2, LOW); digitalWrite(L_OUT1, LOW); digitalWrite(L_OUT2, LOW); digitalWrite(R_OUT1, HIGH); //ブレーキ digitalWrite(R_OUT2, HIGH); digitalWrite(L_OUT1, HIGH); digitalWrite(L_OUT2, HIGH); digitalWrite(R_OUT1, LOW); //ストップ digitalWrite(R_OUT2, LOW); digitalWrite(L_OUT1, LOW); digitalWrite(L_OUT2, LOW); break; default: break; } } }