GP2Y0A02YKをArduinoで使う方法!赤外線センサで距離測定

SHARPの赤外線測距モジュール「GP2Y0A02YK」をArduinoで使う方法を説明します。

データシートからセンサの出力電圧を距離に変換する近似式を算出し、Arduinoのシリアルプロットで距離を確認します。



GP2Y0A02YKとは

赤外線で物体までの距離を測定することができるSHARPの測距センサです。

測定できる距離違いでいくつかのセンサが販売されています。

今回は20cm~150cmまで測定可能な GP2Y0A02YK の使い方を説明しますが、他のセンサも使い方はほぼ同じです。

センサー名測定距離
GP2Y0A21YK10 – 80cm
GP2Y0A02YK20 – 150cm
GP2Y0A710K1 – 5.5m
シャープ測距モジュール

実物は単三電池と同じくらいの大きさです。

電源電圧などの詳細仕様はデータシートをご確認ください。

配線

センサ付属のケーブルに対応するピン配置は以下のようになっています。

ケーブルの色ピン
Vcc(4.5~5.5V)
GND
アナログ出力

Arduinoとの配線は以下のようにしました。

VccとGND間には10μFのコンデンサ、アナログ出力とGND間には0.1μFのコンデンサを入れています。

※ 下の部品は GP2Y0A21YK の図となっていますが、配線は同じです。

距離の算出方法

センサのアナログ出力と距離の関係は以下のようになっています。

GP2Y0A02YK datasheet より抜粋

約15cm以下は測定できません(15cm以上と見分けがつきません)。

アナログ出力 0 – 5V をAD変換した AD値 0 -1023 と距離の近似は以下のようになります。

上記の近似式は以下です。


$$ 距離 [ cm ] = 25391 * (AD値)^{-1.136} $$

スケッチ(プログラム)

スケッチ(プログラム)は以下のようにしました。

int val = 0; // 受信するシリアルデータのために準備
float dis = 0; // 距離の計算値
float l_t = 0.7; // センサのフィルタ定数
void setup() { Serial.begin(9600); // シリアルポートを開き,データレートを9600 bpsにセットする
}
void loop() { val = analogRead(A0); if(val < 82){ // AD値が小さい場合に近似式で距離が無限になってしまうので、AD値が82未満は82とする val = 82; } dis = l_t * dis + (1 - l_t) * 25391 * pow(val, -1.136); // 距離算出。指数移動平均で平滑化。 Serial.print("AD: "); Serial.print(val); Serial.print(" / 距離: "); Serial.print(dis); Serial.println(" cm");
}

距離算出は上記の近似式を使っていますが、センサ値がばらつくので指数移動平均で平滑化しています。

フィルタの定数を変更する場合は、3行目のfloat l_t = 0.7;の値を変更します。

上記の値でセンサ値を平滑した様子は以下です。

横軸は時間(msec)、縦軸はAD値。

青が平滑前、赤が平滑後のAD値。

距離の測定結果

シリアルモニタにはAD値と距離が出力されます。

下記のように距離を測定し、実際の距離と測定値を比較してみました。

実際の距離測定値
20cm約21cm
25cm約24cm
30cm約31cm
35cm約35cm
40cm約43cm
45cm約45cm
50cm約57cm

上記のように対象物との距離をある程度正確に測定できています。

ただし、測定対象物の位置が3cmほど移動すると測定値が10cmほどずれるということもあります。

測定環境や測定対象物が一定条件の場合は距離を測定することも可能ですが、物体の有り無しを検出するというような使い方が向いていると思います。

ラップタイマを自作したい

実家の畑に父親がラジコンのサーキットを作りました。

ラップを測定するために、上記のセンサでラップタイマーを作ってみようと思います。

上記のセンサとは別に、超音波距離センサでも試してみる予定です。

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA


検索

アーカイブ

プロフィール

プロフィール背景画像
プロフィール画像

チャベス

1989生まれ、機械機器メーカーで研究開発をしている機械系エンジニアです。 業務効率化や日々の生活を効率化できるプログラミングネタを発信しています。PythonとNotionとSANGO(WordPress)が特に好きです。 詳細プロフィールはこちらnoteにNotionの記事も書いています。

WP-Searchにサイト事例として掲載されています。