Caută cod

Tutorial ESP32 27/55 - Măsurarea distanței cu senzor ultrasonic | Kitul de învățare IoT ESP32 de la SunFounder

Tutorial ESP32 27/55 - Măsurarea distanței cu senzor ultrasonic | Kitul de învățare IoT ESP32 de la SunFounder

În acest tutorial, vom învăța cum să folosim un senzor ultrasonic de distanță cu ESP32 pentru a măsura distanțe și a afișa rezultatele pe un ecran. Vom explora, de asemenea, cum să activăm un buzzer atunci când un obiect este detectat într-un interval specific. Acest proiect evidențiază versatilitatea microcontrolerului ESP32, care integrează capabilități Wi-Fi și Bluetooth, fiind potrivit pentru diverse aplicații IoT.

principiu_ultrasonic

Pe parcursul acestui ghid, veți găsi explicații despre componentele hardware, instrucțiuni de cablare și fragmente de cod care vă vor ajuta să implementați proiectul cu succes. Pentru claritate suplimentară, vă rugăm să consultați videoclipul (în videoclip la 00:00).

Hardware Explicat

Componentele principale ale acestui proiect includ microcontrolerul ESP32, senzorul ultrasonic (HC-SR04) și un buzzer. Senzorul ultrasonic este format din două părți principale: un emițător care emite unde ultrasonice și un receptor care ascultă undele reflectate. Măsurând timpul necesar undelor să se întoarcă, putem calcula distanța până la un obiect.

ESP32 servește ca controler central, procesând datele de la senzorul ultrasonic și controlând buzzerul pe baza distanței măsurate. Buzzerul va suna atunci când distanța detectată este mai mică decât un prag definit, indicând că un obiect este prea aproape.

Detalii din Fișa Tehnică

Producător HC-SR04
Număr de piesă HC-SR04
Tensiune logică/IO 5 V
Tensiune de alimentare 5 V
Curent de ieșire (pe canal) 16 mA
Curent de vârf (pe canal)
Ghid de frecvență PWM
Praguri logice de intrare
Cădere de tensiune / RDS(on) / saturație
Limite termice
Ambalaj
Note / variante Interval de măsurare: 2 cm până la 400 cm

 

  • Asigurați o alimentare corespunzătoare de 5 V pentru senzor.
  • Mențineți o cale liberă pentru undele ultrasonice pentru a evita interferențele.
  • Folosiți fire scurte pentru a minimiza întârzierea semnalului și zgomotul.
  • Asigurați conexiuni corecte ale pinilor pentru a evita comunicarea greșită.
  • Testați senzorul în diverse medii pentru a verifica acuratețea.

Instrucțiuni de Cablare

ESP32-27_ultrasonic_wiring

Pentru a conecta senzorul ultrasonic la ESP32, conectați pinul VCC al senzorului la pinul 5V de pe ESP32. Apoi, conectați pinul GND al senzorului la unul dintre pinii de masă (GND) de pe ESP32. Pinul de trigger (Trig) de la senzor ar trebui conectat la GPIO 26 pe ESP32, în timp ce pinul de echo (Echo) ar trebui conectat la GPIO 25. Această configurare permite ESP32 să trimită un semnal către senzor și să primească semnalul de echo pentru a calcula distanța.

ESP32-27_schema_ultrasonic

Pentru buzzer, conectați piciorul pozitiv (lung) la GPIO 12 pe ESP32 și piciorul negativ (scurt) la GND. Asigurați-vă că toate conexiunile sunt sigure pentru a preveni fire slăbite în timpul funcționării. Dacă folosiți o breadboard, aliniați corect conexiunile buzzerului pentru a evita cablarea greșită. Consultați videoclipul pentru confirmarea cablării (în videoclip la 05:12).

Exemple de Cod & Explicații

Codul inițializează pinii pentru senzorul ultrasonic și configurează comunicarea serială. Funcția principală, readSensorData(), este responsabilă pentru trimiterea unui semnal de trigger și măsurarea timpului de răspuns de la pinul de echo.

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

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

Codul definește echoPin și trigPin ca constante pentru pinii conectați la senzorul ultrasonic. În funcția setup(), inițializăm comunicarea serială și setăm modurile pinilor în consecință.

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;
}

Acest fragment arată funcția readSensorData(), care trimite un puls de 10 microsecunde la pinul de trigger. Apoi măsoară timpul necesar pentru ca pinul de echo să primească semnalul înapoi, calculează distanța și returnează această valoare.

În final, funcția loop citește continuu distanța și o afișează pe monitorul serial. Dacă distanța este sub 20 cm, buzzerul va fi activat.

Demonstrație / Ce să Vă Așteptați

Când rulați programul, ESP32 va afișa distanța măsurată în centimetri pe monitorul serial. Dacă un obiect intră în raza de 20 cm de senzor, buzzerul va suna. Acest comportament poate fi testat plasând obiecte la diverse distanțe în fața senzorului. Fiți atenți la polaritatea inversată și asigurați-vă că conexiunile sunt făcute conform specificațiilor pentru a evita orice probleme în timpul funcționării (în videoclip la 08:00).

Marcaje Temporale din Videoclip

  • 00:00 Început
  • 1:46 Introducere în senzorul ultrasonic
  • 6:02 Explicarea conexiunilor
  • 7:37 Explicarea codului ESP32 Arduino
  • 11:33 Selectarea plăcii ESP32 și a portului COM în Arduino IDE
  • 13:15 Demonstrarea măsurării distanței
  • 16:43 Acțiune în funcție de distanță: buzzer

Imagini

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
Limba: 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;
}

Lucruri de care ai putea avea nevoie

Fișiere📁

Nu sunt disponibile fișiere.