ESP32で超音波距離センサー(SRF-05)を試す!(ESP-WROOM-32)
こんにちは!
今回は電子工作の定番、超音波距離センサーとESP-WROOM-32を使って遊びたいと思います!
※ESP-WROOM-02でも同じように使えます。
超音波距離センサーが使えるようになると、距離が測れたり、ロボットに埋め込めば障害物を避ける、
みたいなことができちゃいますので、是非、簡単に扱えるので触れておきましょう!
①「使う部品」
・SRF-05
電子工作ステーション 290円+送料(500円以上で無料)
※HC-SR04でも可。
※各センサーの違いは、HC-SR04は3.5M測れるのに対し、 HY-SRF05は4.3Mくらい測れるそうです!
・ESP-WROOM-32 (ESP-WROOM-32D)
電子工作ステーション 1120円(送料無料)(30pinモデル)(Type-B)
電子工作ステーション 1250円(送料無料)(30pinモデル)(Type-C)
電子工作ステーション 1750円(送料無料)(ESP32D)(38pinモデル)
※横幅を細くしたバージョンが登場‼
pin番を無くした代わりに細くなっているので、ブレットボードで使いやすくなりました‼
6極ブレットボードではなく定番のブレットボードで使えるようになるのでススメです⇩⇩⇩
電子工作ステーション 1350円(送料無料)(38Pin) (NodeMCU-32)
・通信用マイクロUSBケーブルタイプB (家に無ければ)
電子工作ステーション 約650円~ (送料無料)(着脱式)
ESP-WROOM-32とパソコンを繋ぐためのケーブルです。
スマホ用充電専用タイプだと使えないのでご注意ください。
・ブレットボード(6穴版)
6穴版 EIC-3901 秋月電子 460円+送料
・ジャンパーワイヤー(オス・メス)(4本)
電子工作ステーション 1セットで100円(送料500円以上で無料)
②「作り方・配線」
SRF-05 | ESP-32 |
---|---|
Vcc | 5V |
Trig | 17 |
Echo | 16 |
OUT | |
GND | GND |
※SRF-05のOUTピンは何もつながなくてOKです。HCSR04にはOUTピンはないです。
③「プログラミング」
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
/* * ESP-WROOM-02/32 */ #define echoPin 16 // Echo Pin #define trigPin 17 // Trigger Pin double Duration = 0; //受信した間隔 double Distance = 0; //距離 void setup() { Serial.begin( 115200 );//Arduino Unoは9600,ESPで試す場合はは115200 pinMode( echoPin, INPUT ); pinMode( trigPin, OUTPUT ); } void loop() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite( trigPin, HIGH ); //超音波を出力 delayMicroseconds( 10 ); // digitalWrite( trigPin, LOW ); Duration = pulseIn( echoPin, HIGH ); //センサからの入力 if (Duration > 0) { Duration = Duration/2; //往復距離を半分にする Distance = Duration*340*100/1000000; // 音速を340m/sに設定 Serial.print("Distance:"); Serial.print(Distance); Serial.println(" cm"); } delay(1000);//取得間隔1秒 } |
問題なく動けばこんな感じの結果になると思います↓
次には応用、LEDを付けて距離によって点くLEDを変えたいと思います!
④「LEDを追加してみる」
LED | ESP32 |
---|---|
LED1 | 25 |
LED2 | 33 |
LED3 | 32 |
各LEDのカソード(マイナス極) | GND |
⑤「LEDを追加したプログラミング」
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
/* ESP-WROOM-02/32 */ #define echoPin 16 // Echo Pin #define trigPin 17 // Trigger Pin double Duration = 0; //受信した間隔 double Distance = 0; //距離 //LED int led1 = 25; int led2 = 33; int led3 = 32; void setup() { Serial.begin( 115200 );//Arduino Unoは9600,ESPで試す場合はは115200 pinMode( echoPin, INPUT ); pinMode( trigPin, OUTPUT ); pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); } void loop() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite( trigPin, HIGH ); //超音波を出力 delayMicroseconds( 10 ); // digitalWrite( trigPin, LOW ); Duration = pulseIn( echoPin, HIGH ); //センサからの入力 if (Duration > 0) { Duration = Duration / 2; //往復距離を半分にする Distance = Duration * 340 * 100 / 1000000; // 音速を340m/sに設定 Serial.print("Distance:"); Serial.print(Distance); Serial.println(" cm"); if (Distance < 20) { // 20cm以内になるとLED1が点灯 digitalWrite(led1, HIGH); delay(100); digitalWrite(led1, LOW); } else if (Distance < 40) { // 40cm以内になるとLED2が点灯 digitalWrite(led2, HIGH); delay(100); digitalWrite(led2, LOW); } else { // それ以上の場合はLED3が点灯 digitalWrite(led3, HIGH); delay(100); digitalWrite(led3, LOW); } } } |
マイコンはArduinoを使ってますが同じ動作になります!
こんな感じに動けば完成です!
以上、ご閲覧ありがとうございました^^