Arduino - Capteur de son - Moteur servo

Dans ce tutoriel, nous allons explorer comment utiliser le capteur sonore pour contrôler un moteur servo. Plus précisément, nous nous pencherons sur deux applications passionnantes :

Préparation du matériel

1×Arduino Uno
1×USB 2.0 cable type A/B
1×Sound Sensor
1×Servo Motor
1×Jumper Wires
1×(Optional) 9V Power Adapter for Arduino
1×(Recommended) Screw Terminal Block Shield for Arduino Uno
1×(Optional) Transparent Acrylic Enclosure For Arduino Uno

Or you can buy the following sensor kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

À propos du moteur servo et du capteur de son

Si vous ne connaissez pas le moteur servo et le capteur de son (brochage, fonctionnement, programmation...), renseignez-vous sur ces derniers dans les tutoriels suivants :

Diagramme de câblage

Diagramme de câblage du capteur de son et du moteur servo Arduino

This image is created using Fritzing. Click to enlarge image

Code Arduino - Interrupteur sonore qui bascule l'angle du moteur servo

Le code ci-dessous bascule l'angle du moteur servo entre 0 et 90 degrés à chaque fois que le son est détecté.

/* * Ce code Arduino a été développé par newbiely.fr * Ce code Arduino est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/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); } }

Étapes rapides

  • Connectez l'Arduino au PC via le câble USB
  • Ouvrez l'IDE Arduino, sélectionnez la carte et le port appropriés
  • Copiez le code ci-dessus et ouvrez-le avec l'IDE Arduino
  • Cliquez sur le bouton Upload de l'IDE Arduino pour charger le code sur l'Arduino
  • Frappez des mains devant le capteur de son
  • Observez le changement du moteur servo

Code Arduino - Servomoteur activé par le son pour une durée déterminée

Le code ci-dessous fait tourner le moteur servo à 90 degrés pendant une période lorsque le son est détecté. Après cette période, le moteur servo est ramené à 0 degré.

/* * Ce code Arduino a été développé par newbiely.fr * Ce code Arduino est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/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 } }

Veuillez noter que le code mentionné ci-dessus utilise la fonction delay() pour des raisons de simplicité. Cependant, si vous ajoutez du code supplémentaire, il se peut qu'il soit bloqué pendant le temps de retard. Pour remédier à cela, le code suivant met en œuvre une approche non bloquante en utilisant la fonction millis() au lieu de delay pour éviter le blocage.

/* * Ce code Arduino a été développé par newbiely.fr * Ce code Arduino est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/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 } }

Vidéo

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!