Arduinoで超音波センサを使って距離を測ろう [Arduino入門編]
おはようございます。
今回は超音波センサーという物を使って、
障害物までの距離測定を行います。
使用するのはこちら。HC-SR04という代物です。
超音波センサーは物によって測定できる障害物の距離が異なっていて、
いい物だと2000円ぐらいして遠距離までの障害物を検知できますが、
低価格のものは300円程度で買えて、測定可能距離は3cm~1.5m程度になります。
僕はこの低価格版を3個持っていますが今のところ、
何の不具合もなく使えています
超音波センサーの動作・仕組みですが簡単に書くと以下です。
1)Arduinoからセンサーに指示をだす
2)センサーが前方に超音波を発射
3)超音波は障害物にぶつかると反射して返ってくる
4)センサーは反射して返ってくるまでの時間をArduinoに返す
5)Arduinoはこの時間から障害物までの距離を求める
写真にある「目」みたいなものが
超音波マイクといって、片方から超音波を発射して、
もう片方の「目」から反射した超音波を受信します。
超音波って聞くと危険な気がしますが人体には何の影響もないのでご安心を
それでは実際の使い方です。接続はこちら
1)センサーのVCCをArduinoの5Vに接続
2)センサーのGNDをArduinoのGNDに接続
3)センサーのTrig,EchoをArduinoのデジタルピンに接続
ソースはこちらです
1) 超音波センサー初期化
TRIGピンがセンサに超音波を発射させるために使用します。
なので出力のOUTPUTを指定します。
ECHOがセンサから超音波の反射時間を取得します。
なのでINPUTを指定します。
2) センサーに超音波の発射指示
TRIGピンをHIGH->LOWとすると超音波が発射されます。
3) 超音波の跳ね返り時間を取得
pulseIn関数は、指定したピンがHIGHの時間を返してくれます
ECHOピンはTRIGピン側で発射した超音波が跳ね返りを受信して、
その期間だけHIGHになります。
つまりpulseIn関数でECHOピンを指定すれば超音波を発射して、
跳ね返るまでの時間を取得できることになります。
4) 距離をcmに変換
取得出来た時間は往復時間なので、まずは片道の半分にします。
pulseIN関数で取得できるのはマイクロ秒なので、
cm/secに変換します。
障害物までの距離が測定できるようになりました
これでロボット作成に必要な最低限の説明が完了です。
そこで次回からは中途半端になっていたロボット作成を
ついに再開します。。。実はもう作ってあるので更新は早くできるはず。
春の情報処理試験を受けるので、最近更新が遅くてすみません
今回は超音波センサーという物を使って、
障害物までの距離測定を行います。
使用するのはこちら。HC-SR04という代物です。
超音波センサーは物によって測定できる障害物の距離が異なっていて、
いい物だと2000円ぐらいして遠距離までの障害物を検知できますが、
低価格のものは300円程度で買えて、測定可能距離は3cm~1.5m程度になります。
僕はこの低価格版を3個持っていますが今のところ、
何の不具合もなく使えています
超音波センサーの動作・仕組みですが簡単に書くと以下です。
1)Arduinoからセンサーに指示をだす
2)センサーが前方に超音波を発射
3)超音波は障害物にぶつかると反射して返ってくる
4)センサーは反射して返ってくるまでの時間をArduinoに返す
5)Arduinoはこの時間から障害物までの距離を求める
写真にある「目」みたいなものが
超音波マイクといって、片方から超音波を発射して、
もう片方の「目」から反射した超音波を受信します。
超音波って聞くと危険な気がしますが人体には何の影響もないのでご安心を
それでは実際の使い方です。接続はこちら
1)センサーのVCCをArduinoの5Vに接続
2)センサーのGNDをArduinoのGNDに接続
3)センサーのTrig,EchoをArduinoのデジタルピンに接続
ソースはこちらです
// 前方の超音波センサー #define PIN_SENSOR_FRONT_TRIG 3 #define PIN_SENSOR_FRONT_ECHO 4 void setup() { Serial.begin(9600); // 1) 超音波センサー初期化 pinMode( PIN_SENSOR_FRONT_TRIG, OUTPUT); pinMode( PIN_SENSOR_FRONT_ECHO, INPUT); } void loop() { int Duration; float Distance; // 2) センサーに超音波の発射指示 digitalWrite( PIN_SENSOR_FRONT_TRIG, LOW ); delayMicroseconds(1); digitalWrite( PIN_SENSOR_FRONT_TRIG, HIGH ); delayMicroseconds(1); digitalWrite( PIN_SENSOR_FRONT_TRIG, LOW ); // 3) 超音波の跳ね返り時間を取得 Duration = pulseIn( PIN_SENSOR_FRONT_ECHO, HIGH ); if( Duration > 0 ) { // 4) 距離をcmに変換(音速を340m/sとする) Distance = Duration /2; Distance = Distance*340*100/1000000; // 距離を出力 Serial.println("kyori ha:"); Serial.print(Distance:); Serial.println("cm dayo"); } delay(1500); }
1) 超音波センサー初期化
TRIGピンがセンサに超音波を発射させるために使用します。
なので出力のOUTPUTを指定します。
ECHOがセンサから超音波の反射時間を取得します。
なのでINPUTを指定します。
2) センサーに超音波の発射指示
TRIGピンをHIGH->LOWとすると超音波が発射されます。
3) 超音波の跳ね返り時間を取得
pulseIn関数は、指定したピンがHIGHの時間を返してくれます
ECHOピンはTRIGピン側で発射した超音波が跳ね返りを受信して、
その期間だけHIGHになります。
つまりpulseIn関数でECHOピンを指定すれば超音波を発射して、
跳ね返るまでの時間を取得できることになります。
4) 距離をcmに変換
取得出来た時間は往復時間なので、まずは片道の半分にします。
pulseIN関数で取得できるのはマイクロ秒なので、
cm/secに変換します。
障害物までの距離が測定できるようになりました
これでロボット作成に必要な最低限の説明が完了です。
そこで次回からは中途半端になっていたロボット作成を
ついに再開します。。。実はもう作ってあるので更新は早くできるはず。
春の情報処理試験を受けるので、最近更新が遅くてすみません
コメント 0