基于单片机的光控窗帘设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于单片机的光控窗帘设计
孙勤时间:2012年10月22日来源:微型机与应用2012年第16期
字体: 大中小
关键词:单片机光敏传感器直流电动机C语言智能光控窗帘AT89C51智能家居
摘要:为了能根据室外环境亮度实现窗帘自动拉合的设计需求,提出了一种基于单片机控制的光控窗帘设计方案,并完成系统的软、硬件设计。该系统的硬件部分主要利用光敏传感器产生的信号作为单片机输入信号,软件部分采用C语言进行编程,能够完成智能光控窗帘的自动拉合。同时,考虑到用户习惯和天气原因,本方案还设置了选择开关,用户在使用窗帘时可任意选择自动或手动控制方式。实际应用表明,该系统具有设计成本低、可靠性高的特点,达到了设计要求。
关键词:单片机;光敏传感器;直流电动机;C语言;智能光控窗帘
随着生活水平的不断提高,人们对家庭生活舒适度的要求也越来越高,具有装饰、遮光并能进行自动开合的智能光控窗帘成为了现代家居生活的新宠。为了能根据室外环境亮度实现窗帘自动拉合的设计需求,本文提出了一种基于单片机控制的光控窗帘设计方案。
1 系统概述
本设计由单片机、传感器和直流电动机组成,以AT89C51单片机[1-2]芯片为核心,运用光敏传感器技术,将室外环境亮度作为单片机的控制信号,实现窗帘的自动拉合。同时,考虑到用户习惯和天气原因,本方案还设置了选择开关,用户在使用窗帘时可任意选择自动或手动控制方式。当选择自动控制模式时,单片机将室外环境光线亮度作为输入信号,单片机控制程序根据光敏传感器所产生的电流信号的强弱自动调节直流电机的正反转,从而实现窗帘的自动拉合;当选择手动控制模式时,单片机将手动控制开关作为输入信号,单片机控制程序根据开关信号控制电机的正反转,从而实现窗帘的手动拉合。
2 系统硬件设计
本系统硬件系统主要由传感器、单片机、直流电动机三大部分组成[3-4],如图1所示。
2.1元器件选择
(1)单片机芯片
本文选择AT89C51单片机作为控制芯片,可以反复修改1 000多次。
(2)光敏传感器
光敏传感器尺寸为32 mm×11 mm×20 mm,型号为EPSON 1600K3+,工作电压为直流5 V,可用于光控场合、无需驱动、可直接接单片机。
(3)电机
选择775微型电动机,其工作电流为5 A,工作电压为27 V。能承受频繁的冲击负载,发热量低、驱动功率较小,满足负载较轻的智能窗帘的驱动需求。
材料清单如表1所示。
2.2 硬件电路设计图
本电路由电源部分、光感应部分、数据存储部分和显示部分组成。硬件电路设计图如图2所示。电源部分通过外接插座输入直流13 V~14 V电压;P2.2接光敏传感器接收光信号,单片机P1.0、P1.1控制电机运行。P0.0、P0.1接正反转指示灯,其中按钮接共阴极,低电平有效;指示灯共阳极,低电平有效。
3 系统软件设计
系统软件主要实现智能光控、手动控制两大功能,采用C语言进行编程,可实现用户在使用窗帘时任意选择自动或手动控制方式[4-5]。
3.1程序流程图
光控窗帘程序流程图如图3所示。
3.2 程序设计
(1)光控程序
当天亮时,有阳光射进屋内,传感器感应到光信号,此时电机正转,窗帘开始打开,当碰到开限位开关时,电机停止转动;当天黑时,传感器接收到信号,电机反转,窗帘闭合,当碰到关限位开关时,电机停止转动。具体程序如下:
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit K3=P2.2;
//光控正转或反转,此处接光敏传感器
sbit K5=P2.4; //开限位
sbit K6=P2.5; //关限位
sbit LED1=P0.0; //正转指示灯
sbit LED2=P0.1; //反转指示灯
sbit MA=P1.0;
sbit MB=P1.1;
void main(void)
{
LED1=1;LED2=1;
while(1)
{
if(K7==0)
sd();
if (K3==0&&K4==1) //光控正转
{ while (K3==0&&K5==1&&K4==1)
{LED1=0;LED2=1;MA=0;MB=1;}
LED1=1;LED2=1;MA=1;MB=1;
}
if (K4==0&&K3==1) //光控反转
{ while (K4==0&&K6==1&&K3==1)
{ LED1=1;LED2=0;MA=1;MB=0; }
LED1=1;LED2=1;MA=1;MB=1;
}
}
}
(2)手动程序
当阴天或者晚上用户要打开窗帘时,只需将控制方式选择按钮P2.6按下,就可以实现手动控制窗帘的开合。程序如下:
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit K1=P2.0; //手动正转
sbit K2=P2.1; //手动反转
sbit K7=P2.6; //控制方式选择按钮
sbit LED1=P0.0; //正转指示灯
sbit LED2=P0.1; //反转指示灯
sbit MA=P1.0;
sbit MB=P1.1;
void sd() //子程序
{
while(1)
{
if(K7= =1)
{
return;
}
if (K1==0&&K2==1) //手动正转
{
while (K1==0&&K5==1&&K2==1)
{
LED1=0;LED2=1;MA=0;MB=1;
}
LED1=1;LED2=1;MA=1;MB=1; //不转
}
if (K2==0&&K1==1) //手动反转
{
while (K2==0&&K6==1&&K1==1)