摘 要: 为了能根据室外环境亮度实现窗帘自动拉合的设计需求,提出了一种基于单片机控制的光控窗帘设计方案,并完成系统的软、硬件设计。该系统的硬件部分主要利用光敏传感器产生的信号作为单片机输入信号,软件部分采用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<reg51.h>
#include<intrins.h>
#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<reg51.h>
#include<intrins.h>
#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)
{
LED1=1;LED2=0;MA=1;MB=0;
}
LED1=1;LED2=1;MA=1;MB=1;
}
}
}
4 调试与仿真
将程序烧写到AT89C51芯片中之后进行调试。在调试过程中出现两个主要问题:(1)易将二极管极性接反,故障现象为接通直流电源24 V时按下正、反转按钮,电机可以正、反转但二极管不亮,解决方法是将二级管极性对调;(2)电路易有虚焊、漏焊,故障现象为接通直流电源后,选择光控模式发现电机不动作,解决方法是将虚焊和漏焊处用电烙铁重新焊接。
本设计采用单片机控制的智能光控窗帘有较好的性价比。实际应用表明,该测试系统具有测试准确、稳定可靠的特点,达到了设计要求。
参考文献
[1] 张鑫. 单片机原理及应用(第2版)[M].北京:电子工业出版社,2010.
[2] 胡汉才.单片机原理及其接口技术(第3版)[M]. 北京: 清华大学出版社,2010.
[3] 胡汉才.单片机原理及其接口技术学习辅导与实践教程[M]. 北京:清华大学出版社,2010.
[4] 张义和. 例说51单片机(C 语言版)[M]. 北京:人民邮电出版社,2008.
[5] 黄英.单片机工程应用技术[M]. 上海:复旦大学出版社, 2011.