超音波センサーを使おう
超音波センサーとは
超音波センサーとは超音波の反射を利用して対象物までの距離を測る測距センサーです。
ヴイストンロボットショップでは超音波距離センサモジュール HC-SR04をお求めいただけます。測定可能距離は2cm-450cmです。ArduinoやFreaduinoと接続して使うことができます。
超音波センサーをロボットに載せてみよう
超音波距離センサモジュール HC-SR04をロボットに載せます。頭部前面板にHC-SR04を両面テープ等で貼り付けます。配線は頭部前面板と頭部上面板の間を通します。
(注)下の写真のHC-SR04と、現在ロボットショップで販売しているものは色と形が若干異なりますが、機能は同じです。
HC-SR04の各ピンをFreaduino UNOにケーブルで接続します。接続ピンは以下の通りです。接続にはメス―メスのジャンパー線が4本必要です。
- (HC-SR04)VCC-5V(Freaduino):赤いピンヘッダならどこでも構いません
- (HC-SR04)TRI-A0(Freaduino):A0とプリントされた、黄色いピンヘッダ
- (HC-SR04)ECH-A1(Freaduino):A1とプリントされた、黄色いピンヘッダ
- (HC-SR04)GND-GND(Freaduino):黒いピンヘッダならどこでも構いません
次に、超音波センサーのデモプログラムdemo_sonic01.ino(7565)をダウンロードして、ロボットにインストールしてください。配線とプログラムのインストールが正しく行われていれば、超音波センサーの前に手をかざすとロボットが歩き出します。トリムは再度調整しておいてください。64行目のtmp_trim[SERV_NUM]={0,0,0,0}; を修正します。
このデモプログラムを書き込むときは、サーボモータのケーブルを外しておいてください。プログラムを書き込む際に電圧降下を起こさないようにするためです。
以下は超音波センサーのデモプログラムの抜粋です。超音波センサーで距離25cm以内になにかあれば、進むという処理になっています。
デモコードのif文の中のplayMotion(move_forward, 6);をplayMotion(move_back, 6);に変更すると、手をかざしたときに後退します。反応距離(下の例ではif(dist<25))を変更すると、手をかざして反応する距離が変化します。色々試してください。
//=================================================================================================== //Main //=================================================================================================== void setup(){ initServo(); //debug Serial.begin(9600); pinMode(TRI,OUTPUT); pinMode(ECH,INPUT); } void loop(){ int dist = getDistance(); if(dist<25){ playMotion(move_forward, 6); }else{ playMotion(home_position, 1); } delay(100); }
なお、超音波センサーから読み取った値をシリアルモニタで確認することができます。距離を実際に確認したい場合は、ボーレート9600でシリアルモニタを立ち上げてください。以下のように、超音波が帰ってくるまでの時間と、対象物までの距離が表示されます。
LEDをインジケーターとして使ってみよう
ロボットにセンサー等を搭載した場合、センサーが反応しているか確認するためにLEDをインジケーターとして搭載することがあります。ここではOctopus LEDライトブリック(青)をインジケーターとして使ってみます。
下の写真のように、Octopus LEDライトブリック(青)を頭部上面板の見やすい位置に両面テープ等で固定してください。
Octopus LEDライトブリック(青)とFreaduino UNOをOctopus LEDライトブリック(青)に付属するケーブルで接続します。接続関係は以下の通りです。
- (Octopus LEDライトブリック(青))S-A2(Freaduino):A2とプリントされた、黄色いピンヘッダ
- (Octopus LEDライトブリック(青))V-5V(Freaduino):赤いピンヘッダ
- (Octopus LEDライトブリック(青))G-GND(Freaduino):黒いピンヘッダ
次に、超音波センサーとLEDインジケーターのデモプログラムdemo_sonic02.ino(882)をダウンロードして、ロボットにインストールしてください。配線とプログラムのインストールが正しく行われていれば、超音波センサーの前に手をかざすとロボットが歩き出し、かつ、LEDが光ります。トリムは再度調整しておいてください。58行目のtmp_trim[SERV_NUM]={0,0,0,0}; を修正します。
このデモプログラムを書き込むときは、サーボモータのケーブルを外しておいてください。プログラムを書き込む際に電圧降下を起こさないようにするためです。
以下はデモプログラムの抜粋です。digitalWrite関数でLEDの出力を制御しています。非常に単純ですが、目に見えないセンサーや無線通信等が機能しているかを確認したい場合に重宝します。
- digitalWrite(LED,HIGH); LEDを点灯する
- digitalWrite(LED,LOW); LEDを消す
//=================================================================================================== //Main //=================================================================================================== void setup(){ initServo(); //debug Serial.begin(9600); pinMode(TRI,OUTPUT); pinMode(ECH,INPUT); pinMode(LED,OUTPUT); } void loop(){ int dist = getDistance(); if(dist<25){ digitalWrite(LED,HIGH); playMotion(move_forward, 6); }else{ digitalWrite(LED,LOW); playMotion(home_position, 1); } delay(100); }