// Inclure les bibliothèques nécessaires
#include <DHT.h> // Capteur d'humidité et de température
#include <Adafruit_Sensor.h>
#include <Adafruit_CCS811.h> // Capteur de CO2
#include <Wire.h> // Communication I2C
#include <SimpleTimer.h> // Bibliothèque pour créer des temporisations
#define DHTPIN 2 // Broche de données du capteur DHT (Connecter le capteur DHT au pin 2 de l'Arduino)
#define DHTTYPE DHT11 // Type du capteur DHT
#define RELAY_HUMIDIFIER 3 // Relais de l'humidificateur (220V) (Connecter le relais de l'humidificateur au pin 3 de l'Arduino)
#define RELAY_HEATER 4 // Relais du chauffage (220V) (Connecter le relais du chauffage au pin 4 de l'Arduino)
#define RELAY_FAN 5 // Relais du ventilateur (220V) (Connecter le relais du ventilateur au pin 5 de l'Arduino)
#define CCS811_ADDR 0x5B // Adresse du capteur de CO2
// Initialisation des capteurs
DHT dht(DHTPIN, DHTTYPE);
Adafruit_CCS811 ccs;
SimpleTimer timer;
void setup() {
Serial.begin(9600);
pinMode(RELAY_HUMIDIFIER, OUTPUT);
pinMode(RELAY_HEATER, OUTPUT);
pinMode(RELAY_FAN, OUTPUT);
dht.begin();
if(!ccs.begin()){
Serial.println("Failed to start CCS811 sensor! Please check your wiring.");
while(1);
}
// Calibrer le capteur de CO2
while(ccs.available()){
ccs.readData();
}
ccs.setTempOffset(25.0); // Calibration de la température
// Définir les temporisations pour la lecture des capteurs
timer.setInterval(10000, readSensors); // Lecture des capteurs toutes les 10 secondes
}
void loop() {
timer.run();
}
void readSensors() {
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.println(" *C");
if (ccs.available()) {
if (!ccs.readData()) {
Serial.println("Failed to read CCS811 sensor!");
return;
}
if(ccs.geteCO2() > 1000){ // Si le niveau de CO2 est élevé, déclencher le ventilateur
digitalWrite(RELAY_FAN, HIGH);
} else {
digitalWrite(RELAY_FAN, LOW);
}
}
if (h < 60) { // Si l'humidité est trop basse, activer l'humidificateur
digitalWrite(RELAY_HUMIDIFIER, HIGH);
} else {
digitalWrite(RELAY_HUMIDIFIER, LOW);
}
if (t < 20) { // Si la température est trop basse, activer le chauffage
digitalWrite(RELAY_HEATER, HIGH);
} else {
digitalWrite(RELAY_HEATER, LOW);
}
}