欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 旅游 > 【Proteus仿真】【51单片机】智能家居检测与控制系统

【Proteus仿真】【51单片机】智能家居检测与控制系统

2025/3/9 2:00:22 来源:https://blog.csdn.net/Hello_Muyi/article/details/146104143  浏览:    关键词:【Proteus仿真】【51单片机】智能家居检测与控制系统

文章目录

  • 一、功能简介
  • 二、软件设计
  • 三、实验现象
  • 联系作者


一、功能简介

本项目使用Proteus8仿真51单片机控制器,使用按键、LCD1602液晶、DHT11温湿度模块、HC05/06蓝牙、人体红外传感器、继电器、加湿器、空调制冷制热、热水器等。
主要功能:
系统运行后,LCD1602显示检测温度和湿度、系统模式、安防状态、有无人、时间;
系统处于自动模式,可按下K5键打开安防,如果检测有人,蜂鸣器报警;无人,报警取消;
可按下K3键进入阈值设置模式,K3切换参数和时间,K1和K2调节,K4键确定并返回主界面;
如果检测温度高于上限,打开空调制冷,如果低于下限,打开空调制热;
如果检测湿度高于上限,关闭加湿器,如果低于下限,打开加湿器;
如果热水器开启时间到达,热水器打开;如果热水器关闭时间到达,热水器关闭;
可按下K4键切换为手动模式,K1控制加湿器开关,K2控制空调开关,K5控制热水器开关;
可通过蓝牙发送检测温湿度数据,并控制加湿器、空调、热水器设备;
蓝牙控制指令如下:(十六进制)
0X01–>K1键功能
0X02–>K2键功能
0X03–>K3键功能
0X04–>K4键功能
0X05–>K5键功能


二、软件设计

/*
作者:嗨小易(QQ技术交流群:570487280)*///系统数据设置
void sys_data_set(void)
{u8 key=0;key=key_scan(0);//设置if(key==KEY3_PRESS || UART_RX_BUF[0]==KEY3_CMD){sys_ctrl.mode++;if(sys_ctrl.mode>10)sys_ctrl.mode=1;sys_parm_set_show();//系统参数设置界面显示}//设置模式if(sys_ctrl.mode!=0){//加if(key==KEY1_PRESS || UART_RX_BUF[0]==KEY1_CMD){switch(sys_ctrl.mode){case 1://温度下sys_ctrl.set_temp[0]++;if(sys_ctrl.set_temp[0]>99)sys_ctrl.set_temp[0]=0;break;case 2://温度上sys_ctrl.set_temp[1]++;if(sys_ctrl.set_temp[1]>99)sys_ctrl.set_temp[1]=0;break;case 3://湿度下sys_ctrl.set_humi[0]++;if(sys_ctrl.set_humi[0]>99)sys_ctrl.set_humi[0]=0;break;case 4://湿度上sys_ctrl.set_humi[1]++;if(sys_ctrl.set_humi[1]>99)sys_ctrl.set_humi[1]=0;break;case 5://开-时sys_ctrl.set_time[0][0]++;if(sys_ctrl.set_time[0][0]>23)sys_ctrl.set_time[0][0]=0;break;case 6://开-分sys_ctrl.set_time[0][1]++;if(sys_ctrl.set_time[0][1]>59)sys_ctrl.set_time[0][1]=0;break;case 7://开-秒sys_ctrl.set_time[0][2]++;if(sys_ctrl.set_time[0][2]>59)sys_ctrl.set_time[0][2]=0;break;case 8://关-时sys_ctrl.set_time[1][0]++;if(sys_ctrl.set_time[1][0]>23)sys_ctrl.set_time[1][0]=0;break;case 9://关-分sys_ctrl.set_time[1][1]++;if(sys_ctrl.set_time[1][1]>59)sys_ctrl.set_time[1][1]=0;break;case 10://关-秒sys_ctrl.set_time[1][2]++;if(sys_ctrl.set_time[1][2]>59)sys_ctrl.set_time[1][2]=0;break;}	}//减else if(key==KEY2_PRESS || UART_RX_BUF[0]==KEY2_CMD){switch(sys_ctrl.mode){case 1://温度下sys_ctrl.set_temp[0]--;if(sys_ctrl.set_temp[0]<0)sys_ctrl.set_temp[0]=99;break;case 2://温度上sys_ctrl.set_temp[1]--;if(sys_ctrl.set_temp[1]<0)sys_ctrl.set_temp[1]=99;break;case 3://湿度下sys_ctrl.set_humi[0]--;if(sys_ctrl.set_humi[0]<0)sys_ctrl.set_humi[0]=99;break;case 4://湿度上sys_ctrl.set_humi[1]--;if(sys_ctrl.set_humi[1]<0)sys_ctrl.set_humi[1]=99;break;case 5://开-时sys_ctrl.set_time[0][0]--;if(sys_ctrl.set_time[0][0]<0)sys_ctrl.set_time[0][0]=23;break;case 6://开-分sys_ctrl.set_time[0][1]--;if(sys_ctrl.set_time[0][1]<0)sys_ctrl.set_time[0][1]=59;break;case 7://开-秒sys_ctrl.set_time[0][2]--;if(sys_ctrl.set_time[0][2]<0)sys_ctrl.set_time[0][2]=59;break;case 8://关-时sys_ctrl.set_time[1][0]--;if(sys_ctrl.set_time[1][0]<0)sys_ctrl.set_time[1][0]=23;break;case 9://关-分sys_ctrl.set_time[1][1]--;if(sys_ctrl.set_time[1][1]<0)sys_ctrl.set_time[1][1]=59;break;case 10://关-秒sys_ctrl.set_time[1][2]--;if(sys_ctrl.set_time[1][2]<0)sys_ctrl.set_time[1][2]=59;break;}	}//确定else if(key==KEY4_PRESS || UART_RX_BUF[0]==KEY4_CMD){sys_ctrl.mode=0;sys_open_show();//系统开机界面显示	}	}//正常模式else{//自动手动模式if(key==KEY4_PRESS || UART_RX_BUF[0]==KEY4_CMD){sys_ctrl.auto_flag=!sys_ctrl.auto_flag;	}//安防else if(key==KEY5_PRESS || UART_RX_BUF[0]==KEY5_CMD){sys_ctrl.af_onoff=!sys_ctrl.af_onoff;}//手动模式if(sys_ctrl.auto_flag==1){//加湿if(key==KEY1_PRESS || UART_RX_BUF[0]==KEY1_CMD){sys_ctrl.js_onoff=!sys_ctrl.js_onoff;}//空调else if(key==KEY2_PRESS || UART_RX_BUF[0]==KEY2_CMD){sys_ctrl.kt_onoff++;if(sys_ctrl.kt_onoff>2)sys_ctrl.kt_onoff=0;}//热水器else if(key==KEY5_PRESS || UART_RX_BUF[0]==KEY5_CMD){sys_ctrl.rsq_onoff=!sys_ctrl.rsq_onoff;}		}	}if(UART_RX_BUF[0]!=0)UART_RX_BUF[0]=0;			
}//系统功能控制
void sys_fun_ctrl(void)
{//正常模式if(sys_ctrl.mode==0){//自动模式if(sys_ctrl.auto_flag==0){//如果温度高于上限,打开空调制冷if(sys_ctrl.temp>sys_ctrl.set_temp[1])sys_ctrl.kt_onoff=1;//如果温度低于下限,打开空调制热else if(sys_ctrl.temp<sys_ctrl.set_temp[0])sys_ctrl.kt_onoff=2;else sys_ctrl.kt_onoff=0;//如果湿度高于上限,关闭加湿器if(sys_ctrl.humi>sys_ctrl.set_humi[1])sys_ctrl.js_onoff=0;//如果湿度低于下限,打开加湿器else if(sys_ctrl.humi<sys_ctrl.set_humi[0])sys_ctrl.js_onoff=1;//如果热水器开启时间到达if(sys_ctrl.time[0]==sys_ctrl.set_time[0][0] && sys_ctrl.time[1]==sys_ctrl.set_time[0][1] &&sys_ctrl.time[2]==sys_ctrl.set_time[0][2]){sys_ctrl.rsq_onoff=1;}//如果热水器关闭时间到达if(sys_ctrl.time[0]==sys_ctrl.set_time[1][0] && sys_ctrl.time[1]==sys_ctrl.set_time[1][1] &&sys_ctrl.time[2]==sys_ctrl.set_time[1][2]){sys_ctrl.rsq_onoff=0;}}//如果安防开启,检测有人,报警if(sys_ctrl.af_onoff==1){if(sys_ctrl.man==1)beep_alarm(10,1000);//报警	}//设备控制if(sys_ctrl.js_onoff==0)JS_PIN=1;else JS_PIN=0;if(sys_ctrl.rsq_onoff==0)RSQ_PIN=1;else RSQ_PIN=0;if(sys_ctrl.kt_onoff==0){ZL_PIN=1;ZR_PIN=1;}else if(sys_ctrl.kt_onoff==1){ZL_PIN=0;ZR_PIN=1;}else if(sys_ctrl.kt_onoff==2){ZL_PIN=1;ZR_PIN=0;}}
}//应用控制系统
void appdemo_show(void)
{u8 i=10;sys_parm_init();//系统参数初始化lcd1602_init();DHT11_Init();time0_init();//定时器初始化,10msTR0=1;//打开定时器UART_Init();//波特率4800UART_SendString("UART Init OK\r\n");sys_open_show();//系统开机界面显示while(1){	sys_data_get();//系统数据获取sys_data_show();//系统数据显示sys_data_set();//系统数据设置sys_fun_ctrl();//系统功能控制}
}//定时器0中断函数
void time0() interrupt 1 
{	static u8 i=0;TH0=0XDC;	//给定时器赋初值,定时10msTL0=0X00;i++;if(i>=100)//1S{i=0;sys_ctrl.time[2]++;if(sys_ctrl.time[2]>59){sys_ctrl.time[2]=0;sys_ctrl.time[1]++;if(sys_ctrl.time[1]>59){sys_ctrl.time[1]=0;sys_ctrl.time[0]++;if(sys_ctrl.time[0]>23)sys_ctrl.time[0]=0;}}}	
}

三、实验现象

B站演示视频:https://space.bilibili.com/444388619

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

联系作者

视频地址:https://space.bilibili.com/444388619/video
专注于51单片机、STM32、国产32、DSP、Proteus、arduino、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词