mbed を使ったロボット作成 第2回

【赤外線センサを使ってみる】
はじめに
人が外部の何かを感知する時、五感を使うことは、皆さんご承知のとおりです。
ロボット(コンピュータ)が外部の何かを感知する場合、五感なんてものは無いので、お膳立てをしてあげる必要があります。
そこで登場するのが、センサです。
最近では急速は技術進歩により、様々なセンサが登場しています。
今回は、マイコンで動作するロボットの『目』となるセンサーについて赤外線センサを採用しました。
採用した理由としては、マイコンで動作するロボットという性質上、省電力、省スペースである必要があり かつ 制御を簡単にしたかったからです。
赤外線センサについて
赤外線センサは、今やどこにでも設置されており、誰もが気付くこと動作しています。
代表的は実装事例としては、コンビニの自動ドア、防犯用人感センサなどがあげられます。
仕組みはいたって単純で、発光素子から赤外線(光)を照射し、その反射光を受光素子により受光し、その結果をデータ化します。
もっと詳細が知りたい方は、『赤外線センサ』でググってみてください。
今回、使用するセンサは以下のとおり。
| 製品名 | 距離計測モジュール(ハーネス付き) |
| メーカー | シャープ |
| 型番 | GP2Y0A21K0F |
| 距離計測範囲 | 10~80cm |
| 出力 | アナログ電圧出力 |
| 値段 | 600円(楽天市場でポチっとしました) |
距離計測モジュールGP2Y0A21K0Fは赤外線LEDと光位置センサPDS(Position Sensitive Detector)、信号処理回路で構成されています。
赤外線LEDから照射した赤外線が物に反射され、その反射光を光位置センサPDSで受信して、出力電圧を距離に応じて変化させて出力させます。
距離L-出力電圧V特性は、物との距離Lが小さく(近づく)についれて出力電圧V大きくなり、距離Lが大きく(離れる)につれて出力電圧Vは小さくなります。
この出力電圧Vをmbedのアナログ入力とし、A-Dコンバータでデジタル値に変換します。

mbedとの接続は以下のとおり

※GP2Y0A21K0F側の色はハーネスの色です。黒がGNDでないのがポイント。
ソフトウェアについて
開発環境は、「mbedを使ったロボット作成 第1回」でご紹介した「ARMのオンラインコンパイル環境」を使って作成していきます。
メイン処理で無限ループし、アナログポートから入力のあった値に応じて、LEDの点滅時間を変更するプログラムをして検証を行います。
#include "mbed.h"
DigitalOut myled(LED2); /* 点滅するLEDポートの定義 */
AnalogIn ain(A0); /* アナログ入力ポートの定義 */
/*
* アナログ入力に応じてLEDの点滅時間を変更する
*/
int main() {
double time = 1.0;
while(1) {
/* ain の値 応じて Wait 時間を決定する */
/* 距離が近い程、ain の値は大きくなる */
if ( ain > 0.8f ){
time = 0.2; /* 0.2 sec */
} else if( ain > 0.6f ){
time = 0.5; /* 0.5 sec */
} else if( ain > 0.4f ){
time = 1.0; /* 1.0 sec */
} else if( ain > 0.2f ){
time = 1.5; /* 1.5 sec */
} else {
time = 2.0; /* 2.0 sec */
}
myled = 1; /* LED is ON */
wait(time); /* ON Wait */
myled = 0; /* LED is OFF */
wait(time); /* OFF Wait */
}
}
実行結果
障害物が「離れているとLEDの点滅が遅く」、「近づくとLEDの点滅が早くなる」ことが確認できました。
簡単なポート制御をするだけで、赤外線センサを使った距離計測ができます。
この結果をもとに、ロボットに障害物回避をさせたいと思います。
次回は、サーボモータ制御かLCD表示あたりをやってみます。
#mbed , #NUCLEO-F401RE , #GP2Y0A21K
【参考】
mbedを使ったロボット作成 第1回
mbedを使ったロボット作成 第3回
3 thoughts on “mbed を使ったロボット作成 第2回”
この投稿はコメントできません。