Arduinoで距離を測る(2)【赤外線測距センサ with XBee(動作確認)】 [Arduino]
せっかくなので、超音波測距センサのときと同じように、測定したアナログ値をバイナリデータとしてXBee間でシリアル通信して、PCのシリアルモニタに表示をさせます。
赤外線測距センサの「GP2Y0A21YK」の測定レンジは10cm~80cmですので、測定レンジを外れたら"Out of Range"と表示します。
【スケッチ】
<送信側>
<受信側>
赤外線測距センサの「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"); } } }
2020-08-09 10:30
nice!(0)
コメント(0)
コメント 0