Leçon 88 : Contrôler un servomoteur à l'aide de deux boutons-poussoirs
Ce projet démontre comment contrôler un moteur servo à l'aide de deux boutons poussoirs avec un Arduino. Au lieu de dépendre d'un potentiomètre ou d'une commande série, vous pouvez utiliser de simples interrupteurs tactiles pour déplacer manuellement un servo vers la gauche ou la droite. Cela est incroyablement utile pour les applications où vous avez besoin d'un contrôle physique direct sur un mécanisme, comme la construction d'un bras robotique, le réglage d'une nacelle de caméra, ou la création d'un système de panoramique-inclinaison télécommandé. Les boutons vous permettent d'ajuster progressivement l'angle du servo, avec la possibilité de maintenir le bouton enfoncé pour le balayer sur toute sa plage de mouvement.
Voici quelques projets pratiques que vous pouvez construire avec cette configuration :
- Construire un panneau de contrôle manuel pour un bras robotique ou une pince.
- Créer un curseur de caméra télécommandé ou une tête panoramique-inclinable.
- Développer une interface de contrôle physique pour le gouvernail d'un avion modèle ou d'un bateau.
- Fabriquer un simple « pendentif d'enseignement » pour enregistrer des positions pour une machine CNC ou une imprimante 3D.

Matériel et composants
Ce projet ne nécessite que quelques composants de base, ce qui en fait un excellent point de départ pour apprendre à la fois les dispositifs d'entrée et de sortie avec l'Arduino.
- Carte Arduino (Uno, Nano, Mega, etc.)
- Moteur servo (par exemple, SG90 ou MG995)
- Deux boutons poussoirs momentanés
- Fils de connexion
- Plaque d'essai (optionnelle mais recommandée)
Guide de câblage
Dans la vidéo, le câblage est simple. La broche de signal du moteur servo est connectée à une broche compatible PWM sur l'Arduino, qui est la broche 9 dans cet exemple. L'alimentation et la masse du servo sont connectées aux broches 5V et GND de l'Arduino. Les deux boutons poussoirs sont câblés de manière similaire l'un à l'autre. Une patte de chaque bouton est connectée à la masse, et l'autre patte est connectée à une broche d'entrée numérique sur l'Arduino (broche 2 pour le bouton « gauche » et broche 3 pour le bouton « droite »). Le code utilise les résistances de tirage internes, donc aucune résistance externe n'est nécessaire pour les boutons. (dans la vidéo à 00:57)

Explication du code
Le code est conçu pour être facilement configurable. Les parties clés configurables par l'utilisateur se trouvent en haut du croquis. Voici une ventilation des variables et définitions importantes que vous pourriez vouloir ajuster pour votre propre projet.
#include <Servo.h>
Servo myservo; // créer un objet servo pour contrôler un servo
int servoPin = 9;// cette broche doit être parmi celles avec PWM ~
int angle =90; // angle initial pour le servo
int angleStep =5;
#define LEFT 2 // la broche 2 est connectée au bouton gauche
#define RIGHT 3 // la broche 3 est connectée au bouton droite
servoPin: Cette variable définit la broche Arduino à laquelle le fil de signal du servo est connecté. Il est crucial d'utiliser une broche qui prend en charge la modulation de largeur d'impulsion (PWM), généralement indiquée par un symbole~sur la carte.angle: Cela définit l'angle initial du servo lorsque l'Arduino démarre. La valeur par défaut est de 90 degrés, ce qui centre généralement le servo.angleStep: C'est l'incrément par lequel l'angle du servo change à chaque pression de bouton. Une valeur de 5 signifie que chaque pression déplacera le servo de 5 degrés. Vous pouvez augmenter cela pour un mouvement plus rapide ou le diminuer pour un contrôle plus fin.LEFTetRIGHT: Ces directives#defineassignent les broches numériques auxquelles les boutons poussoirs sont connectés. Si vous câblez vos boutons à des broches différentes, vous devez modifier ces valeurs pour correspondre à votre configuration.
La logique principale dans la fonction loop() vérifie si un bouton est enfoncé (en lisant un signal LOW en raison de la configuration de tirage). Si le bouton « droite » est enfoncé, il diminue la variable angle de angleStep. Si le bouton « gauche » est enfoncé, il augmente l'angle. Le code inclut des vérifications de limites pour garantir que l'angle reste dans la plage de 0 à 180 degrés. La fonction myservo.write(angle) est ensuite utilisée pour commander au servo de se déplacer vers la nouvelle position.
Démonstration en direct du projet
Dans la démonstration vidéo, la fonctionnalité est clairement montrée. Maintenir enfoncé le bouton « gauche » fait balayer le servo en douceur vers la gauche, avec l'angle augmentant de 5 degrés à la fois, jusqu'à ce qu'il atteigne 180 degrés et s'arrête. De même, maintenir enfoncé le bouton « droite » fait balayer le servo vers la droite, diminuant l'angle jusqu'à ce qu'il atteigne 0 degrés. L'angle actuel est imprimé sur le moniteur série, vous permettant de voir la position exacte du servo en temps réel. (dans la vidéo à 05:20)
Chapitres vidéo
- [00:00] Introduction au contrôle d'un servo avec des boutons
- [00:57] Guide de câblage pour le servo et les boutons poussoirs
- [02:12] Explication du code, partie 1 : Configuration et paramétrage
- [03:25] Explication du code, partie 2 : La logique de la boucle principale
- [05:20] Démonstration en direct du projet
- [06:23] Conclusion et applications potentielles
/*
* S05-05 Servo control with 2 push buttons
* Download and resource page https://robojax.com/RJT764
Watch video on YouTube https://www.youtube.com/watch?v=J_kbyAY1rLM
*
* Written by Ahmad Shamshiri for Robojax.com
* on Jan 15, 2019 at 19:15 in Ajax, Ontario, Canada
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
/*
Controlling a servo with two Push buttons with Arduino
when Left push button is pressed, the servo start moving to the left until it reaches 180( or zero) degrees
when Right push button is pressed, the servo start moving to the right until it reaches 180( or zero) degrees
At any instance if the button is released, servo stops
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int servoPin = 9;// this pin must be of those with PWM ~
int angle =90; // initial angle for servo
int angleStep =5;
#define LEFT 2 // pin 2 is connected to left button
#define RIGHT 3 // pin 3 is connected to right button
void setup() {
// Servo button demo by Robojax.com
Serial.begin(9600); // setup serial
myservo.attach(servoPin); // attaches the servo on pin 9 to the servo object
pinMode(LEFT,INPUT_PULLUP); // assign pin 12 ass input for Left button
pinMode(RIGHT,INPUT_PULLUP);// assing pin 2 as input for right button
myservo.write(angle);// send servo to the middle at 90 degrees
Serial.println("Robojax Servo 2 Buttons ");
}
void loop() {
// Servo button demo by Robojax.com
while(digitalRead(RIGHT) == LOW){
if (angle > 0 && angle <= 180) {
angle = angle - angleStep;
if(angle < 0){
angle = 0;
}else{
myservo.write(angle); // move the servo to desired angle
Serial.print("Moved to: ");
Serial.print(angle); // print the angle
Serial.println(" degree");
}
}
delay(100); // waits for the servo to get there
}// while
// Servo button demo by Robojax.com
while(digitalRead(LEFT) == LOW){
// Servo button demo by Robojax.com
if (angle >= 0 && angle <= 180) {
angle = angle + angleStep;
if(angle >180){
angle =180;
}else{
myservo.write(angle); // move the servo to desired angle
Serial.print("Moved to: ");
Serial.print(angle); // print the angle
Serial.println(" degree");
}
}
delay(100); // waits for the servo to get there
}//
}
Ce dont vous pourriez avoir besoin
-
Amazon
-
AmazonMoteur servo sur Amazonamzn.to
-
Amazon
-
Amazon
-
eBay
Fichiers📁
Autres fichiers
-
Fiche technique du moteur SG90 Seroo
robojax-servo-SG90_datasheet.pdf0.12 MB