功能介绍:采用51单片机作为主控CPU,采用DHT11传感器采集温湿度,采用四个继电器分别模拟加热、加湿、散热、去湿动作,通过按键设置温湿度的上下限值,当实时温湿度超过或者低于设置值,蜂鸣器报警提醒,并且对应的继电器开启,LCD1602显示相关的数据,程序有中文注释,新手容易看懂,文末有资料分享:
下面是实物演示视频和相关实物图片
70-基于51单片机的智能温湿度控制器(程序+原理图+元器件清单全套资料)
下面是程序部分展示(程序有中文注释,新手容易看懂)
部分程序展示:
bit DHT11_Read_Date(unsigned int *temp,unsigned int *humi) //读取温湿度
{
unsigned int i = 0,retry = 0;
unsigned int buf[SIZE];
DHT11_DQ = 0; //拉低数据线大于 18ms发送开始信号
delay_ms(30); // 需大于 18 毫秒
DHT11_DQ = 1; //释放数据线, 用于检测低电平的应答信号
//延时20-40us,等待一段时间后检测应答信号, 应答信号是从机拉低数据线80us
delay_10us(3);
if(DHT11_DQ != 0) // 检测应答信号, 应答信号是低电平
{
//没应答信号
return ERROR;
}
else
{
//有应答信号
while(DHT11_DQ == 0 && retry++ < NUMBER); // 等待应答信号结束
if(retry >= NUMBER) //检测计数器是否超过了设定的范围
{
DHT11_DQ = 1;
return ERROR; //读数据出错, 退出函数
}
retry = 0;
DHT11_DQ = 1; //释放数据线
//应答信号后会有一个 80us 的高电平,等待高电平结束
while(DHT11_DQ != 0 && retry++ < NUMBER);
if(retry >= NUMBER)
{
DHT11_DQ = 1;
return ERROR; //退出函数
}
//读出湿. 温度值
for(i = 0; i < SIZE; i++) //读取40位数据
{
buf[i] = DHT11_Read_Byte();
if(status == ERROR) //调用 DHT11_Read_Byte() 读数据出错会设定status 为ERROR
{
DHT11_DQ = 1;
return ERROR;
}
}
if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4]) //校验正确
{
*humi = buf[0];
*temp = buf[2];
DHT11_DQ = 1;
return OK; //正确的读出 dht11输出的数据
}
else //校验数据出错
{
return ERROR;
}
}
}
程序打开办法:特别注意:下载资料包以后一定要先解压!!!(建议解压到桌面上,文件路径太深会导致程序打开异常),解压后再用keil5打开。
原理图采用【AD】altium designer打开,文件中有安装包
下面是资料包文件展示