序章:Papilioで遊ぶ(その1):はじめに →中止しました。。。 [ZPUino]
2014年と言えば、今から6年前。その年に生まれた赤ちゃんも小学校に入学するくらい、それなりに長い月日が経つわけですが、そんな期間、押し入れにあったジャンクを2020年に引っ張り出してみます。
勢いで買った割には、そのまま押し入れ行き!?になっているものって、それなりにあると思いますが、前回までのRC戦車作製の調子に乗ったままに、掘り起こしてみました。
これ↓です。
FPGA版Arduino!!Papilioで作るディジタル・ガジェット
"https://www.cqpub.co.jp/hanbai/books/48/48141.htm"
ArduinoとFPGAがコラボするなんて、夢の競演と、当時は心躍ったものです。記録を見ると、初版が2014年11月1日発行で、購入日が11月22日(買った本に日付スタンプを押すほうなんで)ですので、ほぼ速攻で買ってるくらい盛り上がっていますね。
ただ、なんとなく世間の評価は低く?、ネットで検索しても、正直、ヒットしてなそうな雰囲気を感じて”自分は経営者には向いてないんだなー”、ちょっと切なくなるわけです。。。
ただ、やっぱり今でもコンセプトには共感していて、”これを使いこなせたら楽しいんだろうなー”という想いは捨て切れないものもあるので、しばらくこのネタで遊んでみようと思います。
で、やっぱり最後は戦車!?に行き着くのですが。。。(笑)
勢いで買った割には、そのまま押し入れ行き!?になっているものって、それなりにあると思いますが、前回までのRC戦車作製の調子に乗ったままに、掘り起こしてみました。
これ↓です。
FPGA版Arduino!!Papilioで作るディジタル・ガジェット
"https://www.cqpub.co.jp/hanbai/books/48/48141.htm"
ArduinoとFPGAがコラボするなんて、夢の競演と、当時は心躍ったものです。記録を見ると、初版が2014年11月1日発行で、購入日が11月22日(買った本に日付スタンプを押すほうなんで)ですので、ほぼ速攻で買ってるくらい盛り上がっていますね。
ただ、なんとなく世間の評価は低く?、ネットで検索しても、正直、ヒットしてなそうな雰囲気を感じて”自分は経営者には向いてないんだなー”、ちょっと切なくなるわけです。。。
ただ、やっぱり今でもコンセプトには共感していて、”これを使いこなせたら楽しいんだろうなー”という想いは捨て切れないものもあるので、しばらくこのネタで遊んでみようと思います。
で、やっぱり最後は戦車!?に行き着くのですが。。。(笑)
リモートコントロール(RC)戦車をつくる【(XBeeコントロール)組み上げ~動作確認】 [RC戦車]
【組み上げ】
【車体(上面)】
【XBeeリモコン戦車とXBeeコントロール送信機】
XBeeコントロール送信機で見えるピンクのリボンは、電池をケースから外すときに引っ張るリボンです。これが無いと固くて外れません。。。
【動作確認】
XBeeコントロールRC戦車のシェイクダウンです。なかなかスムーズに動作できたと思います。
再生できない場合、ダウンロードは🎥こちら
【このシリーズはこれで完了します】
最初にリモートコントロールの戦車を作ろうと思い立ってから、2年も経っているんですねー。途中休み休みでしたが、何とかこのレベルまでは自作することができました。
赤外線とXBeeの両方で、前後左右とコントロールしてRC戦車を動作させることは出来ましたので、一旦はこのシリーズを完了としたいと思います。ベーシックな動作のところが出来れば、あとは、センサーだったりカメラだったり制御のためのインプットデータの違いはあるにせよ、応用編かな、と考えるからです。
これからも、興味の向くままに基礎知識を身につけて、バージョンアップができればいいなー、と思います。
【車体(上面)】
【XBeeリモコン戦車とXBeeコントロール送信機】
XBeeコントロール送信機で見えるピンクのリボンは、電池をケースから外すときに引っ張るリボンです。これが無いと固くて外れません。。。
【動作確認】
XBeeコントロールRC戦車のシェイクダウンです。なかなかスムーズに動作できたと思います。
再生できない場合、ダウンロードは🎥こちら
【このシリーズはこれで完了します】
最初にリモートコントロールの戦車を作ろうと思い立ってから、2年も経っているんですねー。途中休み休みでしたが、何とかこのレベルまでは自作することができました。
赤外線とXBeeの両方で、前後左右とコントロールしてRC戦車を動作させることは出来ましたので、一旦はこのシリーズを完了としたいと思います。ベーシックな動作のところが出来れば、あとは、センサーだったりカメラだったり制御のためのインプットデータの違いはあるにせよ、応用編かな、と考えるからです。
これからも、興味の向くままに基礎知識を身につけて、バージョンアップができればいいなー、と思います。
リモートコントロール(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; } } }