Go Down

Topic: Problème de code  (Read 2021 times) previous topic - next topic

djlive

Bonjour a tous
j'ai un projets sur Arduino mais je bloque sur le programme.
Voila l'idéé:
un capteur temp et humidité dth 11 "Sensor V1.2"
un écran lcd
Arduino Uno
une pompe brumification piloté par relais Arduino

explication: je veux que la pompe déclanche si je suis infirieure a 75% jusqu'a atteindre 85%(je n'y arrive pas)
sur le lcd je veux juste l'affichage de la température et de l'humidité.(ok)

Merci de m'aidé.


kamill

Bonjour,

Qu'est ce que tu nous fais la? C'est illisible. Pourquoi pas une photo de l'écran?

Mets ton code entre balise comme indiqué ici.

djlive

Code: [Select]
// Programme terrarium
#include "DHT.h"
#define DHTPIN A0  // capteur humidité
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
int relais= 13; // pompe a brumifier
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);// Initialisation du LCD
const int intTimePause =1000;

void setup ()
{
  lcd.begin(16,2) ; // config écran
  lcd.clear() ; // initialisé ecran
  pinMode(relais, OUTPUT) ; // config sorti pompe
  Serial.begin(9600) ;
  Serial.print(" bonjour christopher ") ; 
  dht.begin() ;
}


void loop() {
 
  float h = dht.readHumidity();
  float t = dht.readTemperature();

 Serial.print(" Humidite: " ); //affichage sur le monotoring
 Serial.print(h);
 Serial.print( " %\t ");
 Serial.print(" Degres: " );
 Serial.print(t);
 Serial.print (" C ");

lcd.setCursor(0,0); // on definie la place du curseur sur le lcd, là c'est en haut à gauche
lcd.print(" Degres: "); //on affiche la chaine de caractère
lcd.print(t); // on affichage la variable définie précédement
lcd.print(" C "); // pour celcius

lcd.setCursor(0,1); // là on se met à la ligne 2
lcd.print(" Humidite: "); //idem que pour l'humidité
lcd.print(h);
lcd.print(" % ");
delay(1000);

 int analogRead(DHTPIN);
   if (h<(75));
   {
    digitalWrite(relais, HIGH);
    delay(900000);
    digitalWrite(relais, LOW);
   }
}


Re dsl premiere fois sur ce site, donc je reprends,

j'ai un projets sur Arduino mais je bloque sur le programme.
Voila l'idéé:
un capteur temp et humidité dth 11 "Sensor V1.2"
un écran lcd
Arduino Uno
une pompe brumification piloté par relais Arduino

explication: je veux que la pompe déclanche si je suis infirieure a 75% jusqu'a atteindre 85%(je n'y arrive pas)
sur le lcd je veux juste l'affichage de la température et de l'humidité.(ok)

Merci de m'aidé.

kamill

Tu as posté  ta réponse dans le forum anglais. Je ne sais pas comment tu as fait. Pour répondre, tu cliques simplement sur "reply" en bas de la page.

Pour répondre à ta quesion: si l'humidité est inférieur au seuil, tu actionnes la pompe et si elle est supérieure, tu arrête la pompe.
Ce qui donne:
Code: [Select]
  if (h<75);
  {
   digitalWrite(relais, HIGH);
  }
  if (h>75)
  {
   digitalWrite(relais, LOW);
  }

ton analogRead avant le if ne sert à rien puisque tu ne l'affecte à aucune variable.

Si tu trouves que la pompe s'arrête puis redémarre trop souvent tu peux mettre un hystéréris
Code: [Select]
  float hys=2;
  if (h<75-hys);
  {
   digitalWrite(relais, HIGH);
  }
  if (h>75+hys)
  {
   digitalWrite(relais, LOW);
  }




infobarquee

bonjour,
pourquoi ouvrir un nouveau sujet?
continue sur le premier que tu as ouvert.

Code: [Select]
int analogRead(DHTPIN);
sert a rien.

pose sur le papier ton souhait.

si humidité < 75 ===> allumage relais
si humidité >= 85 ===> éteindre relais
AUCUNE AIDE PAR MP

djlive

Merci pour ta réponse mais après test  cela ne fonctionne pas je dois avoir une erreur d'écriture sur le programme
Code: [Select]
  #include "DHT.h"
#define DHTPIN A0  // capteur humidité
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
int relais= 13; // pompe a brumifier
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);// Initialisation du LCD
const int intTimePause =1000;

void setup ()
{
  lcd.begin(16,2) ; // config écran
  lcd.clear() ; // initialisé ecran
  pinMode(relais, OUTPUT) ; // config sorti pompe
  Serial.begin(9600) ;
  Serial.print(" bonjour christopher ") ; 
  dht.begin() ;
}


void loop() {
 
  float h = dht.readHumidity();
  float t = dht.readTemperature();

 Serial.print(" Humidite: " ); //affichage sur le monotoring
 Serial.print(h);
 Serial.print( " %\t ");
 Serial.print(" Degres: " );
 Serial.print(t);
 Serial.print (" C ");

lcd.setCursor(0,0); // on definie la place du curseur sur le lcd, là c'est en haut à gauche
lcd.print(" Degres: "); //on affiche la chaine de caractère
lcd.print(t); // on affichage la variable définie précédement
lcd.print(" C "); // pour celcius

lcd.setCursor(0,1); // là on se met à la ligne 2
lcd.print(" Humidite: "); //idem que pour l'humidité
lcd.print(h);
lcd.print(" % ");
delay(1000);

   if (h<(75));
   {
    digitalWrite(relais, HIGH);
   }
   if (h>(75));
   {
    digitalWrite(relais, LOW);
   }
}
 

kamill

Ca devrait fonctionner. Qu'est ce que tu as comme valeur d'humidité sur le moniteur série ?

djlive

Sur le moniteur série j'ai une valeur de 54%

kamill

Donc ta pompe devrait fonctionner. Comme tu utilises le pin 13 tu dois voir la led L allumée

djlive

oui en tout logique des choses, mon pin 13 et en sortie, branché sur le In du relais , le relais fonctionne (led du relais allumé )
mais led(qui remplace la pompe pour le test) sorite relais , ne fonctionne pas.
Du coup je ne comprends pas.

kamill

Et si tu débranches le relais de ta carte, la led L de la carte fonctionne?

djlive

en débranchent le relais de la carte (led verte relais allumé,  led rouge relais éteinte ) led carte arduino allumé ) led pompe éteinte

djlive

heu je viens de voir que la led L de la carte Arduino ne fonctionne pas, ni branché ,ni débranché

infobarquee

déjà vire les ( )
   if (h<(75));
   if (h>(75));

tu parlais de 75 et 85, ou est le 85?

vires le relais, mets une led simple sur la pin 13 ou la pin 12 (en modifiant le code).

change pour le test la valeur mini d'humidité, si tu as 54% en serial, mets le mini à 50% et vois si la led s'allume.

sur la pin 13, il y a une résistance, donc le relais n'a pas forcément assez du jus.
AUCUNE AIDE PAR MP

kamill

Bien vu infobarquee, il y a un ; de trop dans le    if (h<(75)); C'est moi qui ai fait l'erreur initiale quand j'ai répondu sans me relire et djlive a ajouté le 2eme ;

récapitulons le test est le suivant
Code: [Select]
 if (h<75)
 {
  digitalWrite(relais, HIGH);
 }
 if (h>75)
 {
  digitalWrite(relais, LOW);
 }


mais je conseille quand même de mettre un hystérésis pour éviter la marche/arrêt continue de la pompe

Go Up