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回”
この投稿はコメントできません。