NOBのArduino日記!

NOBのArduino日記!

趣味は車・バイク・自転車・ラジコン・電子工作です。

赤外線測距センサーの使い方(GP2Y0A21YK)

 
 シャープ測距センサーモジュールGP2Y0A21YKの使い方をご紹介いたします。
 このセンサーで5~80cmの距離が測れます!
 使い方も至ってシンプルなので、ウニモグに装着すれば今話題のぶつからない車に大変身!自動運転ラジコンが作れます!

1. つなげ方

 Arduino UNO測距センサーを図1の様につなげます。
 ArduinoUNO本体からセンサーへ5V電源を供給する事も出来ますが、なるべくArduinoUNOには処理だけに専念してもらい、電力供給は別電源とした方が良いので分けました。
 また別電源を使う場合の注意点として両電源のGND(基準電圧)は下図の様に接続して揃えておきます。これを忘れると意味不明なセンサーの値が出力されて来ますので大事です。
イメージ 1
図1:ArduinoUNOと測距センサーを繋げ方
 
イメージ 2
図2-1:実際に繋げた状態
 
イメージ 3
図2-2:一番簡単な配線、実際これでも測れます

2. プログラム

 Arduino IDEに下のプログラムを張り付ければセンサーから正面の物体までの距離に応じた電圧(0~5Vを0~1023で表した値)がPCのシリアルモニター上に出力されます。
// 赤外線センサー(GP2Y0A21YK)距離取得
void setup() {
     Serial.begin(9600) ;               // 9600bpsでシリアル通信のポートを開きます
}
 
void loop() {
     Serial.println(IRread(0)) ;       // 距離(ln有りで改行、無しで改行なし)
     delay(500) ;                          // 500ms後に繰り返す
}
 
/*カッコ内に指定したアナログピンナンバーのセンサー(GP2Y0A21YK)信号を読み取りセンサーから障害物までの距離をcmで返す関数*/
double IRread(int PinNo) {
     double ans ;
     int i ;
     ans = 0 ;
     for (i=0 ; i < 1000 ; i++) {
          ans  = ans + analogRead(PinNo) ;   // 指定のアナログピン(0番端子)から読取ります
     }
     return ans/1000;//センサーの値を1000回読み取った平均値を返します
}

イメージ 1
プログラム例

 

3. 測ってみる

3.1 実際に測ってみる
 右の小さい三脚の上にセンサーを取り付けています。
 このセンサーの正面に有る段ボール迄の距離に応じて黄色い線に出力される電圧が変化します。
 箱をセンサーから5cmずつ離して行き、その時のセンサーから出力される電圧(0~5Vを0~1023で表した値)がPC画面上に表示されるのでそれをメモしました。
イメージ 4
図3:センサーから段ボールまでの距離を変え、その時の電圧を測ります
 
3.2 実際に測った結果
 メモした値をEXCELで図4-1の様にグラフにします。
 
3.2.1 近似曲線
 EXCELには近似曲線の作成と言う便利な機能が有りますので、それを使って「累乗近似」するといい感じに近似曲線が測定曲線にフィットしました。
 
 EXCELでは親切にもフィット感を具体的に数値(R2:相関係数)で教えてくれます。見方は単純で0に近い程外れており、1に近い程フィットしているので図4-1のR2=0.9942は1に近いので測定結果をよく近似した曲線であると言えます。
 
3.2.3 近似曲線の数式
 EXCELは最強の分析ツールと言われるだけあります!「グラフに数式を表示する」と言うチェックボックスにチェックを入れるだけで何の苦労も無く近似曲線の数式が図4-1の通り得られました!
イメージ 5
図4-1:測った結果

3.3 因みに仕様書は
 GP2Y0A21YKの仕様書の3ページ目の図5に電圧と距離のグラフが有りましたので、グラフから数値を読み取り、EXCELでグラフ化してみました。
 相関係数もR2=0.9907と1に近くこの近似曲線も精度が良いです。
 
3.3.1 確認
 図4-1実測値と、図4-2カタログ値の近似曲線は精度よく測定値を表しているので両グラフを数式で比較してみます。
 実 測 値:Y = 19501.14 * X ^ -1.256676
 カタログ値 :Y = 19988.34 * X ^ -1.252140
 センサーの個体差も測定物の差も有る中、なかなか仕様書通りの良い値です。これでセンサーの測定値は正常であることが確認出来ました!
イメージ 6
図4-2:取説の値(測れる距離は5~80cmとの事)

3.4 近似曲線の数式をArduinoIDEの式に変換
 図4-1の近似曲線の数式は測定値をかなり正確に表しており、また仕様書の値に相違ない事が確認出来ました。
 と言う事でこの式を有り難くArduinoIDEの式に変換します。
EXCELの式    : Y = 19501.14 * X ^ -1.256676
ArduinoIDEの式 : Y = 19501.14 * pow(X , -1.256676)
 
3.4.1 プログラム用の式
 3.4でArduinoIDEの式に変換したものを、さらに2.プログラム最後から二行目の式

     return ans/1000;//センサーの値を1000回読み取った平均値を返します

 と入れ替えるように修正したものは次の通りです。

     return 19501.14 * pow(ans/1000 , -1.256676);//センサーの値を1000回読み取った平均値から距離へ換算します

 上記式に入れ替えればめでたくセンサーから箱迄の距離がPCのシリアルモニター上に表示されました

4. まとめ

 数式を使わない場合で、図4-1の電圧と距離の関係を条件式で細かく50行ぐらい書いたとしても1つの数式が持つ変換精度と速度にはどうあがいてもかないません。
 この様な相関性の有る異なる二つの値(電圧と距離等)は数式化する事でプログラムがスッキリするので大変便利です(変換式が僅か1行で書けます!)。
 こう言った難しいことが簡単に出来るのもEXCELのおかげです
 
イメージ 1 イメージ 3
励みになりますのでよければクリック下さい(^o^)/

↩【NOBのArduino日記!】目次に戻る