Merci pour vos interventions tres instructif J-M-L,
finalement il faut que je finisse ce projet, j'ai donc dessiner le shemas sur Fritzing et voulais le partager, maintenant il faut passer a l'action. ![]()
J'ai modifié et commenté le sketch car il y à des morceaux que je ne comprend pas, remplacé les pin 8 et 9 du module relais par les pin 18 et 19.
Ce qui m'embête aussi c'est que je n'ai pas de rétroéclairage lcd, il s'allume et s'éteint 1 seconde après appuis sur Reset ?
Voici le plan du montage et le code modifier
#include <Wire.h> // Inclure les librairies
#include <DFR_Key.h>
#include <DHT.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7); // 0.27 est l’adresse du bus I2C
const int humidityRelay = 18; // PIN 18 pour (Humidificateur) ← * Const. déclaré” 1 x ici *
const int heaterRelay = 19; // PIN 19 pour (Température) ←*Remplacement des num pin*
const int DHTPIN = 2; // PIN 2 pour le capteur
// Démarrage des valeurs après le démarrage, on peut les changer
int temp = 12; // Température souhaitée
int hum = 80; // Humidité souhaitée
int readkey;
long int lastmillis;
long int hours;
long int minutes;
long int seconds;
char l2c1;
char l2c2;
char l2c3;
DHT dht (DHTPIN, DHT22); // Type de capteur DHT22 (AM2023)
const int humidityRelay = 18; // ← * Je re declare les Const. est ce utile 2x *
const int heaterRelay = 19; // ← * Ou je supprime, celui-ci ou celui au dessus ? *
DFR_Key keypad(0); // Utilise 0 pour le tableau DFRobot et 1 pour le tableau Cytron (?)
int localKey = 0;
String keyString = "";
int lcd_key = 0;
int adc_key_in = 0;
// Utilisation de (const) au lieu de (#define)
const byte btnRIGHT = 0;
const byte btnUP = 1;
const byte btnDOWN = 2;
const byte btnLEFT = 3;
const byte btnSELECT = 4;
const byte btnNONE = 5;
int read_LCD_buttons() {
adc_key_in = analogRead(0);
if (adc_key_in > 1000) return btnNONE;
if (adc_key_in < 50) return btnRIGHT;
if (adc_key_in < 150) return btnUP;
if (adc_key_in < 300) return btnDOWN;
if (adc_key_in < 460) return btnLEFT;
if (adc_key_in < 690) return btnSELECT;
}
void setup()
{
pinMode(humidityRelay, OUTPUT);
pinMode(heaterRelay, OUTPUT);
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Keith control");
lcd.setCursor(0, 1);
lcd.print("Select instr");
delay(2500);
Serial.begin(9600);
dht.begin();
delay(1000);
lcd.clear();
// Taux d'échantillonnage (par défaut 10ms)
keypad.setRate(10);
digitalWrite(humidityRelay, HIGH); // Relais Humidité actif
digitalWrite(heaterRelay, HIGH); // Relais Température actif
}
void loop()
{
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(t) || isnan(h))
{ // contrôle du fonctionnement du capteur
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Capteur N/C!!");
delay(10000);
}
else
{
lcd_key = read_LCD_buttons(); // Affichage d’utilisation des boutons pour les réglages
switch (lcd_key) {
case btnLEFT:
{
temp = temp + 1; // Bouton LEFT augmente la température de +1 par appuie
break;
}
case btnRIGHT:
{
temp = temp - 1; // Bouton RIGHT diminue la température de -1 par appuie
break;
}
case btnUP:
{
hum = hum + 1; // Bouton UP augmente l’humidité de +1 par appuie
break;
}
case btnDOWN:
{
hum = hum - 1; // Bouton DOWN diminue l’humidité de -1 par appuie
break;
}
case btnSELECT: // Bouton SELECT pour la sélection
{
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Hum Up/Down +-1%");
lcd.setCursor(0, 1);
lcd.print("Temp L/R +-1");
lcd.print((char)223);
lcd.print("C");
delay (5000);
break;
}
}
lcd.setCursor(0, 0);
lcd.print("Hum: ");
lcd.print(h);
lcd.print("%");
lcd.print("(");
lcd.print(hum);
lcd.print("%)");
lcd.setCursor(0, 1);
lcd.print("Tem: ");
lcd.print(t);
lcd.print((char)223);
lcd.print("(");
lcd.print(temp);
lcd.print((char)223);
lcd.print(")");
// Je ne comprend pas trop la méthode à utilisé ici pour avoir le relais humidité qui s’active vers 75% et s’arrête vers + / - 85% et le relais température qui s’active vers 14℃ et s’arrête vers 12℃ ou 10℃ grand max ?
int H = 75 + 10; // Pour éviter les démarrages fréquents H = 75 + 10%
if (h < 85) digitalWrite(humidityRelay, LOW); // Si humidité inférieur à 85 Relais1 Fermé
else if (h >= H) digitalWrite(humidityRelay, HIGH); // Sinon si humidité supérieure a
H =75+10 relais1 ouvert
int T = 12 + 2 ; // Ajout Hystérésie de 2 - Température=12+2
if (t < 12 )
digitalWrite(heaterRelay, LOW); // Si température intérieure a 12 Relais2 Fermé
else if (t >= T)
digitalWrite(heaterRelay, HIGH); // Sinon si température supérieur a T Relais2 Ouvert
}
}
Merci encore pour les conseils, cordialement.

