#define SEUIL_GAZ 500
#define SEUIL_NUIT 300
// ===== RDC =====
const int PIR_RDC = 22;
const int PORTE_RDC = 24;
const int CAMERA_RDC = 28;
const int GAZ_RDC = A0;
const int LDR_RDC = A1;
// ===== N1 =====
const int PIR_N1 = 32;
const int PORTE_N1 = 34;
const int CAMERA_N1 = 38;
const int GAZ_N1 = A2;
const int LDR_N1 = A3;
// ===== N2 =====
const int PIR_N2 = 42;
const int PORTE_N2 = 44;
const int CAMERA_N2 = 48;
const int GAZ_N2 = A4;
const int LDR_N2 = A5;
// ===== N3 =====
const int PIR_N3 = 23;
const int PORTE_N3 = 25;
const int CAMERA_N3 = 29;
const int GAZ_N3 = A6;
const int LDR_N3 = A7;
// ===== N4 =====
const int PIR_N4 = 33;
const int PORTE_N4 = 35;
const int CAMERA_N4 = 39;
const int GAZ_N4 = A8;
const int LDR_N4 = A9;
// ===== Sirène Générale =====
const int SIRENE = 26;
bool intrusionPrec[5] = {false,false,false,false,false};
bool incendiePrec[5] = {false,false,false,false,false};
bool alarmeGenerale = false;
void setup() {
Serial.begin(9600);
pinMode(PIR_RDC, INPUT);
pinMode(PORTE_RDC, INPUT_PULLUP);
pinMode(CAMERA_RDC, OUTPUT);
pinMode(PIR_N1, INPUT);
pinMode(PORTE_N1, INPUT_PULLUP);
pinMode(CAMERA_N1, OUTPUT);
pinMode(PIR_N2, INPUT);
pinMode(PORTE_N2, INPUT_PULLUP);
pinMode(CAMERA_N2, OUTPUT);
pinMode(PIR_N3, INPUT);
pinMode(PORTE_N3, INPUT_PULLUP);
pinMode(CAMERA_N3, OUTPUT);
pinMode(PIR_N4, INPUT);
pinMode(PORTE_N4, INPUT_PULLUP);
pinMode(CAMERA_N4, OUTPUT);
pinMode(SIRENE, OUTPUT);
Serial.println("======================================");
Serial.println(" DOMOTIQUE ISTL LSHI ");
Serial.println("======================================");
}
void gererNiveau(
int index,
const char* nom,
int pir,
int porte,
int gaz,
int ldr,
int camera
) {
bool mouvement = digitalRead(pir);
bool porteOuverte = (digitalRead(porte) == LOW);
int valeurGaz = analogRead(gaz);
int valeurLum = analogRead(ldr);
bool intrusion = mouvement || porteOuverte;
bool incendie = (valeurGaz > SEUIL_GAZ);
bool nuit = (valeurLum < SEUIL_NUIT);
// Caméra activée dès qu'il y a une activité
digitalWrite(camera, intrusion || incendie);
// ===== Gestion de la sirène =====
if (incendie) {
alarmeGenerale = true;
}
if (intrusion && nuit) {
alarmeGenerale = true;
}
// ===== Messages Intrusion =====
if (intrusion != intrusionPrec[index]) {
if (intrusion) {
if (nuit) {
Serial.print("[");
Serial.print(nom);
Serial.println("] Intrusion nocture detectée");
} else {
Serial.print("[");
Serial.print(nom);
Serial.println("] Activité detectée (Jour)");
}
if (mouvement) {
Serial.print("[");
Serial.print(nom);
Serial.println("] Mouvement detecté");
}
if (porteOuverte) {
Serial.print("[");
Serial.print(nom);
Serial.println("] Une Porte ou Fenetre a été ouverte");
}
Serial.print("[");
Serial.print(nom);
Serial.println("] Camera ouvert");
} else {
Serial.print("[");
Serial.print(nom);
Serial.println("] Zone securisée");
}
intrusionPrec[index] = intrusion;
}
// ===== Messages Incendie =====
if (incendie != incendiePrec[index]) {
if (incendie) {
Serial.print("[");
Serial.print(nom);
Serial.print("] ALERTE INCENDIE - Valeur gaz = ");
Serial.println(valeurGaz);
} else {
Serial.print("[");
Serial.print(nom);
Serial.println("] Qualité de l'air normale");
}
incendiePrec[index] = incendie;
}
}
void loop() {
alarmeGenerale = false;
gererNiveau(0, "RDC", PIR_RDC, PORTE_RDC, GAZ_RDC, LDR_RDC, CAMERA_RDC);
gererNiveau(1, "N1", PIR_N1, PORTE_N1, GAZ_N1, LDR_N1, CAMERA_N1);
gererNiveau(2, "N2", PIR_N2, PORTE_N2, GAZ_N2, LDR_N2, CAMERA_N2);
gererNiveau(3, "N3", PIR_N3, PORTE_N3, GAZ_N3, LDR_N3, CAMERA_N3);
gererNiveau(4, "N4", PIR_N4, PORTE_N4, GAZ_N4, LDR_N4, CAMERA_N4);
// ===== Sirène Générale =====
if (alarmeGenerale) {
tone(SIRENE, 1000);
} else {
noTone(SIRENE);
}
delay(100);
}SECTION RDC
SECTION NIVEAU 1
SECTION NIVEAU 2
SECTION NIVEAU 3
SECTION NIVEAU 4