当前位置: 首页 > article >正文

基于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远程监控可实时掌握环境空气质量与温湿度状态及时采取措施改善环境。

相关文章:

基于51单片机的蓝牙+PM2.5+DHT11温湿度上下限报警系统设计

一、系统概述 设计以STC89C52RC单片机(11.0592MHz晶振)为核心,集成蓝牙通信(HC-05)、PM2.5空气质量检测(GP2Y1010AU0F)、DHT11温湿度检测三大模块,实现环境参数的实时采集、上下限报…...

OpenClaw私人写作助手:Qwen3.5-9B实现从大纲到成稿全自动

OpenClaw私人写作助手:Qwen3.5-9B实现从大纲到成稿全自动 1. 为什么需要AI写作助手 作为一个技术博客作者,我每天要处理大量文字工作。从选题构思、大纲搭建到初稿撰写和格式调整,传统写作流程中充斥着重复性劳动。最痛苦的是灵感枯竭时面对…...

Vue.js核心原理之VNode如何映射真实DOM元素流程全解

VNode是Vue中描述DOM结构的轻量、可比较、不可变的JavaScript对象,包含tag、data、children等字段,不直接操作DOM,其真实DOM绑定和更新由patch过程完成。Vue.js 中的 VNode(虚拟节点)是实现响应式更新和高效 DOM 操作的…...

LDC1101嵌入式驱动开发:电感-数字转换器SPI控制与实时优化

1. LDC1101嵌入式驱动库深度解析:高精度电感-数字转换器的底层控制实践LDC1101是德州仪器(TI)推出的一款高分辨率、高速度电感-数字转换器(Inductance-to-Digital Converter),专为非接触式位置检测、金属物…...

Linux基础之目录结构

初学Linux,首先需要弄清Linux 标准目录结构 / root — 启动Linux时使用的一些核心文件。如操作系统内核、引导程序Grub等。home — 存储普通用户的个人文件 ftp — 用户所有服务httpdsambauser1user2 bin — 系统启动时需要的执行文件(二进制&#xf…...

智能开门柜自动售货机哪里生产

当你考虑引入一台智能开门柜自动售货机时,脑海中浮现的第一个问题往往是:“这东西,哪里生产的靠谱?”这背后,是对设备质量、技术稳定性和长期服务的深度关切。今天,我们就来深入剖析智能开门柜的生产格局&a…...

动态规划:从贝尔曼的智慧到算法竞赛的基石

引言在算法设计的广阔天地中,动态规划(Dynamic Programming,简称DP)无疑是一颗璀璨的明星。它既不像二分查找那样简洁直接,也不似深度优先搜索那样易于直觉理解,而是以一种近乎“魔法”的方式,将…...

如何解决SQL子查询阻塞问题_锁定机制与优化策略

子查询阻塞SELECT本质是锁等待而非语法慢,常见于REPEATABLE READ下间隙锁、IN子查询未索引或依赖型执行;优化需用EXPLAIN分析执行计划,优先改JOIN、加合适索引并验证。子查询导致 SELECT 被阻塞,本质是锁等待不是子查询语法本身慢…...

SecGPT-14B知识库增强:让OpenClaw支持最新CVE漏洞库

SecGPT-14B知识库增强:让OpenClaw支持最新CVE漏洞库 1. 为什么需要给OpenClaw注入CVE知识库 去年处理Log4j2漏洞时,我遇到了一个尴尬场景:当我让OpenClaw帮我检查服务器是否存在CVE-2021-44228漏洞时,它给出的回答是"未找到…...

告别“黑盒”:用Grad-CAM可视化Attention机制,看HSI分类模型到底关注了啥

深度解析高光谱分类中的注意力机制:从理论到可视化实践 当我们面对一张高光谱图像时,人类视觉系统会本能地聚焦于最显著的特征——可能是植被的健康状况、水体的污染程度,或是建筑物的材质差异。但当我们训练一个深度学习模型来完成同样的分类…...

音谷 - AI 多角色多情绪配音平台 github开源的多角色、多情绪 AI 配音生成平台,支持小说、剧本、视频等内容的自动配音与导出。

简介说明 音谷 - AI 多角色多情绪配音平台 github开源的多角色、多情绪 AI 配音生成平台,支持小说、剧本、视频等内容的自动配音与导出。 定位:为小说、剧本、视频等内容提供多角色、多情绪的 AI 语音合成与配音服务 主要功能: 小说 / 剧本…...

Deneyap雨水传感器I²C驱动与嵌入式应用指南

1. 项目概述Deneyap Yagmur Algılama Modl (Deneyap Rain Sensor),是土耳其Deneyap教育平台推出的专用雨水检测传感器模块,型号为M32(MPV1.0),其核心控制器采用STMicroelectronics的STM8S003F3P6 8位微控制器。该模块…...

Soundpad 免安装绿色版 下载 游戏语音与直播的专业音效播放神器

简介说明 Soundpad:游戏语音与直播的专业音效播放神器 Soundpad 是由德国独立开发者 Leppsoft 推出的 Windows 平台专业音效板(Soundboard)软件,核心功能是将本地音频文件实时混入麦克风信号, 在语音聊天、游戏内语音…...

OpenClaw自动化周报:Qwen2.5-VL-7B整合代码提交与JIRA生成图文报告

OpenClaw自动化周报:Qwen2.5-VL-7B整合代码提交与JIRA生成图文报告 1. 为什么需要自动化周报 每周五下午,我都会陷入一种"周报焦虑"——要手动整理Git提交记录、JIRA任务状态、代码评审意见,再用Excel做数据透视,最后…...

别再傻傻分不清!ESP32-S3上USB CDC、UART0和板载CH340到底谁在干活?

ESP32-S3串口全解析:快速识别USB CDC、UART0与CH340的实战指南 刚拿到ESP32-S3开发板时,很多开发者都会遇到一个令人困惑的场景——连接电脑后,设备管理器里突然冒出三四个COM端口,而Arduino IDE的下拉菜单里也列出一堆选项。到底…...

线性表顺序存储结构全解析,第十四篇:Python异步IO编程(asyncio)核心原理解析。

线性表的顺序存储结构 顺序存储结构是线性表最基础的物理实现方式之一,其核心思想是通过一段连续的存储空间依次存放线性表中的数据元素。这种结构利用数组的物理地址连续性,使得逻辑上相邻的元素在物理存储上也相邻。 存储方式与特点 顺序存储结构通常使…...

LeetCode单词拆分:动态规划详解,Apache介绍和安装。

单词拆分问题概述 单词拆分(Word Break)是LeetCode上经典的动态规划问题,题目要求判断给定字符串是否可以被拆分为字典中的单词。例如,给定字符串"leetcode"和字典["leet", "code"],返回…...

MySQL常用命令速查手册,用户权限控制功能实现说明。

MySQL常用命令全攻略 连接与退出MySQL 通过命令行连接到MySQL服务器: mysql -u username -p系统会提示输入密码。 退出MySQL命令行界面: exit;或使用快捷键 Ctrl D。 数据库操作 创建新数据库: CREATE DATABASE database_name;查看所有数据库…...

圆柱电池气动点焊机:高精度焊接新标杆,LangChain 学习 - LangChain 引入(LangChain 概述、LangChain 的使用场景、LangChain 架构设计)。

圆柱电池气动点焊机的技术优势 圆柱电池气动点焊机采用高精度气动加压系统,压力稳定控制在0.2-0.5MPa范围内,配合伺服驱动可实现0.01mm的焊接位置精度。该设备搭载恒流控制逆变焊接电源,输出电流波动小于1%,确保每个焊点电阻值差异…...

如何在5分钟内将你的电脑变身为智能语音助手:py-xiaozhi完整配置指南

如何在5分钟内将你的电脑变身为智能语音助手:py-xiaozhi完整配置指南 【免费下载链接】py-xiaozhi A Python-based Xiaozhi AI for users who want the full Xiaozhi experience without owning specialized hardware. 项目地址: https://gitcode.com/gh_mirrors/…...

OpenClaw调试技巧:千问3.5-9B接口调用问题排查

OpenClaw调试技巧:千问3.5-9B接口调用问题排查 1. 为什么需要关注接口调用问题 上周我在本地部署OpenClaw对接千问3.5-9B模型时,遇到了一个诡异的问题:明明配置文件正确,模型服务也正常运行,但OpenClaw就是无法完成对…...

Windows垄断之殇:用户自由的终结,第八章:组合模式 - 整体部分的统一大师。

Windows 原罪:技术垄断与用户自由的剥夺 微软Windows操作系统长期占据市场主导地位,其封闭的生态系统和强制性更新策略对用户选择权造成严重限制。系统强制捆绑IE浏览器并打压竞争对手的行为,直接导致互联网早期创新停滞。 安全漏洞与隐私侵犯…...

二次元创作工场:OpenClaw+Qwen3.5-9B自动化漫画脚本生成

二次元创作工场:OpenClawQwen3.5-9B自动化漫画脚本生成 1. 当AI助手遇上二次元创作 去年夏天,我作为独立漫画创作者陷入了创作瓶颈——每周要完成20页的连载更新,但80%的时间都耗在反复修改脚本和分镜上。直到发现OpenClaw与Qwen3.5-9B的组…...

Arduino轻量级CLI库cmdArduino原理与实战

1. 项目概述cmdArduino 是一个面向 Arduino 平台的轻量级命令行接口(CLI)库,由 Freaklabs 团队的 Akiba 与 Jacinta 开发。其核心定位并非构建功能完备的嵌入式 Shell(如 BusyBox 或 MicroPython REPL),而是…...

视频下载重命名全攻略,VS Code 使用 Chrome DevTools MCP 实现浏览器自动化。

视频下载与重命名方法 手动下载 打开浏览器访问课程平台,找到目标视频《计算机网络技术》。点击下载按钮选择保存路径,等待下载完成。右键点击文件选择“重命名”,输入新名称如“人工智能-03-04_20250920_计算机网络技术.mp4”。 Python自动化…...

React生态框架全解析,如何在 Apache 中启用 HSTS 以增强网络安全性 ?。

React前端框架概述 React是由Facebook开发并维护的开源JavaScript库,主要用于构建用户界面。尽管React本身是一个库,但其生态系统包含众多框架和工具,能够帮助开发者构建复杂的单页应用(SPA)或移动应用。以下是一些基于…...

策略模式:灵活切换算法的艺术,C++多态。

策略模式概述 策略模式是一种行为设计模式,允许在运行时选择算法的行为。它将算法封装成独立的类,使得它们可以互相替换,而不会影响客户端代码。策略模式的核心思想是将算法的定义与使用分离,增强系统的灵活性和可扩展性。 策略模…...

指针精要:从入门到精通,嵌入式开发学习日志32——stm32之PWM。

指针的基本概念 指针是编程中用于存储内存地址的变量,它指向另一个变量的位置。通过指针可以直接访问或修改内存中的数据,提升程序的灵活性和效率。 在C/C中,指针的声明方式为: int *ptr; // 声明一个整型指针指针的类型决定了…...

Ubuntu软件包依赖关系全解析,动态规划 - 回文子串问题。

查找软件包的依赖关系 在Ubuntu中&#xff0c;可以使用apt-cache命令查看软件包的依赖关系。运行以下命令列出指定软件包的所有依赖项&#xff1a; apt-cache depends <package-name>将<package-name>替换为目标软件包名称。该命令会显示直接依赖、推荐依赖以及可选…...

Go输入输出格式化技巧大全,深入理解操作系统中的线程。

Go基础&#xff1a;输入与输出格式化详解 标准输入与输出 Go语言通过fmt包提供丰富的输入输出功能。标准输出常用Print、Println和Printf函数。Print直接输出内容&#xff0c;Println自动添加换行符&#xff0c;Printf支持格式化输出。 fmt.Print("Hello") // …...