Piloter un servomoteur avec deux boutons poussoirs – Arduino

Nous allons voir ici comment piloter un servomoteur à l’aide de deux boutons.

  • La gestion des boutons poussoirs est expliquée ici
  • La gestion d’un servomoteur est expliquée ici.

 

Le code reste relativement simple si vous avez compris les deux articles précédents.

Le plus important reste ces lignes :

  // Si Appuie BP1
if (b1 == LOW) {
monServomoteur.write(position);
position = position + 1;
if (position > 180) {
position = 180;
}
delay(10);
}
Condition - position

Si vous appuyez sur un bouton poussoir, la position en degré sera incrémenté de 1. Mais il faut se rappeler que le servomoteur possède une plage de rotation de 0 à 180°. Donc lorsque la valeur incrémentée est supérieure à 180, nous définissons que cette valeur vaut 180…

Il est possible de modifier l’incrémentation et la décrémentation de la valeur position. Vous pouvez par exemple augmenter la position de chaque tour de boucle à 5 :

position = position + 5;

 

 

Code :

/* Inclut la librairie Servo pour manipuler le servomoteur */
#include <Servo.h>

int bp1 = 2;
int bp2 = 3;

int position = 0;

/* Créer un objet Servo pour contrôler le servomoteur */
Servo monServomoteur;

void setup()
{
// Bouton poussoir 1
pinMode(bp1, INPUT_PULLUP);
pinMode(bp2, INPUT_PULLUP);

// Attache le servomoteur à la broche 2
monServomoteur.attach(5);
monServomoteur.write(0);

Serial.begin(9600);
}

void loop()
{
// Récuperer valeur de bp1
int b1 = digitalRead(bp1);
int b2 = digitalRead(bp2);

// Si Appuie BP1
if (b1 == LOW) {
monServomoteur.write(position);
position = position + 1;
if (position > 180) {
position = 180;
}
delay(10);
}

// Si Appuie BP2
if (b2 == LOW) {
monServomoteur.write(position);
position = position - 1;
if (position < 0) {
position = 0;
}
delay(10);
}

Serial.print("Position du servo : "); Serial.println(position);

}
Commander un servomoteur avec deux boutons poussoirs

8 commentaires

  1. bonsoir excellent tuto j’ ai pris exemple sur votre projet pour un de mes projet personnel mais je bloque sur un passe peut être que vous pourriez m’aider je cherche a faire la même chose que vous mais avec un seul bouton poussoir or je n’arrive pas a faire la commande surtout que je souhaiterai declancher 2 servo en même temps et un autre après un fois que les 2 premier sont arrive a leur angle et inversement un fois que l’on r appuis sur le bouton les 3° servo revient a 0 puis les servo 2 et 1 reviennent a 0. pourriez vous me donner un petit coup de pouce pour mon programme?

    1. Avez-vous déjà un début de code ?
      Si oui, je peux tester en ligne et vous proposer un programme sur un simulateur en ligne.

  2. bonjour! quand j’appuie sur le bouton poussoir et que j’attends, le servomoteur revient à sa position initiale… pourtant j’ai fais un copier/coller de votre code je ne comprend pas… merci pour votre réponse!

  3. Bonsoir, Merci de votre montage partagé. j’ai relié 2 fils boutons poussoir et (-) du moteur, le fils rouge du moteur sur 5V et les fils bouton sur d2 et D3. quand j’appui sur un bouton ou l’autre il ne se passe rien. J’ai du 5v entre d5 et 5V. est ce normal? J’ ai copié collé le programme et compilé et téléversé normalement. Merci de votre aide. D’autre part je voudrai la même chose mais avec un servo moteur 8.4 V, comment je fais pour lui fornir un alim externe?
    Merci de votre aide

  4. Je tenais à vous remercier pour votre code. Celui ci m’a servi de base pour un projet devant tourner sur un ATtiny85. Pour ce faire une autre bibliothèque était nécessaire (SoftRcPulseOut.h) mais le principe est le même.
    A noter que pour une meilleure précision et une vitesse de rotation plus faible, je n’ai pas choisi des valeurs d’angle mais des impulsions en microsecondes ,ce que permet également la bibliothèque Servo.h.
    Bonne continuation

  5. Bonjour

    Je souhaite faire bouger deux servo avec le même BP. Mais chaque servo est déclaré sur une PIN (D5) et (D6). Mais en ayant chacun des paramètres de rotation pesonnalisé, les deux servos suivent les positions limité déclaré dans le premier….

    Une idée pour que le SERVO 1 aille de 55 à 120, et le SERVO 2 aille de 70 à 140 ?

    Merci !

    1. Lorsque j’appuie sur le bouton, que doivent-faire les servomoteurs ? Une rotation et revenir au point d’origine ? Une rotation d’1 degré ?

Rejoignez la conversation

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.