2012年5月21日月曜日

シャープの測距モジュールを使った実験(2)

前回に引き続き、シャープの測距モジュール(GP2Y0A21YK)を使った実験のArduinoスケッチ編です。


このモジュールが距離により出力する電圧が直線的ではないため、計算式に工夫が必要なことは前回触れましたが、Google先生で調べてみると、さまざまなアプローチ方法があるようです。

シンプルなものが好きなので、下記の計算式で試してみました。

距離(cm)  = (6787 / (読取値 - 3)) - 4

微分を使ったり、数式を駆使したり、電圧と距離のマトリックスを使ったりと、すばらしものが沢山ありましたが、私には難しすぎました・・・

また、検出した電圧から算出した距離は、シリアルモニターに表示することにしました。

Arduino でのスケッチは以下の通りです。

int InputPin = 1;
int InputValue = 0;

void setup(){
  Serial.begin(9600);
  Serial.println("Start Sensor");
}

void loop(){
  InputValue = analogRead(InputPin);
  int range = (6787 / (InputValue -3)) - 4;
 
  //Output Serial Monitor
  Serial.print(range);
  Serial.println("cm");
  delay(500);
}


スケッチの解説です。簡単でゴメンナサイ。
int InputPin = 1; analog入力を受け取るpin番号を指定しています。
int InputValue = 0; analog入力で受け取った 値を保存するための変数です。

void setup()の中で記載している、下記の2行はシリアルモニターを使うときのお約束事項、ボーレートの指定と、計測を開始したことをシリアルモニターへ出力しています。
  Serial.begin(9600);
  Serial.println("Start Sensor");

InputValue = analogRead(InputPin); analog入力を読みとり、InputValueへ保存しています。

int range = (6787 / (InputValue -3)) - 4; 読み取り値を、距離へ換算しています。

下記の2行で、シリアルモニターへ出力(表示)します。
Serial.print(range);
Serial.println("cm");

delay(500); 最速でループするので、気持ち、待ったを入れています。(笑)

実際にセンサーからの入力をもとに測定値と実測値を比較してみると、40cmを越えたあたりから若干、実測値と測定値の差が開いてきました。
精度が悪いというよりは、正面の対象物ではなく、周辺からの反射波を拾ってしまっている気がします。

30cm以下の範囲では、けっこう良い感じに測定されていました。

最小限のシンプルなスケッチになりました。シンプル大好きです。

次回は、このスケッチを改良して他では見かけない スケッチにしてみます。

(←)シャープの測距モジュールを使った実験(1)

(→)シャープの測距モジュールを使った実験(番外編)



1 件のコメント:

  1. 初めまして、Revetroniqueと申します。
    突然ですみませんが、私たちのブログでこちらの記事を参考ページとしてリンクさせていただきたいのですがよろしいでしょうか。

    なお、私たちのブログはこちらです。
    http://revetronique.blog.fc2.com/

    よろしくお願いいたします。

    返信削除