1.项目介绍
在森林防火及雷电预警物联网系统中,AS3935 雷电传感器、太阳能面板、MPPT 管理器和 ESP32C6 模块协同工作。太阳能面板在白云发电,存储到蓄电池中,MPPT 管理器确保高效的光伏能量发电和转换。ESP32C6 模块利用 zigbee 协议将采集到的数据传输至 zigbee 网关,实现节点数据上云。多个 zigbee 节点分布在不同方位,可交互组网,全方位实时监测雷电情况。一旦雷电传感器检测到雷电活动,系统立即发出预警。同时,火焰传感器也在时刻监测,若检测到火焰,信息会迅速通过 zigbee 网络远程传输。结合 GPS 模块的定位功能,能精准确定火灾位置,便于相关部门进行更加精准的灭火处理,为森林防火提供有力保障。
2.方案框图
3.器件介绍
1.1节点主控
Beetle ESP32-C6集成锂电池充电管理功能,可以安全的对锂电池进行充电,该开发板还支持电池电压监测,以便在电量不足时采取措施,确保设备持续运行。Beetle ESP32-C6还支持BLE、Zigbee通讯协议,与其他MCU组合,可作为Thread 边界路由器、Matter 网关和 Zigbee 网桥。节点端的设备涉及到低功耗和小尺寸,因此在选择这款主控要具备尺寸小和低功耗的特性。
特性
- 超小体积,尺寸仅25*20.5mm
- 搭载ESP32-C6芯片,支持Wi-Fi、BLE、Zigbee、Thread通讯协议
- 支持Wi-Fi 6协议,更低延迟,更低功耗
- 超低功耗,deep-sleep 14uA
- 集成锂电池充电功能
- 支持电池电压检测,了解设备电量信息
1.2闪电传感器
闪电传感器采用AS3935数字闪电传感芯片与Coilcraft的MA5532-AE专用天线,可在室内或室外,安全地检测方圆40km范围内发生闪电的距离,闪电相对强度与统计闪电发生次数。因此在如果检测有雷电的发生,则通过zigbee网络传输到网关端,通过不同地点的部署传感器,可提前预防森林防火和警情。
特性
- 方圆40km闪电距离测量
- 雷电相对强度检测
- 室内外均可使用
- 内嵌专用算法抗电气干扰,防误检测
1.3光伏MPPT电源模块
本次使用DFROBOT的太阳能电源管理模块 5V@1A,采用的是CN3065芯片,能够将太阳能面板最大程度的进行发电,和存储电能。本次使用本模块用于节点端的供电需求。
1.4火焰传感器
火焰传感器可以用来探测火源或其它波长在760纳米~1100纳米范围内的光源,探测角度可达60度2个M3安装孔方便传感器的固定。可通过多方位安装多个火焰传感器,这样检测范围更加广阔。火焰传感器可实时检测火源,若有火源发生,立即上报警情。
特性
- 外形尺寸:30x22mm
- 类型:模拟信号
- 电源要求: 3.3V到5V DC
- 探测距离:20cm(4.8V)~ 100cm(1V)
- 能够探测的光谱带:760nm到1100nm
- 反馈时间:15us
- 接口模式:模拟
1.5GPS定位
GPS模块基于一款六合一多模卫星导航定位芯片AT6558研发而成,支持中国的BDS(北斗卫星 导航系统),美国的GPS,俄罗斯的GLONASS,欧盟的GALILEO,日本的QZSS 以及卫星增强系统SBAS(WAAS,EGNOS,GAGAN,MSAS),并且实现联合定位、导航与授时。
改模块定位精度误差实测为3m左右,和各类智能手机定位基本一致;功耗低至0.1W,搭配一个小电源就能长时间持续稳定工作。可通过GPS数据获取发生火情的地点,快速定位实现精准的灭火措施,及时挽救森林失火的情况。
特性
- 工作电压:3.3-5V
- 具备 SMA 天线接口和 IPEX 天线接口
- 板载 E2PROM 可设置保存波特率等信息
- 板载 XH414 充电电子,加速热启动搜星
- 支持 A-GNSS
- 冷启动捕获灵敏度:-148dBm
- 跟踪灵敏度:-162dBm
- 定位精度:2.5 米(CEP50,开阔地)
- 首次定位时间:32 秒(也有可能是几分钟,要看具体环境而定)
- 低功耗:连续运行<25mA
- 内置天线检测及天线短路保护功能
- 尺寸:13.1mm x 15.7mm
网关端
1.1网关
主控与节点主控一直,这里的主控起到zigbee网关的作用,将采集到的信息通过网关传输到云平台进行远程传输。网关可通过Wi-Fi或者网口连接互联网,从而实现数据的传输。
1.2OLED显示模块
0.96寸OLED显示模块采用SSD1306驱动芯片,有128x64个自发光的白色像素点,采用I2C/SPI两种通信方式,默认设置为I2C。具有功耗低、对比度高等优点,这里通过OLED模块显示与节点端连接的状态和采集的信息,当没有警情状态时,界面默认显示当前的日期或者时间。
1.3云平台可通过MQTT协议,将网关的数据进行解析,平台是一个数据汇总的地方,可通过云平台进行点对点,一对多的地区实时监控。这样具备统一平台,统一管理,高效快捷的检测。
3.硬件设计
本次森林雷电防火预警系统硬件使用Kicad8设计,原理图的设计主要兼容了网关版和节点板,在设计之初IIC设计反了,为了不影响使用,这是采用软件IIC实现AS3935,OLED屏幕的驱动
原理图设计
PCB设计
3D预览
Kicad使用起来很丝滑,打开速度很快,更重要的是免费,开源。
最后使用免费打样平台进行PCB打样。免费打样,很香!!!
PCB到货与焊接
4.软件设计
本期使用Arduino IDE开发ESP32C6,软件开发环境都在ESP32里面,编译的时候选择ESP32C6的开发版型号即可,支持包链接:https://espressif.github.io/arduino-esp32/package_esp32_index.json
1.节点端软件设计
软件分为节点端和网关端,在节点端软件的设计上,通过软串口采集GPS数据包,并解析出格式,从中获取定位的信息。当发生雷电时,雷电传感器采集雷电数据,显示闪电的距离和强度等级,当检测到火源,火焰传感器输出信号到节点端。以上的数据通过zigbee协议发送到网关端实时接收并传输到云端。
void setup() {
Serial.begin(115200);
while (!Serial) {
// 等待串口连接
delay(10);
}
// 初始化GPS软串口
gpsSerial.begin(GPSBaud);
Serial.println("AS3935雷电传感器初始化!");
// 初始化I2C总线
Wire.begin(AS3935_SDA, AS3935_SCL);
while (lightning0.begin() != 0) {
Serial.print(".");
}
lightning0.defInit();
// 配置火焰传感器引脚为输入
pinMode(FLAME_PIN, INPUT);
// 配置电池电压采集引脚为ADC输入
analogReadResolution(12); // 12位精度
// 使能中断
attachInterrupt(digitalPinToInterrupt(IRQ_PIN), AS3935_ISR, RISING);
// 配置传感器
lightning0.manualCal(AS3935_CAPACITANCE, AS3935_MODE, AS3935_DIST);
Serial.println("初始化完成,开始数据采集!");
}
void loop() {
// 检查GPS串口是否有数据
if (gpsSerial.available() > 0) {
if (gps.encode(gpsSerial.read())) {
}
}
// 采集数据 1S采集一次
if (millis() - GPS_TIME >= gpsInterval) {
GPS_TIME = millis(); // 更新上一次时间
displayInfo(); // 读取到数据时显示信息
}
if (millis() - Sensor_TIME >= SensorInterval) {
Sensor_TIME = millis(); // 更新上一次时间
Get_Sensor();
}
// 检查是否有雷电事件
while (AS3935IsrTrig == 0) { delay(1); }
delay(5); // 确保中断处理完成
// 重置中断标志
AS3935IsrTrig = 0;
// 获取中断源
uint8_t intSrc = lightning0.getInterruptSrc();
if (intSrc == 1) {
// 获取雷电距离
uint8_t lightningDistKm = lightning0.getLightningDistKm();
Serial.println("检测到雷电事件!");
Serial.print("距离: ");
Serial.print(lightningDistKm);
Serial.println(" km");
// 获取雷电能量强度
uint32_t lightningEnergyVal = lightning0.getStrikeEnergyRaw();
Serial.print("强度: ");
Serial.println(lightningEnergyVal);
} else if (intSrc == 2) {
Serial.println("发现干扰信号!");
} else if (intSrc == 3) {
Serial.println("噪声水平过高!");
}
}
2.网关端软件设计
网关端的ESP32C6主控为zigbee协调器模式,用于接收节点端的信息并解析,通过软件口的方式将数据按照json格式的数据包发送给Wi-Fi模块,Wi-Fi模块内部解析json格式数据包,通过MQTT协议传输到云平台实现远程的数据监控。
网关部分当通过esp_app_zb_attribute_handler接收到数据并解析,通过OLED屏幕显示出当前获取到的数据
static void esp_app_zb_attribute_handler(uint16_t cluster_id, const esp_zb_zcl_attribute_t *attribute) {
if (cluster_id == ESP_ZB_ZCL_CLUSTER_ID_TEMP_MEASUREMENT && attribute->id == ESP_ZB_ZCL_ATTR_TEMP_MEASUREMENT_VALUE_ID) {
int16_t value = attribute->data.value ? *(int16_t *)attribute->data.value : 0;
float temperature = zb_s16_to_temperature(value);
// 输出温度数据
log_i("Sensor %d - Measured Value: %.2f", cluster_id, temperature);
// 清空显示屏并设置温度显示
display.clear();
display.setFont(ArialMT_Plain_16);
display.setTextAlignment(TEXT_ALIGN_LEFT);
display.drawString(0, 0, "Sensor Data");
display.setFont(ArialMT_Plain_10);
display.drawString(0, 20, "Temperature: ");
display.drawString(80, 20, String(temperature) + " °C");
display.drawString(0, 30, "flame");
display.drawString(80, 30,"ture");
// display.drawString(80, 30, String(zb_s16_to_temperature(anzeige_luftfeuchte)) + " %");
display.drawString(0, 40, "GPS");
display.drawString(80, 40, "OK");
// display.drawString(80, 40, String(anzeige_hoehe) + "m");
display.display();
}
3.云端软件设计
为了方便快速接入云端和可视化界面设计,本次我们采用点灯科技APP,搭建出数据监控平台,改平台接入速度快,开发方式简单,并且免费的特点很受欢迎。
云端主要显示当前节点的经纬度,必要的时候可通过地图API接口实现地图显示,另外还有雷电的数据,如雷电距离,雷电强度等级。还有火焰情况。
由于第一次接触Zigbee并且首次玩ESP32C6,在Zigbee协议的发送和数据解析还在研究,本人能力有限,目前整体架构和代码出要在发送和解析zigbee数据,因此本项目还会继续制作和更新。
5.活动心得
感谢德捷与电子森林举办FastBond第3季活动的挑战部分,从题目需求分析,硬件选型,EDA设计,程序编写与调试极大锻炼了我的开发能力,同时感谢电子森林举办的活动,也非常感谢平台的各种资料,在期间学到很多有用的知识。期待下一次的FastBond活动,冲!