Ventilation Électrique Contrôlée par un Arduino

Posté le par | Réponse(s) : 9

Ventilation Électrique Contrôlée par un Arduino ou comment réguler l'humidité et la température d'une pièce à l'aide d'un Arduino, d'un capteur et d'un extracteur d'air.

Depuis quelques mois, j'enchaine des travaux de réfection dans la maison et je me suis, entre autre, attaqué à remise au propre de petite salle d'eau comprenant une douche, un lavabo et un WC, le tout dans un peu moins de 5 m². Cette pièce exigüe disposait d'une prise d'air en bas d'un côté et d'une autre en haut sur le côté opposé. L'utilisation quotidienne et la faible aération de cette salle d'eau engendrait une forte condensation sur les murs, plafond et mobilier favorisant l'apparition de cloques sous les peintures et éventuellement de la moisissure (yuck!). Bref, un environnement pas agréable.

Je n'ai pas touché au murs carrelés sains, ni au revêtement du sol mais il a fallu procéder à une remise à neuf du plafond (en plâtre + peinture). Puis, pour plus de confort et d'esthétisme, j'ai posé un faux plafond suspendu recouvert d'un lambris PVC dans lequel j'ai intégré un éclairage encastré (spots LEDs).  Ça claque !

La salle d'eau désormais rajeunie, plus lumineuse et agréable à vivre méritait donc qu'on s'occupe de son air ambiant. Le but était d'extraire rapidement l'air au niveau de la prise d'air haute, renouvelé par de l'air entrant par la prise d'air basse. En fouillant les solutions proposées par les magasins de bricolage, j'ai pu trouver différents type d'extracteurs : aérateur simple, aérateur programmable,aérateur avec détecteur de présence , aérateur avec capteur d'humidité intégré. Je ne voulais pas d'aérateur simple branché sur l'interrupteur de l'éclairage car le temps d'extraction aurait été trop court (idem pour l'aérateur programmable). Il me fallait donc un aérateur avec capteur d'humidité, de préférence silencieux et précis. Malheureusement dans ce cas de figure les prix m'avaient rebuté.

J'ai donc décidé, en bon geek que je suis, de faire moi-même le système d'extraction, tout d'abord pour un prix correct et surtout pour mettre en pratique ce que j'ai appris lors de l’initiation à l'Arduino suivie à l'ACoLab de Clermont-Ferrand, une sorte de challenge personnel pour un résultat concret, pratique et utile.

Note 1 : je vais ici vous présenter comment réguler l'humidité et la température d'une pièce. Dans mon cas, je n'utilise pas la régulation de température dans le but de contrôler un chauffage électrique.
Note 2 : je pars du principe que vous êtes familiarisé avec le fonctionnement d'un Arduino et que vous avez quelques notions d'électricité/électronique de base.

Le matériel

Ne disposant pas de tous les composants, j'ai dû faire des emplettes sur le Net. On aura besoin de :

Soit 70€ sans l'afficheur TFT.

Le principe

L'Arduino (l’élément central) va périodiquement prendre les mesures relevées par le capteur (humidité et température). Le programme écrit dans l'Arduino contient des consignes. En fonction des mesures relevées, l'Arduino va commander via le relais la mise en route ou non de l'extracteur d'air et/ou du chauffage.

Le schéma du montage

En regardant le schéma de près, on observe que 3 systèmes distincts sont reliés à l'Arduino :

  • le capteur hygro/température, protégé par une résistance permettant un transfert stable des données (fil jaune)
  • un module relais qui prend ses directives par le fil vert et qui ouvre ou ferme le circuit de sortie.
  • un afficheur LCD dont l'affichage est contrôlé par l'Arduino

Note : je n'utilise pas la fonction de régulation de température par chauffage électrique. Si vous souhaitez mettre en place cette fonction, il suffit simplement de relier le pin IN2 du relais au pin 3 de l'Arduino, de brancher le radiateur sur le relais et de dé-commenter les lignes du code ci-dessous.

Pour le fonctionnement de cet écosystème, l'Arduino a besoin d'un programme qui va comprendre plusieurs parties :

  • il faut d'abord importer des librairies Adafruit pour lui permettre de reconnaitre le matériel (à mettre dans le dossier arduino/libraries, puis les importer via l'interface Arduino) :
    • la librairie DHT22, téléchargeable sur le Github Adafruit.
    • la librairie Adafruit_GFX (librairie pour l'affichage graphique avec fonctions dessin : lignes, cercles, etc..)
    • la librairie Adafruit_ST7735 (nécessaire pour faire la liaison entre la librairie graphique précédente et le matériel : afficheur et utilisation du slot SD - une sorte de driver)
  • ensuite on écrit le code du programme :
    • on déclare les composants non reconnus nativement par l'Arduino et/ou nécessaires au fonctionnement du programme (DHT.h, Adafruit_GFX.h, Adafruit_ST7735.h, SPI.h, Wire.h),
    • on définit les assignations des pins de l'Arduino que l'on va utiliser,
    • on définit les consignes liées aux mesures fournies par le capteur,
    • on déclare la fonction d'initialisation setup() qui est exécutée une seule fois au démarrage,
    • on déclare la fonction la fonction loop() "boucle sans fin" qui est exécutée en boucle une fois que la fonction setup() a été exécutée une fois.
  • on téléverse le code dans l'Arduino.

J'ai fait en sorte de commenter en détail le code, j'espère qu'il est assez clair. Il fonctionne correctement mais il est certainement perfectible, aussi je compte sur vous pour me corriger 😉 (le télécharger ici) :

/*
Hygrométrie et température
Contrôle de ventilation/chauffage (fonction thermostat)
Librairies à télécharger et à décompresser dans le répertoire arduino/libraries : 
*Librairie Adafruit pour le DHT22 https://github.com/adafruit/DHT-sensor-library
*Librairie Adafruit pour l'afficheur TFT 1.8" https://github.com/adafruit/Adafruit-ST7735-Library/archive/master.zip
*Librairie Adafruit pour la gestion des opérations graphiques https://github.com/adafruit/Adafruit-GFX-Library/archive/master.zip
Pour utiliser la fonction "radiateur" (second relai IN2, pin Arduino #3), décommentez toutes les lignes correspondantes pour activer la fonction.
Écrit par Ookpik (www.epingle.info) - 2016-02-06
*/

#include "DHT.h"
#include <Adafruit_GFX.h>    // Bibliothèque graphique de base
#include <Adafruit_ST7735.h> // bibliothèque spécifique à la puce ST7735
#include <SPI.h>
#include "Wire.h"
// Définition des pin SainSmart
#define sclk 13 // SainSmart: SCL
#define mosi 11 // SainSmart: SDA
#define cs 10   // SainSmart: CS
#define dc 9    // SainSmart: RS/DC
#define rst 8   // SainSmart: RES // peut être connecté a la RAZ arduino
Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, rst);

// Définition des pin DHT22
// Pin 1 (a gauche) +5V
// Pin 2 data DHTPIN -> pin 4 Arduino
// Placer une résistance de 10K entre les Pins 1 et 2
// Pin 4 Masse
#define DHTPIN 4
#define DHTTYPE DHT22 // DHT 22 (AM2302)
DHT dht(DHTPIN, DHTTYPE);

// Définition des consignes :
const int intTimePause = 3000; // Actualisation des valeurs toutes les 3 secondes
int relai_humi = 7; // Relier le pin IN1 du relai au pin 7 de l'Arduino
int cons_humi = 53; // Consigne d'humidité
int relai_temp = 3; // Si installation d'un radiateur, relier le pin IN2 du relai au pin 3 de l'Arduino
int cons_temp = 20; // Consigne température

void setup(void) {
 Serial.begin(9600);
 Serial.print("Hello! ST7735 TFT Test");
 Serial.println("DHTxx test!");
 pinMode (relai_humi,OUTPUT);
 //pinMode (relai_temp,OUTPUT); // À décommenter pour activer le relai radiateur
 
 Serial.begin(9600);
 // Utilisez ce code pour un 1.8" TFT
 tft.initR(INITR_BLACKTAB); // initialise le ST7735S chip, black tab
 // Utilisez ce code pour un 1.44" TFT
 //tft.initR(INITR_144GREENTAB); // initialise le ST7735S chip, black tab
 Serial.println("Initialized");
 tft.setRotation(45); 
 uint16_t time = millis();
 tft.fillScreen(ST7735_BLACK);

 dht.begin();
}

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

 // Paramètres de l'affichage
 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("Salle de bain");
 
 // Affichage sur moniteur série Arduino ou par BlueTooth
 Serial.print ("Humidité : ");
 Serial.println (h);

 Serial.print ("Température : ");
 Serial.println (t);
 Serial.println(" ");

 if (digitalRead(relai_humi)==HIGH)
 {
 Serial.println ("Ventilateur en marche");
 }
 else
 {
 Serial.println ("Ventilateur arret");
 }
 Serial.println(" ");

 if (digitalRead(relai_temp)==HIGH)
 {
 Serial.println ("Chauffage en marche");
 }
 else
 {
 Serial.println ("Chauffage arret");
 Serial.println(" ");
 }

 Serial.println(" ");
 Serial.println(" ");

 // Commande des relais
 // Humidité : mise en marche/arrêt de la ventilation
 if (h >= (cons_humi + 2.00)) // Si la mesure h est > ou + à la consigne +2.00 : allumage extracteur
 {
 digitalWrite (relai_humi,LOW); // Si la mesure h est < à la consigne +1.00 : arrêt extracteur
 }
 else
 if (h < (cons_humi - 1))
 {
 digitalWrite (relai_humi,HIGH);
 }
 delay (intTimePause);

 // Température : mise en marche/arrêt du radiateur // Décommenter toutes les lignes ci dessous
 //if (t >= (cons_temp + 2)) // Si la mesure t est > ou = à la consigne +2.00 : allumage chauffage
 //{
 // digitalWrite (relai_temp,LOW);
 //}
 //else
 //if (t < (cons_temp - 1)) // Si la mesure t est < à la consigne -1.00 : arrêt chauffage
 //{
 // digitalWrite (relai_temp,HIGH);
 //}
 //delay (intTimePause);
 //}
}

Mise en place

Je ne souhaitais pas placer un boitier avec les différents composants dans la salle d'eau, aussi j'ai juste placé le capteur DHT22 au plafond et tiré 3 fils jusqu'à l'Arduino à l'extérieur de la pièce.

DHT22 / HBH

Le capteur DHT22 et l'extracteur

J'ai pris ce que j'avais sous la main : un boitier de jeu vidéo, chaque élément est boulonné :

Montage Arduino / DHT22 / relais

Montage Arduino / DHT22 / relais

Le montage final deux semaines après, avec l'afficheur :

Montage Arduino / DHT22 / relais / TFT1.8

Montage Arduino / DHT22 / relais / TFT 1.8

Le boitier (provisoire en attendant de faire une jolie boite) :

Le boitier placé

Le boitier placé

Ce n'est pas très joli pour le moment, mais comme je dois aussi rénover la pièce mitoyenne, je penserai à mieux intégrer le boitier proprement et esthétiquement.

Retour sur le code et sur le montage

Si, comme moi, vous n'êtes pas très sûr de vous avec tous ces modules électroniques, je vous conseille de faire joujou avec chaque module séparément pour comprendre le rapport code/matériel. En effet, je recommande de faire un montage simple en vous inspirant des tutoriaux Adafruit et autres :

D'autres sources :

Je me suis servi principalement de tous les codes proposés par tous ces sites pour les comprendre et les adapter à mon projet. Le plus compliqué (pour moi) a été la mise en place des conditions if/else. Ce n'est qu'à la fin que j'ai découvert le blog à Jojo, ce qui m'a permis de corriger tout un tas de coquilles (avec un C++). Merci à lui 🙂

Bilan de l'expérience

Après avoir calculé le brassage d'air de l'extracteur, je m'étais mis en tête qu'au bout d'une 10aine de minutes l'air aurait été totalement renouvelé. En fait, l'hygrométrie de la salle (L 170 x l 130 x H 210 soit ~4,6m³) passe de 99,9% à 50% en une heure environ porte fermée, ce qui est finalement très bien : plus de condensation, air quasiment sec.

Il a fallu tâtonner pour peaufiner la consigne de déclenchement de l'extracteur. Là aussi j'ai été très optimiste et, au début, j'avais inscrit une consigne de déclenchement à 40%. Cela marchait très bien les premiers jours mais c'était sans compter sur une période où le temps était brouillardeux (87% d'humidité à l'extérieur) ce qui a eu pour conséquence de faire tourner la ventilation continuellement. En me basant sur les recommandations d'humidité relative idéale que l'on peut trouver en ligne, j'ai placé finalement la consigne à 53% d'humidité avec une marge de +1% au déclenchement et -3% à l'arrêt (ce qui évite un déclenchement trop fréquent en cas de taux flirtant avec la consigne.

Ce projet fonctionne 24/7 depuis début janvier et c'est franchement stable malgré le 1,5 mètre de fils séparant le DHT22 et l'Arduino (peur de la perte de signal), la salle d'eau est désormais agréable et moderne (et maintenant je me lave et je suis propre...).

Je me suis franchement éclaté à monter tous ces petits modules et rendre vivant concrètement, j'entends utile dans la vie de tous les jours, mon petit Arduino UNO. La prochaine étage sera de récupérer cet Arduino, en créant un PCB et en programmant un microprocesseur ? Il y a encore beaucoup à apprendre 🙂

Comme d'habitude si une coquille s'est glissée dans ce billet, n'hésitez pas à me le dire.

 

 

Catégorie : Arduino, Bricolage | Tags : , , ,

Licence Creative Commons
Cet article, sauf mention contraire expresse, est publié sous licence Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported Licence.

Vous avez aimé cet article ? Alors partagez-le avec vos amis en cliquant sur les boutons ci-dessous :
Google Plus Twitter Facebook Linkedin Framasphere email Flattr !

9 commentaires sur “Ventilation Électrique Contrôlée par un Arduino

  1. Bonjour, bravo pour votre montage !

    Coté ludique mis à part, l'achat d'une bouche d'extraction hygro-réglable n'aurait-il pas été plus rentable ? Ces produits ne consomment pas d'électricité alors que le montage arduino, oui...

    • Bonjour François et merci d'avoir lu ce billet et réagit.
      J'avoue que je ne m'était pas trop soucié de la consommation électrique lorsque j'ai commencé ce projet. La question est en tout cas très pertinente.
      Je viens de regarder sur le site d'une enseigne de grande distribution de bricolage, les prix d'une bouche d'extraction hygroréglable commencent à 55,99€ et s'envolent progressivement en fonction du degré de finition, de débit d'air et de niveau sonore. Si on retient le modèle à 69,99€ (pour comparer à budget ~égal), les caractéristiques sont les suivantes :

    • Niveau sonore en fonctionnement : Plus de 30dB(A)
    • Débit d'air (en m³/h) : 45m³/h
    • Consommation (en W) : 6/16
    • Mes connaissance en électricité sont les bases (niveau seconde) donc je peux me tromper 😉
      L'aérateur que j'utilise fonctionne en 220V et convertit la tension en 12V pour le moteur. Il es donné pour consommer 5W, pour 102m³/h avec un niveau sonore en fonctionnement de 26dB(A)
      L'Arduino UNO est alimenté par adaptateur 9V / 660mA soit 5.94W en utilisation maximale, ce qui n'est pas le cas car :

    • consommation DHT22 : 5V / 2.5mA / 0.0125W
    • consommation relais : 5V / 25mA / 0.125W
    • consommation LCD : 5V / 50mA / 0.25W
    • D'après des mesures prises par un blogueur, sur un Arduino Uno SMD (alimenté par le port USB) exécutant un code et alimentant une LED, il a mesuré 2.39V / 127mA / 304mW

      Sans tenir compte des mesures prises par le blogueur, je déduis que mon dispositif consomme 5.94W au repos et 10.94W extracteur en route. Même si mes chiffres sont fortement gonflés, mon dispositif consomme tout de même moins que l'extracteur hygroréglable donné pour 6W au repos et 16W en fonctionnement.

      Si je tiens compte de tous les travaux effectués, 2 spots LED de 5W + ventilation 6/11W restent moins gourmands que l'éclairage que j'avais auparavant. Je pense être gagnant mais si je me trompe il faut me corriger 😉

      • Bonjour,
        Bravo pour la réalisation et surtout merci pour le partage.
        J'envisage de faire un système sensiblement identique chez moi (avec un nodemcu à la place de l'arduino) .

        Pour limiter la conso j'envisage de passer le nodemcu en mode deepsleep à la fin du cycle de "purge" et lancer un redémarrage sur détection de l'interupteur lumiere de la salle de bain avec un maintien d'un certain temps pour voir si l'humidité monte ou pas. J'imagine que tu dois pouvoir faire pareil avec l'arduino.

  2. bonjour
    Merci pour ce retour très clair et complet que je viens de découvrir.
    J'ai une idée similaire mais pour une cave à 3 pièces dont la derniere ne bénéficie pas d'une ventilation naturelle.
    Je pensais installer une VMC simple flux pour créer un flux d'air et ainsi évacuer l'air humide. Concernant le taux d'humidité à 53% je le trouve assez pertinent. Pour ma réalisation, je pensais à une valeur proche initialement de 56%. Cette valeur, je la tiens après avoir visiter en Bulgarie une église de 400 ans dont les peintures intérieures ont été retrouvées intactes grâce en partie à ce taux d'humidité.
    Le montage et les modules que vous utilisez sont également ceux que j'avais en grande partie penser à utiliser. Pour la température, j'imaginais la réguler afin de pouvoir assainir ma cave avec une température constante aux alentours de 20°C pour y conserver du vin 😉

  3. Bonjour, je tenais à vous remercier pour le temps et le sérieux passé à rédiger cet article.
    Je rencontre le même problème et j'ai immédiatement envisagé une solution Arduino.
    Grâce à vous, je vais gagner un temps considérable!
    Un grand merci

    • Bonjour,
      Le raccordement du fil électrique au relais est très simple, le relais sert d'interrupteur (circuit ouvert/fermé) sur un seul fil : il suffit de dénuder la gaine principale (blanche chez moi) sur 4/5 cm, j'ai laissé les deux extrémités du fil intacts et non dénudés (l'un allant vers la prise électrique, l'autre vers le ventilateur). Sur la partie dénudée, je conserve intact un fil (le bleu) et je sectionne le marron pour enficher chaque partie dans le relais. Exemple en image :

      En fait rien de sorcier 😉

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *