SSブログ

序章:Papilioで遊ぶ(その1):はじめに →中止しました。。。 [ZPUino]

2014年と言えば、今から6年前。その年に生まれた赤ちゃんも小学校に入学するくらい、それなりに長い月日が経つわけですが、そんな期間、押し入れにあったジャンクを2020年に引っ張り出してみます。
勢いで買った割には、そのまま押し入れ行き!?になっているものって、それなりにあると思いますが、前回までのRC戦車作製の調子に乗ったままに、掘り起こしてみました。

これ↓です。
FPGA版Arduino!!Papilioで作るディジタル・ガジェット
Papilio.JPG
"https://www.cqpub.co.jp/hanbai/books/48/48141.htm"

ArduinoとFPGAがコラボするなんて[exclamation&question]、夢の競演[ぴかぴか(新しい)]と、当時は心躍ったものです。記録を見ると、初版が2014年11月1日発行で、購入日が11月22日(買った本に日付スタンプを押すほうなんで)ですので、ほぼ速攻で買ってるくらい盛り上がっていますね。
ただ、なんとなく世間の評価は低く?、ネットで検索しても、正直、ヒットしてなそうな雰囲気を感じて”自分は経営者には向いてないんだなー”、ちょっと切なくなるわけです。。。

ただ、やっぱり今でもコンセプトには共感していて、”これを使いこなせたら楽しいんだろうなー”という想いは捨て切れないものもあるので、しばらくこのネタで遊んでみようと思います。

で、やっぱり最後は戦車!?に行き着くのですが。。。(笑)



profile_picture_40×40.JPG

続きを読む


nice!(0)  コメント(0) 

リモートコントロール(RC)戦車をつくる【(XBeeコントロール)組み上げ~動作確認】 [RC戦車]

【組み上げ】
【車体(上面)】
XBeeリモコン戦車_プロト.JPG

【XBeeリモコン戦車とXBeeコントロール送信機】
XBeeリモコン戦車_プロト XBeeコントロール送信機と受信機.JPG
XBeeコントロール送信機で見えるピンクのリボンは、電池をケースから外すときに引っ張るリボンです。これが無いと固くて外れません。。。

【動作確認】
XBeeコントロールRC戦車のシェイクダウンです。なかなかスムーズに動作できたと思います。



【このシリーズはこれで完了します】
最初にリモートコントロールの戦車を作ろうと思い立ってから、2年も経っているんですねー[あせあせ(飛び散る汗)]。途中休み休みでしたが、何とかこのレベルまでは自作することができました。
赤外線とXBeeの両方で、前後左右とコントロールしてRC戦車を動作させることは出来ましたので、一旦はこのシリーズを完了としたいと思います。ベーシックな動作のところが出来れば、あとは、センサーだったりカメラだったり制御のためのインプットデータの違いはあるにせよ、応用編かな、と考えるからです。
これからも、興味の向くままに基礎知識を身につけて、バージョンアップができればいいなー、と思います。



profile_picture_40×40.JPG
nice!(0)  コメント(0) 

リモートコントロール(RC)戦車をつくる【XBeeコントロール受信機】 [RC戦車]

XBeeコントロール受信機を作製します。

RC戦車搭載のArduino Pro Miniとモータドライバが5V仕様なので、XBeeとの接続するためにBee3.3V⇔5V変換アダプタを使います。
XBeeエクスプローラ5Vマイコン用
"https://www.switch-science.com/catalog/1166/"

コネクタは6ピンインターフェースに合わせて、L字型をチョイスして付けました。
XBeeエクスプローラ5Vマイコン用.JPG

【スケッチ】
/*******************************************************************************
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;
    }
  }
}




profile_picture_40×40.JPG

続きを読む


nice!(0)  コメント(0) 

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。