Bonjour à tous et à toutes.
Par avance, désolé si le sujet a été abordé, ou si mes questions paraissent " bêtes" mais ça fait que 1 mois que je me suis lancé sur l'arduino/ le code et l'électronique également d'ailleurs.
Je viens plus de l'univers "domotique" comme JEEDOM/EEDOMUS, et c'est pour concevoir et fabriquer mes propres dispositifs et les faire communiquer avec l'univers domotique que je me suis lancer.
Mon projet est de fabriquer plusieurs dispositifs pour la mesure de cuve de récupération d'eau de pluie.
J'en ai installé plusieurs ( de même que d'autres proches familles/amis).
J'ai donc trouvé plusieurs ressources sur le web ( tutoriels ) décrivant ce type de projet. Donc je suis parti d'un tutoriel de base mais que je souhaite amélioré et adapter à un ESP32.
Le tutoriel est celui-ci :
J'utilise plusieurs fils dans la cuve et quand l'eau fait contact, la led correspondante au niveau s'allume.
ça c'est bon j'ai réussi à le mettre ne place.
Mais dès que je veux rajouter quelque chose ou modifier en profondeur la chose je bloque.
Voici mon code fonctionnel adapté selon le tutoriel ( désolé si mon copié-collé est pas bon, c'est mon 2eme message sur le forum:
// Entrées analogiques
const int Level0Pin = 34;
const int Level1Pin = 35;
const int Level2Pin = 32;
const int Level3Pin = 33;
// Sorties LEDs
const int Level0LED = 19;
const int Level1LED = 18;
const int Level2LED = 5;
const int Level3LED = 4;
int ADC_Val=0;
const int Seuil_0=400; // 1.9V (2.5V pour 512)
void setup()
{
// Indicateurs LEDs
pinMode(Level0LED,OUTPUT);
pinMode(Level1LED,OUTPUT);
pinMode(Level2LED,OUTPUT);
pinMode(Level3LED,OUTPUT);
//Liaison série
Serial.begin(115200);
}
void loop()
{
digitalWrite (Buzzer, LOW); //turn buzzer off
// Lecture et Affichage 34
ADC_Val=analogRead(Level0Pin);
Serial.print(ADC_Val); Serial.print("\t");
SetStateLevel(ADC_Val, Seuil_0, Level0LED);
delay(100);
// Lecture et Affichage 35
ADC_Val=analogRead(Level1Pin);
Serial.print(ADC_Val); Serial.print("\t");
SetStateLevel(ADC_Val, Seuil_0, Level1LED);
delay(100);
// Lecture et Affichage 32
ADC_Val=analogRead(Level2Pin);
Serial.print(ADC_Val); Serial.print("\t");
SetStateLevel(ADC_Val, Seuil_0, Level2LED);
delay(100);
// Lecture et Affichage 33
ADC_Val=analogRead(Level3Pin);
Serial.print(ADC_Val); Serial.print("\n");
SetStateLevel(ADC_Val, Seuil_0, Level3LED);
delay(100);
}
void SetStateLevel(int ADCVal, int Seuil, int LED_Pin)
{
if(ADCVal > Seuil)
{
digitalWrite(LED_Pin, HIGH);
}
else
{
digitalWrite(LED_Pin, LOW);
}
}
Mon idée étant:
De rendre la chose communicante :
- Ajout d'une fonction Serveur Wifi ( avec possibilité AP , pour pas avoir a programmer dans le code le SSID /MDP du wifi , ça me permettra d'avoir un seul code pour tous les dispositifs que je pourrais faire pour donner à des amis / familles ). .... j'ai pas encore commencé à travailler la dessus.
- Pouvoir récupérer les infos sur les systèmes domotiques ( JEEDOM/EEDOMUS via des requêtes HTTP ) Idem j'ai pas encore commencé la chose.
De mettre une "vanne motorisée " pour vider la cuve ( éviter que cela déborde par en haut ) si on est absent ( voir même l'utiliser comme arrosage pilotable à distance ou gouttes à gouttes ... ), j'ai pas commencé cette partie la non plus.
De mettre un buzzer qui avertirait par des Bips si la cuve est pleine ( en plus de la LED qui indique le niveau ):
Et la ça se complique ( et ça explique pourquoi j'ai pas avancé sur la partie" connectée ou la vanne pilotable à distance) car impossible d'avoir un buzzer qui ne bip pas dès le démarrage en continu:
Voici le code ( ici le buzzer devrait bipper quand une des LED s'allume, c'est plus un code pour faire un test que quelque chose ayant un usage ... car j'ai un autre soucis avec le code d'origine mais je l'expliquerai après).
// Entrées analogiques
const int Level0Pin = 34;
const int Level1Pin = 35;
const int Level2Pin = 32;
const int Level3Pin = 33;
// Sorties LEDs
const int Level0LED = 19;
const int Level1LED = 18;
const int Level2LED = 5;
const int Level3LED = 4;
// Sortie Buzzer active
int Buzzer = 2; //for ESP32 Microcontroller
int ADC_Val=0;
const int Seuil_0=400; // 1.9V (2.5V pour 512)
void setup()
{
// Indicateurs LEDs et sorties buzzer
pinMode(Level0LED,OUTPUT);
pinMode(Level1LED,OUTPUT);
pinMode(Level2LED,OUTPUT);
pinMode(Level3LED,OUTPUT);
pinMode(Buzzer,OUTPUT);
//Liaison série
Serial.begin(115200);
}
void loop()
{
digitalWrite (Buzzer, LOW); //turn buzzer off
// Lecture et Affichage 34
ADC_Val=analogRead(Level0Pin);
Serial.print(ADC_Val); Serial.print("\t");
SetStateLevel(ADC_Val, Seuil_0, Level0LED);
delay(100);
// Lecture et Affichage 35
ADC_Val=analogRead(Level1Pin);
Serial.print(ADC_Val); Serial.print("\t");
SetStateLevel(ADC_Val, Seuil_0, Level1LED);
delay(100);
// Lecture et Affichage 32
ADC_Val=analogRead(Level2Pin);
Serial.print(ADC_Val); Serial.print("\t");
SetStateLevel(ADC_Val, Seuil_0, Level2LED);
delay(100);
// Lecture et Affichage 33
ADC_Val=analogRead(Level3Pin);
Serial.print(ADC_Val); Serial.print("\n");
SetStateLevel(ADC_Val, Seuil_0, Level3LED);
delay(100);
}
void SetStateLevel(int ADCVal, int Seuil, int LED_Pin)
{
if(ADCVal > Seuil)
{
digitalWrite(LED_Pin, HIGH);
digitalWrite (Buzzer, HIGH); //turn buzzer on
}
else
{
digitalWrite(LED_Pin, LOW);
digitalWrite (Buzzer, LOW); //turn buzzer off
}
}
Dans ce cas présent quand je mets l'ESP32 sous tension sans qu'aucun niveau d'eau ne soit détecter, j'ai droit à un BIP en continu.
Quand un niveau est détecté ( peu importe lequel j'ai alors un BIP qui n'est plus en continu mais selon la fréquence "delay" de 100ms définie dans le VOID LOOP.
J'ai essayé avec et sans :
digitalWrite (Buzzer, LOW); //turn buzzer off
dans le VOID LOOP ça change rien.
Comme l'idée est que le BIP ne soit là qu'au moment ou le récupérateur est plein ( donc quand la LED 3 s'allume), j'ai essayé cela aussi :
void SetStateLevel(int ADCVal, int Seuil, int LED_Pin)
{
if(ADCVal > Seuil)
{
digitalWrite(LED_Pin, HIGH);
}
else
{
digitalWrite(LED_Pin, LOW);
}
if (Level3LED, HIGH)
digitalWrite(Buzzer, HIGH); //turn buzzer on
else
digitalWrite(Buzzer, LOW); //turn buzzer off
}
La encore le BIP est en continu dès le démarrage et quand la LED 3 ou " Level3LED " est allumé rien ne se passe j'ai toujours le BIP en continu.
Excusez mon ignorance quasi absolue dans le code/programmation Arduino mais dans ce code ( originel ) quelque chose m'échappe , dans la partie :
digitalWrite(LED_Pin, HIGH);
}
else
{
digitalWrite(LED_Pin, LOW);
A aucun moment n'est défini le terme " LED_Pin " ( j'ai des " Level0LED" par exemple ) donc est un terme " générique" utilisable quelque soit les définitions des branchements / entrées/sorties?
Je sais pas si ma question est claire ? Pour moi ça me parait pas évident.
Si quelqu'un peut m'aider pour cette histoire de " BIP " / Buzzer ( je précise si ça a un intérêt, c'est un Buzzer actif en module ( avec sa propre résistance ), car la je vais me taper dans un mur ( j'ai pas que le problème du BUZZER , j'ai voulu aussi utiliser un écran OLED et la encore d'autres problèmes, mais je pense que mon post est déja bien long...).
Merci par avance.