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
#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é
}