Sistema de monitorización de incendios forestales en tiempo real con alertas SMS
Componentes y suministros
![]() | Itead Gboard Pro 800 SIM800 GSM/GPRS Module 3.3V ATmega2560 Mainboard para Arduino Starter | × | 1 |
![]() | Arduino UNO | × | 1 |
![]() | Sensor DHT11 Temperatura y Humedad (3 pines) | × | 2 |
![]() | Cables jumper (genéricos) | × | 1 |
Aplicaciones y servicios en línea
![]() | Arduino IDE |
Acerca de este proyecto
El proceso de detección de incendios forestales se inicia en cualquiera de los nodos colocados en árboles dentro del bosque. El bosque tiene una red de nodos a distancias adecuadas, capaces de comunicarse mediante dispositivos (módulo RF en nuestro caso) y Arduino. Si se detecta algún cambio por encima de un valor umbral en parámetros atmosféricos (subida de temperatura, contaminación por humo, etc.) cerca de un nodo (nodo origen), la información se pasa al nodo intermedio más cercano hasta llegar al terminal principal. El terminal principal usa un módem GSM para enviar la información a un teléfono móvil (centro de monitorización de incendios).
Parte transmisora del modelo físico
El módulo de detección funciona en tres etapas:
- Lectura de parámetros ambientales: temperatura y humo. Sensores convierten datos analógicos a digitales. Leen temperatura, humedad y calidad del aire, enviando la info al siguiente nodo.
- Transmisión entre nodos: el proceso continúa hasta llegar al nodo final o terminal principal.
- Notificación al centro: transmisión de la información a la unidad de monitorización.
Cada nodo tiene sensor de temperatura/humedad, sensor de humo y microcontrolador (Arduino). Los sensores interactúan con Arduino y almacenan información para comparación. Hay valores umbral predefinidos. El microprocesador compara lecturas a intervalos regulares con los umbrales. Si los valores superan el umbral, el nodo transmite al siguiente nodo cercano, que a su vez transmite al siguiente, regulando el flujo de mensajes.
Modelo físico del aparato

Parte transmisora (detalle)

Lecturas en el Monitor Serie

Mensajes recibidos por el módulo GSM

Código
Códigos Arduino para lado receptor y transmisor C/C++
Este código configura el Arduino receptor para monitorización de temperatura y humedad. Si los valores superan un umbral, se envía SMS a la estación base. Si hay subida de valores en el nodo transmisor, se comunica vía módulo RF transmisor (en Arduino Uno transmisor) al módulo RF receptor (en Arduino Uno receptor). Nota: el código tiene dos partes: "Receiver side arduino" y "Transmitter side arduino".
########( PARTE-1 )###### CÓDIGO ARDUINO LADO RECEPTOR ##########################
// Incluir librería RadioHead Amplitude Shift Keying
#include <SoftwareSerial.h>
#include <RH_ASK.h>
// Incluir librería SPI dependiente
#include <SPI.h>
#include <DHT.h>
SoftwareSerial mySerial(4, 3); // RX, TX para 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("Receptor Humedad = "); Serial.print(hum); Serial.print('\n');
Serial.print("Receptor Temperatura = "); Serial.println(temp);
int analogSensor = analogRead(smokeA0);
String smk;
if (analogSensor > sensorThres) {
Serial.print("Humo en Receptor"); Serial.print('\n');
smk = "Humo";
} else {
Serial.print("Limpio en Receptor"); Serial.print('\n');
smk = "Limpio";
}
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("Humedad: "); Serial.print(str_humid);
Serial.print(" - Temperatura: "); Serial.println(str_temp);
Serial.print(" - Calidad Aire: "); Serial.println(str_smk);
// Detección en receptor
if (hum >= 60 && temp >= 25) {
Serial.print("Incendio detectado en Receptor ");
sendSMS("FIRE ALERT !!", "Incendio en Nodo Receptor", String(temp), String(hum), smk);
}
// Detección en transmisor
if (str_humid.toInt() >= 60 && str_temp.toInt() >= 25) {
Serial.print("Incendio detectado en Transmisor ");
sendSMS("FIRE ALERT !!", "Incendio en Nodo Transmisor", str_temp, str_humid, str_smk);
}
}
void sendSMS(String alert, String location, String temp, String hum, String air) {
mySerial.println("AT+CMGF=1"); delay(1000);
mySerial.println("AT+CMGS=\"+918744984131\"\r"); delay(1000); // Cambia el número
mySerial.println(alert); Serial.println('\n');
mySerial.println(location); Serial.println('\n');
mySerial.println("Temperatura: " + temp); Serial.print('\n');
mySerial.println("Humedad: " + hum); Serial.print('\n');
mySerial.println("Calidad Aire: " + air);
delay(100);
mySerial.println((char)26); // CTRL+Z
delay(1000);
}
#######( PARTE-2 )############ CÓDIGO ARDUINO LADO TRANSMISOR ############
#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 + "," + "Humo";
if (str_smk == "0") str_out = str_humid + "," + str_temp + "," + "Limpio";
const char *msg = str_out.c_str();
rf_driver.send((uint8_t *)msg, strlen(msg));
rf_driver.waitPacketSent();
}
Esquemáticos
Proceso de manufactura
- Monitorización precisa de temperatura en armario de servidores con Raspberry Pi
- Construya un Sistema Rápido y Fiable de Detección de Incendios con Samsung SAMIIO, Arduino UNO y Raspberry Pi
- Sistema Inteligente de Monitorización para Hoteles y Hogares con Controles Automatizados en la Nube
- Sistema de Asistencia RFID Fiable con Arduino y Python
- Robot de Detección Humana con Arduino Uno: Integración de Sensores Paso a Paso
- Sensor K30 CO₂: Monitorización en tiempo real de la calidad del aire interior
- Alcancía Inteligente: Controla un Aceptador de Monedas con Arduino Nano
- SERENA: Sistema de Alarma Personalizado Arduino Mega 2560 con Pantalla TFT LCD Táctil
- Sistema automático de riego para plantas con Arduino
- Controla un LED por Bluetooth con Arduino – Guía DIY paso a paso
- Sistema IoT Avanzado con IA para Detección Temprana de Incendios Forestales y Monitorización de Salud de Árboles




