Les portes de poulailler auto ont un succès fou ! J'ai commencé la mienne il y'a un an (elle n'a jamais fonctionné plus de 3 jours faute problème technique) , et j'arrive à la troisième version où j'ai décidé de tout changer niveau système de fermeture.
La porte fonctionne bien pour l'instant, j'aimerai avoir un retour sur ma programmation ou sur le système d'ouverture/fermeture, peut être que vous arriverez à voir des erreurs ou incohérences que je pourrais corriger, ou tout simplement des conseils, je suis preneur
(j'ai pas réussi à mettre une vidéo)
toutes les pièces blanches sont imprimés en 3D.
Les composants sont dans le boitier : L298n, convertisseur >12v , Arduino Uno, photorésistance avec résistance 10K, plaque avec pin pour agrandir les pins Gnd et +5v.
Puis 2 capteur fin de course en dehors du boitier. Un moteur 12v puissant (10kg.cm-1) il a du couple !
Dans le programme initial j'ai mis un buzzer, mais pas sur de le garder
float timedoor = 0;
unsigned long Emin = 0;
unsigned long buttonX = 0;
void setup() {
pinMode(12, OUTPUT); // Sound
pinMode(A0, INPUT); // Capteur de luminosité
pinMode(4, OUTPUT); //moteur Gnd ou 5v
pinMode(3, OUTPUT); //moteur Gnd ou 5v
pinMode(5, OUTPUT); digitalWrite(5, LOW); //EnableB
pinMode(6, INPUT_PULLUP);//Capteur porrte fermé
pinMode(9, INPUT_PULLUP);//Capteur porrte fermé
pinMode(7, OUTPUT); digitalWrite(7, HIGH); // LED VERTE
pinMode(8, OUTPUT); digitalWrite(8, LOW); // LED ROUGE
pinMode(10, INPUT_PULLUP);//Bouton haut
pinMode(11, INPUT_PULLUP);//Bouton bas
digitalWrite(4, LOW); //eteindre le moteur
digitalWrite(3, LOW); //eteindre le moteur
Serial.begin(9600);
Serial.println("- INITIALISATION V.3 -");
Serial.println("- FINISH 25/08/2024 -");
Serial.println("- LAST LOADING 21h20 -");
Serial.println(analogRead(A0));
if (analogRead(A0) <= 100 ) {
if (digitalRead(6) == HIGH) {
fermer();
}
} else {
if (digitalRead(9) == HIGH) {
ouvrir();
}
}
}
void loop() {
if (digitalRead(10) == HIGH && digitalRead(9) == HIGH) { //bouton haut préssé
digitalWrite(8, HIGH); // LED ROUGE
buttonX = 0;
while (digitalRead(10) == HIGH && buttonX < 300) { //3secondes max
delay(100);
buttonX = buttonX + 10;
}
if (buttonX >= 300) { //bug appuie trop long
tone(12, 110, 1000);
delay(1000);
digitalWrite(8, LOW);
delay(3000);
} else { //bon appuie
tone(12, 880, 1000);
delay(1000);
digitalWrite(8, LOW);
ouvrir();
}
}
if (digitalRead(11) == HIGH && digitalRead(6) == HIGH ) { //bouton bas préssé
digitalWrite(8, HIGH); // LED ROUGE
buttonX = 0;
while (digitalRead(11) == HIGH && buttonX < 300) { //3secondes max
delay(100);
buttonX = buttonX + 10;
Serial.println(buttonX);
}
if (buttonX >= 300) { //bug appui trop long
Serial.println("appui trop long");
tone(12, 110, 1000);
delay(1000);
digitalWrite(8, LOW);
delay(3000);
} else { //bon appuie
Serial.println("bon appui");
tone(12, 880, 1000);
digitalWrite(8, LOW);
fermer();
}
}
if (analogRead(A0) >= 350 && digitalRead(9) == HIGH) { //jour et capteur porte ouverte pas préssé
Serial.println("Signal - DAY");
Serial.println(analogRead(A0));
delay(3000);
ouvrir();
}
if (analogRead(A0) <= 100 && digitalRead(6) == HIGH) { //nuit et capteur porte fermé pas encore préssé {
Serial.println("Signal - NIGHT");
delay(3000);
fermer();
}
Serial.println(analogRead(A0));
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////FERMER
void fermer() {
Serial.println("DOOR CLOSING");
digitalWrite(4, LOW);
digitalWrite(3, HIGH);
digitalWrite(5, HIGH); //EnableB
timedoor = 0;
while (digitalRead(6) == HIGH && timedoor < 10) { //le capteur n'est pas préssé
Serial.println(timedoor);
timedoor = timedoor + 0.1;
Serial.println(analogRead(A0));
delay(100);
}
//le capteur a été préssé
digitalWrite(5, LOW); //EnableB
digitalWrite(4, LOW);
digitalWrite(3, LOW);
Serial.println("DOOR CLOSED");
delay(1000);
tone(12, 220, 1000);
delay(1000);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////OUVRIR
void ouvrir() {
Serial.println("DOOR OPENING");
digitalWrite(4, HIGH);
digitalWrite(3, LOW);
digitalWrite(5, HIGH); //EnableB
timedoor = 0;
while (digitalRead(9) == HIGH and timedoor < 10) {
Serial.println(timedoor);
timedoor = timedoor + 0.1;
Serial.println(analogRead(A0));
delay(100);
}
digitalWrite(5, LOW); //EnableB
digitalWrite(4, LOW);
digitalWrite(3, LOW);
Serial.println("DOOR OPENED");
delay(1000);
tone(12, 220, 1000);
delay(1000);
}
J'espère que je pourrais paufiner ma porte de poulailler et m'assurer qu'elle aura aucun souci une fois installé chez les grands parents (j'ai du la récup, la "réparer" et la renvoyer de nombreuses fois snif)
Bonne journée