基于单片机的晾衣架控制系统设计

摘 要

为了解决在突然出现雨雪天气不能及时收起晾晒在户外的衣物情况,满足人们更智能地收晾衣物需求,本文设计了一款基于单片机的晾衣架控制系统。该系统具有手动控制和自动控制两种控制方式。在手动控制方式下,人们可以自主选择晾衣物和收衣物。在自动控制方式下,通过光敏电阻和雨滴传感器来进行当前环境的检测,由单片机完成系统控制,通过步进电机的正反转实现晾衣机的自动伸缩。该晾衣架能够根据所处环境的光照强度以及晴雨状态来实现晾衣架的自动收晾衣物,当且仅当不下雨而且光照充足的条件下,晾衣架才会打开进行衣服的晾晒,其他任何情况下晾衣架的状态都是收衣物的状态。
本次所设计的晾衣架系统不仅能够根据环境变化实现晾衣架的自动伸缩控制,而且具有体积小、重量轻,灵活方便、适用范围广、操作比较便捷等特点。
结果表明,这款基于单片机的晾衣架控制系统彻底改变了人们的晾衣习惯,实现了足不出户就可以收晾衣物,再也不用担心外出时衣物淋雨了。
整套系统在运行中表现出极好的智能型和便捷性,备受消费者的青睐。

关键词:单片机;光敏电阻;雨滴传感器;步进电动机;晾衣架

1 系统方案设计

1.1 系统方案论证
本设计为实现晾衣架控制系统设计提出两种方案:
方案一:
本方案设计主要由单片机主控电路、按键电路、光线检测、电机控制执行部分组成。主要用到的元器件有:STC89C52单片机、小马达电动机、光敏电阻等等。STC89C52单片机作为本方案的主控芯片,光敏电阻是用来识别所处环境为白天还是夜晚的光线强弱状态。
连接电源按下开关后,初始状态是自动模式,通过光敏电阻自动识别当前所处环境的光线强弱,即白天还是夜晚。当时识别出是白天,光照比较强时,电动机正转代表晾衣架伸展,用手触碰相应的限位开关,电动机停止转动代表伸展到最大;当时光敏电阻识别出是夜晚光照强度比较弱时,电动机反转代表晾衣架收缩,用手触碰相应的限位开关,电动机转动停止代表收缩到最里面,以防止发生过卷。
方案二:
本次方案设计主要由单片机主控电路、雨滴检测、光线检测、按键电路、指示灯电路、电机控制执行部分组成,主要用到的元器件有:STC89C52单片机、FC-37雨滴传感器、光敏电阻、LED指示灯、微动步进电动机等等。STC89C52单片机作为本方案的主控芯片,雨滴传感器主要是用来检测所处环境中是否存在下雨的情况;光敏电阻是用来识别所处环境为白天还是夜晚的光线强弱状态;由于雨滴传感器和光敏电阻输出信号都是电压信号,单片机无法直接处理,所以本方案使用型号为LM393的电压比较器能够将光敏电阻和雨滴传感器所输出的电压信号转化为数字量信号,然后传送给单片机进行数据处理。另外,整个系统还设计了手动模式和自动模式,用户可以根据所处环境和自己的需求对当前晾衣架所处的状态进行自由的切换,电动机方面采用了比较方便的微动式步进电动机,为了直观的看到当前系统所处于的模式和状态,设计了指示灯电路以便于观察。
连接电源按下开关后,初始状态是手动模式,用户可根据自己的需求进行收晾衣物,按下切换按钮后,系统更换为自动模式。通过光敏电阻自动识别当前所处环境的光线强弱,即白天还是夜晚。当时识别出是白天,光照比较强且雨滴传感器未检测到有雨水时,电动机正转拉动电动机上的端子(代表晾衣架上所晾的衣物)向左移动代表晾衣架伸展,当电动机上的端子移动到最左面触碰相应的限位开关,电动机转动停止代表伸展到最大;当时识别出是夜晚光照比较弱或者是在白天时雨滴传感器检测到有雨水时,电动机反转拉动端子向右移动代表晾衣架伸展,当电动机上的端子移动最右面自动触碰相应的限位开关,电动机转动停止代表收缩到最里面,电动机转动停止以防止发生过卷。
根据上述两种方案的介绍,对于本系统设计我选择方案二,因为方案一实现的电动机正反转并不能完全实现自动化,自动检测到光线后,还需要手动按一下限位开关来实现电动机正反转的停止,方案二所采用的微动式步进电动机可以实现自动停止正反转;同时,方案一只有光照检测模块,没有雨滴检测部分,这样实现出来的功能不能够完全满足用户的要求,而方案二在方案一的基础上添加了雨滴检测装置。显而易见,方案二更符合我们的实际需求,具有易操作、智能化、实用性强等优势。
1.2 系统工作原理
下面介绍一下本系统的原理及总体框图,总体框图如1.1所示。
在这里插入图片描述

图1.1 系统总体框图
本系统利用光敏电阻和雨滴传感器来检测当前环境,由按键电路调整当前系统所处的状态,指示灯电路和微动步进电机将信号发送给单片机,再由单片机检测指示灯电路和微动步进电动机以实现晾衣架的控制;雨滴传感器和光敏电阻将检测到的电压信号输入给LM393电压比较器中,再由电压比较器输入到单片机中进行数据处理。在自动模式下,当且仅当白天不下雨的时候,晾衣架才会打开进行晾晒衣服,其他任何情况下晾衣架的状态都是收衣物状态,这样实现了智能晾衣架的设定。

2 硬件设计

单片机在学术上也可叫做微控制处理器[3],在众多微控制处理器中,单片机具有独特的优势。单片机因具有质量轻、所需空间小、容量大、成本低、低功耗、稳定性高等特点在20世纪70年代时得到了迅速的发展。一直到今天,随着新时代中国特色社会主义的不断壮大和发展以及十九大以来为积极响应和配合国家号召,在自动化领域越来越趋近于智能化,在科技方面,更加注重于航空、陆地、水运等方面的综合性发展;在生活方面,智能化的产品更是琳琅满目。
单片机的最小系统是指用尽可能少的外设器件和几个电路模块使单片机能够稳定运行。在大多数的STC89C52单片机的电路设计中最小系统包括:复位电路、时钟电路、电源电路[4]。本设计单片机的最小控制系统如图2.2所示。
复位电路对基于嵌入式的智能家居电器系统来说也是必不可少的,可以用来复原系统也可以用来防止由于系统的抖动而干扰系统。当系统运行不稳定的时候,可以按下复位键来终止系统的运行,系统复位的时间一般是持续5ms,本系统的复位时间是2ms,复位更快速。STC89C52单片机最小系统的复位是通过外部的复位电路来实现的[5]。最小系统复位电路的实现过程是:我们可以把单片机的复位电路理解为电脑的重启。当电脑正在被运行的时候,出现了死机的情况,此刻如果按下复位按钮,电脑内部的程序就会重新运行[6]。同样的道理,单片机也是一样的。当单片机系统正在运行,突然受到外界环境的干扰出现程序跑飞的情况,按下复位按钮,重新启动程序,这样以保护单片机不会因突然的干扰以至于系统崩溃。52单片机的复位需要在第9引脚处接低电平信号,当系统启动时,按下系统复位按钮。如果再次按释放键,系统将重新启动。在操作系统中,您可以通过主开关控制系统进行复位。
处理任何事情都要有时间上的先后顺序,单片机也是如此。为了确保系统能够稳定运行,系统必须要有一个时钟。单片机最小电路中的时钟电路是由一个晶振和两个电容构成的。本系统所选的晶振为11.0592MHZ,电容的型号取决于所选择晶振的型号来确定,所以这次设计选用的电容大小为30pF[7]。时钟电路中的这两个电容的作用是帮助晶振进行起振的,以满足控制器上电之后能够正常地进行工作。
在这里插入图片描述

图2.2 单片机最小系统原理图

原理图
在这里插入图片描述

源程序清单

#include <REGX52.H> //包含单片机内部寄存器的头文件
#define uchar unsigned char //宏定义
#define uint unsigned int

//定义微动电机管脚
sbit EN=P2^1; //使能
sbit A1=P2^0; //A相
sbit B1=P2^2; //B相

//定义限位开关管脚
sbit switch1=P3^3; //控制电机往左边的开关
sbit switch2=P3^4; //控制电机往右边的开关

//定义LM393两个输出管脚
sbit LM393_A=P1^0; //连接的是水滴传感器,水多,输出为0
sbit LM393_B=P1^1; //连接的是光敏电阻,光强为1

//定义按键
sbit key1=P3^5; //连接IO口
sbit key2=P3^6;
sbit key3=P3^7;

bit key1_flag=0; //按键标志位
bit key2_flag=0;
bit key3_flag=0;
//定义指示灯
sbit led0=P0^0; //led灯IO口
sbit led1=P0^1;
sbit led2=P0^2;
sbit led3=P0^3;

bit A_M=1; //手自动模式标志 1是手动模式,0是自动模式
bit R_L=1; //多余变量

bit Open_Close=1; //控制丝杠电机打开关闭标志,0是往右转,1是左转

void delay(uint time) //误差 0us
{
while(time–);
}

void RRM(void) //往右边走
{
EN=1; //开启使能端
A1=1; //两相点击,相位取反,转向相反
delay(400);
B1=1;
delay(400);
A1=0;
delay(400);
B1=0;
delay(400);
EN=0;
}

void LLM(void) /往左走
{
EN=1;
B1=0;
delay(400);
A1=0;
delay(400);
B1=1;
delay(400);
A1=1;
delay(400);
EN=0;
}

void key_dispose()
{
if(!key1) //按键1按下
{
if(key1_flag)
{ //清除,防止按下后连续触发
key1_flag=0;
A_M=~A_M; //手自动模式切换
}
}
else key1_flag=1;

if(!key2) //按键2按下
{
if(key2_flag)
{
key2_flag=0;

	if(A_M) Open_Close=0;	     //如果是手动模式,则控制丝杆电机右转
   }
}
else key2_flag=1;

if(!key3) //按键3按下
{
if(key3_flag)
{
key3_flag=0;
if(A_M) Open_Close=1; //如果是手动模式,则控制丝杆电机左转
}
}
else key3_flag=1;

}

void AM_dispose() //自动模式判断
{
if(A_M0) //A_M0是手动模式
{
led0=0; //指示灯切换
led1=1;
if(LM393_B) //如果光照强
{
if(LM393_A) //且没有下雨,则控制丝杠电机右转,相当于晾衣物
{
Open_Close=0;
}
else //否则如果下雨,则丝杠电机左转,相当于收衣物
{
Open_Close=1;
}
}
else //否则如果光暗,则丝杠电机左转,相当于收衣物
{
Open_Close=1;
}
}
else //这个就是手动模式下,控制指示灯切换
{
led0=1;
led1=0;
}
if(Open_Close0) //Open_Close0表示要控制丝杠电机右转
{
led2=0;
led3=1;
if(switch2!=0) //没有触到右边限位开关,则控制右转,触到后停止
{
RRM();
}
}
else //控制左转的
{
led2=1;
led3=0;
if(switch1!=0)
{
LLM();
}
}
}

void Init_0_1() //中断初始化函数,初始化中断0,1
{
TMOD=0x10; //设置定时器0工作模式2 8位自动重装 256
EA=1; //打开总中断开关
TH1=0x3C;
TL1=0xb0;
ET1=1;
TR1=1;
}

void main()
{

 while(switch1!=0)   //³初始化电机位置,默认为关闭
  {
    LLM();
  }

Init_0_1(); //定时器配置
while(1)
{
AM_dispose(); //自动模式下判断天色和天气
}
}

void time1() interrupt 3 /定时器中断服务函数
{
TH1=0x3C; //重新转载初值,定时时间50毫秒
TL1=0xb0;
key_dispose(); //调用按键扫描函数
}


## 4 焊接与调试

4.1 电路焊接
在选择电路焊接的方式时,原始也是最常用的焊接方法是手工焊接。当前,在工厂焊接大量的生产基本上是不采用原始的方法了,但是在普通元器件的修理、系统在测试中,最经常使用的方法就是原始的手工焊接。焊接在整个系统设计中是很重要的环节,不管我们在设计系统时想的和设计的再多,如果在焊接实物的这个过程中出现了问题,会影响到整个控制系统的运行,这个系统的设计很有可能就会以失败而告终[17]。所以说焊接的技术会直接导致设计的这个控制系统是否能够使用。焊接后实物图如图4.1所示。
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/195559d517e3461cab1476c72696dcdd.png)

图4.1 焊接实物图
为了确保系统能够正常运行,在焊接的时候要严格根据电路图认真对照,尽量避免焊接位置出现错误或者连错线等问题。在电路的焊接过程中,经常会出现焊锡不够的情况,这个时候我们需要做的是:补焊锡。但是应注意补的焊锡量不能补太多,因为很容易连接到其它器件的引脚可能会导致出现短路的情况。如果遇到了焊锡过多时,有两种方式可以解决这个问题:可以使用电烙铁放在焊接处来回滑动,用电烙铁将多余的焊锡带走,也可以使用吸锡器除焊锡。
4.2 系统调试
在系统接通电源之前,首先观察实物的焊接是否存在问题,如:有明显断裂、正负极连接、器件连接、焊接不实等。如果焊接的物体没有问题接下来我们用万用表来检测电源的正负电压,观察是否出现了严重的电源问题,如短路、断路等以确认焊接的系统没有问题。
物体焊接没有问题以后,还需要对软件程序进行调试,如果程序调试没有出现错误等问题,接下来验证系统的功能能否满足要求,如果功能存在问题,需要继续调试程序,反复进行调试直到所有功能都满足为止。
4.2.1 软件调试
在软件调试过程中,点击编译按键,文件在系统中正常运行,提示的信息可以在窗口中进行显示,若提示的信息中显示错误标识,就要根据提示找到错误程序并改正,直到错误消失。
实际在调试过程中,首次对程序进行编译时提示窗口提示错误,经过检查发现在程序句末尾遗漏的分号,除此之外出现过其他的问题,经过请教老师还有公司的师傅以及同学的帮助,一次次的编译和修改,直到程序提示没有错误为止。
4.2.2 硬件测试
首先使用万用表检测电源是否连接完好,然后检查元器件的管脚是否连接正确,有没有出现接线错误的情况。接通电源以后,观察每个元器件是否能够进行正常的工作,逐一测试功能。
在测试过程中,如果发现LED指示灯不亮,首先检查焊接情况,如果没有发现接错或虚焊情况,那么检查程序的编写是否出现错误提示;如果都没有问题,我们基本可以断定是该元器件损坏了,需要更换新的LED指示灯。
4.3 实物测试
根据本系统的设计需求,对实物功能进行逐一测试:
(1)将电动机上的端子(用来表示所晾衣物)移动到中间位置,接通电源后按下开机按钮,电源指示灯亮起,系统默认为手动模式,电动机上的端子会默认向右移动,代表晾衣架开机时默认的状态是收衣服;
(2)按下切换模式按键,系统所处模式更换为自动模式,在光敏电阻附近照明营造白天光线强度较强环境,并且保持雨滴传感器上干燥,步进电动机上的端子向左滑动,代表晾衣架伸展晒衣物;
(3) 保持光敏电阻附近照明营造白天光线强度较强环境,将一片湿巾或者蘸有水的纸巾放在雨滴传感器上营造天气中为下雨状态,步进电动机上的端子向右滑动,代表晾衣架收缩收衣物;
(4)取消光敏电阻附近的照明,用手捂住光敏电阻或者移动到光线较弱的地方,此时不管雨滴传感器上是否检测出有雨水,步进电动机上的端子都是向右滑动,代表晾衣架收缩收衣物。
所有的预设功能均得以实现,实物展示图如图4.2、4.3所示。
    ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/c6416591f60f439ebcd61972f932be2b.png)

图4.2 实物展示图     
      ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/bfd585c45e784ac6a75bd1936a52ee66.png)

         图4.3 实物展示图












## 结 论

通过以上分析,本系统使用STC89C52单片机作为主控制器,由电源电路、STC89C52单片机核心电路、步进电机驱动电路、LED指示灯电路、雨滴检测模块、光照检测模块和按键电路等组成。本文着重对基于单片机的晾衣架控制系统做出了比较详细的报告,其中包括硬件部分与软件部分两大模块,并且对其中各个重要子模块增加了重点详细说明。
对于这次系统设计,我主要的设计思路是解决人们晾衣物问题,实现自动化、智能化。系统利用光敏电阻和雨滴传感器来进行当前环境的检测,当系统切换为自动模式状态下,只有当且仅当不下雨的白天的时候,晾衣架才会打开进行晾衣服,其他任何情况下晾衣架的状态都是收衣物状态,这样就实现了一种智能晾衣架的设定。所用到的器件分别有:STC89C52单片机、型号为FC-37的水滴传感器作为检测当前环境是否下雨的传感器、光敏电阻作为检测白天黑夜的传感器,由于雨滴传感器和光敏电阻输出的信号都是电压信号,所以采用了LM393电压比较器将其转变为数字量信号送给单片机进行处理。为满足用户的多种需求,整个系统还设置了手动和自动两种模式;为了直观的看出当前模式和状态,还设计了指示灯电路,电机方面采用了能够成直线运动的微动电机,有利于更加清晰的观察出晾衣架当前所处模式。
本设计主要实现的功能有:系统接通电源以后,按下总开关,系统默认为手动模式,收衣物的状态,此刻,如果用户需要手动调节可利用收晾衣物按键进行相应的调节;可观察指示灯的灯亮来确定当前所处模式和状态,从左数第一个灯表示手动模式,第二个灯表示自动模式,第三个灯表示晾衣物,第四个灯表示收衣物;按下切换按键,此时系统切换为自动模式,由光敏电阻检测当前所处环境的光照强度,若为白天,且雨滴传感器并未检测到有雨的情况下,晾衣架状态为晾衣物;若白天雨滴传感器检测到有雨的情况下,晾衣架状态为收衣物;若为黑天,那么不管雨滴传感器是否有检测到下雨,晾衣架状态都为收衣物。通过这样的设计解决了人们因工作需求或其他未在家的情况下,晾晒的衣物因下雨没有被及时收回等问题,希望会给更多的人带来智能的生活享受。








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值