みなさん,こんにちは
おかしょです.
ロボットが壁などに衝突を回避するために必要な測距モジュールの使用方法について解説します.
このセンサーを使用すれば,近くのものまでの距離などを測定することが可能になります.
この記事を読むと以下のようなことがわかる・できるようになります.
- 測距モジュール(GP2Y0A21YK0F)の使用方法
- 測距モジュール(GP2Y0A21YK0F)の特徴
- 測距モジュールを使用するための電子回路
- 測距モジュールを使用するプログラム
この記事を読む前に
この記事ではArduinoを使用します.
そのためArduinoの基本的な使用方法を知っている必要があります.
以下の記事では電子工作をまだやったことがない人やArduinoを使用したことがない人を対象としてLEDの光らせ方を解説しています.
まだ読んでいない方は,そちらを先に読んでおくことをおすすめします.
測距モジュールとは
測距モジュールとは測距センサーとも呼ばれる距離を測定することのできるセンサーのことを言います.
今回使用するGP2Y0A21YK0Fは赤外線で距離を測定します.
このセンサーは写真の左側のレンズから赤外線を照射して,その赤外線が物体から反射したものを右側のレンズで受光します.
このときの照射から受光までの時差を使って物体までの距離を測定します.
この測距センサーでは10~80cmまで測定が可能です.
供給電圧は4.5~5.0Vが必要なのでArduinoでも使用することができます.
このセンサーで測定した距離はArduinoに電圧として知らされます.このときに受け取った電圧を距離に変換することで,正確な距離を求めることができます.
また,このセンサーは赤外線で測定するので対象物は赤外線を反射しなければなりません.赤外線を反射しにくいガラスなどの測定には向かないので注意が必要です.
電子回路
測距モジュールを使用するために必要になるものは以下になります.
USBケーブル
測距モジュール(GP2Y0A21YK0F)
これだけでできます.
もしかしたら測距モジュールを購入した時に導線の先にコネクターが付いているかもしれませんが,コネクターを使用する予定がないのであれば,写真のように導線のビニルを切って剥がしてください.
このようにすれば,ブレッドボードを使用しなくてもArduinoのピンソケットに直接導線を指すことができます.
ただ,導線はピンソケットから外れやすいので注意してください.
この測距モジュールを使用するためには,以下の電子回路のようにArduinoと接続する必要があります.
他のセンサーは黒や茶色の線はGNDに接続することが多いのですが,この測距モジュールは黒い線を5Vに接続するので注意してください.
信号線である白い導線はアナログ入力ができるピンであればどこに挿しても問題ありません.
Arduino Unoの場合はA0~A5がアナログ入力のピンです.
使用方法
まずはこのセンサーからデータを取り出してみます.
そのために使用したプログラムは以下の通りです.
int data;
void setup() {
Serial.begin(9600);
}
void loop() {
data = analogRead(0);
Serial.println(data);
delay(100);
}
このプログラムでは最初にint型で定義している”data”に測距センサーのデータが入ります.
setup関数内ではシリアル通信のための設定をしています.
loop関数ではanalogReadというコマンドを使用してデータを取り出しています.このコマンドのかっこの中身はセンサーの白い導線を接続しているピンの番号を入れます.
次の行のSerial.printlnでデータを表示して改行します.
この処理を0.1秒おきに行います.
これを実行すると以下のようになります.
このようにセンサーに物を近づけたり離したりすると表示される数値が変化します.
しかし,この数字が何を意味するのか分かりません.
ここで,このセンサーのデータシートを見てみると出力電圧に対する距離の関係を表すグラフが描かれています.
しかし,センサーから得られたデータは明らかに電圧ではありません.
このデータはanalogReadというコマンドを使用して取得しました.
このanalogReadというコマンドは入力された電圧0~5Vを0~1023の数値で表すというコマンドです.
そのため,得られたデータを電圧に変換するか,グラフの電圧を0~1023の数値に変換して距離を求める必要があります.
この記事では後者のグラフの電圧を0~1023の数値に変換してみます.
まずはデータシートに載っているグラフから数値を読み取ります.
データを読みっとたら,Excelを用いてこのようなグラフを描きます.
先程のグラフの電圧を0~1023の数値に変換するとグラフはこのように変化します.変化すると言っても,軸の数値が変化するだけです.
このとき,Excelの機能を使って近似曲線の数式も求めました.累乗近似にしたときが最もよく近似できていたのでそうしました.
しかし,この数式では距離xを代入することによってデータyを求める式なので使えません.
縦軸と横軸を入れ替えてもう一度近似式を求めるとこのようになります.
これでデータをこの数式に代入すれば,距離を求めることができるようになりました.
この近似式を使用して距離を求めるプログラムは以下になります.
int data;
float L;
void setup() {
Serial.begin(9600);
}
void loop() {
data = analogRead(0);
L = 21000*pow(data, -1.252);
Serial.println(L);
delay(100);
}
プログラムを実行すると以下のようになります.
このように取得したデータからcm単位の距離を表示できるようになりました.
まとめ
この記事では測距モジュールのGP2Y0A21YK0FをArduinoで使用する方法を解説しました.
このセンサーを使用すれば,壁などの障害物との衝突回避や周りの環境を調べることができます.これを使用することでさらに作成するロボットの幅が広がりそうです.
続けて読む
このブログでは他にもさまざまなセンサーや電子部品の使用方法を解説しています.
以下の記事では加速度センサー・ジャイロセンサー・地磁気センサーの3つが搭載されたLSM9DSの使用方法について解説しています.ぜひ参考にしてみてください.
Twitterでは記事の更新情報や活動の進捗などをつぶやいているので気が向いたらフォローしてください.
それでは最後まで読んでいただきありがとうございました.
コメント