Arduino - Geluidsensor - Servo Motor

In deze tutorial verkennen we hoe u een geluidsensor kunt gebruiken om een servo motor aan te sturen. We duiken specifiek in twee interessante toepassingen:

Hardware Benodigd

1×Arduino Uno R3
1×USB 2.0 kabel type A/B
1×Geluidsensor
1×Servomotor
1×Jumper Kabels
1×(Aanbevolen) Schroefklem Block Shield voor Arduino Uno
1×(Aanbevolen) Breadboard-Shield voor Arduino Uno
1×(Aanbevolen) Behuizing voor Arduino Uno
1×(Aanbevolen) Prototyping Basisplaat & Breadboard Kit voor Arduino Uno

Of u kunt de volgende kits kopen:

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 nog niet bekend bent met servo motoren en geluidsensoren (pinout, werking, programmeren ...), leer er dan meer over in de volgende tutorials:

Aansluitschema

Arduino Geluidsensor Servo Motor Aansluitschema

This image is created using Fritzing. Click to enlarge image

Arduino Code - Geluidsschakelaar 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 Arduino code is ontwikkeld door newbiely.nl * Deze Arduino code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/arduino/arduino-sound-sensor-servo-motor */ #include <Servo.h> #define SENSOR_PIN A0 // Arduino pin connected to sound sensor's pin #define SERVO_PIN 9 // Arduino pin connected to servo motor's pin Servo servo; // create servo object to control a servo // variables will change: int angle = 0; // the current angle of servo motor int lastSoundState; // the previous state of sound sensor int currentSoundState; // the current state of sound sensor void setup() { Serial.begin(9600); // initialize serial pinMode(SENSOR_PIN, INPUT); // set arduino pin to input mode servo.attach(SERVO_PIN); // attaches the servo on pin 9 to the servo object servo.write(angle); currentSoundState = digitalRead(SENSOR_PIN); } void loop() { lastSoundState = currentSoundState; // save the last state currentSoundState = digitalRead(SENSOR_PIN); // read new state if (lastSoundState == HIGH && currentSoundState == 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); } }

Snel aan de slag

  • Verbind de Arduino met de PC via de USB-kabel
  • Open de Arduino IDE en selecteer het juiste board en de juiste poort
  • Kopieer de bovenstaande code en open deze in de Arduino IDE
  • Klik op de Upload knop in de Arduino IDE om de code naar de Arduino te uploaden
  • Klap met uw handen vlak voor de geluidsensor
  • Observeer de beweging van de servo motor

Arduino Code - Geluid-geactiveerde Servo Motor voor een bepaalde tijd

De onderstaande code draait de servo motor naar 90 graden gedurende een bepaalde tijd zodra geluid wordt gedetecteerd. Na deze tijd roteert de servo motor terug naar 0 graden.

/* * Deze Arduino code is ontwikkeld door newbiely.nl * Deze Arduino code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/arduino/arduino-sound-sensor-servo-motor */ #include <Servo.h> #define SENSOR_PIN A0 // Arduino pin connected to sound sensor's pin #define SERVO_PIN 9 // Arduino pin connected to servo motor's pin #define TIME_PERIOD 5000 // in milliseconds Servo servo; // create servo object to control a servo // variables will change: int lastSoundState; // the previous state of sound sensor int currentSoundState; // the current state of sound sensor void setup() { Serial.begin(9600); // initialize serial pinMode(SENSOR_PIN, INPUT); // set arduino pin to input mode servo.attach(SERVO_PIN); // attaches the servo on pin 9 to the servo object servo.write(0); currentSoundState = digitalRead(SENSOR_PIN); } void loop() { lastSoundState = currentSoundState; // save the last state currentSoundState = digitalRead(SENSOR_PIN); // read new state if (lastSoundState == HIGH && currentSoundState == 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: de bovenstaande code maakt gebruik van de delay()-functie voor eenvoud. Echter, als u extra code toevoegt, kan de uitvoering tijdens de delay-tijd geblokkeerd worden. Om dit te voorkomen, gebruikt de volgende code een niet-blokkerende methode via de millis()-functie in plaats van delay om blokkering te voorkomen.

/* * Deze Arduino code is ontwikkeld door newbiely.nl * Deze Arduino code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/arduino/arduino-sound-sensor-servo-motor */ #include <Servo.h> #define SENSOR_PIN A0 // Arduino pin connected to sound sensor's pin #define SERVO_PIN 9 // Arduino pin connected to servo motor's pin #define TIME_PERIOD 5000 // in milliseconds Servo servo; // create servo object to control a servo // variables will change: int lastSoundState; // the previous state of sound sensor int currentSoundState; // 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 arduino pin to input mode servo.attach(SERVO_PIN); // attaches the servo on pin 9 to the servo object servo.write(angle); currentSoundState = digitalRead(SENSOR_PIN); } void loop() { lastSoundState = currentSoundState; // save the last state currentSoundState = digitalRead(SENSOR_PIN); // read new state if (lastSoundState == HIGH && currentSoundState == 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.

Bekijk onze video-tutorial voor een visuele begeleiding bij dit project! De video biedt extra inzichten en helpt u stap voor stap.

※ 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!