Lien thinkercad
[Simulation du projet en cours] (Circuit design Projet ascenseur LEFEBVRE LAURENT | Tinkercad)
Bonjour la communauté. Je débute sur arduino.
J'ai fabriqué un ascendeur avec un monte charge issu d'un manitou.
Il est activé avec une pompe hydraulique monophasée.
La descente est activée avec une électrovanne 24V.
Je rencontre quelques soucis de boucle dans le code, auriez-vous des idées ?
Scénario souhaité :
Ascenseur position basse ou haute au départ; de préférence au rez de chaussé.
Lecture des capteurs.
Affiche de l'étage sur le capteur.
Si appui sur le premier étage LED 6 allumée pour activation du moteur., affichage LCD Montée en cours.
L'ascenseur arrive en haut de détecte la fin de course pin 10, il s'arrête et affiche premier étage sur le LCD.
Pour la descente :
Appui sur le bouton descente :
Activation de la sortie pin 13.
Affichage LCD descente en cours.
Quand le capteur bas est activé, Désactivation de la pin 13 affichage LCD Rez de chaussée.
Code à ajouter :
Quand l'ascenseur arrive en bas, il reste de la pression hydraulique.
Il faudrait donc afficher Rez de chaussée sur la ligne 1 du lcd.
Activer la pin 13 deux secondes pour évacuer la pression hydraulique et affiche Purge hydraulique sur le ligne 2 du LCD pendant ces deux secondes et ensuite éteindre la pin 13 et effacer le lcd pour laisser afficher la ligne 1 (Rez de chaussée).
Branchement des pins
Projet ascenseur.
Cahier des charges du branchement.
Deux boutons de commande.
pin 8 montée.
pin 7 descente.
Deux fin de courses.
pin 11 capteur bas.
pin 10 capteur haut.
LCD relié aux pin 2,3,4,5,9 et 12, contraste relié à la masse par un potentiomètre de 10k.
Pour simuler les états de sortie :
pin 13 LED descente pour commander un relais ultérieurement.
pin 6 LED montée pour commander un relais ultérieurement.
Code arduino
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 9, 5, 4, 3, 2); // Broches pour l'écran LCD
const int boutonMonteePin = 8;
const int boutonDescentePin = 7;
const int capteurFinDeCourseHautPin = 10;
const int capteurFinDeCourseBasPin = 11;
const int relaisMonteePin = 6; // Broche de contrôle du relais de montée
const int relaisDescentePin = 13; // Broche de contrôle du relais de descente
bool enMouvement = false;
void setup() {
lcd.begin(16, 2); // Initialisation de l'écran LCD
pinMode(boutonMonteePin, INPUT_PULLUP);
pinMode(boutonDescentePin, INPUT_PULLUP);
pinMode(capteurFinDeCourseHautPin, INPUT_PULLUP);
pinMode(capteurFinDeCourseBasPin, INPUT_PULLUP);
pinMode(relaisMonteePin, OUTPUT);
pinMode(relaisDescentePin, OUTPUT);
lcd.setCursor(0, 0);
lcd.print("Etage 1");
}
void loop() {
if (enMouvement) {
if (digitalRead(capteurFinDeCourseHautPin) == LOW) {
enMouvement = false;
stopperAscenseur();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Etage 0");
} else if (digitalRead(capteurFinDeCourseBasPin) == LOW) {
enMouvement = false;
stopperAscenseur();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Etage 1");
}
} else {
if (digitalRead(boutonMonteePin) == LOW) {
monterAscenseur();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Montee en cours");
} else if (digitalRead(boutonDescentePin) == LOW) {
descendreAscenseur();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Descente en cours");
}
}
}
void monterAscenseur() {
digitalWrite(relaisMonteePin, HIGH);
digitalWrite(relaisDescentePin, LOW);
enMouvement = true;
}
void descendreAscenseur() {
digitalWrite(relaisMonteePin, LOW);
digitalWrite(relaisDescentePin, HIGH);
enMouvement = true;
}
void stopperAscenseur() {
digitalWrite(relaisMonteePin, LOW);
digitalWrite(relaisDescentePin, LOW);
}