醬是創客的ESP32教學主題第17篇,以NodeMCU-32S(使用Arduino語言)來實作教學,本篇教學Arduino多工處理使用超聲波模組量測物品距離,並透過DI接收,一般來說超聲波模組都會和紅外避障模組搭配一起使用這樣精準度會更高
以下是我們今天的目標
- 使用pulseIn()讀取脈衝訊號,並計算
- 多工處理模組訊號
設備:
安信可原廠/副廠NodeMCU-32S #露天拍賣 #蝦皮購物
醬是創客超聲波模組 #露天拍賣 #蝦皮購物
接線方式:
NodeMCU-32S(GPIO16)–脈衝訊號–醬是創客超聲波模組(Trig訊號)
NodeMCU-32S(GPIO17)–脈衝訊號–醬是創客超聲波模組(Echo訊號)
DC 5V(+)–醬是創客超聲波模組(VCC)
DC 0V(-)–醬是創客超聲波模組(GND)
Ai-Thinker安信可NodeMCU-32S的腳位圍(資料來源:安信可)
超聲波專業知識與教學
當超聲波發送器送出時,如遇到物體,聲波經過物體的反射並使自身的接收器收到聲波
收到的聲波會以脈衝訊號的方式傳給ESP32,聲波的優點就是可以量測距離比較遠一些
Arduino 範例程式碼如下
//醬是創客 開發實作的好夥伴 #include "WiFi.h" //task unsigned long currentMillis = 0; unsigned long previousMillis = 0; int interval = 1000; //超音波感應器PIN int trigPIN=16; int echoPIN=17; //超音波感應器 int distance; long duration; void setup() { Serial.begin(115200); //定義ESP32輸入輸出 pinMode(echoPIN, INPUT); pinMode(trigPIN, OUTPUT); } void loop() { currentMillis = millis(); if ((unsigned long)(currentMillis - previousMillis) >= interval) { digitalWrite(trigPIN, LOW); delayMicroseconds(2); digitalWrite(trigPIN, HIGH); delayMicroseconds(10); digitalWrite(trigPIN, LOW); //醬是創客開始讓ESP32開始讀取脈衝訊號 duration= pulseIn(echoPIN, HIGH); distance= duration/29/2; if (duration==0) { Serial.println("No pulse is from sensor"); } else { Serial.print("Chosemaker's ultrasonic sensor is shown distance:"); Serial.print(distance); Serial.println("cm"); } // previousMillis存入最後執行的時間 previousMillis = currentMillis; Serial.print("In Current time:"); Serial.println(previousMillis); } }
Arduino 序列埠監控視窗 輸出如下,我們在大約第4秒時手離超聲波模組距離約172cm,慢慢地靠近超聲波模組
Chosemaker's ultrasonic sensor is shown distance:172cm In Current time:4000 Chosemaker's ultrasonic sensor is shown distance:29cm In Current time:5000 Chosemaker's ultrasonic sensor is shown distance:9cm In Current time:6000 Chosemaker's ultrasonic sensor is shown distance:3cm In Current time:7000 Chosemaker's ultrasonic sensor is shown distance:2cm In Current time:8000 Chosemaker's ultrasonic sensor is shown distance:1cm In Current time:9000