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 )
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é
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
- LiquidCrystal_I2C GitHub - fdebrabander/Arduino-LiquidCrystal-I2C-library: Library for the LiquidCrystal LCD display connected to an Arduino board.
- RTClib GitHub - adafruit/RTClib: A fork of Jeelab's fantastic RTC Arduino library
- SparkFun_Si7021_Breakout_Library.h* GitHub - sparkfun/Si7021_Breakout: A breakout board for the Si7021 Temperature and Humidity sensor.
- OneButton GitHub - mathertel/OneButton: An Arduino library for using a single button for multiple purpose input.
- DallasTemperature GitHub - milesburton/Arduino-Temperature-Control-Library: Arduino Temperature Library
- OneWire GitHub - PaulStoffregen/OneWire: Library for Dallas/Maxim 1-Wire Chips
- EEPROM en standard dans l'IDE
* attention cette librairie doit être améliorée lire la modification proposée ici si elle n'a pas été encore implémentée dans le code
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)