Hellooo comme beaucoup je me suis lancé dans la création d'une porte auto de poulailler. Tout fonctionne comme prévu, mais le problème est l'autonomie la batterie 12v tient 1jour... J'ai réalisé que la consommation est trop importante, alors j'aimerai utiliser le mode veille pour reduire la consommation entre les changements d'état jour/nuit qui durent 8h15minimum...
J'aimerai donc utiliser le mode veille mais je n'arrive pas à l'utilier, j'ai suivi beaucoups de tuto mais rien n'y fait... J'ai entendu parlé du chien de garde WDT mais tout cela me reste très flou... Sauriez vous me guider ? Merci par avances
voici mon code fonctionnel :
/* Capteur de luminosité */
#include <avr/sleep.h>
void setup() {
pinMode(4, INPUT); // Capteur de luminosité
pinMode(2, OUTPUT); //moteur Gnd ou 5v
pinMode(3, OUTPUT); //moteur Gnd ou 5v
pinMode(6, INPUT_PULLUP);//Capteur porrte fermé
pinMode(7, OUTPUT); digitalWrite(7, LOW); //Gnd
pinMode(8, INPUT); digitalWrite(8, LOW); //5v
pinMode(9, INPUT_PULLUP);//Capteur porrte fermé
pinMode(10, OUTPUT); digitalWrite(10, LOW); //Gnd
pinMode(11, INPUT); digitalWrite(11, LOW); //5v
digitalWrite(2, LOW); //eteindre le moteur
digitalWrite(3, LOW); //eteindre le moteur
Serial.begin(9600);
Serial.println("- INITIALISATION -");
Serial.println("- FINISH 29/10/2023 -");
Serial.println("- LAST LOADING 8:37 -");
Serial.println("- GARANCED 24 MONTH -");
}
void loop() {
if (digitalRead(4) == LOW) {
Serial.println("Signal - DAY");
while (digitalRead(4) == LOW) {
Serial.println("WAITING NIGHT");
delay(5000);
}
Serial.println("DOOR CLOSING");
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(8, HIGH);
while (digitalRead(6) == HIGH) {
delay(1000);
}
digitalWrite(8, LOW); //5v
digitalWrite(2, LOW);
digitalWrite(3, LOW);
Serial.println("DOOR CLOSED");
delay(3000);
}
if (digitalRead(4) == HIGH) {
Serial.println("Signal - NIGHT");
while (digitalRead(4) == HIGH) {
Serial.println("WAITING DAY");
delay(5000);
}
Serial.println("DOOR OPENING");
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(11, HIGH);
while (digitalRead(9) == HIGH) {
delay(1000);
}
digitalWrite(11, LOW); //5v
digitalWrite(2, LOW);
digitalWrite(3, LOW);
Serial.println("DOOR OPENED");
delay(3000);
}
}
Pour faire court mon programme regarde si c'est le jour ou la nuit. Si c'est le jour, il attend en boucle 5secondes et regarde si son état à changé. Cette période peut durer 8h15minimum donc je voudrais mettre la veille ici... Par exemple repeter 8 fois attendre 1h en veille maximal et ensuite toute les 5-10 minutes afin d'être plus précis... Comment utiliser le Wdt et le sleep mode maximal ?
Merciiiii