Bonjour.
J'ai écris un programme Arduino (MEGA 2560) qui gère les données envoyées par 4 capteurs : Un capteur de température et d'humidité (DHT11 ), un capteur de gaz (MQ2), un capteur de flamme, et un capteur de présence.
L'ensemble fonctionne plutôt bien sauf le LED de climatisation venti_clim
qui, sans raison se met à clignoter à la fréquence du buzzer
En gros la LED venti_clim
clignote ( 1 seconde environ pour la période du clignotement) lorsque un capteur ( gaz, flamme ou présence ) est actif.
On dirait que cette LED venti_clim
est cadencée au même moment que le buzzer
car elle s'allume ( clignote ) lorsque le buzzer est en train de retentir .
Dans un premier temps j'ai cru que le problème venait de mon câblage et J'ai même changé la PIN de la LED venti_clim
mais le problème persiste.
Svp quelqu'un peut-il m'aider à comprendre ce qui ne va pas dans mon code ?
Voici le code ci-dessous :
#include <DFRobot_DHT11.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
DFRobot_DHT11 DHT;
#define DHT11_PIN 2
LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27
/*----------------------------------------declaration des PIN----------------------------------------*/
const int capteur_GAZ = A3; //capteur de GAZ
const int capteur_intru = 4; //capteur de presence
const int capteur_flamme = A7; //capteur de flamme
const int buzzer = 10 ; // module sonore
const int venti_clim = 22 ; //climatiseur
const int venti_evacuation = 9 ; // ventillateur évacuation des fuites de GAZ
const int ledR=12;
const int ledV=13;
/*----------------------------------------declaration des PIN----------------------------------------*/
/*----------------------------------------variables de gestion du systeme----------------------------*/
//------------variables de gestion DHT11
int temp_valeur;
int hum_valeur;
int temp_status = 0 ;
//------------variables de gestion capteur de GAZ
float gaz_valeur;
int gaz_status = 0;
unsigned long temps_gaz = millis();
//------------variables de gestion capteur d'intrusion
//enum {inactive,active} etat_alarme = active;
//enum {non,oui} intru_status = non;
int intru_status = 0 ;
int intru_valeur=0;
unsigned long temps_intru = millis();
//------------variables de gestion capteur de flamme
int flamme_valeur;
int flamme_status =0 ;
unsigned long temps_flamme = millis();
//------------variables de gestion capteur de flamme
bool aff_aucun = true;
bool aff_gaz = true;
bool aff_intru = true;
bool aff_flamme = true;
bool aff_gaz_intru = true;
bool aff_gaz_flamme = true;
bool aff_intru_flamme = true;
bool aff_gaz_intru_flamme = true;
/*----------------------------------------variables de gestion du systeme----------------------------*/
/*----------------------------------------Déclaration des fonctions----------------------------------*/
void lire_DHT11();
void lire_gaz();
void lire_intru();
void lire_flamme();
void capteur_actif();
void capteur_inactif();
void affichage_lcd();
void activation_affichage();
/*----------------------------------------Déclaration des fonctions----------------------------------*/
void setup() {
//---------configuration des PINS en E/S
pinMode(capteur_GAZ,INPUT);
pinMode(capteur_intru,INPUT);
pinMode(capteur_flamme,INPUT);
pinMode(venti_evacuation,OUTPUT);
pinMode(venti_clim,OUTPUT);
pinMode(buzzer,OUTPUT);
pinMode(ledR,OUTPUT);
pinMode(ledV,OUTPUT);
//---------Initialisation de la communication serie
Serial.begin(9600);
//---------Initialisation de l'afficheur LCD
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0,0);
}
void loop() {
lire_DHT11();
Serial.println(digitalRead(venti_clim));
lire_gaz();
lire_intru();
lire_flamme();
affichage_lcd();
}
/*--------------------------fonction pour lire le capteur de temperature--------------------------*/
void lire_DHT11(){
DHT.read(DHT11_PIN);
temp_valeur = DHT.temperature;
hum_valeur = DHT.humidity;
if ( temp_valeur > 27 ){
//temp_status = 1;
digitalWrite(venti_clim, HIGH);
}
else{
// temp_status = 0;
digitalWrite(venti_clim, LOW);
}
}
/*--------------------------fonction pour lire le capteur de temperature--------------------------*/
/*--------------------------fonction pour lire le capteur de gaz----------------------------------*/
void lire_gaz(){
gaz_valeur = ((analogRead(capteur_GAZ)*5.00)/1023.00);
if ( gaz_valeur > 1.00 ){
gaz_status = 1;
temps_gaz = millis();
digitalWrite(venti_evacuation,HIGH);
capteur_actif();
}
else{
gaz_status = 0;
digitalWrite(venti_evacuation,LOW);
}
}
/*--------------------------fonction pour lire le capteur de gaz-----------------------------------*/
/*--------------------------fonction pour lire le capteur de d'intrusion---------------------------*/
void lire_intru(){
intru_valeur = digitalRead(capteur_intru);
if ( intru_valeur == LOW){
intru_status = 1;
capteur_actif();
}
else {
intru_status = 0;
}
}
/*--------------------------fonction pour lire le capteur de d'intrusion---------------------------*/
/*--------------------------fonction pour lire le capteur de flamme--------------------------------*/
void lire_flamme(){
flamme_valeur = analogRead(capteur_flamme);
if ( flamme_valeur < 100 ){
flamme_status = 1;
temps_flamme = millis();
capteur_actif();
}
else{
flamme_status = 0;
}
}
/*--------------------------fonction pour lire le capteur de flamme--------------------------------*/
/*--------------------------fonctions gerer l'etat du buzzer et des LED de signalisation-----------*/
void capteur_actif(){
digitalWrite(ledR,HIGH);
digitalWrite(ledV,LOW);
tone(buzzer, 200, 700); // on doit améliorer le code du buzzer pour produire un bon son (sirène de police)
}
void capteur_inactif(){
digitalWrite(ledR,LOW);
digitalWrite(ledV,HIGH);
noTone(buzzer);
}
/*--------------------------fonctions gerer l'etat du buzzer et des LED de signalisation-----------*/
/*---------------------------------fonction gerer l'afficheur LCD---------------------------------*/
void affichage_lcd(){
if(gaz_status == 0 && intru_status == 0 && flamme_status == 0){
capteur_inactif() ;
activation_affichage();
lcd.clear();
lcd.setCursor(3,0);
lcd.print("temperature : ");
lcd.setCursor(17,0);
lcd.print(temp_valeur);
lcd.setCursor(3,1);
lcd.print("humidite : ");
lcd.setCursor(14,1);
lcd.print(hum_valeur);
}
else if(gaz_status == 1 && intru_status == 0 && flamme_status == 0 && aff_gaz == true){
lcd.clear();
lcd.setCursor(3,0);
lcd.print("Atention !");
lcd.setCursor(3,1);
lcd.print("!! Fuite de Gaz !!");
activation_affichage();
aff_gaz = false ;
}
else if(gaz_status == 0 && intru_status == 1 && flamme_status == 0 && aff_intru == true){
lcd.clear();
lcd.setCursor(3,0);
lcd.print("Atention !");
lcd.setCursor(3,1);
lcd.print("!! Intrusion !!");
activation_affichage();
aff_intru = false ;
}
else if(gaz_status == 0 && intru_status == 0 && flamme_status == 1 && aff_flamme == true){
lcd.clear();
lcd.setCursor(3,0);
lcd.print("Atention !");
lcd.setCursor(3,1);
lcd.print("!! Incendie !!");
activation_affichage();
aff_flamme = false ;
}
else if(gaz_status == 1 && intru_status == 1 && flamme_status == 0 && aff_gaz_intru == true){
lcd.clear();
lcd.setCursor(3,0);
lcd.print("Atention !");
lcd.setCursor(3,1);
lcd.print("!! Fuite de Gaz !!");
lcd.setCursor(3,2);
lcd.print("!! Intrusion !!");
activation_affichage();
aff_gaz_intru = false ;
}
else if(gaz_status == 1 && intru_status == 0 && flamme_status == 1 && aff_gaz_flamme == true){
lcd.clear();
lcd.setCursor(3,0);
lcd.print("Atention !");
lcd.setCursor(3,1);
lcd.print("!! Fuite de Gaz !!");
activation_affichage();
aff_gaz_flamme = false ;
}
else if(gaz_status == 0 && intru_status == 1 && flamme_status == 1 && aff_intru_flamme == true){
lcd.clear();
lcd.setCursor(3,0);
lcd.print("Atention !");
lcd.setCursor(3,1);
lcd.print("!! Fuite de Gaz !!");
activation_affichage();
aff_intru_flamme = false ;
}
else if(gaz_status == 1 && intru_status == 1 && flamme_status == 1 && aff_gaz_intru_flamme == true){
lcd.clear();
lcd.setCursor(3,0);
lcd.print("Atention !");
lcd.setCursor(3,1);
lcd.print("!! Fuite de Gaz !!");
activation_affichage();
aff_gaz_intru_flamme = false ;
}
}
/*---------------------------------fonction gerer l'afficheur LCD---------------------------------*/
void activation_affichage(){
aff_aucun = true;
aff_gaz = true;
aff_intru = true;
aff_flamme = true;
aff_gaz_intru = true;
aff_gaz_flamme = true;
aff_intru_flamme = true;
aff_gaz_intru_flamme = true;
}