Bonjour, je souhaite faire fonctionner un moteur et un vérin électrique avec chacun 2 fin de courses comme suit : Automatisme d'un moteur électrique 24v à commander dans les deux sens par inversion de polarité. Avec deux fins de course à chaque extrémité qu'on appellera haut et bas. ainsi qu'un vérin électrique 12v deux commande par inversion de polarité et deux fins de course qu'on appellera sortie et entré. Faire un programme pour Arduino UNO, avec un bouton mise en route et un bouton arrêt. Le moteur doit revenir à sa position initiale avant chaque démarrage de séquence position fin de course haut activé et le vérin fin de course rentré. Au démarrage le moteur doit tourner jusqu'au fin de course bas, lorsque qu'il est arrivé le moteur s'arrête et le vérin sort jusqu'à fin de course sortie puis attente 10 secondes. Ensuite le vérin doit rentré jusqu'à fin de course entré le moteur peut démarrer dans le sens inverse jusqu'au fin de course haut puis attente de 20 secondes.
Mais le programme qui me semble bon ne fonctionne pas.
// Définition des broches
const int boutonMarche = 6;
const int boutonArret = 7;
const int finCourseHaut = 2;
const int finCourseBas = 3;
const int finCourseSortie = 4;
const int finCourseEntree = 5;
const int relaisMoteurHaut = 8;
const int relaisMoteurBas = 9;
const int relaisVerinSortie = 10;
const int relaisVerinEntree = 11;
bool enMarche = false;
void setup() {
// Initialisation des broches
pinMode(boutonMarche, INPUT_PULLUP);
pinMode(boutonArret, INPUT_PULLUP);
pinMode(finCourseHaut, INPUT_PULLUP);
pinMode(finCourseBas, INPUT_PULLUP);
pinMode(finCourseSortie, INPUT_PULLUP);
pinMode(finCourseEntree, INPUT_PULLUP);
pinMode(relaisMoteurHaut, OUTPUT);
pinMode(relaisMoteurBas, OUTPUT);
pinMode(relaisVerinSortie, OUTPUT);
pinMode(relaisVerinEntree, OUTPUT);
// Assurez-vous que tout est arrêté au démarrage
digitalWrite(relaisMoteurHaut, LOW);
digitalWrite(relaisMoteurBas, LOW);
digitalWrite(relaisVerinSortie, LOW);
digitalWrite(relaisVerinEntree, LOW);
}
void loop() {
if (digitalRead(boutonMarche) == LOW) {
enMarche = true;
}
if (digitalRead(boutonArret) == LOW) {
enMarche = false;
arreterTout();
}
if (enMarche) {
// Retour à la position initiale
retourPositionInitiale();
// Début de la séquence
while (enMarche) {
// Moteur vers le bas
digitalWrite(relaisMoteurBas, HIGH);
while (digitalRead(finCourseBas) == HIGH && enMarche) {
if (digitalRead(boutonArret) == LOW) {
enMarche = false;
arreterTout();
}
}
digitalWrite(relaisMoteurBas, LOW);
// Vérin sort
digitalWrite(relaisVerinSortie, HIGH);
while (digitalRead(finCourseSortie) == HIGH && enMarche) {
if (digitalRead(boutonArret) == LOW) {
enMarche = false;
arreterTout();
}
}
digitalWrite(relaisVerinSortie, LOW);
// Attente de 10 secondes
delay(10000);
// Vérin rentre
digitalWrite(relaisVerinEntree, HIGH);
while (digitalRead(finCourseEntree) == HIGH && enMarche) {
if (digitalRead(boutonArret) == LOW) {
enMarche = false;
arreterTout();
}
}
digitalWrite(relaisVerinEntree, LOW);
// Moteur vers le haut
digitalWrite(relaisMoteurHaut, HIGH);
while (digitalRead(finCourseHaut) == HIGH && enMarche) {
if (digitalRead(boutonArret) == LOW) {
enMarche = false;
arreterTout();
}
}
digitalWrite(relaisMoteurHaut, LOW);
// Attente de 20 secondes
delay(20000);
}
}
}
void arreterTout() {
digitalWrite(relaisMoteurHaut, LOW);
digitalWrite(relaisMoteurBas, LOW);
digitalWrite(relaisVerinSortie, LOW);
digitalWrite(relaisVerinEntree, LOW);
}
void retourPositionInitiale() {
// Moteur vers le haut jusqu'à fin de course haut
digitalWrite(relaisMoteurHaut, HIGH);
while (digitalRead(finCourseHaut) == HIGH) {
// Attendre jusqu'à ce que le fin de course haut soit atteint
}
digitalWrite(relaisMoteurHaut, LOW);
// Vérin rentre jusqu'à fin de course entrée
digitalWrite(relaisVerinEntree, HIGH);
while (digitalRead(finCourseEntree) == HIGH) {
// Attendre jusqu'à ce que le fin de course entrée soit atteint
}
digitalWrite(relaisVerinEntree, LOW);
}
Merci pour votre aide !!!