CAPTEUR DE
NIVEAU D'EAU
Le concept de ce capteur est simple : il est là pour déterminer le niveau d'eau d'un contenant. Il fonctionne de manière analogique c'est-à-dire qu'il renvoie une valeur en fonction du niveau de l'eau.
Mise en place du dispositif
Points branchements
-
Les LED :
Les LED sont branchées en 3,3 V. Attention ! les LED ne supportent pas le 5V.
LED rouge : PIN 13
LED jaune : PIN 12
LED verte : PIN 11
Rappel : le PIN est le numéro d'identification du capteur, on l'utilise dans le code.
-
Capteur de niveau d'eau :
Ce capteur se branche en 5V.
S : A0
+ : 5V
- : GDN
Rappel : A0 il s'agit de la sortie analogique, les données sont récupérées par cette sortie analogique.
Mise en place du code
int ledRouge = 13;
int ledOrange = 12;
int ledVerte = 11;
void setup() {
Serial.begin(9600);
pinMode(ledRouge, OUTPUT);
pinMode(ledOrange, OUTPUT);
pinMode(ledVerte, OUTPUT);
digitalWrite(ledRouge, HIGH);
digitalWrite(ledOrange, HIGH);
digitalWrite(ledVerte, HIGH);
}
void loop() {
int valeurAnalog = analogRead(A0);
float tension = (float) 5*valeurAnalog/1023;
Serial.print("Tension sur A0 : ");
Serial.println(tension);
delay(1000);
if(tension<0.82){
Serial.print("Niveau à 0%");
//LedRouge s'allume
digitalWrite(ledOrange, HIGH);
digitalWrite(ledVerte, HIGH);
digitalWrite(ledRouge, LOW);
Serial.print("Remplisser le réservoir");
}
// si la tension est inférieur à 0.82 écrire sur le port série le niveau est à 0%
else if (tension<1.51){
Serial.print("Niveau entre 0% et 25%");
//LedRouge clignote
digitalWrite(ledOrange, HIGH);
digitalWrite(ledVerte, HIGH);
digitalWrite(ledRouge, HIGH);
delay(1000);
digitalWrite(ledRouge, LOW);
delay(1000);
Serial.print("Attention le niveau d'eau est très bas");
}
else if (tension<1.70){
Serial.print("Niveau entre 25% et 50%");
//LedOrange s'allume
digitalWrite(ledRouge, HIGH);
digitalWrite(ledVerte, HIGH);
digitalWrite(ledOrange, LOW);
Serial.print("Le réservoir est rempli à moins de la moitié");
}
else if (tension<1.77){
Serial.print("Niveau entre 50% et 75%");
//LedOrange clignote
digitalWrite(ledRouge, HIGH);
digitalWrite(ledVerte, HIGH);
digitalWrite(ledOrange, HIGH);
delay(1000);
digitalWrite(ledOrange, LOW);
delay(1000);
Serial.print("Le niveau de l'eau passera bientôt en dessous de la moitié du niveau");
}
else if (tension<1.86){
Serial.print("Niveau entre 75% et 100%");
//LedVerte clignote
digitalWrite(ledRouge, HIGH);
digitalWrite(ledOrange, HIGH);
digitalWrite(ledVerte, HIGH);
delay(1000);
digitalWrite(ledVerte, LOW);
delay(1000);
Serial.print("Le niveau d'eau commence à baisser");
}
else {
Serial.print("Niveau à 100%");
//LedVerte s'allume
digitalWrite(ledRouge, HIGH);
digitalWrite(ledOrange, HIGH);
digitalWrite(ledVerte, LOW);
Serial.print("Le réservoir est rempli");
}
}
Serial.begin(9600) ouverture du port série et fixe le debit de communication à 9600 bauds.
pinMode(variable, OUTPUT) configuration de la broche (ici les LED) comme une sortie.
digitalWrite(variable, HIGH) met la variable en position haute. Ici cela allume la LED.
Faire les comparaisons de niveau de volt par rapport au niveau de remplissage (niveau d'eau). On met plus ou moins le capteur dans l'eau en découpant le capteur en 5 (0%, 25%, 50%, 75% et 100%).
Par exemple : 0% = 0.82 25%= 1.51 50%=1.70v 75%=1.77 100%=1.86..etc
int valeurAnalog = analogRead(A0)
récupération de la tension de valeur de 0 à 1023, stockée dans une variable de type int (entier) et nommée valeurAnalog.
float tension = (float) 5*valeurAnalog/1023;
Conversion de la valeur analogue en tension avec la formule 5*valeurAnalog/1023; (float) -> valeur décimale avec virgule; le tout est stocké dans une valeur décimale appelée tension.
Serial.print("Tension sur A0 : ") renvoie sur le port série, le texte "tension sur A0:"
Serial.println(tension) renvoi de la variable tension sur le port seriedelay(1000) ajout d'un délais de 1s = 1000 millisecondes pour éviter d'avoir trop d'info d'un coup.