实时森林火灾监测系统:短信报警方案
组件与物料
| Itead Gboard Pro 800 SIM800 GSM/GPRS 模块 (ATmega2560 主板) | × | 1 |
| Arduino UNO | × | 1 |
| DHT11 温湿度传感器 (3引脚) | × | 2 |
| 杜邦线 (若干) | × | 1 |
应用与在线服务
| Arduino IDE |
项目原理
森林火灾检测流程始于部署在树木上的传感器节点。节点间通过 RF 模块与 Arduino 通信,形成网络。任一节点检测到环境参数(温度升高、烟雾浓度超标等)超过阈值,信息经多级中继节点传递至主终端,主终端通过 GSM 模块向森林防火监控中心手机发送短信报警。
发射端物理模型
检测模块分三阶段工作:
- 感知阶段:温湿度传感器、烟雾传感器将模拟信号转为数字量,读取温度、湿度、空气质量,传递给下一级节点。
- 中继阶段:信息逐级跳转直到到达主终端。
- 报警阶段:主终端通过 GSM 模块发送短信至监控中心手机。
每个节点包含:温湿度传感器、烟雾传感器、微控制器(Arduino)。传感器与 Arduino 交互,定期将读值与预设阈值比较,超阈值则向邻近节点发送报警,逐级传递。
装置物理模型图
发射端详细结构
串口监视器数据示例
GSM 模块接收短信示例
代码:接收端与发射端 Arduino 程序
注意:代码包含两部分——Receiver side 与 Transmitter side,均为 C++(Arduino 语言),原文误标为 Python。
接收端代码(主终端)
// PART-1: Receiver Side Arduino CODE
#include <SoftwareSerial.h>
#include <RH_ASK.h>
#include <SPI.h>
#include <DHT.h>
SoftwareSerial mySerial(4, 3); // GSM 模块 RX, TX
// 常量定义
#define DHTPIN 2
#define DHTTYPE DHT11
int smokeA0 = A5;
int sensorThres = 400;
// 变量
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("Reciever Humidity = "); Serial.println(hum);
Serial.print("Reciever Temperature = "); Serial.println(temp);
int analogSensor = analogRead(smokeA0);
String smk;
if (analogSensor > sensorThres) {
Serial.println("Smoke at Reciever");
smk = "Smoke";
} else {
Serial.println("Clean at Reciever");
smk = "Clean";
}
// 接收 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("Humidity: "); Serial.print(str_humid);
Serial.print(" - Temperature: "); Serial.println(str_temp);
Serial.print(" - Air Quality: "); Serial.println(str_smk);
// 本地节点火灾判定
if (hum >= 60 && temp >= 25) {
Serial.println("Fire Detected at Reciever");
sendSMS("Fire at Reciever Node", temp, hum, smk);
}
// 发射端节点火灾判定
if (str_humid.toInt() >= 60 && str_temp.toInt() >= 25) {
Serial.println("Fire Detected at Transmitter");
sendSMS("Fire at Transmitter Node", str_temp.toFloat(), str_humid.toFloat(), str_smk);
}
}
void sendSMS(String location, float t, float h, String air) {
mySerial.println("AT+CMGF=1"); delay(1000);
mySerial.println("AT+CMGS=\"+918744984131\"\r"); delay(1000); // 替换为实际手机号
mySerial.println(" FIRE ALERT !! "); Serial.println();
mySerial.println(location); Serial.println();
mySerial.println("Temperature : " + String(t)); Serial.println();
mySerial.println("Humidity : " + String(h)); Serial.println();
mySerial.println("Air Quality : " + air); delay(100);
mySerial.println((char)26); // Ctrl+Z 发送
delay(1000);
}
发射端代码(传感器节点)
// PART-2: Transmitter Side Arduino Code
#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();
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";
else
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();
}
原理图
制造工艺
- 树莓派精准监测机柜温度:DS18B20 多点部署实战
- 树莓派 + Arduino UNO + 三星 SAMI 极速构建火灾检测系统
- 智能酒店/家庭监控系统:云端自动化控制与实时告警
- 基于 Arduino 与 Python 的可靠 RFID 考勤系统
- 基于 Arduino Uno 的人体检测救援机器人:传感器集成分步指南
- K30 CO₂ 传感器:室内空气质量实时监测
- 智能存钱罐:Arduino Nano 控制硬币识别器实现余额显示
- SERENA:基于 Arduino Mega 2560 与 TFT 触摸屏的多级密码报警系统
- Arduino 自动浇水系统:定时 + 土壤湿度双模式,轻松养护盆栽
- Arduino + HC-05 蓝牙控制 LED:MIT App Inventor 手机 App 开发全攻略
- 智能地下室通风系统:Arduino 驱动的湿度自动控制
- 基于AI的先进物联网系统实现森林火灾超早期检测与树木健康监测