Arduinoでシャープ測距モジュールGP2Y0A21YKを使う その②
- 2017/10/07
- 10:52
Arduinoでシャープ測距モジュールGP2Y0A21YKを使う その②
こんにちはRoboTakaoです。ようこそ「極力ローコスト ロボット製作 ブログ」にお越しくださいました。
先日紹介したシャープの測距モジュールGP2Y0A21YKについて、実際にArduinoで使ってみましょう。

仕様は前回説明したブログを参照してください。
メーカーのデータシートを見ると距離と電圧の関係がグラフで示されていま。

グラフを見ると10cmをピークにして距離が遠くなるほど出力電圧が下がるカーブとなっていますが線形ではありません。また原理上10cm以下では測れません。
データシートにはもう一つグラフがあり、横軸1/(L + 0.42)となっています。1/(L + 0.42)が約0.01〜0.1くらいまでは線形に近くなっています。

それでは実際に測ってグラフに乗るか試してみましょう。
ArduinoとGP2Y0A21YKの接続
GP2Y0A21YKのVccとArduinoの5Vを接続
GP2Y0A21YKのGNDとArduinoのGNDを接続
GP2Y0A21YKのVoとArduinoのA0を接続

Arduinoのスケッチその1
GP2Y0A21YKの出力電圧をArduinoでアナログデータとして読みます。
シリアルで計測値を出力してArduino IDEのシリアルモニターで確認します。

float val0;
float val1;
void setup() {
Serial.begin(9600);
}
void loop() {
val0 = analogRead(0);
val1 = val0/1023*5;
Serial.print(val0);
Serial.print(" ");
Serial.print(val1);
Serial.print("V ");
delay(1000);
}
シリアルモニターでの確認

実測その1

赤のプロットが実測データでです。概ねデータシートにプロットが乗っていますがどうも電圧が高めに出ているようです。

横軸1/(L + 0.42)のグラフも見てみましょう。当然同じように電圧高めに出ています。

今回はエクセルで横軸1/(L + 0.42)のグラフを線形近似して使ってみます。
近似式としてはY=26.472X+0.2575という式が出ました。
これをで電圧から距離を計算する式に直すと以下となります。
L cm = 26.472/( V – 0.2575) – 0.42
Arduinoのスケッチその2
先ほどの式をスケッチに入れてみます。

float val0;
float val1;
float val2;
void setup() {
Serial.begin(9600);
}
void loop() {
val0 = analogRead(0);
val1 = val0/1023*5;
val2 = 26.472/(val1 - 0.2575) - 0.42;
Serial.print(val0);
Serial.print(" ");
Serial.print(val1);
Serial.print("V ");
Serial.print(val2);
Serial.println("cm");
delay(1000);
}
シリアルモニターでの確認

実測その2
実際の距離と計測値を比較してみます。概ね良い結果が得られました。
ただしグラフには表現していませんが35cm以上はずれた結果となりました。
これは線形近似を10〜35cmの範囲で行ったためと考えられます。
近似式を多項式にするなどすればもっと距離を延ばせると思います。

それでは今回はこの辺で失礼します!ありがとうございました。
スポンサードリンク