SSブログ

Arduinoで距離を測る(2)【赤外線測距センサ with XBee(動作確認)】 [Arduino]

せっかくなので、超音波測距センサのときと同じように、測定したアナログ値をバイナリデータとしてXBee間でシリアル通信して、PCのシリアルモニタに表示をさせます。

赤外線測距センサの「GP2Y0A21YK」の測定レンジは10cm~80cmですので、測定レンジを外れたら"Out of Range"と表示します。

【スケッチ】
<送信側>
/*******************************************************************************
赤外線距離センサ(GP2Y0A21YK)用XBeeトランスミッタ

++++++ note ++++++
シャープ測距モジュール(GP2Y0A21YK)用にArduinoProMini-XBee送信機

*******************************************************************************/
// These constants won't change. They're used to give names to the pins used:
const int analogInPin = A0;               //A0をアナログ入力ピンに指定
int sensorValue = 0;

// the setup routine runs once when you press reset:初期化(電源投入/リセット時1回のみ実行)
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);                     //9600bpsでシリアルポートを開く
}

// the loop routine runs over and over again forever: main loop
void loop() {
  sensorValue = analogRead(analogInPin);  //アナログ入力ピン(A0)の値を読む
  sendIntData(sensorValue);
  delay(100);
}

 // int型のデータを送信する関数
void sendIntData(int value) {
  Serial.write('H'); // ヘッダの送信
  Serial.write(lowByte(value));   // 下位バイトの送信
  Serial.write(highByte(value));  // 上位バイトの送信
}

<受信側>
/*******************************************************************************
赤外線距離センサ(GP2Y0A21YK)用XBeeレシーバ

++++++ note ++++++
シャープ測距モジュール(GP2Y0A21YK)用にArduinoUNO-XBee受信機

*******************************************************************************/
int recv_data;                                    //受信データ
const float Vcc = 5.0;                            //電源電圧(定数)
float range_volt;                                 //出力電圧
float range_data;                                 //距離

// 初期化(電源投入/リセット時1回のみ実行):
void setup() {
  Serial.begin(9600);                             //9600bpsでシリアルポートを開く
}
// main loop:
void loop() {
  // 受信バッファに3バイト(ヘッダ+int)以上のデータが着ているか確認
  if ( Serial.available() >= sizeof('H') + sizeof(int) ) {
    // ヘッダの確認
    if ( Serial.read() == 'H' ){
      int low = Serial.read();                    //下位バイトの読み取り
      int high = Serial.read();                   //上位バイトの読み取り
      recv_data = makeWord(high,low);             //上位バイトと下位バイトを合体させてint型データを復元
    }

  // 受信データから表示させる距離データを作成   
  range_volt = Vcc * recv_data / 1023;            //アナログピンから読み取った値を元の出力電圧値に戻す

  // 出力電圧から距離データを作成
//range_data = 27.289 * pow(range_volt, -1.202);  //【データシート】距離を計算(累乗近似) pow:べき乗
  range_data = 26.123 * pow(range_volt, -1.106);  //【実測】距離を計算(累乗近似) pow:べき乗

  // 距離データの表示 range_dataの値をハード・シリアルへ出力する(Arduino→PCモニタ)
    if((range_data >= 10) && (range_data <= 80)){   //range_dataが10以上80以下ならば、距離を表示する
      Serial.print("Range= ");
      Serial.print(range_data);                     //距離を表示
      Serial.println("[cm]");                       //単位はcm
    }
    else{                                           //range_dataがそれ以外ならば、Out of Rangeと表示する
      Serial.println("Out of Range");
    }
  }
}

赤外線測距センサ with XBee.JPG



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

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

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