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

Bonjour à tous

j'ai vu un nombre important de questions sur le pilotage d'un système de contrôle de température et humidité alors j'ai nettoyé un peu un vieux code que je vous livre en pièce jointe.

La partie régulation est complètement simplifiée dans ce code pour que chacun puisse l'adapter à ses besoins. (la fonction regulation() a besoin d'être écrite en fonction de vos besoins. Je donne juste un petit exemple simple de code de ce côté là qui dit si la T° est en dessous de la consigne alors chauffer, si T° OK on ne fait rien, si trop chaud, déclencher la climatisation. Idem pour l'humidité, on déclenche si l'humidité en dessous de la consigne, je ne traite pas le cas 'trop humide' - à vous de voir ce que vous voulez faire dans ce cas :slight_smile: )

MODE DE FONCTIONNEMENT
l'idée est assez simple: le montage dispose de capteurs de t° et d'humidité et doit piloter des sorties. il y a 3 sorties tout ou rien qui pourraient être reliées simplement à des relais (représentées à l'affichage sous la forme de C pour Chaud (Chauffage), F pour Froid (climatiseur), H pour Humidificateur) et une sortie de type PWM (représentée à l'affichage par V pour Ventilateur et qui pilote en analogWrite() une sortie PWM).

Il y a différents modes possibles que l'utilisateur va choisir. Vous passez de mode en mode en appuyant sur le bouton des Modes. un double click sur le bouton des modes "éteint" le système --> LCD éteint, relais éteints plus de régulation - mais l'arduino n'est pas éteint ni en veille. un simple click sur le bouton des modes revient en mode automatique.

Il y a un mode automatique (représenté par "A" à l'affichage), où vous pouvez dans la fonction void regulation() établir votre stratégie de gestion des systèmes de régulation et un mode manuel (représenté par "M" à l'affichage) où vous pouvez vous même déclencher par 4 boutons dédiés les relais du Chauffage ("C"), Climatiseur ("F"), Humidicateur ("H") et le ventilateur ("V") qui est en PWM.

Enfin il y a un mode Programme (représenté par "P" à l'affichage), où vous pouvez régler à l'aide d'un potentiomètre les consignes pour la T°, l'humidité. Pour ce faire vous tenez appuyé le bouton correspondant (Chaud ou Froid pour la consigne de T° et Humidité pour la consigne d'humidité) et bougez le potentiomètre pour faire varier la consigne (qui sera affichée sur le LCD).

Le PWM du ventilateur est réglable manuellement dans tous les modes et n'a pas de consigne particulière. Vous tenez enfoncé le bouton du Ventilateur et bougez le potentiomètre. ça calcule une valeur PWM entre 0 et 255 sur toute la course de votre potentiomètre et affiche à l'écran un petit symbole à côté de la consigne de température pour montrer à quelle vitesse est réglée cette sortie. C'est un petit 'v' avec des pointillés au dessus. pas de pointillés => PWM à 0 et 5 pointillés => PWM à 255)

Quand on sort du mode "Programme", les consignes sont stockées en EEPROM pour le prochain démarrage.

Il y a une RTC dans le montage si votre régulation automatique devait tenir compte d'un horaire particulier, mais il n'y a pas de mode associé à une gestion temporelle - je laisse cela à votre sagacité :slight_smile:

L'écran du LCD est configuré pour tenir sur une 2 Lignes de 16 caractères

Le montage ressemble à cela:

COMPOSANTS UTILISES

  • 5 boutons momentannés
  • un LCD 2 lignes 16 caractères
  • une horloge DS3231
  • un DS18820 avec la résistance de 4.7KΩ qui va bien pour la température (le code gère plusieurs DS18820)
  • un Si7021 en I2C pour une l'humidité (et une autre mesure de t°). (préféré au DHT22 car plus rapide)
  • un "te291 level shifter" = adaptateur de tension I2C car le Si7021 ne fonctionne qu'en 3.3V
  • un potentiomètre à glissière ou rotatif
  • des relais “qui vont bien”

LIBRAIRIES UTILISEES

CABLAGE

  • boutons en INPUT_PULLUP donc 1 côté vers la pin Arduino, un côté vers GND
  • RTC en I2C sous 5V (SDA, SCL, 5V, GND)
  • LCD en I2C sous 5V (SDA, SCL, 5V, GND)
  • Si7021 en I2C sous 3.3 V donc alimentation en 3.3V et usage du te291 level shifter pour transformer SDA et SCL de 5V en 3.3V
  • Potentiomètre en câblage standard (Vcc 5V, GND et broche mesure vers Pin Arduino)

PINS UTILISEES

  • 0,1 = Rx,Tx - port Série pour communication USB
  • 2 = laissée libre si besoin d'interruption
  • 3 = pour le bus 1 wire avec une résistance de 4.7KΩ entre 5V et pin 3
  • 4 = pin relai Chauffage (génération de chaud)
  • 5 = pin relai Humidificateur
  • 6 = pin relai Ventilateur (PWM utilsé pour le pilotage de cette pin)
  • 7 = pin relai Climatiseur (génération de froid)
  • 8 = pin bouton MODE
  • 9 = pin bouton Chauffage
  • 10 = pin bouton Humidificateur
  • 11 = pin bouton Ventilateur
  • 12 = pin bouton Climatiseur
  • 13 = LED_BUILTIN affichage de l'état du système (éteinte quand système éteint)
  • A0 = pin pour le potentiomètre de consigne
  • A1
  • A2
  • A3
  • SDA, SCL = I2C communication (UNO = A4 (SDA) + A5 (SCL) / MEGA = 20 (SDA) + 21 (SCL))

LCD_RTC_TEMP_HUM_VENT.ino (25.8 KB)

2 Likes

Bonjour J-M-L,

Quel magnifiques Tutoriel, les possibilités d'affichages et de contrôles sont impressionnant.
Vous êtes un Génie J-M-L, vivement le matériels impatient de le réaliser, en effet ce projet convient à tout ce qui à besoin de réguler la température et humidité.

Merci encore pour le partage, cordialement.

impressionnant ! merci pour ce modèle de code, moi qui suis en plein dans ma régulation de chauffage, ça me donne quelques idées pour clarifier mon code :slight_smile:

Un gros bravo pour le code..

Ce sera un bonne source d'inspiration pour beaucoup dont moi...

merci :slight_smile:

c'est pas super optimisé, mais j'ai pris le temps de rajouter des commentaires dans le code, donc ça doit se lire à peu près correctement

Je propose qu'on décerne le "setup d'or" à JML
Là c'est trop fort !
Merci et que rajouter ?
Encore merci.

68tjs:
que rajouter ?

une carte SD et un enregistrement des valeurs avec un pas de temps réglable ? une détection d'erreurs avec enregistrement sur la même carte SD ?

je sors ----->[ ]

bricofoy:
une carte SD et un enregistrement des valeurs avec un pas de temps réglable ? une détection d'erreurs avec enregistrement sur la même carte SD ?

je sors ----->[ ]

bonne idée, j'attends votre code :slight_smile:

thermalduino/thermalduino.ino at master · bricofoy/thermalduino · GitHub voila :stuck_out_tongue:
il manque juste deux ou trois détails :stuck_out_tongue:

je suis moi aussi sur des projet d’horloge avec affichage de la température et de l’humidité ... mais la qualité de votre code est impressionnante ... bravo

Bonjour/Bonsoir JML,

Ça y est je reçois mes articles petit à petit, me manque le DS3231 et le Si7021 (superbe découverte de capteur) grâce à vous merci infiniment JML.

Trop hâte de pouvoir réalisé ce super projet "J-M-L Contrôle " Merci vraiment pour ce service énorme pour nous les amateurs dans le monde Arduino.

J'en ai fait des recherches sur le net, Contrôleur, Thermostat, PID... et sur toute la planète :slight_smile: mais jamais vu un aussi beau travail, aussi net et précis avec autant de possibilité pour le contrôle de température et, d'humidité.

Le tout avec ventilation contrôlé, sans oublier la possibilité de programmation, entre mode manuel, auto... et tout ça sur un lcd 1602 :slight_smile: Trop trop fort.
Vous êtes un Génie, tout mes respects pour JML. (Karma, matin midi soir)

À bientôt avec le projet "J-M-L Contrôle " fini, photos partagé.
I love you JML, très bonnes continuations

:blush: 8) :smiley:

Bonsoir , super tuto merci J-M-L

ARTNOW:
Bonsoir , super tuto merci J-M-L

de rien - avec plaisir

bonsoir J-M-L je fais en ce moment un croquis pour gérer une cave à vins avec 5 sondes DS18B20.
1 à la cave
1 dans le grenier ou se trouve la clim
1 dans le caisson de la clim ( qui ne doit jamais être en négatif).
1 dans la gaine d'admission de l'air extérieur
1 dans le coffret électronique ( surveiller s'il n'y a pas de surchauffe due au transfo qui m'a déjà fait des T° élevées)

Mon problème est la variation d'environ 0.25°C dans certaines mesures alors que la variation n'est pas aussi rapide.

Quelle est la lecture de tes sondes. Moi je récupère le 1/10eme).

Merci de ton aide

Mon problème est la variation d'environ 0.25°C dans certaines mesures alors que la variation n'est pas aussi rapide.

la spec parle de ±0.5°C Accuracy from -10°C to +85°C ils utilisent bien le mot accuracy, pas precision.

cf l'article wikipedia

donc dans l'absolu ça ne me choque pas - perso j'arrondis simplement en degrés... (parce que les composants que vous achetez en chine à quelques dizaines de centimes, port inclus, sont souvent les rebus lors du tri au niveau qualité - ceux qui sont les moins stables)

Re bonjour J-M-L lorsque je compile ton croquis à la ligne:
LiquidCrystal_I2C lcd(0x20, 4, 5, 6, 0, 1, 2, 3, 7, NEGATIVE);
j'ai le message suivant:
'NEGATIVE' was not declared in this scope
ou est l'erreur?.
Merci de ton aide.

Je n’ai pas cette ligne dans mon code....c’est vous qui l’avez rajoutée non?

Il se peut que vous ayez besoin d’ une autre librairie LiquidCrystal_I2C Que celle que j’utilise pour votre afficheur, moi je n’ai pas toutes ces valeurs à passer (il existe plusieurs librairies sous ce nom) assurez vous de compiler avec la bonne

Bizarre j'ai téléchargé une première fois LCD_RTC_HUM_VENT.ino et j'ai eu cette erreur.
Je viens de recharger à nouveau et là il me manque la librairie SparkFun_Si7021_Breakout_Library.h que je vais chargé. bizarre.;

je viens de cocher ton lien: GitHub - sparkfun/Si7021_Breakout: A breakout board for the Si7021 Temperature and Humidity sensor.
j'ai téléchargé et ca me dit à la compil:
C:\Users\airpopcie\Downloads\LCD_RTC_TEMP_HUM_VENT\LCD_RTC_TEMP_HUM_VENT.ino:390:93: fatal error: SparkFun_Si7021_Breakout_Library.h: No such file or directory

ce n'est donc pas la bonne.
As tu une solution?.

Es ce que le DTH22 sont plus précis que les DS18B20 de plus je pourrais récupérer le taux d'humidité de ma cave.
Merci de me donner le lien pour la bonne library..
Bonne arduinade.