#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// Pin definitions
const int gasSensorPin = A0; // Capteur de gaz MQ2 connecté à l'entrée analogique A0
const int ldrSensorPin = A1; // Capteur LDR connecté à l'entrée analogique A1
const int triggerPin = 8; // Broche de déclenchement du capteur HC-SR04
const int echoPin = 9; // Broche d'écho du capteur HC-SR04
const int redLedPin = 12; // Broche de la LED rouge
const int greenLedPin = 10; // Broche de la LED verte
const int blueLedPin = 11; // Broche de la LED bleue
const int buzzerPin = 7; // Broche du buzzer
const int DHTPin = 2; // Broche du capteur DHT22
// Seuils des capteurs
const int gasThreshold = 450;
const int ldrThreshold = 400;
const int distanceThreshold = 15;
// Variables pour stocker les valeurs des capteurs
int gasValue = 0;
int ldrValue = 0;
int distance = 0;
// Initialisation de l'écran LCD I2C
LiquidCrystal_I2C lcd(0x27, 16, 2); // Adresse I2C de l'écran LCD
// Initialisation du capteur DHT22
#define DHTTYPE DHT22 // Type de capteur DHT
DHT dht(DHTPin, DHTTYPE); // Initialisation du capteur DHT
void setup() {
// Initialisation des broches
pinMode(gasSensorPin, INPUT);
pinMode(ldrSensorPin, INPUT);
pinMode(triggerPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(redLedPin, OUTPUT);
pinMode(greenLedPin, OUTPUT);
pinMode(blueLedPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
// Démarrage de la communication série
Serial.begin(9600);
// Initialisation de l'écran LCD
lcd.init();
lcd.backlight();
// Initialisation du capteur DHT
dht.begin();
}
void loop() {
// Lecture des valeurs des capteurs
readGasSensor();
readLdrSensor();
distance = getDistance();
// Lecture de la température et de l'humidité
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Vérification des valeurs des capteurs et déclenchement des sorties en conséquence
triggerOutputs();
// Affichage des valeurs des capteurs sur l'écran LCD
displaySensorValues(temperature, humidity);
// Délai d'attente avant la prochaine lecture des capteurs
delay(1000);
}
// Fonction pour lire la valeur du capteur de gaz
void readGasSensor() {
gasValue = analogRead(gasSensorPin);
}
// Fonction pour lire la valeur du capteur LDR
void readLdrSensor() {
ldrValue = analogRead(ldrSensorPin);
}
// Fonction pour vérifier les valeurs des capteurs et déclencher les sorties en conséquence
void triggerOutputs() {
// Capteur de gaz
digitalWrite(redLedPin, (gasValue > gasThreshold) ? HIGH : LOW);
digitalWrite(buzzerPin, (gasValue > gasThreshold) ? HIGH : LOW);
// Capteur LDR
digitalWrite(blueLedPin, (ldrValue < ldrThreshold) ? HIGH : LOW);
// Capteur de distance
digitalWrite(greenLedPin, (distance < distanceThreshold) ? HIGH : LOW);
}
// Fonction pour mesurer la distance avec le capteur HC-SR04
int getDistance() {
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
long duration = pulseIn(echoPin, HIGH);
int distance = duration * 0.034 / 2;
return distance;
}
// Fonction pour afficher les valeurs des capteurs sur l'écran LCD
void displaySensorValues(float temperature, float humidity) {
lcd.clear(); // Effacer l'écran LCD
lcd.setCursor(0, 0); // Positionner le curseur sur la première ligne
lcd.print("Temp: "); // Afficher "Temp: "
lcd.print(temperature); // Afficher la température
lcd.print(" C"); // Afficher le symbole degré Celsius
lcd.setCursor(0, 1); // Positionner le curseur sur la deuxième ligne
lcd.print("Humidity: "); // Afficher "Humidity: "
lcd.print(humidity); // Afficher l'humidité
lcd.print("%"); // Afficher le symbole pourcentage
}