前回に引き続き、シャープの測距モジュール(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)
(→)シャープの測距モジュールを使った実験(番外編)
初めまして、Revetroniqueと申します。
返信削除突然ですみませんが、私たちのブログでこちらの記事を参考ページとしてリンクさせていただきたいのですがよろしいでしょうか。
なお、私たちのブログはこちらです。
http://revetronique.blog.fc2.com/
よろしくお願いいたします。