電子工作 その21(アナログ電圧出力タイプ赤外線測距センサー:GP2Y0A02YK0Fの使い方)
こんにちは、Ideagearの鈴木陽介です。
2週間前の浜松城公園の屋外イベントでは、リモコン操作でデジペをしゃべらせました。
詳しくは、下記記事をご覧ください。
リモコンでデジペがしゃべること自体はまぁまぁ好評だったのですが、同時に出た課題として、実際にお店の人に使ってもらうことを想定した場合、わざわざリモコン操作をするのは面倒なので、デジペの前を通ったり近づいたら自動でしゃべらせる方が現実的という意見が出ました。
しかも、赤外線受光モージュールは360度カバーできない(がんばって210度前後度)うえ、ぬいぐるみの中にインストールすると受信可能な距離が短くなってしまいます。となると、リモコン操作は常にその狭い可動範囲内で操作する必要があるため、フレキシビリティ(柔軟性)に欠けます。
そこで、距離センサーを使うアイデアを思いつきましたが、電子工作で距離センサーといえば、下記記事のHC-SR04のような、見た目が目ん玉の超音波式が一般的ですが、これだと目立つためぬいぐるみの中に実装したり、外付けするのにはそぐわないです。
ということで、今回は、サイズが小さく、種類も豊富な赤外線の距離センサーを試すことにしました。
はじめに
赤外線の距離センサーはかなりの種類がありますが、測距センサーは、これまで超音波方式しか使ったことがありません。よって、まずは赤外線の距離センサーがどのようなものかを把握する必要があります。
そこで、まずはサイズは無視し、安価で比較的文献も多いシャープ製の赤外線測距モジュール「GP2Y0A02YK」から試すことに決定。秋月電子通商の下記リンクから発注しました。
参考記事
配線
ブレッドボード図は上記参考記事をご覧ください。
GP2Y0A02YK0FのVCCには5Vを供給します。
Arduino Uno | GP2Y0A02YK0F |
---|---|
5V | 黒(VCC)※1 |
GND | 黄(GND)※1※2 |
A0 | 白(アナログ出力)※2 |
※1:VCCとGND間には、10μFのコンデンサを入れる。
※2:アナログ出力とGND間には、0.1μFのコンデンサを入れる。
ソースコード
GP2Y0A02YK0Fは、ありがたいことにライブラリーなしで使えます。
以下、参考記事のソースコードを拝借。
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");
}
動作テスト
Arduino IDEのシリアルモニタとシリアルプロッタの両方で値を確認しました。
なお、シリアルモニターのテスト時は手元に10μFと0.1μFのコンデンサが無かったため、センサーだけで使用しましたが、コンデンサを使っても値の変化はあまり感じませんでした。。。
まぁコンデンサ無しでも普通に動くため、手元に無い場合はわざわざ一個ずつ入手するのも面倒ですし、おもちゃとしてアバウトに使う分には無しでもいいでしょう。
シリアルモニターでの動作確認
なお、秋月さんからの到着が大幅に遅れたのは、後で気づきましたがどうやら大雪の影響だったようですね。。。失礼しました。
シリアルプロッタでの動作確認
0.1㎌と10㎌のコンデンサを入手したので使ってみましたが、違いがほぼわからないと言いますか、少なくともデジペで使う分にはほぼ影響無いレベルですね。。。
まとめ
いかがでしたでしょうか?
所感としては使えそうかなと。もちろん、実際にぬいぐるみの中に実装して、屋外で使用してみないとわかりませんが、配線も3本だけで、ソースコードもシンプルですので扱いやすいと思いました。
また、シャープ製の赤外線測距モジュールだけでも、今回使用したGP2Y0A02YKの他にも測定可能距離に応じて複数あるようですので、デジペにフィットする赤外線センサーは探せばありそうですね。
次は、もう少し小さいものか、アナログ出力ではなくデジタル出力のものを試したいと思います。
それではまた!
Discussion