1 基于51单片机的空气质量检测PM2.5粉尘检测设计

随着工业化和城市化的快速发展,空气污染问题日益严重,其中以PM2.5为代表的可吸入颗粒物对人体健康危害尤为突出。传统的空气质量检测设备价格较高且体积庞大,不适合家庭或小型场所使用。因此,设计一种基于51单片机的低成本、体积小、功能齐全的PM2.5空气质量检测系统具有重要的应用价值。

本文介绍的设计以STC89C52单片机为核心,结合GP2Y1010AU0F粉尘传感器、ADC0832模数转换芯片、LCD1602液晶显示器、LED指示灯、蜂鸣器、风扇以及按键电路,能够实现空气质量实时监测、报警阈值设置和自动声光报警等功能,满足日常空气环境检测的需求。


2 系统功能介绍

  1. PM2.5数据采集
    系统采用GP2Y1010AU0F粉尘传感器检测空气中的粉尘浓度,并输出模拟电压信号。

  2. 模数转换与数据处理
    传感器输出的模拟信号通过ADC0832转换为数字信号,再由单片机进行采样、分析和处理。

  3. 液晶显示
    LCD1602液晶屏实时显示检测到的PM2.5浓度值,以及当前设定的报警阈值,方便用户观察。

  4. 阈值设置
    系统通过按键设置PM2.5报警阈值,支持单次加减和长按连加连减功能,操作简单直观。

  5. 声光报警与风扇控制
    当PM2.5浓度超过设定阈值时,系统启动蜂鸣器和红色LED进行声光报警,同时启动风扇进行空气净化。

  6. 多级指示灯显示

    • 0–100:绿色灯亮,空气质量良好
    • 100–250:黄色灯亮,空气质量一般
    • 250:红色灯亮并触发报警


3 系统电路设计

3.1 单片机最小系统电路

STC89C52单片机作为核心控制器,负责数据采集、逻辑处理与外设控制。最小系统包括:

  • 晶振电路(12MHz)保证单片机时钟稳定。
  • 复位电路保证系统上电初始化。
  • 电源电路提供稳定的+5V供电。

3.2 PM2.5传感器电路

GP2Y1010AU0F粉尘传感器采用红外散射原理,能够输出与空气中粉尘浓度成比例的模拟电压。该信号较弱,需经过运放放大和滤波后送入ADC0832。

3.3 ADC0832模数转换电路

由于单片机本身不具备模拟采集功能,因此采用ADC0832芯片将模拟电压转换为8位数字信号。单片机通过SPI接口与ADC0832通信,定时采集传感器的电压数据。

3.4 LCD1602液晶显示电路

LCD1602模块用于实时显示PM2.5浓度和报警阈值,采用4位数据总线方式与单片机通信,既能减少IO口占用,又能保证显示稳定。

3.5 按键电路

系统设置了三个按键:

  • K1:模式切换键,用于进入或退出设置模式。
  • K2:加键,用于增加报警阈值。
  • K3:减键,用于减少报警阈值。

按键采用下拉电阻设计,按下后为低电平,单片机通过轮询或中断方式读取。软件中加入消抖程序。

3.6 声光报警与风扇控制电路

  • 蜂鸣器:采用有源蜂鸣器,单片机输出高电平即可驱动。
  • LED灯:三色LED分别显示空气质量状态(绿、黄、红)。
  • 风扇:通过继电器驱动,当PM2.5超过阈值时自动启动。

3.7 电源电路

系统采用5V电源,单片机、LCD和蜂鸣器直接使用,传感器和ADC0832模块同样由该电源供电。


4 程序设计

软件部分主要由以下几个模块组成:

  1. 系统初始化:完成IO口、LCD、ADC0832、蜂鸣器等外设初始化。
  2. 数据采集程序:通过ADC0832读取粉尘传感器电压,转换为PM2.5浓度。
  3. LCD显示程序:将当前浓度和报警阈值显示在液晶屏上。
  4. 按键处理程序:完成阈值的增加、减少与模式切换。
  5. 报警与控制逻辑:根据浓度与阈值的比较结果,控制蜂鸣器、LED和风扇。
  6. 主循环程序:实现上述功能的逻辑执行。

4.1 系统初始化

void System_Init()
{
    LCD_Init();       // 初始化LCD1602
    ADC0832_Init();   // 初始化ADC0832
    Beep_Init();      // 初始化蜂鸣器
    LED_Init();       // 初始化LED
    Key_Init();       // 初始化按键
    Relay_Init();     // 初始化风扇控制继电器
}

4.2 ADC0832数据采集

unsigned char ADC0832_Read()
{
    unsigned char i, dat = 0;
    CS = 0; 
    CLK = 0; 
    DI = 1; 
    CLK = 1; 
    CLK = 0; 
    DI = 1; 
    CLK = 1; 
    CLK = 0; 
    DI = 0; 
    CLK = 1; 
    for(i = 0; i < 8; i++)
    {
        CLK = 0;
        CLK = 1;
        dat = (dat << 1) | DO;
    }
    CS = 1;
    return dat;
}

4.3 LCD显示程序

void Display_Data(unsigned int pm25, unsigned int threshold)
{
    LCD_SetCursor(0,0);
    LCD_Print("PM2.5: ");
    LCD_PrintNum(pm25);
    
    LCD_SetCursor(1,0);
    LCD_Print("Alarm: ");
    LCD_PrintNum(threshold);
}

4.4 按键处理程序

void Key_Scan()
{
    if(K1 == 0)   // 模式切换
    {
        DelayMs(10);
        if(K1 == 0) SettingMode = !SettingMode;
    }
    if(SettingMode)
    {
        if(K2 == 0) // 增加阈值
        {
            DelayMs(10);
            if(K2 == 0) AlarmThreshold += 5;
        }
        if(K3 == 0) // 减少阈值
        {
            DelayMs(10);
            if(K3 == 0 && AlarmThreshold > 5) AlarmThreshold -= 5;
        }
    }
}

4.5 报警与控制逻辑

void Alarm_Control(unsigned int pm25)
{
    if(pm25 <= 100)
    {
        GreenLED = 0; YellowLED = 1; RedLED = 1;
        Beep = 1; Fan = 0;
    }
    else if(pm25 > 100 && pm25 <= AlarmThreshold)
    {
        GreenLED = 1; YellowLED = 0; RedLED = 1;
        Beep = 1; Fan = 0;
    }
    else
    {
        GreenLED = 1; YellowLED = 1; RedLED = 0;
        Beep = 0; Fan = 1;
    }
}

4.6 主循环程序

void main()
{
    unsigned int pm25;
    System_Init();
    while(1)
    {
        pm25 = ADC0832_Read() * 4; // 转换为实际浓度值
        Key_Scan();
        Display_Data(pm25, AlarmThreshold);
        Alarm_Control(pm25);
    }
}

5 总结

本文介绍了一种基于51单片机的空气质量检测PM2.5粉尘检测系统。系统通过GP2Y1010AU0F传感器和ADC0832完成数据采集,利用LCD1602显示实时浓度和阈值设置,结合按键实现参数调整,并通过LED指示灯、蜂鸣器和风扇实现空气质量状态提示与报警。

该设计不仅结构简单、成本低廉,而且具备良好的扩展性,可应用于家庭、办公室、实验室等场所的空气质量监控,为人们提供安全舒适的生活环境。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐