基于STM32单片机的OneNet物联网粉尘烟雾检测系统

基于STM32单片机的OneNet物联网粉尘烟雾检测系统设计


1 功能介绍

随着工业化和城市化的加速发展,空气质量问题越来越受到人们的重视,尤其是粉尘和烟雾对人体健康和居住环境产生了显著影响。为了实现家庭、工厂、实验室等场所的空气质量智能监测,本设计基于STM32单片机构建了一个粉尘与烟雾检测系统,并接入OneNet物联网云平台,实现远程数据查看与实时控制。

本系统主要实现以下功能:

  1. 通过STM32单片机实时采集粉尘浓度和烟雾浓度数据,并将检测结果显示和处理;
  2. 通过WiFi模块将检测到的数据上传至OneNet物联网云平台,用户可通过手机APP或网页实时查看;
  3. 当烟雾浓度超过预设阈值时,系统会自动驱动舵机模拟窗户开启,以保证空气流通;当烟雾浓度恢复到正常水平时,窗户自动关闭;
  4. 当粉尘浓度超过设定阈值时,系统通过继电器驱动风扇进行通风,同时蜂鸣器报警,提醒用户采取相应措施;
  5. 整个系统可以在无人值守的情况下持续运行,适合环境监测与家庭安全防护场景。

通过该系统,用户不仅能够实时掌握周围环境中的粉尘与烟雾情况,还能够借助智能硬件联动措施降低风险,具备较高的实用价值。


2 系统电路设计

系统电路设计以STM32单片机为核心,扩展粉尘传感器、烟雾传感器、舵机、继电器、蜂鸣器及通信模块等外设,构成完整的监测与执行系统。以下分模块详细介绍。

2.1 主控芯片电路(STM32最小系统)

STM32F103C8T6作为系统的主控芯片,具备高速处理能力和丰富的外设接口,适用于多传感器数据采集与外设控制。最小系统电路包括:

  • 时钟电路:使用8MHz晶振,保证系统运行稳定;
  • 复位电路:上电或手动复位时确保MCU进入初始状态;
  • 电源电路:提供稳定的3.3V电源,供MCU及其他低功耗外设使用。

2.2 粉尘浓度检测电路

粉尘浓度检测可选用GP2Y1010AU0F粉尘传感器,该传感器通过红外光散射原理检测空气中的粉尘颗粒浓度。其模拟信号输出接入STM32的ADC通道,经过模数转换后即可得到粉尘浓度值。该模块功耗低,适合连续监测。

2.3 烟雾浓度检测电路

烟雾检测采用MQ-2气体传感器,该传感器对烟雾、可燃气体等敏感,能够输出与浓度成比例的模拟电压信号。信号通过STM32的ADC接口采样,并与设定的阈值比较。该电路在系统中主要负责触发开窗动作。

2.4 舵机控制电路

舵机用于模拟窗户的开合状态,通过PWM波进行驱动。STM32的定时器输出PWM信号,不同的占空比对应不同的转角。烟雾超过阈值时,MCU输出控制信号使舵机旋转到"开窗"位置;恢复正常后舵机回到"关窗"位置。

2.5 风扇控制电路(继电器驱动)

当粉尘浓度过高时,系统通过继电器驱动直流风扇。继电器作为开关器件,能够承受较大电流,从而保证风扇稳定运行。控制信号来自STM32的GPIO口,经三极管放大后驱动继电器线圈,完成开关动作。

2.6 蜂鸣器电路

蜂鸣器作为报警提示装置,与STM32的GPIO口相连。当粉尘浓度超过设定阈值时,系统驱动蜂鸣器发声提醒用户。通过PWM控制可以实现间歇或连续报警。

2.7 OneNet通信电路

本系统选用ESP8266 WiFi模块作为通信媒介,通过UART接口与STM32连接。STM32通过AT指令或透传协议控制ESP8266接入WiFi,并通过MQTT协议将粉尘与烟雾浓度数据上传至OneNet平台,实现云端监测。

2.8 电源电路

整个系统采用5V直流电源输入,经过稳压电路输出3.3V供STM32及传感器使用,5V直接用于继电器和风扇驱动。为保证电源稳定性,设计中加入滤波电容和二极管防反接保护。


3 程序设计

程序设计包括传感器采集、阈值判断、执行机构控制及数据上传至OneNet平台四大部分。系统基于STM32标准外设库开发,采用C语言实现。

3.1 主程序设计

主程序负责调用各模块的初始化与运行逻辑,整体结构包括:系统初始化、传感器采集、阈值判断、执行控制、数据上传。

c 复制代码
#include "stm32f10x.h"
#include "adc.h"
#include "usart.h"
#include "esp8266.h"
#include "servo.h"
#include "relay.h"
#include "buzzer.h"
#include "delay.h"

float dust_value;
float smoke_value;
float dust_threshold = 200.0;
float smoke_threshold = 300.0;

int main(void)
{
    SystemInit();
    USART1_Init(115200);
    ADC_InitConfig();
    ESP8266_Init();
    Servo_Init();
    Relay_Init();
    Buzzer_Init();
    
    while(1)
    {
        // 采集传感器数据
        dust_value = Read_Dust();
        smoke_value = Read_Smoke();
        
        // 上传数据至OneNet
        ESP8266_SendData(dust_value, smoke_value);
        
        // 烟雾判断
        if(smoke_value > smoke_threshold)
        {
            Servo_Open();
        }
        else
        {
            Servo_Close();
        }
        
        // 粉尘判断
        if(dust_value > dust_threshold)
        {
            Relay_On();   // 打开风扇
            Buzzer_On();  // 蜂鸣器报警
        }
        else
        {
            Relay_Off();
            Buzzer_Off();
        }
        
        Delay_ms(1000);  // 每秒采集一次
    }
}

3.2 粉尘浓度采集程序

c 复制代码
float Read_Dust(void)
{
    uint16_t adc_val;
    float voltage, density;
    adc_val = ADC_GetConversionValue(ADC1); // 假设通道接粉尘传感器
    voltage = (adc_val / 4096.0) * 3.3;    // 转换为电压
    density = voltage * 500;               // 简化公式:电压与浓度换算
    return density;
}

3.3 烟雾浓度采集程序

c 复制代码
float Read_Smoke(void)
{
    uint16_t adc_val;
    float voltage, concentration;
    adc_val = ADC_GetConversionValue(ADC2); // 假设通道接烟雾传感器
    voltage = (adc_val / 4096.0) * 3.3;
    concentration = voltage * 600;         // 烟雾浓度换算
    return concentration;
}

3.4 舵机控制程序

c 复制代码
void Servo_Open(void)
{
    TIM_SetCompare1(TIM3, 200);  // 设置PWM占空比对应开窗角度
}

void Servo_Close(void)
{
    TIM_SetCompare1(TIM3, 50);   // 设置PWM占空比对应关窗角度
}

3.5 继电器与蜂鸣器控制程序

c 复制代码
void Relay_On(void)
{
    GPIO_ResetBits(GPIOB, GPIO_Pin_5);
}

void Relay_Off(void)
{
    GPIO_SetBits(GPIOB, GPIO_Pin_5);
}

void Buzzer_On(void)
{
    GPIO_SetBits(GPIOB, GPIO_Pin_6);
}

void Buzzer_Off(void)
{
    GPIO_ResetBits(GPIOB, GPIO_Pin_6);
}

3.6 ESP8266通信程序

c 复制代码
void ESP8266_SendData(float dust, float smoke)
{
    char buffer[100];
    sprintf(buffer,"{\"dust\":%.2f,\"smoke\":%.2f}",dust,smoke);
    USART_SendString(USART1, "AT+CIPSEND=0,");
    USART_SendString(USART1, buffer);
}

4 总结

本系统基于STM32单片机,结合粉尘传感器、烟雾传感器、继电器、舵机、蜂鸣器及ESP8266 WiFi模块,构建了一个功能完善的空气质量监测与控制平台。系统能够实时检测粉尘和烟雾浓度,并通过OneNet物联网平台实现远程查看,提升了用户对环境状况的感知能力。

在系统运行中,当烟雾超过阈值时,自动开启"窗户"保持空气流通;当粉尘超过阈值时,自动开启风扇并报警,提醒用户注意空气质量。系统具备自动化、实时性与远程监测三大优势,应用场景广泛,如家庭空气净化、实验室安全监控、工厂车间环境监测等。

通过该设计,可以有效提升空气质量管理水平,为人们创造更加安全健康的生活与工作环境。

相关推荐
点灯小铭3 小时前
基于51单片机水塔水箱液水位WIFI监控报警设计
单片机·嵌入式硬件·mongodb·毕业设计·51单片机·课程设计
自激振荡器4 小时前
2,GUI Guider的安装与导入STM32裸机工程
stm32·单片机·嵌入式硬件·lvgl·gui guider
计算机编程小央姐4 小时前
【Spark+Hive+hadoop】基于spark+hadoop基于大数据的全球用水量数据可视化分析系统大数据毕设
大数据·hadoop·数据分析·spark·课程设计
<man>4 小时前
STM32_08_中断(☆☆☆)
stm32·单片机·嵌入式硬件
沐欣工作室_lvyiyi5 小时前
基于单片机的智能奶茶机(论文+源码)
单片机·嵌入式硬件·毕业设计·智能奶茶机
俊昭喜喜里5 小时前
stm32中的位带操作的使用意义
stm32·单片机·嵌入式硬件
IT学长编程5 小时前
计算机毕业设计 基于Python的音乐推荐系统 Python 大数据毕业设计 Hadoop毕业设计选题【附源码+文档报告+安装调试】
大数据·hadoop·python·深度学习·毕业设计·课程设计·音乐推荐系统
工业互联网专业6 小时前
南京某高校校园外卖点餐系统_django
vue.js·python·django·毕业设计·源码·课程设计·校园外卖点餐系统
TDengine (老段)6 小时前
TDengine 聚合函数 SPREAD 用户手册
大数据·数据库·sql·物联网·时序数据库·tdengine·涛思数据