基于STM32单片机的OneNet物联网粉尘烟雾检测系统
基于STM32单片机的OneNet物联网粉尘烟雾检测系统设计
1 系统功能介绍
本系统的核心任务是基于STM32单片机实现粉尘浓度与烟雾浓度的实时监测,并通过互联网实现远程管理与告警联动。随着工业化与城市化的加快,空气中的颗粒物和烟雾浓度对人类健康影响越来越大,因此构建一个实时的检测与告警系统具有重要意义。系统采用STM32作为主控,借助传感器采集空气质量数据,并通过ESP8266 WiFi模块将信息上传到中国移动OneNet云平台,实现远程监控与数据管理。
本系统的主要功能包括:
- 实时检测空气中的粉尘浓度与烟雾浓度,并在液晶屏幕上显示。
- 当检测的烟雾浓度超过设定阈值时,自动驱动舵机打开窗户;当浓度降低时自动关闭窗户,模拟智能通风功能。
- 当粉尘浓度超过阈值时,继电器控制风扇启动,同时蜂鸣器发出报警声,以提醒用户空气质量异常。
- 将检测到的粉尘与烟雾数据通过ESP8266模块上传到OneNet平台,用户可通过手机APP或网页端实时查看监测数据。
- 阈值可在程序中修改,也可以通过云端下发配置,实现灵活的参数调节。
该系统不仅具备自动化联动与声光报警,还实现了物联网数据远程监控,适合用于家庭、实验室、工厂车间等空气质量管理场景。
2 系统电路设计
电路设计是本系统的核心部分,涵盖了主控模块、传感器模块、通信模块、执行模块及辅助电路等。以下对各个子模块进行详细说明。
2.1 主控电路(STM32F103C8T6)
系统采用STM32F103C8T6作为主控制芯片,具备高性能、低功耗及丰富的外设接口。其主要作用包括:
- 接收粉尘与烟雾传感器的模拟信号并进行AD转换。
- 控制舵机实现窗户的开合。
- 控制继电器驱动风扇运行。
- 控制蜂鸣器进行报警提示。
- 通过UART与ESP8266 WiFi模块通信,将数据上传至云端。
- 进行阈值比较与逻辑判断,确保系统具备实时响应能力。
电路部分主要包括最小系统电路(电源、时钟、复位)、外设接口电路与调试下载接口。
2.2 粉尘浓度检测模块
粉尘浓度传感器可选用GP2Y1010AU0F或同类光学粉尘传感器。该传感器内部通过红外发射与接收实现对空气中悬浮颗粒物浓度的检测。其输出为模拟电压信号,浓度越高,电压输出值越大。STM32通过ADC采集并计算,转换为粉尘浓度数值。
2.3 烟雾检测模块
烟雾检测部分采用MQ-2气体传感器。该传感器对烟雾、可燃气体等敏感,其输出同样为模拟电压信号。STM32对信号进行ADC采样后即可得到烟雾浓度变化趋势。通过对比设定阈值,判断是否触发报警与窗户开关控制。
2.4 通信模块(ESP8266)
ESP8266模块通过串口与STM32通信,实现数据上传。系统将采集到的粉尘与烟雾数据打包成JSON格式,并按照OneNet平台的协议进行数据推送。通过WiFi接入互联网后,用户可以远程实时查看监控数据。
2.5 执行模块
- 舵机控制电路:使用PWM信号控制舵机转动,实现模拟窗户的开合。
- 继电器驱动电路:通过三极管驱动继电器,控制风扇的通断电,完成自动除尘与通风。
- 蜂鸣器报警电路:由STM32控制,当空气质量异常时蜂鸣器响起,提示用户采取措施。
2.6 电源电路
系统采用5V电源输入,STM32与ESP8266工作电压均为3.3V,因此需要LDO稳压电路进行降压转换。为保证系统稳定,增加电容滤波与保护电路。
3 系统程序设计
程序设计是实现系统功能的核心部分,主要分为传感器数据采集、逻辑控制、外设驱动与网络通信几个方面。
3.1 主程序设计
主程序主要流程如下:
- 系统初始化(时钟、串口、ADC、PWM、继电器IO、蜂鸣器IO等)。
- 进入循环,实时采集粉尘与烟雾数据。
- 判断是否超过阈值,执行相应控制动作。
- 将数据通过ESP8266模块上传至OneNet平台。
- 延时一段时间后继续采集,实现实时检测与联动。
核心框架代码如下:
#include "stm32f10x.h"
#include "usart.h"
#include "adc.h"
#include "delay.h"
#include "pwm.h"
#include "esp8266.h"#define DUST_THRESHOLD 300 // 粉尘阈值
#define SMOKE_THRESHOLD 400 // 烟雾阈值int main(void)
{uint16_t dust_value, smoke_value;// 初始化外设USART1_Init(115200);ADC1_Init();PWM_Init();ESP8266_Init();while(1){// 采集传感器数据dust_value = ADC_Read(0); // 粉尘传感器接ADC0smoke_value = ADC_Read(1); // 烟雾传感器接ADC1// 判断烟雾浓度if(smoke_value > SMOKE_THRESHOLD){Servo_Open(); // 打开窗户}else{Servo_Close(); // 关闭窗户}// 判断粉尘浓度if(dust_value > DUST_THRESHOLD){Relay_On(); // 打开风扇Buzzer_On(); // 蜂鸣器报警}else{Relay_Off();Buzzer_Off();}// 上传数据到OneNetESP8266_SendData(dust_value, smoke_value);delay_ms(1000);}
}
3.2 ADC数据采集程序
STM32的ADC模块用于采集粉尘与烟雾传感器的电压信号。
uint16_t ADC_Read(uint8_t channel)
{ADC_RegularChannelConfig(ADC1, channel, 1, ADC_SampleTime_55Cycles5);ADC_SoftwareStartConvCmd(ADC1, ENABLE);while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));return ADC_GetConversionValue(ADC1);
}
3.3 舵机控制程序
舵机通过PWM信号控制,典型占空比范围为0.5ms-2.5ms对应0°-180°。
void Servo_Open(void)
{TIM_SetCompare1(TIM2, 250); // 占空比对应打开位置
}void Servo_Close(void)
{TIM_SetCompare1(TIM2, 75); // 占空比对应关闭位置
}
3.4 继电器与蜂鸣器控制程序
void Relay_On(void)
{GPIO_ResetBits(GPIOB, GPIO_Pin_0);
}void Relay_Off(void)
{GPIO_SetBits(GPIOB, GPIO_Pin_0);
}void Buzzer_On(void)
{GPIO_ResetBits(GPIOB, GPIO_Pin_1);
}void Buzzer_Off(void)
{GPIO_SetBits(GPIOB, GPIO_Pin_1);
}
3.5 ESP8266通信程序
ESP8266负责将采集的数据上传至OneNet平台。数据通常打包成JSON格式并通过HTTP或MQTT协议发送。
void ESP8266_SendData(uint16_t dust, uint16_t smoke)
{char buffer[100];sprintf(buffer, "{\"dust\":%d,\"smoke\":%d}", dust, smoke);ESP8266_SendCMD("AT+CIPSTART=\"TCP\",\"183.230.40.33\",80\r\n", "OK", 1000);ESP8266_SendCMD("AT+CIPSEND=50\r\n", ">", 1000);ESP8266_SendCMD(buffer, "SEND OK", 1000);
}
4 总结
本系统通过STM32单片机结合粉尘与烟雾传感器,实现了对空气质量的实时检测与控制,并通过ESP8266模块将数据上传至OneNet物联网平台,实现了远程监控。系统在功能上具备数据采集、自动联动控制、报警提醒以及云端数据管理等多种特性,能够广泛应用于家庭空气净化、工厂车间安全管理以及公共场所环境监控。
从电路设计角度看,本系统涵盖了主控、传感器、执行机构、通信及电源模块,具有完整的结构;从软件设计上,程序架构清晰,传感器采集、阈值判断、控制执行与云端通信模块分工明确,保证了系统的稳定性与可扩展性。
整体而言,本系统不仅验证了STM32单片机在物联网环境监测中的应用价值,也为进一步拓展更多传感器和智能控制功能提供了良好基础。