次にリモコン戦車に搭載するXBee受信機を作ります。
これはすでに「制御回路を作る①」で作製済みなので、制御回路とXBeeを接続して受信機にします。
接続するのは、VCC(+5V)とGND、シリアル線の3本です。
Arduino Pro Mini5V版を使用しているため、XBee向けに5V – 3.3Vにレベル変換が必要となります。SparkFunの「XBeeエクスプローラ5Vマイコン用アダプタ」を使用します。

/*******************************************************************************
XBeeコントロール受信機 for RC_Tank
++++++ note ++++++
・ペアとして、XBeeコントロール送信機 for RC_Tank(リモコンボックス)が必要
・ジョイスティックの方向と出力値のマッピング
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;
}
}
}
スケッチです。

リモコン戦車にXBee受信機を搭載します。
制御回路とXBee間はジャンパー線で接続しています。



コメント