Arduinoで距離を測る(2)【赤外線測距センサ】 [Arduino]
Arduinoで距離を測る(1)で超音波測距センサを使ってみました。XBee経由で遠隔からデータを取得することもできました。
次は、赤外線距離センサの「GP2Y0A21YK0F」を使います。
とりあえず、赤外線の距離センサと言ったらコレ!、というくらいネットでもヒットしますので定番なんでしょうね。これです↓
シャープ測距モジュール GP2Y0A21YK0F
"http://akizukidenshi.com/catalog/g/gI-02551/"
今回は単純に動作させてみるだけなので、Arduino UNOに接続してPCのシリアルモニタで表示できるようにしたいと思います。
【配線図】
【スケッチ】
Arduino IDEから
ファイル>スケッチ例>01.Basics>AnalogReadSerial
のサンプルプログラムを改修して作成しました。
センサから出力されたアナログ値から距離を求める数式ですが、データシートのグラフと実測値を用いて、Excelにて累乗近似式で求めました。
距離が離れれば離れるほど計測結果はだいぶ怪しくなってきます。理由は距離に対する出力電圧の変化が小さいためだと思います。実用的には50cm未満のところで使うのが良いと思います。測定中の数値のバラつきもかなりありますので、距離を正確に計測するという用途よりも”ざっくりと20cm以下になったらブレーキをかけたい”とか、だいたいの近い距離まで接近したら何か処理をさせる、というような使い方が良いと思います。
#超音波測距センサとしてメジャーであれば、これから使う機会もあるのでしょうけど、個人的にはちょっと使いづらいデバイスだなー、とは思っています。。。
次は、赤外線距離センサの「GP2Y0A21YK0F」を使います。
とりあえず、赤外線の距離センサと言ったらコレ!、というくらいネットでもヒットしますので定番なんでしょうね。これです↓
シャープ測距モジュール GP2Y0A21YK0F
"http://akizukidenshi.com/catalog/g/gI-02551/"
今回は単純に動作させてみるだけなので、Arduino UNOに接続してPCのシリアルモニタで表示できるようにしたいと思います。
【配線図】
【スケッチ】
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にて累乗近似式で求めました。
距離が離れれば離れるほど計測結果はだいぶ怪しくなってきます。理由は距離に対する出力電圧の変化が小さいためだと思います。実用的には50cm未満のところで使うのが良いと思います。測定中の数値のバラつきもかなりありますので、距離を正確に計測するという用途よりも”ざっくりと20cm以下になったらブレーキをかけたい”とか、だいたいの近い距離まで接近したら何か処理をさせる、というような使い方が良いと思います。
#超音波測距センサとしてメジャーであれば、これから使う機会もあるのでしょうけど、個人的にはちょっと使いづらいデバイスだなー、とは思っています。。。