Search Code

ESP32 Tutorial 27/55 - Afstand meten met een ultrasone sensor | SunFounder's ESP32 IoT-leerkit

ESP32 Tutorial 27/55 - Afstand meten met een ultrasone sensor | SunFounder's ESP32 IoT-leerkit

In deze tutorial leren we hoe we een ultrasone afstandssensor met de ESP32 kunnen gebruiken om afstanden te meten en de resultaten op een scherm weer te geven. We onderzoeken ook hoe we een zoemer kunnen activeren wanneer er een object binnen een specifiek bereik wordt gedetecteerd. Dit project benadrukt de veelzijdigheid van de ESP32-microcontroller, die Wi-Fi- en Bluetooth-mogelijkheden integreert, waardoor deze geschikt is voor verschillende IoT-toepassingen.

ultrasonic_principle

In deze handleiding vindt u uitleg over de hardwarecomponenten, bedradingsinstructies en codefragmenten om u te helpen het project succesvol te implementeren. Voor extra duidelijkheid verwijzen we naar de video (in video op 00:00).

Hardware uitgelegd

De primaire componenten van dit project zijn de ESP32-microcontroller, de ultrasone sensor (HC-SR04) en een zoemer. De ultrasone sensor bestaat uit twee hoofdonderdelen: een zender die ultrasone golven uitzendt en een ontvanger die luistert naar de gereflecteerde golven. Door de tijd te meten die de golven nodig hebben om terug te keren, kunnen we de afstand tot een object berekenen.

De ESP32 fungeert als de centrale controller, verwerkt gegevens van de ultrasone sensor en bestuurt de zoemer op basis van de gemeten afstand. De zoemer zal klinken wanneer de gedetecteerde afstand kleiner is dan een gedefinieerde drempelwaarde, wat aangeeft dat een object te dichtbij is.

Datasheetdetails

Fabrikant HC-SR04
Onderdeelnummer HC-SR04
Logica/IO-spanning 5 V
Voedingsspanning 5 V
Uitgangsstroom (per kanaal) 16 mA
Piekstroom (per kanaal)
PWM-frequentierichtlijn
Ingangslogische drempels
Spanningsval / RDS(on) / verzadiging
Thermische limieten
Behuizing
Opmerkingen / varianten Meetbereik: 2 cm tot 400 cm

 

  • Zorg voor een correcte voedingsspanning van 5 V voor de sensor.
  • Houd een vrij pad voor ultrasone golven om interferentie te voorkomen.
  • Gebruik korte draden om signaalvertraging en ruis te minimaliseren.
  • Zorg voor correcte pinverbindingen om miscommunicatie te voorkomen.
  • Test de sensor in verschillende omgevingen om de nauwkeurigheid te controleren.

Bedradingsinstructies

ESP32-27_ultrasonic_wiring

Om de ultrasone sensor op de ESP32 aan te sluiten, verbindt u de VCC-pin van de sensor met de 5V-pin op de ESP32. Verbind vervolgens de GND-pin van de sensor met een van de aardingspinnen (GND) op de ESP32. De triggerpin (Trig) van de sensor moet worden verbonden met GPIO 26 op de ESP32, terwijl de echopin (Echo) moet worden verbonden met GPIO 25. Deze opstelling stelt de ESP32 in staat om een signaal naar de sensor te sturen en het echosignaal te ontvangen om de afstand te berekenen.

ESP32-27_ultrasonic_schematic

Voor de zoemer verbindt u de positieve (lange) poot met GPIO 12 op de ESP32 en de negatieve (korte) poot met de GND. Zorg ervoor dat alle verbindingen stevig zijn om losse bedrading tijdens het gebruik te voorkomen. Als u een breadboard gebruikt, lijn dan de zoemerverbindingen correct uit om verkeerde bedrading te voorkomen. Raadpleeg de video voor bevestiging van de bedrading (in video op 05:12).

Codevoorbeelden & uitleg

De code initialiseert de pinnen voor de ultrasone sensor en stelt seriële communicatie in. De hoofdfunctie, readSensorData(), is verantwoordelijk voor het verzenden van een triggersignaal en het meten van de responstijd van de echopin.

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

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

De code definieert echoPin en trigPin als constanten voor de pinnen die zijn verbonden met de ultrasone sensor. In de setup()-functie initialiseren we seriële communicatie en stellen we de pinmodi dienovereenkomstig in.

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

Dit fragment toont de readSensorData()-functie, die een puls van 10 microseconden naar de triggerpin stuurt. Vervolgens meet het de tijd die de echopin nodig heeft om het signaal terug te ontvangen, berekent het de afstand en retourneert deze waarde.

Ten slotte leest de loop-functie continu de afstand en print deze naar de seriële monitor. Als de afstand onder de 20 cm is, wordt de zoemer geactiveerd.

Demonstratie / wat te verwachten

Wanneer u het programma uitvoert, geeft de ESP32 de gemeten afstand in centimeters weer op de seriële monitor. Als een object binnen 20 cm van de sensor komt, zal de zoemer klinken. Dit gedrag kan worden getest door objecten op verschillende afstanden voor de sensor te plaatsen. Wees voorzichtig met omgekeerde polariteit en zorg ervoor dat de verbindingen worden gemaakt zoals gespecificeerd om problemen tijdens het gebruik te voorkomen (in video op 08:00).

Videotijdstempels

  • 00:00 Start
  • 1:46 Inleiding tot ultrasone sensor
  • 6:02 Bedrading uitgelegd
  • 7:37 ESP32 Arduino-code uitgelegd
  • 11:33 ESP32-board en COM-poort selecteren in Arduino IDE
  • 13:15 Demonstratie van het meten van afstand
  • 16:43 Actie ondernemen op basis van afstand: zoemer

Afbeeldingen

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

Dingen die je misschien nodig hebt

Hulpmiddelen en referenties

Bestanden📁

Geen bestanden beschikbaar.