亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

实时森林火灾监测系统:短信报警方案

组件与物料

Itead Gboard Pro 800 SIM800 GSM/GPRS 模块 (ATmega2560 主板) × 1
Arduino UNO × 1
DHT11 温湿度传感器 (3引脚) × 2
杜邦线 (若干) × 1

应用与在线服务

Arduino IDE

项目原理

森林火灾检测流程始于部署在树木上的传感器节点。节点间通过 RF 模块与 Arduino 通信,形成网络。任一节点检测到环境参数(温度升高、烟雾浓度超标等)超过阈值,信息经多级中继节点传递至主终端,主终端通过 GSM 模块向森林防火监控中心手机发送短信报警。

发射端物理模型

检测模块分三阶段工作:

  1. 感知阶段:温湿度传感器、烟雾传感器将模拟信号转为数字量,读取温度、湿度、空气质量,传递给下一级节点。
  2. 中继阶段:信息逐级跳转直到到达主终端。
  3. 报警阶段:主终端通过 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();
}

原理图

实时森林火灾监测系统:短信报警方案

制造工艺

  1. 树莓派精准监测机柜温度:DS18B20 多点部署实战
  2. 树莓派 + Arduino UNO + 三星 SAMI 极速构建火灾检测系统
  3. 智能酒店/家庭监控系统:云端自动化控制与实时告警
  4. 基于 Arduino 与 Python 的可靠 RFID 考勤系统
  5. 基于 Arduino Uno 的人体检测救援机器人:传感器集成分步指南
  6. K30 CO₂ 传感器:室内空气质量实时监测
  7. 智能存钱罐:Arduino Nano 控制硬币识别器实现余额显示
  8. SERENA:基于 Arduino Mega 2560 与 TFT 触摸屏的多级密码报警系统
  9. Arduino 自动浇水系统:定时 + 土壤湿度双模式,轻松养护盆栽
  10. Arduino + HC-05 蓝牙控制 LED:MIT App Inventor 手机 App 开发全攻略
  11. 智能地下室通风系统:Arduino 驱动的湿度自动控制
  12. 基于AI的先进物联网系统实现森林火灾超早期检测与树木健康监测