Système de surveillance d'incendie forestier en temps réel avec alertes SMS
Composants et fournitures
![]() |
Itead Gboard Pro 800 SIM800 GSM/GPRS (ATmega2560) | × | 1 |
![]() |
Arduino UNO | × | 1 |
![]() |
Capteur température/humidité DHT11 (3 broches) | × | 2 |
![]() |
Fils de connexion (genériques) | × | 1 |
Applications et services en ligne
![]() |
Arduino IDE |
À propos de ce projet
La détection d'incendie forestier démarre au niveau des nœuds installés sur les arbres. La forêt est maillée de nœuds espacés, capables de communiquer entre eux (module RF) via Arduino. Si un nœud source détecte un dépassement de seuil sur les paramètres atmosphériques (température, fumée...), l'information est relayée de nœud en nœud jusqu'au terminal principal. Celui-ci utilise un modem GSM pour alerter le centre de surveillance par SMS.
Partie émettrice du modèle physique
Le module de détection fonctionne en trois étapes :
- Acquisition : lecture de paramètres environnementaux (température, humidité, qualité d'air) via capteurs convertissant l'analogique en numérique. Transmission au nœud suivant.
- Relais : l'information progresse jusqu'au nœud final / terminal principal.
- Notification : le terminal principal envoie l'alerte SMS au centre de surveillance.
Chaque nœud intègre : capteur température/humidité, capteur de fumée, microcontrôleur (Arduino). Les seuils sont prédéfinis. Le microcontrôleur compare les valeurs capteurs aux seuils à intervalles réguliers. Si dépassement, transmission au nœud suivant, et ainsi de suite.
Modèle physique de l'appareil

Partie émettrice (schéma)

Lecture série dans le moniteur série

Messages reçus par le module GSM

Code
Codes Arduino côté récepteur et émetteur
Note : le code ci-dessous est en C++ pour Arduino (l'étiquette "Python" d'origine est une erreur). Il contient deux parties : "Récepteur" et "Émetteur".
PARTIE 1 : Code Arduino côté récepteur
// Inclure la bibliothèque RadioHead ASK
#include <SoftwareSerial.h>
#include <RH_ASK.h>
#include <SPI.h>
#include <DHT.h>
SoftwareSerial mySerial(4, 3); // RX, TX pour module GSM
// Constantes
#define DHTPIN 2
#define DHTTYPE DHT11
int smokeA0 = A5;
int sensorThres = 400;
// Variables
DHT dht(DHTPIN, DHTTYPE);
float hum, temp;
String str_humid, str_temp, str_smk, str_out;
RH_ASK rf_driver;
void setup() {
pinMode(smokeA0, INPUT);
dht.begin();
rf_driver.init();
Serial.begin(9600);
mySerial.begin(115200);
}
void loop() {
delay(2000);
hum = dht.readHumidity();
temp = dht.readTemperature();
Serial.print("Humidité Récepteur = "); Serial.println(hum);
Serial.print("Température Récepteur = "); Serial.println(temp);
int analogSensor = analogRead(smokeA0);
String smk;
if (analogSensor > sensorThres) {
Serial.println("Fumée au Récepteur");
smk = "Fumée";
} else {
Serial.println("Air pur au Récepteur");
smk = "Propre";
}
// Réception RF
uint8_t buf[20];
uint8_t buflen = sizeof(buf);
if (rf_driver.recv(buf, &buflen)) {
str_out = String((char*)buf);
for (int i = 0; i < str_out.length(); i++) {
if (str_out.substring(i, i+1) == ",") {
str_humid = str_out.substring(0, i);
str_temp = str_out.substring(i+1, i+6);
str_smk = str_out.substring(i+7, i+12);
break;
}
}
}
Serial.print("Humidité: "); Serial.print(str_humid);
Serial.print(" - Température: "); Serial.println(str_temp);
Serial.print(" - Qualité air: "); Serial.println(str_smk);
// Détection incendie au récepteur
if (hum >= 60 && temp >= 25) {
sendSMS("FIRE ALERT !!", "Fire at Receiver Node", temp, hum, smk);
}
// Détection incendie à l'émetteur (données reçues)
if (str_humid.toInt() >= 60 && str_temp.toInt() >= 25) {
sendSMS("FIRE ALERT !!", "Fire at Transmitter Node", str_temp.toFloat(), str_humid.toFloat(), str_smk);
}
}
void sendSMS(String alert, String location, float temp, float hum, String airQuality) {
Serial.print(location); Serial.println(" détecté");
mySerial.println("AT+CMGF=1"); delay(1000);
mySerial.println("AT+CMGS=\"+918744984131\"\r"); delay(1000); // Remplacez par votre numéro
mySerial.println(alert); Serial.println();
mySerial.println(location); Serial.println();
mySerial.println("Temperature : " + String(temp)); Serial.println();
mySerial.println("Humidity : " + String(hum)); Serial.println();
mySerial.println("Air Quality : " + airQuality);
delay(100);
mySerial.println((char)26); // CTRL+Z
delay(1000);
}
PARTIE 2 : Code Arduino côté émetteur
#include <RH_ASK.h>
#include <SPI.h>
#include <DHT.h>
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
int smokeA0 = A5;
int sensorThres = 400;
float hum, temp, smk;
String str_humid, str_temp, str_smk, str_out;
RH_ASK rf_driver;
void setup() {
dht.begin();
pinMode(smokeA0, INPUT);
rf_driver.init();
}
void loop() {
delay(2000);
hum = dht.readHumidity();
temp = dht.readTemperature();
str_humid = String(hum);
str_temp = String(temp);
Serial.print(hum); Serial.print(temp);
int analogSensor = analogRead(smokeA0);
if (analogSensor > sensorThres) str_smk = "1";
else str_smk = "0";
if (str_smk == "1") str_out = str_humid + "," + str_temp + "," + "Smoke";
if (str_smk == "0") str_out = str_humid + "," + str_temp + "," + "Clean";
const char *msg = str_out.c_str();
rf_driver.send((uint8_t *)msg, strlen(msg));
rf_driver.waitPacketSent();
}
Schémas
Processus de fabrication
- Surveillance précise de la température dans un placard serveur avec Raspberry Pi
- Construire un système de détection d'incendie rapide et fiable avec Samsung SAMI, Arduino UNO et Raspberry Pi
- Système de surveillance intelligent pour hôtels et maisons avec contrôles automatisés basés sur le cloud
- Système de pointage RFID fiable avec Arduino et Python (base de données phpMyAdmin)
- Robot de détection humaine basé sur Arduino Uno : Intégration capteurs étape par étape
- Capteur CO2 K30 : Surveillance en temps réel de la qualité de l'air intérieur
- Construire une Tirelire Intelligente : Contrôler un Accepteur de Pièces avec Arduino Nano
- SERENA : Système d'Alarme Arduino Mega 2560 Personnalisé avec Écran Tactile TFT LCD
- Système IoT avancé piloté par IA pour détection ultra-précoce feux de forêt et surveillance santé arbres




