基于51单片机的智能自动窗帘设计

一.硬件方案

自动窗帘系统硬件电路主要由感光检测电路,时钟电路,电机控制电路、按键电路等外围电路构成。该设计则主要讨论了自动窗帘系统的设计过程,硬件电路设计,软件调试过程。通过本系统可以实现通过光照强度实现窗帘开关自动控制、定时控制和手动控制等不同的控制方式。
硬件主要采用51单片机+LCD1602液晶显示+DS18B20+光敏电阻+DS1302+步进电机+ULN2003设计而成;

二.设计功能

(1)液晶实时显示目前的状态,包括温度、模式、光线强度、时间等信息。
(2)智能窗帘可以根据外界光线的强弱来进行自动开关窗户,光线强弱的上下限可以按键调节。
(3)具有手动控制功能,可以手动开/关窗户。
(4)可以通过按键设定窗帘开启的时间和自行关闭的时间。
(5)可以通过按键设定温度值,低于或者高于设定值进行开/关窗户。

三.设计原理图

(1)Protues仿真图如下:
在这里插入图片描述
(2)PCB图如下:
在这里插入图片描述

四.软件设计

主程序源码

/*********************************************************/
// 主函数
/*********************************************************/
void main()
{
	uchar light;
	
	LcdInit();			// 执行液晶初始化	
	DS1302_Init();	// 时钟芯片的初始化
	LcdShowInit();	// 液晶显示内容的初始化
	
	if(DS1302_Read_Byte(0x81)>=128)			// 判断时钟芯片是否正在运行
	{
		DS1302_Write_Time();							// 如果没有,则初始化一个时间
	}
	
	while(1)
	{
		DS1302_Read_Time();				// 获取当前时钟芯片的时间,存在数组time_buf中
		FlashTime();							// 刷新时间显示

		light=Get_ADC0832();			// 读取光照强度
		light=light/2.5;					// 缩小光照检测结果(在0-99)
		if(light>99)							// 如果大于99
			light=99;								// 则依然保持99
		LcdGotoXY(1,14);					// 光标定位
		LcdPrintNum(light);				// 显示光照强度
		
		KeyScanf1();							// 按键扫描(时间的设置)
		KeyScanf2();							// 按键扫描(阈值的设置)
		KeyScanf3();							// 按键扫描(模式切换)
	
		/*手动控制模式*/
		if(gMode==1)
		{
			if(KeyDown_P==0)		// 如果关窗帘键按下了	
			{
				if(Led_P==0)			// 如果窗帘当前是打开的
				{
					Close();				// 则光标窗帘
				}
			}
			if(KeyUp_P==0)			// 如果开窗帘键按下了
			{
				if(Led_P==1)			// 如果窗帘当前是关闭的
				{
					Open();					// 则打开窗帘
				}
			}	
		}
		
		/*时间控制模式*/
		if(gMode==2)
		{
			if((TimeBuff[4]==CloseHour)&&(TimeBuff[5]==CloseMinute)&&(TimeBuff[6]==0))	// 如果到了关窗帘的时间	
			{
				if(Led_P==0)			// 如果窗帘当前是打开的
				{
					Close();				// 则光标窗帘
				}
			}
			if((TimeBuff[4]==OpenHour)&&(TimeBuff[5]==OpenMinute)&&(TimeBuff[6]==0))		// 如果到了开窗帘的时间	
			{
				if(Led_P==1)			// 如果窗帘当前是关闭的
				{
					Open();					// 则打开窗帘
				}
			}	
		}
		
		/*光线控制模式*/
		if(gMode==3)
		{
			if(light<gLight)		// 当前光线小于设置的阈值
			{
				if(Led_P==0)			// 如果窗帘当前是打开的
				{
					Close();				// 则光标窗帘
				}
			}
			else								// 当前光线大于或等于设置的阈值
			{
				if(Led_P==1)			// 如果窗帘当前是关闭的
				{
					Open();					// 则打开窗帘
				}
			}	
		}
		
		DelayMs(100);							// 延时0.1秒
	}
}

资料链接:https://pan.baidu.com/s/19hMfh-FzzbEq51RVx5wuqg?pwd=x54z

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值