SSブログ

Arduinoで距離を測る(2)【赤外線測距センサ】 [Arduino]

Arduinoで距離を測る(1)で超音波測距センサを使ってみました。XBee経由で遠隔からデータを取得することもできました。
次は、赤外線距離センサの「GP2Y0A21YK0F」を使います。
とりあえず、赤外線の距離センサと言ったらコレ!、というくらいネットでもヒットしますので定番なんでしょうね。これです↓
シャープ測距モジュール GP2Y0A21YK0F
GP2Y0A21YK.JPG
"http://akizukidenshi.com/catalog/g/gI-02551/"

今回は単純に動作させてみるだけなので、Arduino UNOに接続してPCのシリアルモニタで表示できるようにしたいと思います。

【配線図】
赤外線測距センサ_ブレッドボード.jpg
【スケッチ】
Arduino IDEから
ファイル>スケッチ例>01.Basics>AnalogReadSerial
のサンプルプログラムを改修して作成しました。

/*
  AnalogReadSerial

  Reads an analog input on pin 0, prints the result to the Serial Monitor.
  Graphical representation is available using Serial Plotter (Tools > Serial Plotter menu).
  Attach the center pin of a potentiometer to pin A0, and the outside pins to +5V and ground.

  This example code is in the public domain.

  http://www.arduino.cc/en/Tutorial/AnalogReadSerial
*/
/*******************************************************************************
赤外線距離センサ(GP2Y0A21YK) サンプルプログラム

++++++ note ++++++
・シャープ測距モジュール GP2Y0A21YK
・測定した距離をコンソール画面に表示するプログラム
・測距範囲:10~80cm

*******************************************************************************/
const float Vcc = 5.0;                            //電源電圧(定数)
float range_volt;                                 //出力電圧
float range_data;                                 //距離

// 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() {
  int sensorValue = analogRead(A0);               //read the input on analog pin 0:
  range_volt = Vcc * sensorValue / 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モニタ)
  Serial.print("Output Voltage= ");
  Serial.print(range_volt);                       //出力電圧を表示
  Serial.print("[V], ");
  Serial.print("Range= ");
  Serial.print(range_data);                       //距離を表示
  Serial.println("[cm]");                         //単位はcm
  delay(500);                                     //シリアルポートを溢れさせないように ※delay():単位ms
}

センサから出力されたアナログ値から距離を求める数式ですが、データシートのグラフと実測値を用いて、Excelにて累乗近似式で求めました。
GP2Y0A21YK0F 出力電圧-距離換算.jpg

距離が離れれば離れるほど計測結果はだいぶ怪しくなってきます。理由は距離に対する出力電圧の変化が小さいためだと思います。実用的には50cm未満のところで使うのが良いと思います。測定中の数値のバラつきもかなりありますので、距離を正確に計測するという用途よりも”ざっくりと20cm以下になったらブレーキをかけたい”とか、だいたいの近い距離まで接近したら何か処理をさせる、というような使い方が良いと思います。
#超音波測距センサとしてメジャーであれば、これから使う機会もあるのでしょうけど、個人的にはちょっと使いづらいデバイスだなー、とは思っています。。。



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

nice! 0

コメント 0

コメントを書く

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

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