基于51单片机的蓝牙+PM2.5+DHT11温湿度上下限报警系统设计
一、系统概述设计以STC89C52RC单片机11.0592MHz晶振为核心集成蓝牙通信HC-05、PM2.5空气质量检测GP2Y1010AU0F、DHT11温湿度检测三大模块实现环境参数的实时采集、上下限报警与远程监控。系统支持本地显示LCD1602、声光报警蜂鸣器LED和蓝牙数据传输手机APP查看/设置阈值适用于家庭、教室、办公室等场景的空气质量管理。二、硬件设计2.1 核心组件选型模块型号/参数功能说明主控STC89C52RC8KB Flash512B RAM传感器数据采集、阈值判断、蓝牙通信、报警控制蓝牙模块HC-05主从一体蓝牙2.0与手机APP通信串口透传波特率9600bpsPM2.5传感器GP2Y1010AU0F模拟输出0.5V3.5V对应0500μg/m³检测PM2.5浓度需ADC转换温湿度传感器DHT11单总线数字输出检测温度050℃±2℃、湿度2090%RH±5%RHADC转换ADC08328位串行ADC将PM2.5模拟量转换为数字量0~255显示模块LCD160216×2字符型液晶显示温湿度、PM2.5值、报警状态报警模块有源蜂鸣器5V 红色LED超限时声光报警蜂鸣器鸣叫LED闪烁按键3个轻触按键设置/加/减设置温湿度/PM2.5上下限阈值电源5V/2A DCUSB供电或7805稳压为系统供电传感器、蓝牙、LCD均需5V2.2 硬件连接图---------------------------------------------------------|STC89C52RC||传感器模块||执行模块||P3.0(RXD)← HC-05|TXD|DHT11:DATA→P3.7||蜂鸣器→P2.3||P3.1(TXD)→ HC-05|RXD|GP2Y1010:AO→ADC0832(CH0)||LED→P2.4||P1.0→ADC0832(CS)|←→|ADC0832:VCC→5V,GND→GND|-------------------|P1.1→ADC0832(CLK)||蓝牙HC-05:VCC→5V,GND→GND|-------------------|P1.2→ADC0832(DO)||LCD1602:RS→P2.0,RW→P2.1,E→P2.2||按键模块||P3.7→DHT11(DATA)||D0~D7→P0口||设置→P3.2,加→P3.3,减→P3.4||P2.0~P2.2→LCD1602|--------------------------------------|P0口→LCD1602(D0~D7)||HC-05:STATE→P3.5状态指示|---------------------------------------------------------|电源模块||5V/2A→各模块|-------------------关键说明GP2Y1010AU0F需串联一个150Ω电阻和220μF电容滤波模拟输出电压与PM2.5浓度关系约为Vout(V) 0.17×C(μg/m³) 0.5C为浓度ADC08328位分辨率0255对应05V需软件实现串行读取HC-05默认波特率9600bps通过AT指令可配置为主/从模式本设计设为从机手机APP为主机。三、软件设计Keil C513.1 开发环境IDEKeil μVision5C51编译器晶振11.0592MHz确保串口波特率误差1%通信协议蓝牙串口透传手机APP发送指令单片机返回数据、DHT11单总线协议、ADC0832串行协议3.2 核心原理数据采集温湿度DHT11单总线协议读取40位数据16位湿度16位温度8位校验和PM2.5ADC0832采集GP2Y1010模拟输出转换为电压后计算浓度μg/m³阈值判断对比采集值与预设上下限温湿度、PM2.5超限则触发报警蓝牙通信通过串口发送数据到手机APP格式T:25℃ H:50% P:35μg/m³ ALARM:0接收APP设置的阈值显示与报警LCD1602实时显示参数超限时蜂鸣器鸣叫、LED闪烁。3.3 核心代码实现3.3.1 头文件与引脚定义#includereg52.h#includeintrins.h#includestring.h// 引脚定义 // 蓝牙模块HC-05#defineBLUETOOTH_RXDP3_0// 单片机RXD接HC-05 TXD#defineBLUETOOTH_TXDP3_1// 单片机TXD接HC-05 RXD// ADC0832PM2.5传感器sbit ADC_CSP1^0;sbit ADC_CLKP1^1;sbit ADC_DOP1^2;// DHT11温湿度sbit DHT11_DATAP3^7;// LCD1602sbit LCD_RSP2^0;sbit LCD_RWP2^1;sbit LCD_EP2^2;#defineLCD_DBP0// 数据总线// 报警模块sbit BUZZERP2^3;// 蜂鸣器sbit ALARM_LEDP2^4;// 报警LED// 按键设置/加/减sbit KEY_SETP3^2;sbit KEY_ADDP3^3;sbit KEY_SUBP3^4;// 全局变量 unsignedchartemp0,humi0;// DHT11温湿度整数unsignedcharpm25_adc0;// PM2.5的ADC值0~255floatpm25_conc0;// PM2.5浓度μg/m³// 阈值默认温度20~30℃湿度30~70%RHPM2.5 0~75μg/m³unsignedchartemp_min20,temp_max30;unsignedcharhumi_min30,humi_max70;unsignedcharpm25_max75;// PM2.5通常只设上限bit alarm_flag0;// 报警标志1超限3.3.2 延时函数微秒/毫秒级// 微秒延时11.0592MHz1us≈12机器周期voidDelayUs(unsignedintus){while(us--){_nop_();_nop_();_nop_();_nop_();// 4个_nop_≈3.6us}}// 毫秒延时voidDelayMs(unsignedintms){unsignedinti,j;for(i0;ims;i)for(j0;j110;j);// 110次循环≈1ms}3.3.3 DHT11温湿度读取// DHT11初始化检测设备bitDHT11_Init(){DHT11_DATA1;DelayUs(30);DHT11_DATA0;DelayMs(20);// 主机拉低18ms以上DHT11_DATA1;DelayUs(30);// 释放总线if(!DHT11_DATA){// 等待DHT11响应拉低80uswhile(!DHT11_DATA);// 等待响应结束while(DHT11_DATA);// 等待DHT11准备数据return1;// 初始化成功}return0;// 初始化失败}// 读取DHT11数据返回0成功1失败bitDHT11_ReadData(){unsignedchari,buf[5]{0};if(!DHT11_Init())return1;// 读取40位数据5字节for(i0;i40;i){while(!DHT11_DATA);// 等待低电平50usDelayUs(30);// 延时30us判断高电平持续时间buf[i/8]1;if(DHT11_DATA)buf[i/8]|1;// 高电平30us表示1while(DHT11_DATA);// 等待高电平结束}// 校验和验证前4字节和第5字节if(buf[4](buf[0]buf[1]buf[2]buf[3])){humibuf[0];// 湿度整数部分tempbuf[2];// 温度整数部分return0;}return1;}3.3.4 ADC0832 PM2.5采集// 读取ADC0832通道0unsignedcharADC0832_Read(){unsignedchari,dat0;ADC_CS0;// 片选使能ADC_CLK0;// 发送通道选择CH0起始位1位通道号ADC_DO1;_nop_();ADC_CLK1;_nop_();ADC_CLK0;// 起始位ADC_DO0;_nop_();ADC_CLK1;_nop_();ADC_CLK0;// CH0// 读8位数据MSB firstfor(i0;i8;i){ADC_CLK1;_nop_();dat1;if(ADC_DO)dat|0x01;ADC_CLK0;_nop_();}ADC_CS1;// 片选禁用returndat;// 0~255对应0~5V}// ADC值转换为PM2.5浓度μg/m³floatADC_to_PM25(unsignedcharadc_val){floatvoltageadc_val*5.0/255.0;// 转换为电压Vreturn(voltage-0.5)/0.17;// 公式C(Vout-0.5)/0.17GP2Y1010特性}3.3.5 LCD1602显示// LCD写命令voidLCD_WriteCmd(unsignedcharcmd){LCD_RS0;LCD_RW0;LCD_DBcmd;DelayUs(5);LCD_E1;DelayUs(5);LCD_E0;}// LCD写数据voidLCD_WriteData(unsignedchardat){LCD_RS1;LCD_RW0;LCD_DBdat;DelayUs(5);LCD_E1;DelayUs(5);LCD_E0;}// LCD初始化voidLCD_Init(){LCD_WriteCmd(0x38);// 8位数据2行显示LCD_WriteCmd(0x0C);// 开显示关光标LCD_WriteCmd(0x06);// 光标右移LCD_WriteCmd(0x01);// 清屏DelayMs(2);}// 显示温湿度、PM2.5与报警状态voidLCD_Display(){charbuf[16];// 第一行温度、湿度LCD_WriteCmd(0x80);sprintf(buf,T:%dC H:%d%%,temp,humi);for(chari0;buf[i];i)LCD_WriteData(buf[i]);// 第二行PM2.5、报警状态LCD_WriteCmd(0xC0);sprintf(buf,P:%dug/m3 %s,(int)pm25_conc,alarm_flag?ALARM!:);for(chari0;buf[i];i)LCD_WriteData(buf[i]);}3.3.6 报警控制与蓝牙通信// 报警控制超限时蜂鸣器鸣叫、LED闪烁voidAlarm_Control(){alarm_flag0;// 温度超限min或maxif(temptemp_min||temptemp_max)alarm_flag1;// 湿度超限min或maxif(humihumi_min||humihumi_max)alarm_flag1;// PM2.5超限maxif(pm25_concpm25_max)alarm_flag1;if(alarm_flag){BUZZER~BUZZER;// 蜂鸣器翻转鸣叫ALARM_LED~ALARM_LED;// LED闪烁}else{BUZZER0;// 关闭蜂鸣器ALARM_LED1;// LED熄灭}}// 蓝牙发送数据到手机APPvoidBluetooth_SendData(){charbuf[50];sprintf(buf,T:%dC,H:%d%%,P:%dμg/m3,ALARM:%d\r\n,temp,humi,(int)pm25_conc,alarm_flag);// 串口发送需实现串口初始化SBUFbuf[0];while(!TI);TI0;// 发送第一个字符示例实际需循环发送整个字符串// ...省略后续字符发送完整代码需遍历buf发送}3.3.7 主函数程序入口voidmain(){LCD_Init();// 初始化LCDUART_Init();// 初始化串口蓝牙通信9600bpswhile(1){// 1. 采集数据DHT11_ReadData();// 读取温湿度pm25_adcADC0832_Read();// 读取PM2.5的ADC值pm25_concADC_to_PM25(pm25_adc);// 转换为浓度// 2. 显示数据LCD_Display();// 3. 报警控制Alarm_Control();// 4. 蓝牙发送数据Bluetooth_SendData();// 5. 按键扫描设置阈值省略具体代码Key_Scan();DelayMs(1000);// 1秒刷新一次}}参考代码 基于51单片机 蓝牙PM2.5空气质量DHT11温湿度上下限报警的设计www.youwenfan.com/contentcst/181691.html四、测试与验证硬件连接按2.2节连接各模块确保电源稳定5V/2A传感器接线正确尤其GP2Y1010的滤波电路。功能测试用手捂住DHT11观察温度升高、湿度上升LCD显示变化超限时报警用香烟烟雾靠近GP2Y1010PM2.5浓度上升超过75μg/m³时触发报警手机APP连接HC-05接收数据并显示发送阈值设置指令如SET:T20:30:H30:70:P75。五、总结基于51单片机实现了蓝牙PM2.5DHT11的上下限报警系统核心是多传感器数据采集、阈值判断与蓝牙通信。通过LCD1602本地显示和声光报警结合手机APP远程监控可实时掌握环境空气质量与温湿度状态及时采取措施改善环境。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2490979.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!