Translate

samedi 10 août 2013

Regulateur d'humidité et de temperature avec un DHT22


 Il y a quelques temps un ami me parles de problèmes d'humidité dans son sous sol.
En cherchant la cause, je me suis aperçu que l’étanchéité de la maison avait été mal réalisée et aujourd'hui il n'est plus possible de remédier au problème. L'entreprenneur n'est pas mis en cause dans le cadre de la garantie décennale car sois disant un taux d'humidité élevé est toléré. En attendant  tout moisi chez lui!!!!!

J'ai donc cherché une solution pour remédier au problème car il avait déja tenté la ventilation naturelle et ça ne fonctionne pas trop bien.

J'ai donc opté pour une ventilation mécanique pilotée avec un Arduino et un DHT 22 (AM2302).
Ces sont des capteurs  très bons marchés et assez lents, mais cela suffit pour cette application.

Le DHT 22

Ces capteurs sont composés de deux parties, un capteur d'humidité capacitif et une thermistance, on trouve également le circuit de gestion qui  converti les valeurs analogiques en digital dans le boitier.
Nous avons donc un signal de sortie numérique qui permet de déporter la sonde du circuit (dans mon cas il s'agit de 20m)


La librairie du DHT22


Encore une fois je suis agréablement surpris par la facilité de mise en œuvre de la librairie a télécharger ici télécharger la librairie Arduino disponible sur le GitHuh d'AdaFruit .
Tout a part la commande des relais et l'affichage se trouve dans l'exemple de cette librairie

L'afficheur

 J'ai pris un afficheur 1,8" de chez Adafruit (je l'avais en stock).
Vous trouverez tout les renseignements ici   http://www.adafruit.com/products/358

 Le Fonctionnement

 Le principe est simple, dans le sketch je donne une consigne d'humidité maximum, la mesure dépasse celle-ci de 1%, j'enclenche un relai qui lui pilote un extracteur.
J'ai profité de la sonde de température pour gérer un petit convecteur électrique qui est bien utile en hiver.

Le schéma

Pas encore terminé désolé (perso, pas besoin de schéma pour faire un montage!!)


Le schéma avec une carte UNO



La commande des deux relais se fait par l’intermédiaire d'un ULN 2003 (je sais ce que vous allez me dire "il y aurait pu utiliser des transistors!!!" oui!! mais c'est plus simple comme ça lol) 


Si vous achetez le DHT22 nu , il faudra mettre une résistance de 10 KOmhs entre la broche de donnée (Data Out) et l'alimentation . Cette résistance agit comme une résistance Pull-up et ramène la broche Data Out à VCC (il existe une version avec un petit bout de circuit sur lequel tout s'y trouve donc pa besoin de cette résistance).


Le programme

// Hygromètre et thermostat
// By jojo Bricolo
// Librairie adafruit téléchargeable ici https://github.com/adafruit/DHT-sensor-library
// Datasheet DHT 22 http://www.adafruit.com/datasheets/DHT22.pdf



#include "DHT.h"
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <SPI.h>
#include "Wire.h"

#define sclk 10 //SCL
#define mosi 11 // SDA
#define cs   9 // CS
#define dc   12 // RS
#define rst  13  // peut être connecté a la RAZ arduino


Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, mosi, sclk, rst);
#define DHTPIN 8
// Décocher le type de capteur utilisé
//#define DHTTYPE DHT11   // DHT 11
#define DHTTYPE DHT22   // DHT 22  (AM2302)
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// Pin 1 (a gauche) +5V
// Pin 2 data DHTPIN
// Pin 4 Masse
// Mettre une ésistance de 10K entre les Pins 1 et 2

DHT dht(DHTPIN, DHTTYPE);
const int intTimePause = 3000; //Par défaut on actualise les valeures toutes les 5 secondes

//int alam = 9;
int shumi = 4;
int stem = 3;
int humi_cons = 95; // Consigne humidité
int temp_cons = 20; // Consigne temperature

void setup() {
  Serial.begin(9600);
  //Serial.println("DHTxx test!");
  pinMode (shumi,OUTPUT);
   pinMode (stem,OUTPUT);
  Serial.begin(9600);
  tft.initR(INITR_REDTAB);   // initialise le ST7735R
  tft.setRotation(45);
 tft.fillScreen(0x0000);
  dht.begin();
}

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

  //xxxxxxxxxxx Affichagexxxxxxxxxxx
  tft.setTextSize(2);
   tft.setCursor(10, 10);
  tft.setTextColor(ST7735_MAGENTA);
    tft.print("Temperature ");
  tft.setTextColor(ST7735_WHITE);
   tft.setTextSize(2);
   tft.setCursor(30, 30);
  tft.fillRect (0,30,100,20,0x0000);
    tft.print(t);
  tft.print("C");
   tft.setTextSize(2);
  tft.setTextColor(ST7735_YELLOW);
  tft.setCursor(20,60);
  tft.print("Humidite");
   tft.setCursor(30,80);
   tft.setTextColor(ST7735_CYAN);
  tft.fillRect (0,80,100,20,0x0000);
  tft.print(h);
  tft.print("%");
   tft.setTextSize(1);
  tft.setTextColor(ST7735_GREEN);
  tft.setCursor(30,110);
  tft.print("By Jojo Bricolo");
 
  //xxxxxxxxxxxAffichage  Moniteur serie ou bluetooth xxxxxxxxxxx
 
  Serial.print ("Humidite  ");
  Serial.println (h);
 
   Serial.print ("Temperature  ");
  Serial.println (t);
   Serial.println(" ");

  if (digitalRead(shumi)==HIGH)
  {
    Serial.println ("Ventilateur en marche");
  }
  else
  {
    Serial.println ("Ventilateur arret");
  }
  Serial.println(" ");
 
  if (digitalRead(stem)==HIGH)
  {
    Serial.println ("Chauffage en marche");
  }
  else
  {
    Serial.println ("Chauffage arret");
    Serial.println(" ");
  }
 
  Serial.println(" ");
 Serial.println(" ");
 
  //xxxxxx Commande des relaisxxxxx
 
      // humidité
    if (h >= (humi_cons + 2.00))// Si la mesure h est >ou+ a la consigne +2.00 allumage extracteur
  {
    digitalWrite (shumi,HIGH);   // Si la mesure h est < a la consigne +1.00 arret extracteur
  }
  else
  if (h < (humi_cons + 1))
  {
    digitalWrite (shumi,LOW);
 
  }
 
  //xxxxxx Temperaturexxxx
 
 if (t >= (temp_cons + 2)) // Si la mesure t est >ou = a la consigne +2.00 allumage chauffage
  {
    digitalWrite (stem,LOW);
  }
  else
  if (t < (temp_cons - 1)) // Si la mesure t est < a la consigne -1.00 arret chauffage
  {
    digitalWrite (stem,HIGH);
  }
  delay (intTimePause);
  }






 Comme je l'avais déjà dit, j'ai utilisé l’exemple se trouvant dans la librairie adafruit et rajouté les codes pour la gestion des relais et l'affichage.

Le paramétrage des consignes se fait de la manière suivante:

L'humidité








 

La température











J' ai également prévu l'affichage des valeurs et l'état des relais sur le port série.





Sur le typon que je mettrai plus tard, le port série a été câblé de manière a pouvoir raccorder un module de communication tel que bluetooth, RFID, etc...


Quelques images







Si cela vous intéresse, je suis en mesure de vous faire un kit ou même vous réaliser ce montage !!!
N'hésitez pas a me contacter.