基于51单片机的智能窗帘控制器proteus仿真
1、系统分为自动模式和手动模式,通过按键切换模式;
2、自动模式下检测光照和温度,如果温度高于25则打开窗帘通风;
3、电机顺时针转动是正转开窗帘,逆时针转动是反转关窗帘;
4、温度低于25则根据光线判断,如果光线强度低于30打开窗帘,光线强度高于60关闭窗帘;
5、手动模式下通过2个按键控制窗帘开启和关闭;
6、设置一个停止键,用于停止窗帘动作;
全部资料:可定制,可指导 !!!!!!!!!!!!!!!!!!!!
基于51单片机的智能窗帘控制系统毕业论文
摘要
本文设计并实现了一种基于51单片机的智能窗帘控制系统。该系统通过检测光照和温度,实现窗帘的自动开启和关闭,同时支持手动模式下的窗帘控制。系统主要由STC89C52单片机、电机驱动模块、光敏电阻、温度传感器、按键、LCD1602显示模块、指示灯和电源等组成。系统具有操作简便、功能丰富、成本低廉等优点,适用于多种智能家居场景。
1. 引言
随着现代电子技术和自动化技术的快速发展,人们越来越向往便捷、轻松的生活方式,对生活质量的要求也越来越高。智能窗帘控制系统作为一种智能家居设备,能够根据环境条件自动控制窗帘的开启和关闭,提高居住的舒适度和便利性。本文设计的基于51单片机的智能窗帘控制系统,旨在实现窗帘的自动控制和手动控制功能,为用户提供便捷的智能家居体验。
2. 系统总体设计
系统主要由以下几个部分组成:
STC89C52单片机:作为主控芯片,负责系统的控制和数据处理。
电机驱动模块:用于驱动窗帘电机,实现窗帘的开启和关闭。
光敏电阻:用于检测环境光照强度。
温度传感器:用于检测环境温度。
按键:用于用户操作,实现模式切换和手动控制。
LCD1602显示模块:用于显示系统状态信息。
指示灯:用于指示系统状态。
电源:为系统提供稳定的电源。
3. 硬件设计
3.1 STC89C52单片机
STC89C52是51系列单片机的一种,具有8K字节的Flash存储器,256字节的RAM,32个I/O口,2个16位定时器/计数器,5个中断源等。在本系统中,STC89C52作为主控芯片,负责控制电机驱动模块、光敏电阻、温度传感器、LCD1602显示模块等组件的工作。
3.2 电机驱动模块
电机驱动模块用于驱动窗帘电机,实现窗帘的开启和关闭。电机驱动模块通过单片机的I/O口控制电机的正反转,从而实现窗帘的开启和关闭。1电机的正转和反转分别对应窗帘的开启和关闭。
3.3 光敏电阻
光敏电阻是一种光敏元件,其阻值随光照强度的变化而变化。在本系统中,光敏电阻用于检测环境光照强度,通过单片机的ADC模块将光敏电阻的阻值转换为数字信号,实现光照强度的检测。
3.4 温度传感器
温度传感器用于检测环境温度。在本系统中,采用DS18B20温度传感器,通过单片机的I/O口读取温度传感器的数据,实现温度的检测。
3.5 按键
系统中使用了多个按键,用于实现模式切换和手动控制。按键通过I/O口与STC89C52单片机连接,单片机通过检测按键状态,实现相应的功能。
3.6 LCD1602显示模块
LCD1602是一种常见的16x2字符型液晶显示模块,具有显示清晰、功耗低、接口简单等特点。在本系统中,LCD1602用于显示系统状态信息,如当前模式、温度、光照强度等。
3.7 指示灯
指示灯用于指示系统状态,如自动模式、手动模式、窗帘开启状态、窗帘关闭状态等。指示灯通过I/O口与STC89C52单片机连接,单片机通过控制I/O口的电平,实现指示灯的点亮和熄灭。
3.8 电源
系统采用5V直流电源供电,为各模块提供稳定的电源。
4. 软件设计
4.1 系统初始化
系统上电后,首先进行初始化操作,包括单片机的初始化、电机驱动模块的初始化、光敏电阻的初始化、温度传感器的初始化、LCD1602显示模块的初始化等。初始化完成后,系统进入主循环,等待用户操作。
4.2 按键处理
系统通过检测按键状态,实现模式切换和手动控制。按键处理程序采用中断方式,当检测到按键按下时,进入相应的中断服务程序,执行相应的操作。
4.3 光照强度检测
系统通过光敏电阻检测环境光照强度。光敏电阻的阻值变化通过ADC模块转换为数字信号,STC89C52单片机根据数字信号判断光照强度。当光照强度低于30时,系统打开窗帘;当光照强度高于60时,系统关闭窗帘。
4.4 温度检测
系统通过DS18B20温度传感器检测环境温度。温度传感器的数据通过单片机的I/O口读取,STC89C52单片机根据温度数据判断是否需要打开窗帘。当温度高于25°C时,系统打开窗帘;当温度低于25°C时,系统根据光照强度判断是否需要打开或关闭窗帘。
4.5 窗帘控制
系统通过电机驱动模块控制窗帘的开启和关闭。电机的正转和反转分别对应窗帘的开启和关闭。系统根据光照强度和温度数据,通过单片机的I/O口控制电机的正反转,实现窗帘的自动控制。
4.6 手动模式
在手动模式下,用户通过按键控制窗帘的开启和关闭。系统通过检测按键状态,实现窗帘的开启和关闭。同时,系统设置了一个停止键,用于停止窗帘动作。
4.7 状态显示
系统通过LCD1602显示模块,实时显示当前状态信息,如当前模式、温度、光照强度等。用户可以通过LCD1602了解系统的运行状态。
5. 系统测试
5.1 功能测试
对系统的各项功能进行测试,包括自动模式下的光照和温度检测、窗帘的自动开启和关闭、手动模式下的窗帘控制等。测试结果表明,系统各项功能均能正常工作,满足设计要求。
5.2 性能测试
对系统的性能进行测试,包括光照强度检测的准确性、温度检测的准确性、窗帘控制的稳定性等。测试结果表明,系统具有较高的光照强度检测准确性和温度检测准确性,窗帘控制稳定可靠,满足实际应用需求。
6. 结论
本文设计并实现了一种基于51单片机的智能窗帘控制系统。系统通过检测光照和温度,实现窗帘的自动开启和关闭,同时支持手动模式下的窗帘控制。系统具有操作简便、功能丰富、成本低廉等优点,适用于多种智能家居场景。未来,可以进一步优化系统性能,增加更多功能,提高系统的实用性和可靠性。
参考文献
[1] STC89C52单片机数据手册
[2] DS18B20温度传感器数据手册
[3] 光敏电阻数据手册
[4] 51单片机编程与应用
[5] 智能家居系统设计与实现
以上是基于51单片机的智能窗帘控制系统的毕业论文,详细介绍了系统的总体设计、硬件设计、软件设计、系统测试和结论。希望对你的毕业论文写作有所帮助。
#include<reg51.h>
#include "DHT11.h"
#include "lcd1602.h"
#include "ADC0832.h"
sbit AA=P1^0;//电机
sbit BB=P1^1;
sbit CC=P1^2;
sbit DD=P1^3;
sbit test=P3^6;
sbit k1=P3^0;//切换
sbit k2=P3^1;//正转
sbit k3=P3^2;//反转
sbit k4=P3^3;//停止
sbit led=P3^7; //手动模式指示灯
sbit led1=P3^6; //自动模式指示灯
uchar time=0;
uchar wen=0,shi=0,guang=0;//温度湿度光照
uchar xian1[]="wen=00C shi=50%"; //温度湿度显示
uchar xian2[]="light=0000Lux";//光照
uchar mode=0,flag=0;
uchar start=1;//开始
uchar endflag=0;//停止
void delay(uint i)
{
while(i--)
{
// key_scan();
}
}
//开窗
void open()
{
uchar i;
for(i=0;i<10;i++)
{
BB=1;delay(1000);//正转
AA=0;delay(10000);
CC=1;delay(10000);
BB=0;delay(10000);
DD=1;delay(10000);
CC=0;delay(10000);
AA=1;delay(10000);
DD=0;delay(10000);
if(!k4)
break;
}
flag=1;
}
//关窗
void close()
{
uchar i;
for(i=0;i<10;i++)
{
DD=1;delay(10000);//反转
AA=0;delay(10000);
CC=1;delay(10000);
DD=0;delay(10000);
BB=1;delay(10000);
CC=0;delay(10000);
AA=1;delay(10000);
BB=0;delay(10000);
if(!k4)
break;
}
flag=0;
}
//主函数
void main()
{
TMOD|=0X01;//定时器设置
TH0=0X3C;
TL0=0XB0;
ET0=1;
EA=1;
TR0=1;
init_1602();
AA=1;
BB=0;
CC=0;
DD=0;
if(mode) //点亮模式指示LED
{
led=0;
}else {
led1=0;
}
while(1)
{
if(!k1)//模式切换
{
delay(1000);//防抖
if(!k1)
{
mode=!mode;
if(mode) //点亮LED
{
led=0;
led1=1;
}
else
{
led=1;
led1=0;
}
start=1;
while(!k1);
}
}
if(start)//启动检测
{
if(mode==0)//自动模式
{
if(wen<25)//温度小于25
{
if((guang<30)&&(flag==0))
{
open();//开窗
}
if((guang>60)&&(flag==1))
{
close();//关窗
}
}
else//温度高于25,正转
{
//正转
if(flag==0)
open();
}
}
else //手动模式
{
if(!k3)
{
//反转
close();
}
if(!k2)
{
//正转
open();
}
}
}
}
}
void Timer0() interrupt 1
{
if(time<10)
time++;
else
{
time=0;
dht11_recive();//读取温湿度.
wen=dht11_dat[2];
shi=dht11_dat[0];
guang=ADC();//读取光照
xian1[4]=wen/10+0x30;
xian1[5]=wen%10+0x30;
xian1[13]=shi/10+0x30;
xian1[14]=shi%10+0x30;
xian2[7]=guang/100+0x30;
xian2[8]=guang%100/10+0x30;
xian2[9]=guang%10+0x30;
write_string(1,0,xian1);//显示
write_string(2,0,xian2);
}
TH0=0X3C;
TL0=0XB0;
}