搜尋程式碼

ESP32 教學 27/55 - 用超聲波感測器量度距離 | SunFounder 嘅 ESP32 IoT 學習套件

ESP32 教學 27/55 - 用超聲波感測器量度距離 | SunFounder 嘅 ESP32 IoT 學習套件

喺呢個教學入面,我哋會學吓點樣用ESP32配合超聲波距離感應器嚟量度距離,並且將結果顯示喺熒幕上面。我哋亦都會探討吓點樣喺偵測到物件進入特定範圍嘅時候啟動蜂鳴器。呢個項目展示咗ESP32微控制器嘅多樣性,佢整合咗Wi-Fi同藍牙功能,令到佢適合用喺各種物聯網應用度。

ultrasonic_principle

成個指南入面,你會搵到硬件組件嘅解釋、接線指示同埋代碼片段,幫你成功實現呢個項目。為咗更加清楚,請參考條片(喺片入面00:00)。

硬件解釋

呢個項目嘅主要組件包括ESP32微控制器、超聲波感應器(HC-SR04)同一個蜂鳴器。超聲波感應器由兩個主要部分組成:一個發射器負責發射超聲波,同一個接收器負責接收反射返嚟嘅波。通過量度波返嚟所需嘅時間,我哋就可以計算到同物件之間嘅距離。

ESP32作為中央控制器,處理超聲波感應器嘅數據,並且根據量度到嘅距離控制蜂鳴器。當偵測到嘅距離細過一個設定嘅閾值,蜂鳴器就會響,表示有物件太近。

數據表詳情

製造商 HC-SR04
零件編號 HC-SR04
邏輯/IO電壓 5 V
供電電壓 5 V
輸出電流(每通道) 16 mA
峰值電流(每通道)
PWM頻率指引
輸入邏輯閾值
電壓降 / RDS(on) / 飽和
熱限制
封裝
備註 / 變體 量度範圍:2 cm 至 400 cm

 

  • 確保為感應器提供正確嘅5 V電源。
  • 保持超聲波路徑暢通,避免干擾。
  • 使用短線以減少信號延遲同噪音。
  • 確保引腳連接正確,避免通訊錯誤。
  • 喺唔同環境下測試感應器,檢查準確度。

接線指示

ESP32-27_ultrasonic_wiring

要將超聲波感應器連接到ESP32,將感應器嘅VCC引腳連接到ESP32嘅5V引腳。跟住,將感應器嘅GND引腳連接到ESP32嘅其中一個接地(GND)引腳。感應器嘅觸發引腳(Trig)應該連接到ESP32嘅GPIO 26,而回聲引腳(Echo)就應該連接到GPIO 25。呢個設定令到ESP32可以向感應器發送信號,並且接收回聲信號嚟計算距離。

ESP32-27_ultrasonic_schematic

至於蜂鳴器,將正極(長腳)連接到ESP32嘅GPIO 12,負極(短腳)連接到GND。確保所有連接都穩固,避免操作期間出現鬆動。如果使用麵包板,要正確對齊蜂鳴器嘅連接,避免接錯線。記得參考條片確認接線(喺片入面05:12)。

代碼示例同講解

代碼初始化超聲波感應器嘅引腳,並且設定串行通訊。主要函數readSensorData()負責發送觸發信號,並且量度回聲引腳嘅響應時間。

const int echoPin = 25;
const int trigPin = 26;

void setup() {
  Serial.begin(115200);
  pinMode(echoPin, INPUT);
  pinMode(trigPin, OUTPUT);
  Serial.println("Ultrasonic sensor:");  
}

代碼將echoPintrigPin定義為連接超聲波感應器嘅引腳常數。喺setup()函數入面,我哋初始化串行通訊,並且相應噉設定引腳模式。

float readSensorData() {
  digitalWrite(trigPin, LOW); 
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH); 
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  
  unsigned long microsecond = pulseIn(echoPin, HIGH);
  float distance = microsecond / 29.00 / 2;
  return distance;
}

呢段節錄顯示咗readSensorData()函數,佢會向觸發引腳發送一個10微秒嘅脈衝。然後佢量度回聲引腳收到信號返嚟所需嘅時間,計算距離,並且返回呢個值。

最後,循環函數會持續讀取距離,並且將佢打印到串行監視器。如果距離低過20 cm,蜂鳴器就會啟動。

示範 / 預期效果

當你運行呢個程式,ESP32會將量度到嘅距離以厘米為單位顯示喺串行監視器上面。如果有物件進入感應器20 cm範圍內,蜂鳴器就會響。你可以透過將物件放喺感應器前面唔同距離嚟測試呢個行為。要小心極性反轉,並且確保連接按照指定方式進行,避免操作期間出現問題(喺片入面08:00)。

影片時間戳

  • 00:00 開始
  • 1:46 超聲波感測器簡介
  • 6:02 接線講解
  • 7:37 ESP32 Arduino 程式碼講解
  • 11:33 喺 Arduino IDE 揀 ESP32 開發板同 COM 埠
  • 13:15 量度距離示範
  • 16:43 跟距離做動作:蜂鳴器

圖片

ESP32-27_ultrasonic_wiring
ESP32-27_ultrasonic_wiring
ESP32-27_ultrasonic_schematic
ESP32-27_ultrasonic_schematic
ultrasonic_principle
ultrasonic_principle
827-ESP32 Tutorial 27/55- Arduino code for ultrasonic sensor
語言: C++
// Define pins for the ultrasonic sensor
const int echoPin = 25;
const int trigPin = 26;

// Function prototype for reading sensor data
float readSensorData();

void setup() {
  // Begin serial communication at 115200 baud rate
  Serial.begin(115200);
  // Set echoPin as input and trigPin as output
  pinMode(echoPin, INPUT);
  pinMode(trigPin, OUTPUT);
  // Print sensor information to the serial monitor
  Serial.println("Ultrasonic sensor:");  
}

void loop() {
  // Read distance from the ultrasonic sensor
  float distance = readSensorData();
  // Print the measured distance to the serial monitor
  Serial.print(distance);   
  Serial.println(" cm");
  // Delay between readings
  delay(200);
}

// Function to read data from the ultrasonic sensor
float readSensorData() {
  // Trigger a low signal before sending a high signal
  digitalWrite(trigPin, LOW); 
  delayMicroseconds(2);
  // Send a 10-microsecond high signal to the trigPin
  digitalWrite(trigPin, HIGH); 
  delayMicroseconds(10);
  // Return to low signal
  digitalWrite(trigPin, LOW);
  
  // Measure the duration of the high signal on the echoPin
  unsigned long microsecond = pulseIn(echoPin, HIGH);

  // Calculate the distance using the speed of sound (29.00µs per centimeter)
  float distance = microsecond / 29.00 / 2;

  // Return the calculated distance
  return distance;
}

文件📁

冇文件可用。