(有線ラジコンを作ってみた

 今回は、ラジコンを作るための第2ステップとしてジョイスティックに

ついて理解を深めたいと思っています。

 

■ジョイスティック

・スティックの傾きにより内部抵抗が変化しアナログピンに送られます。

・0~1023までのアナログ値を送ることができ最大0V~5Vまでの電圧

 を変化させることができます。

・ピンがついているのを手前とすると→上下がX

                 左右がy

 

■配線方法

 

■実際にプログラムを書いていく

・シリアル通信もできるようになっています。

 

const int X_PIN = A0;  // X軸方向の入力をアナログピンA0に
const int Y_PIN = A1;  // Y軸方向の入力をアナログピンA1に

const int IN1  = 13;   //モータードライバーに接続するピン
const int IN2  = 12;   //
const int IN3  = 11;   //
const int IN4  = 10;   //

 
 
int X_POS ;            // X軸方向の読み取り値の変数を整数型に
int Y_POS ;            // Y軸方向の読み取り値の変数を整数型に
float OFFSET = 0.05 ;  // センター付近のオフセット値を5%に設定

 
void setup(){
 
  pinMode(X_PIN, INPUT);          // A0ピンを入力に
  pinMode(Y_PIN, INPUT);          // A1ピンを入力に

 
  pinMode(IN1 , OUTPUT) ;     //
  pinMode(IN2 , OUTPUT) ;     // それぞれのピンを出力に設定
  pinMode(IN3 , OUTPUT) ;     //
  pinMode(IN4 , OUTPUT) ;     //
  
  
 
  Serial.begin(9600);             // シリアル通信の開始
  
}
 
 
void loop(){


    
  Serial.print("X: ");     // シリアルモニタにそれぞれの値を出力
  Serial.print(X_POS);
  Serial.print("  Y: ");
  Serial.println(Y_POS);
  delay(100);
 
  X_POS = analogRead(X_PIN);     // X軸方向のアナログ値を読み取る
  Y_POS = analogRead(Y_PIN);     // Y軸方向のアナログ値を読み取る

 if((X_POS > 512-512*OFFSET) && (X_POS < 512+512*OFFSET)){  

// X軸方向の中心のとき(512*5%)のときは何もしない
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, LOW);

    
  }
 
  if((Y_POS > 512-512*OFFSET) && (Y_POS < 512+512*OFFSET)){ 

 // Y軸方向のセンター(512)の前後OFFSET分はLEDを消灯
    digitalWrite(IN1 ,LOW);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, LOW);

    
    
  }
  
 
  if(X_POS <= 512-512*OFFSET){                     

 // スティックを左に倒したときの動作
    digitalWrite(IN1, HIGH);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, HIGH);
    digitalWrite(IN4, LOW);

    //Srial.print("a");
  }
  else if(X_POS >= 512+512*OFFSET){                 // スティックを右に倒したときの動作
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, HIGH);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, HIGH);

    
  }
 
 
  if(Y_POS <= 512-512*OFFSET){                      

// スティックを上に倒したときの動作
    digitalWrite(IN1, HIGH);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, LOW);

    
  }
  else if(Y_POS >= 512+512*OFFSET){                 

// スティックを下に倒したときの動作
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, HIGH);
    digitalWrite(IN4, LOW);
     
  }
  
}


 

◎シリアルモニタ

 

■完成図

■追記

・ラジコンを作るための車輪を作成しました。

・グリップ力が0なので両面テープなどを貼って対応しようと思っています。