找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1823

积分

0

好友

238

主题
发表于 2025-12-25 05:04:34 | 查看: 33| 回复: 0

家中或办公室一旦发生火情,若等他人发现再报警,往往已错过最佳时机。一套能够在探测到火焰或烟雾的瞬间,就自动向您手机发送紧急短信的报警系统,无疑能为安全增添一份保障。

本项目将使用 Arduino UNO R4 WiFi 开发板,构建一套集火焰检测、烟雾检测、蜂鸣器报警及云端短信通知于一体的完整安防系统。其最大特点在于无需传统的GSM模块,完全借助Wi-Fi网络和云端SMS API来实现远程告警,系统结构简单、成本低廉,非常适合家庭、办公室等场景,用于提升基础安全防护能力。

系统工作原理:Wi-Fi+传感器+云端SMS API

本系统的核心在于利用 Arduino与云端SMS API的通信 来替代体积与成本更高的GSM模块。

整个工作流程可分为以下四步:

  1. Arduino连接Wi-Fi网络:UNO R4使用预设的账号密码连接现有Wi-Fi,使其能够通过HTTP请求访问互联网。
  2. 火焰与烟雾检测:系统通过MQ2烟雾传感器和火焰传感器持续监测环境。一旦检测到烟雾或明火,传感器会立即向Arduino发送电信号。
  3. 触发本地与远程告警:Arduino收到任一传感器的报警信号后,会立刻驱动蜂鸣器和红色LED进行本地声光报警(绿色LED熄灭),同时通过HTTP协议向云端SMS API发送包含目标手机号和告警内容的请求。
  4. 云端发送短信:云端SMS API收到请求后,通过其自有移动网络将告警短信下发至指定手机。整个过程Arduino无需SIM卡或GSM模块参与。

本项目使用了Circuit Digest Cloud SMS API,该API免费、可配置,并提供了丰富的预设短信模板。

所需器件清单

  • Arduino UNO R4 WiFi 开发板
  • 火焰传感器 (Flame Sensor)
  • MQ2 烟雾传感器
  • 有源蜂鸣器 (Active Buzzer)
  • 红色LED与绿色LED各一个
  • 220 Ω 电阻若干
  • 面包板
  • 若干杜邦线

供电部分可通过USB或DC电源插座完成。为方便串口调试,建议直接使用5V USB供电

硬件连接与电路设计

系统以Arduino UNO R4 WiFi作为核心控制器。

  • MQ2烟雾传感器:用于检测LPG、丁烷、甲烷、酒精、烟雾等多种可燃气体。它提供模拟输出(AO)和数字输出(DO),本项目中将其模拟输出(AO)连接到Arduino的模拟引脚,输出电压值会随气体浓度变化。
  • 火焰传感器:通过红外接收管检测火焰发出的特定波长红外光,以数字信号形式接入Arduino。当检测到火焰时,其输出引脚会变为高电平。
  • 报警指示部分:绿色LED代表系统处于正常监控状态;红色LED与蜂鸣器则在检测到险情时共同工作,进行声光报警。

整个电路可在面包板上快速搭建,便于原型验证与修改。下图为实际的接线示意图:

火焰烟雾报警器接线图

云端短信模板与告警内容配置

为了简化开发,Circuit Digest Cloud提供了一系列预设的SMS模板。例如:

  • 101: 设备状态告警 (Device Status Alert)
  • 102: 温度告警 (Temperature Alert)
  • 103: 运动检测告警 (Motion Detected)
  • ... (其他模板略)

本项目选用模板 ID 101 (Device Status Alert),其内容为:“Your {#var#} is currently at {#var#}。” 短信中的两个 {#var#} 是可由用户自定义的字段。

在代码中,我们通过两个全局变量来填充这些字段:

const char* var1 = "house";
const char* var2 = "FIRE EMERGENCY. Evacuate now!";

最终,接收者手机上将收到如下内容的短信:Your house is currently at FIRE EMERGENCY. Evacuate now!。这种方式既保证了短信内容的规范性,又赋予了其灵活性。

Arduino代码详解:从网络连接到报警触发

程序的核心逻辑是:连接Wi-Fi → 持续监测传感器 → 一旦触发 → 发送短信并持续本地报警 → 同时维护网络连接。主要模块如下:

1. 头文件引入与引脚定义

首先引入必要的库文件:

#include “WiFiS3.h” // 用于Wi-Fi连接与HTTP通信
#include “Arduino_LED_Matrix.h” // 用于驱动板载LED点阵屏

接着使用 #define 宏定义各传感器与执行器的引脚,这种方式比使用变量更节省内存:

#define Smoke_sensor 2
#define Flame_sensor 6
#define Green_led 3
#define Red_led 5
#define Buzzer 4

然后创建LED矩阵对象:

ArduinoLEDMatrix matrix;

2. 全局变量声明

这部分定义了Wi-Fi凭据、API信息以及传感器状态变量。

// Wi-Fi 配置
const char *ssid = “Your_SSID”;
const char *password = “Your_PASSWORD”;
int status = WL_IDLE_STATUS;

// SMS API 配置
const char* apiKey = “Your_API_Key”;
const char* templateID = “101”;
const char* mobileNumber = “CountryCode_PhoneNumber”; // 如 8613912345678
const char* var1 = “house”;
const char* var2 = “FIRE EMERGENCY. Evacuate now!”;

// LED点阵图标数据
const uint32_t network_connect_icon[] = { 0x308311, 0xba1b4db0, 0xdb6db6db };
const uint32_t network_disconnect_icon[] = { 0x3003a1, 0xb41badb0, 0xdb6db6db };
const uint32_t wifi_connection_anime[][4] = { /* 动画帧数据 */ };

// 传感器状态
bool flame_status = false;
bool smoke_status = true;

3. Wi-Fi连接与重连函数

wifi_connect() 函数负责初始连接,包含模块检查、连接动画显示和重试机制。wifi_reconnect() 函数则在网络异常断开时被调用,先显示断开图标,然后尝试重新连接。稳定的网络连接是进行HTTP协议通信、调用云端API的基础。

4. 传感器检测函数

fire_smoke_detect() 函数读取两个传感器的数字引脚状态。只要火焰传感器输出低电平或烟雾传感器输出低电平(根据具体传感器逻辑),函数就返回 true,表示检测到险情。

bool fire_smoke_detect(){
  flame_status = digitalRead(Flame_sensor);
  smoke_status = digitalRead(Smoke_sensor);
  if(!flame_status || !smoke_status){
      return true;
  } else{
     return false;
  }
}

5. 短信触发函数

trigger_SMS() 是项目的关键函数,它完成了与云端API的通信。

  1. 检查Wi-Fi连接状态。
  2. 使用 WiFiClient 对象连接到 www.circuitdigest.cloud 的80端口。
  3. 构造包含模板ID的API路径。
  4. 组装JSON格式的请求体,包含手机号、var1var2
  5. 发送HTTP POST请求及请求头(包含认证信息)。
  6. 读取并解析服务器响应,判断短信是否发送成功。

通过这段代码,我们可以清晰地了解如何通过Arduino发起一次完整的、带认证的HTTP POST请求,这对于物联网设备与后端服务交互是典型范例。

6. 本地声光报警函数

trigger_Alarm() 函数控制红色LED常亮、绿色LED熄灭,并利用 millis() 函数实现非阻塞的蜂鸣器间歇鸣叫(约每100ms切换一次状态),确保主循环不被阻塞。

void trigger_Alarm(){
   static unsigned long prevmillis = 0;
   static bool buzzer_state = false;
   const unsigned long beep_interval = 100;
   digitalWrite(Red_led, HIGH);
   digitalWrite(Green_led, LOW);
   if(millis() - prevmillis >= beep_interval){
      prevmillis = millis();
      buzzer_state = !buzzer_state;
      digitalWrite(Buzzer, buzzer_state);
   }
}

7. 主程序流程

setup() 函数中,完成串口、LED矩阵初始化,首次Wi-Fi连接,以及各引脚模式的设置。
loop() 函数中,程序循环执行以下步骤:

  1. 检查并维护Wi-Fi连接。
  2. 调用 fire_smoke_detect() 检测险情。
  3. 一旦检测到,立即调用 trigger_SMS() 发送短信,随后进入一个 while(1) 循环,持续调用 trigger_Alarm() 进行本地报警,直到设备被手动复位。

烧录、测试与演示

  1. 环境配置:在Arduino IDE中选择开发板为 “Arduino UNO R4 WiFi”,并选中正确的端口。
    选择开发板
  2. 编译上传:点击上传按钮,将程序烧录至开发板。
    上传代码
  3. 系统测试
    • 上电连接:设备启动后,板载LED点阵会播放连接动画,成功连接Wi-Fi后显示连接成功图标。
      网络连接图标
    • 报警触发:当火焰或烟雾传感器被触发,系统立即发送短信,并启动声光报警。
      报警演示
    • 网络恢复:若工作中Wi-Fi断开,点阵显示断开图标,并自动尝试重连。

项目总结与资源

本项目基于 Arduino UNO R4 WiFi,结合MQ2烟雾传感器、火焰传感器以及云端SMS API,实现了一套低成本、免GSM模块的火焰烟雾报警系统。它展示了如何利用现代Wi-Fi嵌入式开发板和云服务,快速构建具备远程通知功能的物联网应用。

您可以根据实际需求,轻松修改代码中的Wi-Fi信息、接收手机号和告警短信内容。完整的代码与电路资料已开源,方便复现与二次开发。




上一篇:超节点技术解析:大模型时代下,企业级AI算力集群如何选型?
下一篇:徕芬技术破局:高速无刷电机与智能工厂如何重塑个护赛道
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-10 19:01 , Processed in 0.330689 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表