ESP32 - Geluidsensor - Servo Motor

In deze handleiding verkennen we hoe u een geluidsensor kunt gebruiken om een servo motor aan te sturen. We gaan specifiek in op twee spannende toepassingen:

Hardware Benodigd

1×ESP32 ESP-WROOM-32 Ontwikkelingsmodule
1×(Alternatief) ESP32 Uno-form board
1×(Alternatief) ESP32 S3 Uno-form board
1×USB Kabel Type-C
1×Geluidsensor
1×Servomotor
1×Jumperdraden
1×(Aanbevolen) Schroefklem Uitbreidingsboard voor ESP32
1×(Aanbevolen) Breakout Expansion Board for ESP32
1×(Aanbevolen) Stromsplitter voor ESP32

Of u kunt de volgende kits kopen:

1×DIYables ESP32 Starterskit (ESP32 inbegrepen)
1×DIYables Sensorkit (30 sensoren/displays)
1×DIYables Sensorkit (18 sensoren/displays)
Openbaarmaking: Sommige van de links in deze sectie zijn Amazon-affiliate links. We kunnen een commissie ontvangen voor aankopen die via deze links worden gedaan, zonder extra kosten voor u. We waarderen uw steun.

Over Servo Motor en Geluidsensor

Als u niet bekend bent met de servo motor en geluidsensor (pinout, werking, programmeren ...), bekijk dan de volgende tutorials:

Bekabelingsschema

ESP32 Geluidsensor Servo Motor Bekabelingsschema

This image is created using Fritzing. Click to enlarge image

Als u niet weet hoe u ESP32 en andere componenten van stroom moet voorzien, vindt u instructies in de volgende tutorial: Hoe ESP32 van stroom te voorzien.

ESP32 Code - Geluidschakelaar wisselt hoek van Servo Motor

De onderstaande code wisselt de hoek van de servo motor tussen 0 en 90 graden telkens wanneer geluid wordt gedetecteerd.

/* * Deze ESP32 code is ontwikkeld door newbiely.nl * Deze ESP32 code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/esp32/esp32-sound-sensor-servo-motor */ #include <ESP32Servo.h> #define SENSOR_PIN 25 // The ESP32 pin GPIO25 connected to the sound sensor #define SERVO_PIN 26 // The ESP32 pin GPIO26 connected to the servo motor Servo servo; // create servo object to control a servo // variables will change: int angle = 0; // the current angle of servo motor int prev_sound_state; // the previous state of sound sensor int sound_state; // the current state of sound sensor void setup() { Serial.begin(9600); // initialize serial pinMode(SENSOR_PIN, INPUT); // set ESP32 pin to input mode servo.attach(SERVO_PIN); // attaches the servo on pin 9 to the servo object servo.write(angle); sound_state = digitalRead(SENSOR_PIN); } void loop() { prev_sound_state = sound_state; // save the last state sound_state = digitalRead(SENSOR_PIN); // read new state if (prev_sound_state == HIGH && sound_state == LOW) { // state change: HIGH -> LOW Serial.println("The sound has been detected"); // change angle of servo motor if (angle == 0) angle = 90; else if (angle == 90) angle = 0; // control servo motor arccoding to the angle servo.write(angle); } }

Snelle Stappen

  • Als u ESP32 voor het eerst gebruikt, bekijk dan hoe u de omgeving instelt voor ESP32 in Arduino IDE.
  • Voer de bekabeling uit zoals op de afbeelding hierboven.
  • Verbind de ESP32 met uw pc via een micro USB-kabel.
  • Open de Arduino IDE op uw pc.
  • Selecteer de juiste ESP32 board (bijvoorbeeld ESP32 Dev Module) en COM-poort.
  • Klik op het Libraries icoon in de linkerzijbalk van de Arduino IDE.
  • Typ ESP32Servo in het zoekveld, zoek vervolgens de servo bibliotheek van Kevin Harrington, John K. Bennett.
  • Klik op de knop Installeren om de servo motor bibliotheek voor ESP32 te installeren.
ESP32 servo motor bibliotheek
  • Verbind de ESP32 met de pc via USB-kabel.
  • Open Arduino IDE, selecteer het juiste board en de juiste poort.
  • Kopieer bovenstaande code en open deze met Arduino IDE.
  • Klik op de Upload knop in Arduino IDE om de code naar de ESP32 te uploaden.
  • Klap met uw handen voor de geluidsensor.
  • Observeer de beweging van de servo motor.

ESP32 Code - Geluids-geactiveerde Servo Motor voor een bepaalde tijd

De onderstaande code draait de servo motor naar 90 graden gedurende een bepaalde tijdsduur wanneer geluid wordt gedetecteerd. Na deze tijdsduur draait de servo motor weer terug naar 0 graden.

/* * Deze ESP32 code is ontwikkeld door newbiely.nl * Deze ESP32 code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/esp32/esp32-sound-sensor-servo-motor */ #include <ESP32Servo.h> #define SENSOR_PIN 25 // The ESP32 pin GPIO25 connected to the sound sensor #define SERVO_PIN 26 // The ESP32 pin GPIO26 connected to the servo motor #define TIME_PERIOD 5000 // in milliseconds Servo servo; // create servo object to control a servo // variables will change: int prev_sound_state; // the previous state of sound sensor int sound_state; // the current state of sound sensor void setup() { Serial.begin(9600); // initialize serial pinMode(SENSOR_PIN, INPUT); // set ESP32 pin to input mode servo.attach(SERVO_PIN); // attaches the servo on pin 9 to the servo object servo.write(0); sound_state = digitalRead(SENSOR_PIN); } void loop() { prev_sound_state = sound_state; // save the last state sound_state = digitalRead(SENSOR_PIN); // read new state if (prev_sound_state == HIGH && sound_state == LOW) { // state change: HIGH -> LOW Serial.println("The sound has been detected"); servo.write(90); // control servo motor to 90 degree delay(TIME_PERIOD); servo.write(0); // control servo motor to 0 degree } }

Let op dat de bovenstaande code de delay() functie gebruikt voor eenvoud. Als u echter meer code toevoegt, kan deze geblokkeerd worden gedurende de vertraging. Om dit te voorkomen implementeert de volgende code een non-blocking methode met de millis() functie in plaats van delay, zodat blokkering wordt vermeden.

/* * Deze ESP32 code is ontwikkeld door newbiely.nl * Deze ESP32 code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/esp32/esp32-sound-sensor-servo-motor */ #include <ESP32Servo.h> #define SENSOR_PIN 25 // The ESP32 pin GPIO25 connected to the sound sensor #define SERVO_PIN 26 // The ESP32 pin GPIO26 connected to the servo motor #define TIME_PERIOD 5000 // in milliseconds Servo servo; // create servo object to control a servo // variables will change: int prev_sound_state; // the previous state of sound sensor int sound_state; // the current state of sound sensor unsigned long lastTime; // the current state of sound sensor int angle = 0; void setup() { Serial.begin(9600); // initialize serial pinMode(SENSOR_PIN, INPUT); // set ESP32 pin to input mode servo.attach(SERVO_PIN); // attaches the servo on pin 9 to the servo object servo.write(angle); sound_state = digitalRead(SENSOR_PIN); } void loop() { prev_sound_state = sound_state; // save the last state sound_state = digitalRead(SENSOR_PIN); // read new state if (prev_sound_state == HIGH && sound_state == LOW) { // state change: HIGH -> LOW Serial.println("The sound has been detected"); angle = 90; servo.write(angle); // control servo motor to 90 degree lastTime = millis(); } if (angle == 90 && (millis() - lastTime) > TIME_PERIOD) { angle = 0; servo.write(angle); // control servo motor to 0 degree } }

Video Tutorial

We overwegen het maken van videotutorials. Als u videotutorials belangrijk vindt, abonneer u dan op ons YouTube-kanaal om ons te motiveren de video's te maken.

※ ONZE BERICHTEN

  • U bent welkom om de link naar deze tutorial te delen. Gebruik onze inhoud echter niet op andere websites. We hebben veel moeite en tijd gestoken in het maken van de inhoud, respecteer alstublieft ons werk!