Problème vibration servo

Bonjour à tous, je réalise actuellement l'ouverture d'une trappe à l'aide de 2 servo MS61sur les cotés de cette trappe. Il y a un bouton pour l'ouverture et un autre pour la fermeture.
A première vu le code semble fonctionnait correctement pour l'ouverture et la fermeture mais j'ai un problème de vibration dans les servo quand je regarde de plus près. Aléatoirement que ce soit position haute ou basse de la trappe les servo font de petites vibrations sur quelques degres.

Je voudrais qu'il ne bouge plus une fois en position. Je ne sais pas si c'est un problème hardware ou soft. J'ai deja essayer avec une alim externe et meme problème. Je suis preneur pour tout conseils. Merci d'avance :slight_smile:

#include <Servo.h>

// Création des objets Servo
Servo servo1;
Servo servo2;

// Déclaration des variables pour l'angle d'ouverture
int AngleOuverture = 80;  // Angle d'ouverture choisi (par exemple 80°)
int angle1 = 0;           // Position initiale du Servo 1
int angle2 = 100;         // Position initiale du Servo 2

// Déclaration des broches des interrupteurs
const int boutonOuverture = 4;  // Broche de l'interrupteur pour ouvrir la trappe
const int boutonFermeture = 5;  // Broche de l'interrupteur pour fermer la trappe

// Variable pour savoir si un mouvement est en cours
bool enMouvement = false;
bool directionOuverture = false;  // `true` pour ouverture, `false` pour fermeture

void setup() {
  // Attachement des servos aux broches correspondantes
  servo1.attach(9);  // Broche 9 pour Servo 1
  servo2.attach(10); // Broche 10 pour Servo 2

  // Initialisation des positions des servos
  servo1.write(0);   // Servo 1 à 0°
  servo2.write(100); // Servo 2 à 270°

  // Initialisation des broches des boutons
  pinMode(boutonOuverture, INPUT_PULLUP); // Utilisation du pull-up interne
  pinMode(boutonFermeture, INPUT_PULLUP); // Utilisation du pull-up interne

  // Initialiser la communication série
  Serial.begin(9600);
  Serial.println("Système prêt. Appuyez sur les boutons pour ouvrir/fermer.");
}

void loop() {
  // Vérifier si un bouton est pressé et s'il n'y a pas de mouvement en cours
  if (digitalRead(boutonOuverture) == LOW && !enMouvement) {
    directionOuverture = true;   // Indiquer qu'on veut ouvrir
    enMouvement = true;          // Commencer le mouvement
  }

  if (digitalRead(boutonFermeture) == LOW && !enMouvement) {
    directionOuverture = false;  // Indiquer qu'on veut fermer
    enMouvement = true;          // Commencer le mouvement
  }

  // Si un mouvement est en cours, continuer jusqu'à la position finale
  if (enMouvement) {
    if (directionOuverture) {
      ouvrirTrappe();  // Effectuer le mouvement d'ouverture
    } else {
      fermerTrappe();  // Effectuer le mouvement de fermeture
    }
  }
}

void ouvrirTrappe() {
  Serial.println("Ouverture de la trappe...");
  
  // Mouvement de Servo 1 à l'angle d'ouverture défini
  servo1.write(AngleOuverture);

  // Mouvement de Servo 2 dans le sens inverse de l'angle d'ouverture
  servo2.write(100 - AngleOuverture);

  delay(1000);  // Attendre que les servos atteignent leur position

  Serial.println("Ouverture terminée.");
  enMouvement = false;  // Le mouvement est terminé
}

void fermerTrappe() {
  Serial.println("Fermeture de la trappe...");
  
  // Retour de Servo 1 à 0°
  servo1.write(0);

  // Retour de Servo 2 à 270°
  servo2.write(100);

  delay(1000);  // Attendre que les servos atteignent leur position

  Serial.println("Fermeture terminée.");
  enMouvement = false;  // Le mouvement est terminé
}

Votre sujet a été déplacé vers la section française du forum.

Je ne sais pas si c'est le souci ici, mais certains servo sont instables aux extrêmes.

Evitez de les mettre à 0* et 180° par exemple ➜ si vous n'avez pas besoin de l'ensemble de l'amplitude de déplacement tournez un peu le servo pour être entre 20° et 160° par exemple.

je viens de tester, en effet je n'ai pas besoin de toute l'amplitude. Meme en m'étant des positions " intermédiaire" mes servos font des mouvement de quelques degrés aléatoirement

Tu pourrais faire un dessin ou une photo du montage?

Vous ne traitez pas trop les rebonds mais vous avez de grands délais...
essayez de passer par une bibliothèque bouton pour vous assurer qu'il n'y a pas une effet des boutons.

il faut bien sûr une alim séparée pour les moteurs et veiller à l'isolation des fils

Bonjour arthurservo94200

Donc je suppose que tes 2 servo sont fixés de façon rigide, de chaque côté de la trappe. Si tu n'en fixe qu'un de telle façon que le palonnier de l'autre soit libre, as tu toujours ces vibrations?
Autre solution possible, comme les 2 servo font le même mouvement, n'utiliser qu'une sortie de l'Arduino pour commander les 2 servo.

A+
Cordialement
jpbbricole

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.