DHT22 + relais

Salut a tous,

#include <DHT.h>
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>

//Constants
#define DHTPIN 4     // what pin we're connected to
#define DHTTYPE DHT22   // DHT 22  (AM2302)
DHT dht(DHTPIN, DHTTYPE); //// Initialize DHT sensor for normal 16mhz Arduino

//ALWAYS USE THIS WITH LCD I2C and Addres 0x3F
#define I2C_ADDR 0x27
#define BACKLIGHT_PIN 3
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);

//Variables
int chk;
float hum;  //Stores humidity value
float temp; //Stores temperature value

void setup()
{
  Serial.begin(9600);
  dht.begin();
  lcd.begin(16,2);
  lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
  lcd.setBacklight(HIGH);
}

void loop()
{
  
  delay(1000);
  //Read data and store it to variables hum and temp
  hum = dht.readHumidity();
  temp = dht.readTemperature();
  //Print temp and humidity values to serial monitor
  Serial.print("Humidity: ");
  Serial.print(hum);
  Serial.print(" %, Temp: ");
  Serial.print(temp);
  Serial.println(" Celsius");

  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Temp: ");
  lcd.print(temp);
  lcd.print(" ");
  lcd.print((char)223);
  lcd.print("C");
  lcd.setCursor(0,1);
  lcd.print("Hum:  ");
  lcd.print(hum);
  lcd.print(" %");

  delay(1000); //Delay 2 sec.

}

Voila le code que j’utilise pour pour connaitre l’hygrométrie et la température d’un environnement quelconque.

J’aimerai complexifier mon montage et mon programme pour que je puisse déclencher des relais servant à réguler hygrométrie.

je débute vraiment dans ce monde et je me demande comment je dois procéder.

Existe t il un code pour cela, ou dois je rajouter des conditions à mon code déjà existant ?
Idéalement je voudrai par exemple garder une hygrométrie à + ou - 5% de 70% d’hygrométrie.

J’utilise une carte Arduino UNO, DHT22 et un écran I2C LCD 16X2.

Je voudrai apprendre le langage de programmation pour l’arduino, mais dans cette grande diversité de composant et de possibilité je me perd trés facilement …;

je vous remercie de votre aide

ça risque d'être un peu complexe pour vous mais vous pouvez toujours jeter un coup d'oeil à mon exemple :

Contrôleur de T°, Humidité avec pilotage manuel ou automatique

oula ! oui !
je vais étudier ca, merci beaucoup en tout cas :slight_smile:

Dans un premier temps tu peux faire simple.

  1. tu fixes les limites de l’humidité et tu déclare des variables pour les contenir.
    Exemple :
float H_mini = 65.0 ;
float H_maxi = 75.0 ;

Ensuite tu fais la mesure et tu compares aux limites pré-définies

Si (mesure < H_min i) actionner le relais qui augmente l’humidité
Si (mesure > H_maxi) actionner le relais qui diminue l’humidité (dans la mesure où le dispositif le permet)
Si (mesure > H_mini ET (mesure < H_maxi) ne rien faire.

Pour traduire cela en code C/C++ il te suffit de suivre le tuto d’Eskimon dont le lien est donné dans le message “Règle du forum”.

Pour gérer un DHT22 il faut une bibliothèque, la meilleure AMHA est ici : http://github.com/RobTillaart/Arduino/tree/master/libraries/DHTlib.
Pour gérer un relai voir le tuto d’Eskimon.

Déjà en faisant ce que je te propose tu aura fait un travail non négligeable.

Pourquoi il existe des solutions plus compliquées comme celle de J-M-L ?
Parce que quand tu atteint la limite haute de l’humidité (par exemple) tu vas couper le relai mais le système qui fourni l’humidité ne va pas devenir instantanément inopérant → la génération d’humidité va continuer tout en diminuant et finir par s’arrêter.
Il y aura donc un dépassement de la limite haute.

Pour éviter ce fonctionnement il existe des dispositifs dit PID (proportionnelle, intégrale, dérivée) qui “anticipent” les décisions.

Par rapport à ton niveau actuel la marche va être haute, c’est pourquoi je te propose une marche intermédiaire pour y arriver plus lentement mais plus sûrement.

delay(1000); //Delay 2 sec.

Sûr de toi ? :grin:
Pour la mesure de l’humidité qui évolue lentement un délais plus long est préférable.
Pour la mise au point prendre le délais le plus court possible sinon c’est casse pied d’avoir à attendre 5s.

Si tu veux faire autre chose que surveiller l’humidité l’emploi de la fonction delay() est totalement déconseillé car elle bloque le programme.
Il faut utiliser la fonction millis() → voir son application dans l’exemple “blink without delay”