Bonjour, Dans le cadre d’un projet perso, j’ai réalisé un système qui dit, via un afficheur lcd, si il faut arroser une plante ou non, j’utilises un capteur d’humidité grove qui mesure l’humidité de la plante et la compare à des valeurs prédéfinies pour savoir si la plantes est sèche ou assez humide. J’ai ajouter a ça un sélecteur (un potentiomètre), qui comporte 3 "zones", correspondants chacune a un intervalle entre 2 positions du potentiomètre, les zones sont affectées a un type de plantes, Arides, Tempérés ou Tropicales. Les valeurs d’humidité sont donc personnalisées pour chaque type de plantes, en fonction de la position du potentiomètre sur une zone. Mon problème arrive quand je veux sélectionner une zone. Par exemple, quand je choisi la zone 1 (Aride), l’afficheur est censé écrire "OK", quand la valeur d’humidité lue par le capteur est supérieur ou égale à 100, et écrire "Arrose moi", quand la valeur est inférieur à 100, de plus, l’afficheur doit afficher "Trop humide" quand la valeur dépasse 110 (j’ai pris des valeurs de test). Or, quand je l’allume et le positionne en zone 1 et que je mets ma main sur le capteur, celui-ci affiche "OK", même quand la valeur est égale à 30, et il n’affiche pas "Trop Humide", quand la valeur dépasse 110. J’ai vérifié, le chaque élément marche correctement séparément, et ce code de test du potentiomètre fonctionne parfaitement :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #include <LiquidCrystal.h> LiquidCrystal lcd(11,10,5,4,3,2); int potar = A5; int val; void setup() { lcd.begin(16,2); pinMode(potar, INPUT); } void loop() { val = analogRead(potar); if ((val <= 1023) && (val >= 720)) { lcd.clear(); lcd.print("Arride"); } if ((val <= 720) && (val >= 380)) { lcd.clear(); lcd.print("Tempere"); } if ((val <= 380) && (val >= 4)) { lcd.clear(); lcd.print("Tropicale"); } delay(1000); } ` |
voici le code complet du systeme :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | #include <LiquidCrystal.h> LiquidCrystal lcd(11,10,5,4,3,2); int sensor = A0; int potar = A5; int value; int valPerso; int valPersoFin; int tropHumide; int somme = 0; int compteur = 0; int NB_VALEURS = 5; int moyenne = 0; int pourcent; void setup() { lcd.begin(16,2); lcd.print("Initialisation"); pinMode(potar, INPUT); pinMode(sensor, INPUT); } void loop() { valPerso = analogRead(potar); if ((valPerso <= 1023) && (valPersoFin >= 720)) { valPersoFin = 100; tropHumide = 110; } else if ((valPerso <= 720) && (valPersoFin >= 380)) { valPersoFin = 300; tropHumide = 466; } else if ((valPerso <= 380) && (valPersoFin >= 4)) { valPersoFin = 600; tropHumide = 699; } delay(1000); somme += analogRead(sensor); compteur = (compteur + 1) % NB_VALEURS; if (compteur == 0) { moyenne = somme/NB_VALEURS; somme = 0; //pourcent = (moyenne*100)/700; if (moyenne >= tropHumide) { lcd.print("Je me nois !"); } if (moyenne < valPersoFin) { lcd.clear(); lcd.setCursor(3,0); lcd.print("ARROSE MOI !"); lcd.setCursor(7, 1); lcd.print(moyenne); // pourcent); //lcd.print(" %"); } else if (moyenne >= valPersoFin) { lcd.clear(); lcd.setCursor(7,0); lcd.print("OK"); lcd.setCursor(6, 1); lcd.print(moyenne); // pourcent); //lcd.print(" %"); } } delay(1000); } |
Merci de m’aider