Code de recherche

Contrôler un servomoteur avec des boutons-poussoirs à l'aide d'un Arduino

Contrôler un servomoteur avec des boutons-poussoirs à l'aide d'un Arduino

Dans ce tutoriel, nous allons apprendre comment contrôler un servomoteur à l'aide de deux boutons-poussoirs, l'un pour déplacer le servomoteur vers la gauche et l'autre pour le déplacer vers la droite. Lorsque vous appuyez sur le bouton de droite, le servomoteur se déplacera de 10 degrés vers la droite, et lorsque vous appuyez sur le bouton de gauche, il se déplacera de 10 degrés vers la gauche. Si vous maintenez un bouton enfoncé, le servomoteur continuera à se déplacer dans cette direction jusqu'à ce que vous relâchiez le bouton.

Ce projet est un excellent moyen de comprendre comment interfacer des boutons avec un servomoteur en utilisant Arduino. Nous aborderons les composants matériels nécessaires, les instructions de câblage et le code requis pour que tout fonctionne. Pour une compréhension plus claire, vous pouvez vous référer à la vidéo accompagnant ce tutoriel (dans la vidéo à 01:00).

Le matériel expliqué

Pour ce projet, vous aurez besoin d'une carte Arduino, d'un servomoteur et de deux boutons-poussoirs. Le servomoteur est responsable du mouvement, tandis que les boutons-poussoirs servent d'entrées pour contrôler la direction de ce mouvement. L'Arduino traite ces entrées et envoie les signaux appropriés au servomoteur.

Le servomoteur fonctionne à partir de signaux de modulation de largeur d'impulsion (PWM). En envoyant des largeurs d'impulsion différentes, vous pouvez contrôler l'angle du servomoteur. Les boutons-poussoirs seront connectés aux broches d'entrée numériques de l'Arduino, et nous utiliserons des résistances pull-up internes pour simplifier le câblage.

Détails de la fiche technique

FabricantDivers
Numéro de pièceSG90
Tension logique/E/S5 V
Tension d'alimentation4.8-6 V
Courant de sortie (par canal)1,5 A max
Courant de crête (par canal)2,5 A max.
Directives de fréquence PWM50 Hz
Seuils des niveaux logiques d'entrée0,3 VCopie carbonejusqu'à 0,7 VCC
Chute de tension / RDS(on)/ saturation0,4 V
Limites thermiques85 °C
ColisPlastique
Notes / variantesRotation standard de 180°

  • Assurez-vous que le servomoteur est compatible avec votre tension d'alimentation.
  • Utilisez un dissipateur thermique approprié si l'appareil fonctionne sous des courants élevés.
  • Connectez les boutons à la masse en configuration pull-up.
  • Appliquez un anti-rebond à vos boutons si vous rencontrez un comportement erratique.
  • Surveillez la sortie série pour le débogage.

Instructions de câblage

Arduino wriing for Sevo motor with 2 push buttons
Arduino wriing for Sevo motor with 2 push buttons

Pour câbler les composants, commencez par connecter le servomoteur. Connectez le fil rouge du servo à la broche 5V de l'Arduino, le fil noir à la broche GND, et le fil de signal jaune ou blanc à la broche 9 de l'Arduino. Cette broche contrôlera la position du servo.

Ensuite, câblez les boutons-poussoirs. Connectez une borne du bouton droit à la broche 2 et l'autre borne à la masse. Pour le bouton gauche, connectez une borne à la broche 12 et l'autre également à la masse. Ce montage permet aux résistances pull-up internes de maintenir les broches à l'état haut lorsque les boutons ne sont pas enfoncés.

Exemples de code et guide pas à pas

Commençons par le code pour contrôler le servomoteur avec un seul bouton-poussoir. Le code initialise l'objet servo et définit un angle initial. Voici un court extrait :

int angle = 90;    // initial angle for servo
int angleStep = 10; // step size for movement

Dans cet extrait,anglereprésente la position actuelle du servomoteur, tandis queangleStepDéfinit de combien le servomoteur se déplace à chaque appui sur le bouton. Ce code est essentiel pour suivre la position du servomoteur.

Ensuite, nous avons la fonction setup où nous attachons le servomoteur et configurons les broches d'entrée :

void setup() {
  Serial.begin(9600);          // setup serial
  myservo.attach(9);  // attaches the servo on pin 9
  pinMode(2, INPUT_PULLUP); // configure button pin
}

Dans la fonction setup, nous initialisons le moniteur série et attachons le servomoteur à la broche 9. Le bouton connecté à la broche 2 est configuré en entrée avec une résistance pull-up, ce qui simplifie le câblage et évite d'avoir recours à des résistances externes.

Enfin, nous examinons la fonction loop() qui gère l'appui sur le bouton :

while(digitalRead(2) == LOW) {
  angle = angle + angleStep; // increment angle
  myservo.write(angle); // move servo
}

Cette boucle vérifie en continu si le bouton est appuyé. Lorsqu'il l'est, l'angle augmente du pas défini et le servomoteur se déplace en conséquence. Il est crucial de s'assurer que l'angle reste dans les limites (0 à 180 degrés) pour éviter d'endommager le servomoteur.

Démonstration / À quoi s'attendre

Lorsque vous appuyez sur le bouton droit, le servo doit se déplacer vers la droite par paliers de 10 degrés jusqu'à atteindre le maximum de 180 degrés. De même, en appuyant sur le bouton gauche, le servo se déplacera vers la gauche. Si vous maintenez un bouton enfoncé, le servo continuera de se déplacer dans cette direction jusqu'à ce que vous relâchiez le bouton (dans la vidéo à 01:00).

Les écueils courants incluent des problèmes de câblage, tels que des connexions incorrectes ou des entrées flottantes. Assurez-vous toujours que vos connexions sont sécurisées et que vous utilisez les broches correctes telles que spécifiées dans le code.

Images

Contrôler un servomoteur avec un seul bouton-poussoir avec Arduino
Contrôler un servomoteur avec un seul bouton-poussoir avec Arduino
SG90_servo_motor-1
SG90_servo_motor-1
SG90_servo_motor-0
SG90_servo_motor-0
Arduino wriing for Sevo motor with 2 push buttons
Arduino wriing for Sevo motor with 2 push buttons
98-Control a servo with a single push button using Arduino
Langue: C++
/*
 Controlling a servo with a push button with Arduino
 When a push button is pressed, the servo starts moving to the right or left until
 it reaches 180 and then returns to 0 degrees.

 May 22, 2018 at 01:00 
 Written by Ahmad S. for Robojax.com in Ajax, Ontario, Canada
 Watch a video for this code at https://youtu.be/7woqNH_qby4
 This code is taken from http://robojax.com/learn/arduino
*/

#include <Servo.h>

Servo myservo;  // create servo object to control a servo

int angle =90;    // initial angle for servo
int angleStep =10;

void setup() {
  // Servo button demo by Robojax.com
  Serial.begin(9600);          //  setup serial
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
  pinMode(2,INPUT_PULLUP);
   Serial.println("Robojax Servo Button ");
}

void loop() {
  while(digitalRead(2) == LOW){
  // change the angle for the next time through the loop:
  angle = angle + angleStep;

    // reverse the direction of the movement at the ends of the angle:
    if (angle <= 0 || angle >= 180) {
      angleStep = -angleStep;
    }
    myservo.write(angle); // move the servo to the desired angle
      Serial.print("Moved to: ");
      Serial.print(angle);   // print the angle
      Serial.println(" degrees");    
  delay(100); // waits for the servo to get there
  }// while

  
}
99-Control a servo with two push buttons using Arduino
Langue: C++
/*
 Controlling a servo with two push buttons with Arduino
 When the left push button is pressed, the servo starts moving to the left until it reaches 180 (or zero) degrees.
 When the right push button is pressed, the servo starts moving to the right until it reaches 180 (or zero) degrees.
 At any instance, if the button is released, the servo stops.

 May 22, 2018, at 01:00 
 Written by Ahmad S. for Robojax.com in Ajax, Ontario, Canada
 Watch a video for this code at https://youtu.be/7woqNH_qby4
 This code is taken from http://robojax.com/learn/arduino
*/

#include <Servo.h>

Servo myservo;  // create servo object to control a servo

int angle =90;    // initial angle  for servo
int angleStep =5;

#define LEFT 12   // pin 12 is connected to left button
#define RIGHT  2  // pin 2 is connected to right button

void setup() {
  // Servo button demo by Robojax.com
  Serial.begin(9600);          //  setup serial
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
  pinMode(LEFT,INPUT_PULLUP); // assign pin 12 as input for Left button
  pinMode(RIGHT,INPUT_PULLUP);// assign pin 2 as input for right button
  myservo.write(angle);// send servo to the middle at 90 degrees
 Serial.println("Robojax Servo Button ");
}

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

Ressources et références

Aucune ressource pour le moment.

Fichiers📁

Aucun fichier disponible.