从51单片机到智能家居:手搓一个会报警的环境监控系统
基于51单片机的智能家居控制系统仿真设计环境监测实现功能:1、通过按键可设置温湿度数据的阈值上下限,设置烟雾浓度的阈值上限2、将温湿度传感器(DHT11)的数据实时显示在LCD上。当温湿度数据高于上限或低于下限,触发声光报警3、将烟雾浓度数据实时显示在LCD上。当烟雾浓度数据高于上限时,触发声光报警包含仿真+源码+原理图+报告仿真软件:Proteus8.9编程软件:Keil5编程语言:C语言原理图
基于51单片机的智能家居控制系统仿真设计 环境监测 实现功能: 1、通过按键可设置温湿度数据的阈值上下限,设置烟雾浓度的阈值上限 2、将温湿度传感器(DHT11)的数据实时显示在LCD上。 当温湿度数据高于上限或低于下限,触发声光报警 3、将烟雾浓度数据实时显示在LCD上。 当烟雾浓度数据高于上限时,触发声光报警 包含仿真+源码+原理图+报告 仿真软件:Proteus8.9 编程软件:Keil5 编程语言:C语言 原理图 :Altium Designer 20.2.6

最近用51单片机折腾了个智能家居控制系统,Proteus仿真效果相当带感。核心玩法就是让单片机同时盯着温湿度和烟雾浓度,超标就发警报。直接上干货,聊聊代码里那些有意思的操作。
硬件全家桶清单
- 核心板:STC89C52老伙计
- 传感器三兄弟:DHT11(温湿度)、MQ-2(烟雾)、电位器(模拟浓度信号)
- 显示设备:LCD1602液晶屏
- 交互组件:4x4矩阵按键、LED警报灯、蜂鸣器
核心代码拆解
1. 按键与阈值设置
矩阵按键扫描是基本功,但保存阈值到EEPROM才是灵魂。每次设置完参数,得让单片机记住这些数值,断电也不丢失。
// 按键扫描核心代码
uint8_t KeyScan() {
uint8_t keyVal = 0xFF;
for(uint8_t i=0; i<4; i++) {
ROW = ~(0x01<<i);
if(COL1 == 0) keyVal = i*4+0;
if(COL2 == 0) keyVal = i*4+1;
//...省略其他列检测
}
return keyVal;
}
// EEPROM存储函数
void Save_Threshold() {
IapErase(0x2000); // 擦除扇区
IapProgram(0x2000, tempHigh); // 存温度上限
IapProgram(0x2001, tempLow);
//...其他参数类似
}
骚操作:STC的EEPROM其实是Flash模拟的,写之前必须先擦除整个扇区。曾经因为没擦直接写,数据乱飞了一下午...
2. 温湿度攻防战
DHT11这老古董对时序要求极其严格,代码里各种微妙级延时不是摆设。数据脚切输入输出模式时,记得先给高电平。
// DHT11读取函数
void DHT11_Read() {
DQ = 0;
delay_ms(18); // 主机拉低18ms
DQ = 1;
delay_us(30); // 等待传感器响应
while(DQ); // 等待低电平
//...后续读取40位数据
}
避坑指南:如果读出来的湿度突然变成255%,检查是不是没等传感器准备好就开读。这个传感器启动需要1秒预热,急不得。
3. 烟雾浓度监测
用ADC0832做模数转换,电位器模拟烟雾浓度变化。注意模拟信号需要软件滤波,不然LCD显示会疯狂跳变。
// ADC读取函数
uint8_t Read_ADC(uint8_t ch) {
uint8_t dat = 0;
CLK = 0;
DI = 1;
//...时序生成代码
for(i=0;i<8;i++) {
dat <<= 1;
if(DO) dat++;
CLK = 1;
delay_us(2);
CLK = 0;
}
return dat;
}
调参心得:MQ-2需要预热3分钟才能稳定,仿真时直接给模拟信号省事,但真做实物得注意这个特性。
4. 报警器暴走时刻
报警逻辑简单但容易翻车——记得加状态标志位,不然会触发重复报警。
void Check_Alarm() {
if(temp>tempHigh || temp<tempLow || smoke>smokeMax) {
Alarm_Flag = 1;
BEEP = 0; // 开蜂鸣器
LED = 0; // 开报警灯
} else {
Alarm_Flag = 0;
BEEP = 1; // 关蜂鸣器
LED = 1; // 关报警灯
}
}
血泪教训:蜂鸣器要用三极管驱动,直接接IO口小心烧芯片。仿真里随便搞,实物必翻车!
仿真翻车实录
- LCD显示乱码:八成是数据线接反了,或者初始化时序不对
- 按键设置无效:检查矩阵按键的扫描周期,太快了可能漏检
- 报警常响:阈值数据没正确从EEPROM读出,可能是存储地址越界了
资源大礼包
整套方案包含:
- Proteus仿真工程文件(8.9版本)
- Keil完整源码(C语言)
- Altium Designer原理图
- 万字实验报告(含电路分析)
需要源码的朋友可以戳这里[假装有个下载链接],调参时遇到玄学问题欢迎评论区交流。下期可能加个WiFi模块搞远程监控,有没有人想看?

基于51单片机的智能家居控制系统仿真设计 环境监测 实现功能: 1、通过按键可设置温湿度数据的阈值上下限,设置烟雾浓度的阈值上限 2、将温湿度传感器(DHT11)的数据实时显示在LCD上。 当温湿度数据高于上限或低于下限,触发声光报警 3、将烟雾浓度数据实时显示在LCD上。 当烟雾浓度数据高于上限时,触发声光报警 包含仿真+源码+原理图+报告 仿真软件:Proteus8.9 编程软件:Keil5 编程语言:C语言 原理图 :Altium Designer 20.2.6

更多推荐



所有评论(0)