Bootstrap

基于51单片机的智能窗帘控制系统(仿真+代码+原理图+PCB)

基于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;
}

;