記事一覧

Arduinoでシャープ測距モジュールGP2Y0A21YKを使う その②

Arduinoでシャープ測距モジュールGP2Y0A21YKを使う その②



こんにちはRoboTakaoです。ようこそ「極力ローコスト ロボット製作 ブログ」にお越しくださいました。

先日紹介したシャープの測距モジュールGP2Y0A21YKについて、実際にArduinoで使ってみましょう。
GP2Y0A21YK13


仕様は前回説明したブログを参照してください。

メーカーのデータシートを見ると距離と電圧の関係がグラフで示されていま。

GP2Y0A21YK03

グラフを見ると10cmをピークにして距離が遠くなるほど出力電圧が下がるカーブとなっていますが線形ではありません。また原理上10cm以下では測れません。

データシートにはもう一つグラフがあり、横軸1/(L + 0.42)となっています。1/(L + 0.42)が約0.01〜0.1くらいまでは線形に近くなっています。

GP2Y0A21YK04

それでは実際に測ってグラフに乗るか試してみましょう。

ArduinoとGP2Y0A21YKの接続
 GP2Y0A21YKのVccとArduinoの5Vを接続
 GP2Y0A21YKのGNDとArduinoのGNDを接続
 GP2Y0A21YKのVoとArduinoのA0を接続

GP2Y0A21YK15

Arduinoのスケッチその1

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

GP2Y0A21YK05

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);
}

シリアルモニターでの確認
GP2Y0A21YK06

実測その1

GP2Y0A21YK14

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

GP2Y0A21YK09

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

GP2Y0A21YK11

今回はエクセルで横軸1/(L + 0.42)のグラフを線形近似して使ってみます。

近似式としてはY=26.472X+0.2575という式が出ました。
これをで電圧から距離を計算する式に直すと以下となります。

L cm = 26.472/( V – 0.2575) – 0.42

Arduinoのスケッチその2
先ほどの式をスケッチに入れてみます。

GP2Y0A21YK07

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);
}

シリアルモニターでの確認
GP2Y0A21YK08

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

GP2Y0A21YK12

それでは今回はこの辺で失礼します!ありがとうございました。

スポンサードリンク

コメント

コメントの投稿

非公開コメント

プロフィール

RoboTakao

Author:RoboTakao
みなさんご訪問ありがとうございます。ロボット作りたいけどお小遣いそんなにないし、簡単でローコストでロボットを作るための私のプロジェクトを紹介します。

ウェブサイトもありますのでそちらもよろしくお願いします。
http://robotakao.jp/

最新コメント

スポンサーリンク