Bonjour à tous,
Après avoir réalisé mon premier projet de contrôle d’humidité grâce à Infobarquee (merci encore pour son soutien),
je me lance cette fois-ci pour mon 2ème et Mega Projet, la gestion de température et d’humidité.
Le Projet : Fabriqué un contrôleur de température et d’humidité avec possibilité de changé les valeurs de temp. et d’hum. selon nos besoins, le tout dans une boîte de dérivation ou autres.
Ce projet (si réalisé) peut être utilisé pour Cave à vin, Reptile, Incubateur, Couveuse…
S’il y à des personnes amateurs comme moi intéressées on peut s’entraider.
Matériels:
-
- Arduino Uno, Mega …
-
- Capteur DHT22
-
- Relais 2 Canaux - 5V
-
- DFRobot LCD Keypad Shield (Bouclier 1602)
-
- Module I2C
-
- Screw Shield (bouclier Uno avec bornier a vis)
Le Sketch : (avec des erreurs car emprunter chez 2 braves personnes)
#include <LiquidCrystal.h>
#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 relay1Pin = 8; // PIN 8 pour le relais (humidité)
const int relay2Pin = 9; // PIN 9 pour le relais (température)
const int DHTPIN = D2; // PIN D2 pour le capteur Dht22
// Démarrage des valeurs après le démarrage, on peut les changer
int temp = 12; // Souhaite avoir 12℃
int hum = 80; // Et 80% d'humidité
int readkey;
long int lastmillis;
long int hours;
long int minutes;
long int seconds;
char l2c1;
char l2c2;
char l2c3;
DHT dht (DHTPIN, DHT22); // Pour capteur Dht22
const int humidityRelay1 = 8;
const int heaterRelay2= 9;
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // ← Ici pas sûr car utilise le module I2C ?
DFR_Key keypad;
int localKey = 0;
String keyString = "";
int lcd_key = 0;
int adc_key_in = 0;
#define btnRIGHT 0 // Je ne sais pas si je dois définir les boutons ?
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define 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(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(“KeithControl");
lcd.setCursor(0, 1);
lcd.print("Instr on Select");
delay(2500);
Serial.begin(9600);
dht.begin();
delay(1000);
lcd.clear();
keypad.setRate(10); // Taux d'échantillonnage (par défaut 10 ms)
digitalWrite(relay1, HIGH);
digitalWrite(relay2, HIGH);
}
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 NC!!");
delay(10000);
} else
{
// Possibilité de changer les valeurs après chaque pression sur la touche, la valeur par défaut est de 1'C pour la température et 1% d'humidité
lcd_key = read_LCD_buttons();
switch (lcd_key)
{
case btnLEFT:{
temp = temp +1;
break;
}
case btnRIGHT:{
temp = temp - 1;
break;
}
case btnUP:{
hum = hum + 1;
break;
}
case btnDOWN:{
hum = hum - 1;
break;
}
case btnSELECT:{
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(")");
// Ajout hysterie afin que l'humidificateur ne s'allume et ne s'éteigne pas constamment (l'humidificateur dépassera la limite supérieure de 10%
int H = 75 + 10;
if(h < 85)
digitalWrite(relay1, LOW);
else if (h >= H)
digitalWrite(relay1, HIGH);
//* A UTILISÉ SI ON VEUT DES VALEURS PRÉCISES
if(h < hum )
digitalWrite(relay1, LOW);
else
digitalWrite(relay1, HIGH); *//
int T = 12 + 2
if(t < 12 )
digitalWrite(relay2, LOW);
else if (t >= T)
digitalWrite(relay2, HIGH);
}
}
Voilà merci d’avance pour le passage la lecture les remarques, conseils tout est le bienvenu, sincère salutations.