王法杰
(西安航空职业技术学院 电子工程学院, 西安 710089)
随着智能家居的快速发展与广泛应用,对晾衣架的智能化也提出了更高的要求。基于单片机的智能晾衣架系统有手动和自动两种模式,手动模式与传统晾衣架功能一样,自动模式能自动识别白天和夜晚,雨天与晴天,使衣物在干燥晴天得到晾晒,夜晚或阴雨天自动收回,也可在一定距离范围内通过遥控来控制晾衣架伸缩,通过限位开关将晾衣架的伸缩控制在合理的范围之内[1]。该晾衣架系统结构简单,功能丰富,可以满足不同用户的需求,具有一定的推广使用价值。
智能晾衣架设计采用STC89C52RC为主控芯片,利用光敏电阻检测光照强度,利用温湿度传感器检测环境的湿度,超过阈值则晾衣架的电机进行动作实现晾衣架的智能化,湿度的测量值可通过两位一体共阴极数码管进行显示,直观方便,同时,通过遥控器按键也可控制晾衣架动作。用红黄蓝三种颜色LED小灯指示晾衣架的工作状态,红灯用于工作模式选择指示,红灯灭时,表示手动遥控模式,通过遥控按键控制晾衣架的伸缩功能;红灯亮时,表示自动模式,当湿度大于80%RH或者光敏电阻检测到是夜晚时,黄灯亮,电机反转,执行晾衣架收回功能,当蓝灯亮时,说明湿度小于80%RH并且光敏电阻检测到是白天,电机正转执行晾衣架伸出功能[2]。通过模式选择开关按键进行模式切换,模式切换或者按下伸缩限位开关时,蜂鸣器报警提示,其原理框图如图1所示。
图1 智能晾衣架原理框图
湿度检测模块主要采用温湿度传感器DHT11来检测,其湿度量程为20%-90%RH, 温湿度传感器2脚是输出引脚,接5 K上拉电阻,与单片机P2.0相连接,定义为“sbit DATA=P2^0;”。由于用光敏电阻对光照进行检测,所以温湿度传感器主要用其湿度控制功能。DHT11采用单总线方式,即数据的读写都占用同一根总线,所以编写操作程序都必须严格按照时序进行,即单片机发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT11发送响应信号,送出40 bit数据,高位在先,并触发一次信号采集,用户可选择读取部分数据。数据格式为“8 bit湿度整数数据+8 bit湿度小数数据+8 bit温度整数数据+8 bit温度小数数据+8 bit校验和”[3],由DHT11时序得知,主机先发送复位信号给从机,主机拉低总线至少18 ms,通过执行语句“DATA=0;delay_ms(20);”拉低20 ms,然后再拉高总线,由上拉电阻拉高延时20 us-40 us,程序编写可取中间值30 us(“DATA=1;delay_us(30);”),主机发送完复位信号,DHT11发送响应信号,检测到复位信号后,触发一次采样,并拉低总线80 us表示响应信号,通知主机数据已准备好,如果有低电平响应,则接着判断从机DHT11是否拉高总线80 us,如果拉高80 us,之后开始传输数据进入数据接收状态[4]。为了防止中断干扰总线时序,操作前先关总中断(“EA=0”),操作完毕再打开(“EA=1”)。DHT11进行温湿度数据采集的流程图如图2所示:
判断DHT11响应的主要代码如下:
if(!DATA) //判断从机是否有低电平响应
{ U8FLAG=2;
while((!DATA)&&U8FLAG++);//等待DHT11拉低总线80US
U8FLAG=2;
while((DATA)&&U8FLAG++);//等待DHT11释放总线80US
COM();//读湿度函数
U8RH_data_H_temp=U8comdata;//湿度整数部分COM();
U8RH_data_L_temp=U8comdata;//湿度小数部分COM();
U8T_data_H_temp=U8comdata;//温度整数部分COM();
U8T_data_L_temp=U8comdata;//温度小数部分COM();
U8checkdata_temp=U8comdata;//校验八位
DATA=1;
U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);//数据校验
图2 DHT11温湿度采集流程图
如果数据校验正确则有返回值(“return 1”),否则DHT11传感器不响应(“return 0”)。其中“COM”函数为湿度读取函数,设计思路是,当50US低电平后,拉高总线,判断高电平持续时间,如果是“26-28US”表示数据“0”,“70US”则为数据“1”,然后按照高位在先的顺序传送数据。
数据发射时,按键分别和SC2262-IR的数据端11脚、12脚和13脚连接,实现模式切换、晾衣架伸出和收缩功能。
数据发射模块的工作频率为315M,采用315M无线发射板,按键按下,SC2262-IR编码芯片的17脚和发送模块315M的3脚相连,通过315M模块发送数据,SC2272-m4和315M无线接收模块组合电路将接收到信号进行解码,解码的数据通过SC2272-m4的11脚、12脚和13脚输出,再经过三极管反相后送到单片机P1.1、P1.2和P1.3端口,单片机处理后从P3.0和P3.5输出控制继电器的吸合与关断,从而控制电机转动方向。在仿真图里直接用按键开关接到单片机的相应端口[5]。P1.1是进行自动手动模式切换功能,当该位位“0”时,说明切换模式已选择,同时设置切换标志位(“change_flag”),当切换标志位为“1”时,执行手动模式选择,即无线遥控操作,当切换标志位为“0”时,切换到自动模式。遥控模式时,进一步判断伸出按键是否按下,当伸出按键按下并且没有按下伸出限位开关时,晾衣架伸出,同时,单片机的P3.0输出为低电平,经与三极管Q1相连的继电器吸合,电机正转,伸出指示灯(P1.5)点亮,再按一次则停止伸出,伸出指示灯熄灭,操作完成后通过语句“while(!in_go);”释放伸出按键开关[6]。主要代码如下:
else if(change_flag==1)//手动模式选择
{ if((in_go==0)&&(limit_go==1))//伸出按键是否按下
{ delay(50); //延时去抖
if((in_go==0)&&(limit_go==1))//再次判断按键状态
{ buzz=0;
delay(200); //按键音,蜂鸣器提示
buzz=1;
out_back=1; //禁止收回
out_go=~out_go; //按一下伸出,再按下,停止动作
led_back=1; //收回指示灯灭
led_go=out_go; //晾衣架伸出时,伸出指示灯亮
flag_shan1=0;}
while(!in_go);//释放伸出按键}
同样思路,可以编写遥控按键收回、按下伸出限位开关和按下收回限位开关程序。
程序编译时从主函数开始执行,主函数里设置开机默认为自动模式(“led_zhishi=0;”),在程序开始定义为“sbit led_zhishi=P1^7;”,初始化定时器,在“while”语句里调用工作模式切换函数和数码管显示函数,用“if”语句判断,当湿度转换完成时,只读取湿度的整数部分(“humidity = U8RH_data_H;”),并且设定湿度阈值为80%RH,数码管上只显示数值[7]。
数码管显示函数主要实现对湿度整数部分进行个位和十位的显示,个位显示语句为“P0=table[humidity%10];”,十位显示语句为“P0=table[humidity/10];”,通过P0口进行段选显示。位选由P2.2和P2.1控制,P2.2接数码管个位位选引脚,个位显示时P2.2为低电平,P2.1接数码管十位位选引脚,十位显示时P2.1为低电平,由于动态显示速度快,所以看上去是同时点亮。
电路仿真时,为了形象直观,用按键开关直接控制单片机来驱动电机的转动。无线发送模块的硬件连接部分如图3所示。
图3 无线发送模块
发送模块主要由SC2262-IR和315M发射模块分组成,对应的接收模块电路主要由SC2272-m4和315M接收模块组成,接收到的信号由SC2272-m4的11,12和13引脚输出经三极管反相后送给单片机P1.1,P1.2和P1.3端口[8]。仿真图如图4所示。
图4 智能晾衣架仿真电路图
仿真部分直接用按键开关连接到了单片机的P1.1,P1.2和P1.3,省略了遥控部分,效果与实物制作一致,当前仿真图显示自动模式状态,光敏电阻显示为白天并且湿度小于阈值时(“if(light==1&&flag_HH==0)”),其中,定义光敏电阻经三极管输出接单片机P1.0,声明语句为“sbit light=P1^0;”,变量“flag_HH”在主函数设置湿度阈值时赋值,超过阈值置1,不超过阈值清零,图中仿真为晾衣架伸出状态,通过调整光敏电阻的滑动端和DHT11的调节按键可以仿真出不同天气条件下晾衣架的工作状态[9]。实物制作如图5所示。
其中左边为系统控制板,右边为遥控电路,实物制作安装了无线接收与发送模块,可以实现远距离控制,实用性更强,实物图中当前状态显示超过阈值范围黄灯亮,电机反转,晾衣架收回功能[10]。
图5 智能晾衣架实物制作
基于STC89C52RC单片机的智能晾衣架,可以通过无线遥控控制晾衣架的伸缩,到一定程度按下限位开关时电机停转,蜂鸣器报警,能够自动根据环境的光线和周围环境湿度调整电机转动来控制晾衣架的伸缩,晾衣架伸缩时,或工作模式切换时,对应指示灯分别点亮指示[11]。经仿真与实验验证,该智能晾衣架系统设计优良、使用方便、功能丰富,具有一定的推广和实用价值。