bonjour a tous
j'ai récupéré un code d'un filtre pour aquarium et j'aimerais simplement lui rajouter une sécurité en cas de niveau d'eau trop haut dans le filtre mais mon incompétence ma rattrapé.
il y a actuellement un flotteur qui active un moteur qui fait tourner un filtre papier mais si il se met en défaut ou que le moteur crame rien n'arrête la pompe à eau pour remplir ce filtre, je souhaiterais donc y remédier en ajoutant un simple interrupteur flotteur qui commande un relais et pour cela j'ai ajouté :
ligne 9 : const byte flotteur2 = 6; //pin flotteur 2 (sécurité niveau haut)
ligne 43 : pinMode(flotteur2, INPUT_PULLUP); // configure le pin en entrée en mode pullup
ligne 49 à 51 : if (digitalRead (flotteur2) == HIGH) { // si flotteur2 haut
digitalWrite(relais2, HIGH); // relais securité on = coupure pompe
}
d'avance merci pour votre aide
le code entier :
#include <avr/wdt.h>
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ Déclarations $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
const byte relais = A0; // pin du relais moteur
const byte relais2 = A1; // pin du relais haut
const byte ledVerte = 2; // pin de la led verte
const byte ledRouge = 3; // pin de la led rouge
const byte flotteur = 4; // pin du flotteur
const byte flotteur2 = 6; //pin flotteur 2 (sécurité niveau haut)
const byte bouton = 5; // pin du bouton
const uint16_t delaisFlotteurHaut = 1000; // delais avant mise en route du moteur 1 sec
const uint16_t delaismoteurOn = 1000; // delais avant mise en route du moteur 1 sec
const uint16_t delaisMaxFlotteurHaut = delaisFlotteurHaut + 10000; // delais max avant de stoper moteur 10 sec + delais flotteur haut
uint32_t compteurFlotteur = 0; // pour stocker le compteur flotteur
boolean compteurFlotteurOn = false; // pour mettre on off le compteur flotteur
boolean enFonction = true; // pour mettre on off le moteur
const uint16_t delaisBouton = 1500; // delais dactivation du bouton 1.5 sec
const uint16_t delaisFinDeRlx = 15000; // delais durant le quel les declanchement son comptés , pour detécter la fin de rouleau 15 sec
const uint8_t declenchementMaxFinDeRlx = 3; // 3 declenchements
uint8_t declenchementRlx = 0; // pour stocker les declenchements
uint32_t compteurDeclenchement = 0; // pour stocker le compteur declenchement
uint32_t compteurBouton = 0; // pour stocker le compteur bouton
boolean compteurBoutonOn = false; // pour mettre on off le compteur bouton
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ Debug $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//#define DEBUG // à commenter pour enlever le debug
#ifdef DEBUG
#define DebugPrintLN(x) {Serial.println(x);}
#else
#define DebugPrintLN(x)
#endif
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ Setup $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
void setup() {
Serial.begin(9600);
pinMode(ledRouge, OUTPUT); // configure le pin en sortie
pinMode(relais2, OUTPUT); //configure le pin de sortie
pinMode(ledVerte, OUTPUT); // configure le pin en sortie
pinMode(relais, OUTPUT); // configure le pin en sortie
pinMode(flotteur, INPUT_PULLUP); // configure le pin en entre en mode pullup
pinMode(bouton, INPUT_PULLUP); // configure le pin en entre en mode pullup
digitalWrite(ledVerte, HIGH); // led verte on
pinMode(flotteur2, INPUT_PULLUP); // configure le pin en entrée en mode pullup
wdt_enable(WDTO_8S); // Si plus de remise a zero du compteur "reboot" (fait dans le loop) au bout de 8 secondes = bug de l'arduino = reboot automatique !
}
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ Loop $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
void loop() {
if (digitalRead (flotteur2) == HIGH) { // si flotteur2 haut
digitalWrite(relais2, HIGH); // relais securité on = coupure pompe
}
if (digitalRead (bouton) == LOW) { // si bouton active
DebugPrintLN("bouton appuyer"); // debug
if (compteurBoutonOn == false) { // si compteur bouton off
compteurBoutonOn = true; // compteur bouton on
compteurBouton = millis(); // stock le timer
DebugPrintLN("démarre le compteur du bouton"); // debug
}
if (delaisBouton < (millis() - compteurBouton)) { // si bouton active plus longtemps que delaisBouton
enFonction = true; // moteur on
digitalWrite(ledVerte, HIGH); // led verte on
digitalWrite(ledRouge, LOW); // led rouge off
digitalWrite(relais, HIGH); // relais on = moteur on
declenchementRlx = 0; // remet le compteur de declenchement a zero
compteurFlotteurOn = false; // remet le compteur flotteur en OFF
DebugPrintLN("réactive le fonctionnement, LED verte et rouleau ON manuelement"); // debug
while (digitalRead (flotteur) == LOW) { // boucle temps que le flotteur n'est pas bas
}
}
}
else { // si bouton pas active
compteurBoutonOn = false; // compteur off
if (enFonction == true) { // si en fonction
DebugPrintLN("systeme activé, LED verte"); // debug
if (digitalRead (flotteur) == LOW) { // si flotteur haut
DebugPrintLN("flotteur Haut"); // debug
if (compteurFlotteurOn == false) { // si compteur off
compteurFlotteurOn = true; // on met le compteur on
compteurFlotteur = millis(); // stock le timer
DebugPrintLN("démarre le compteur de flotteur haut"); // debug
}
if (millis() - compteurDeclenchement < delaisFinDeRlx) { // si le flotteur est de nouveau en position haute pendant
declenchementRlx++; // incremente le compteur de declenchement
for (uint8_t cligonote = 0; cligonote < declenchementRlx; cligonote++) {
digitalWrite(ledRouge, HIGH); // led rouge on
delay(250);
digitalWrite(ledRouge, LOW); // led rouge off
delay(1000);
}
}
else {
declenchementRlx = 0; // remet le compteur de declenchement a zero
}
if (delaisMaxFlotteurHaut < millis() - compteurFlotteur || declenchementRlx >= declenchementMaxFinDeRlx) { // si flotteur declencher plus longtemps que le delaismaxflotteurhaut873
digitalWrite(relais, LOW); // relais off
digitalWrite(ledRouge, HIGH); // led rouge on
digitalWrite(ledVerte, LOW); // led verte off
enFonction = false; // on desactive
DebugPrintLN("fin de rouleaux / trop de declenchement consecutif, SYSTEM DESACTIVE, LED rouge ON"); // debug
}
else if (delaisFlotteurHaut < millis() - compteurFlotteur ) { // si flotteur declencher plus longtemps que delaisflotteurhaut
digitalWrite(relais, HIGH); // relais on = moteur on
compteurDeclenchement = millis(); // stock le timer
DebugPrintLN("le rouleau tourne"); // debug
}
}
else { // sinon (flotteur bas)
if (compteurFlotteurOn) { // si compteur est ON
delay (delaismoteurOn); // delay pour que le moteur tourne encore unpeu apres la remise en bas du flotteur
}
digitalWrite(relais, LOW); // relais off
digitalWrite(ledRouge, LOW); // led rouge off
digitalWrite(ledVerte, HIGH); // led verte on
compteurFlotteurOn = false; // compteur off
DebugPrintLN("flotteur bas, rouleau Off et LED verte"); // debug
}
}
else {
digitalWrite(relais, LOW); // relais off
digitalWrite(ledRouge, HIGH); // led rouge off
DebugPrintLN("systeme desactivé, LED rouge"); // debug
}
}
wdt_reset(); // indique que le loop est OK, pas de bug, remise a zero du compteur "reboot" du watchdog
#ifdef DEBUG // si debug actif
delay(500); // delais pour lire debug plus facilement
#endif
}
```