智能宿舍

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

《自己动手打造智能宿舍》未删减版原稿刊登于《无线电》2013年4月第1页共12页版权所有仅供参考《自己动手打造智能宿舍》未删减版原稿刊登于《无线电》2013年4月刊智能家居原本只存在于科幻电影和一些高档的豪宅中,是顶级奢侈生活体现。但随着物联网技术的不断发展,相关配机价格不断降低,技术也变得更加成熟,智能家居正在越来越快的走进我们普通人的生活。智能灯光控制、家电智能化、电动窗帘等等智能家居的基本元素已经成熟。前段时间在优酷上无意之中看到国外的一个智能宿舍的视频,宿舍叫BRAD(berkekeyridiculousluautomateddorm),宿舍包含灯光控制、电动窗帘。控制方式包括语音控制、IPAD终端控制、PC终端控制等。受到这一视频的启发,决定把我们的宿舍也改造改造。到目前为止可以实现走廊灯和照明日光灯开关、空调开关、电视开关、电视音量频道切换、窗帘开合。控制方式包括PC控制、语音控制和按钮控制。下面就分几个部分简单介绍一下智能宿舍的基本原理。由于我们是宿舍,不可以对线路做改造,所以在灯光控制部分采用了别的方案。我也对根据目前的效果给出一点改进建议。大家有兴趣也可以少走点弯路。宿舍布局图:A:红外发射头(一对)B:灯光控制盒PART1灯光控制灯光控制作为智能家居最主要的部分,是智能家居人性化的最主要体现。冬天躺在温暖的被窝里,关电视可以通过遥控器实现,但是关灯如果没有床头双联开关就是一件无比头疼的事。由于宿舍涉及到安全等等原因,不可以对原有线路进行改造。灯光控制不可以使用继电器。于是便想到了通过在开关面板外加接机械装置实现开关。如图:灯光控制实物图开关采用四连杆机构,动力源来自一个12g塑料齿舵机,基本控制原理也就是舵机的控制原理。详细原理请查看有关资料。舵机通过PWM(脉宽调制)实现,PWM方波信号可以《自己动手打造智能宿舍》未删减版原稿刊登于《无线电》2013年4月第2页共12页版权所有仅供参考通过单片机定时器产生,或者通过增强型8051单片机,如STC12C系列具备PWM输出功能。由于我手中有一块32路舵机控制板,所以我就直接使用了这一模块,如图。舵机控制模块该模块支持串口,波特率从9600到115200都可以,并且自动识别。我们采用的是9600波特率的TTL电平串口总线,正好符合这一模块的要求。虽然模块不支持主从总线模式,但是模块指令均以“#”号开头,只有识别到“#”号之后的指令才会进行操作。具体不做解释。在开关右侧有一个控制盒,用于实现按键控制。里边安装有舵机控制板、变压模块和一块单片机。单片机用于读取3x4键盘、读取总线数据、发送舵机控制指令。灯光控制盒内部实物图如图所示是控制盒的基本结构,大致工作顺序可以描述为单片机一直都是扫描矩阵键盘,串口采用中断。当读取到键盘键值或者接收的串口发送的有关开光灯的指令后通过串口TXD向舵机控制模块发送对应操作指令,如:“#1P2200T100\r\n”表示1号舵机在100ms内运动到波特率2200的位置。虽然共用串口,但是由于这一指令没有第九位,所以默认是数据,由于开头没有地址字节,所以所有主机不接收也不转发。舵机控制板没有使用多机模式,会接收并处理,做出相应动作。灯的开光就完成了。改进建议:1.建议使用继电器作为灯光开光。从可靠性和难度上来讲继电器无疑还是最好的选择,我这个只是由于不能对原有线路做改造才使用这一方法。继电器方式的建议结构如图。4路继电器模块2.建议使用增强型8051单片机,依靠I/O口工作方式设置寄存器(STC12C2052AD为PxM0和PxM1,x为0-3)。将对应I/0口设置为高阻输入模式,就可以实现电容式触摸。(具体内容请搜索高阻输入实现触摸)。这样可以改善人机交互性。但目前这种方式对电源要求比较高,如不打算使用可以自己制作薄膜键盘代替。3.对于开关较多的情况下如果不希望二次布线,可以考虑使用Zigbee方案进行解决。《自己动手打造智能宿舍》未删减版原稿刊登于《无线电》2013年4月第3页共12页版权所有仅供参考Zigbee最近降价也很快,是智能家居无线模块开发不错的选择。4.有线模式下注意考虑电缆本身电阻产生的压降可能造成单片机无法工作。所以尽量选用较大直径电缆。PART2空调电视控制智能家居光有灯是不行的,智能化的电器无疑是一个重要组成部分。但是目前这类智能化的家电大多还在家电厂商的实验室了。市面上出售的也都功能有限,价格也是不菲的。家电对于普通家庭来说依然属于大件物品。它的使用寿命也比较长,一般都要达到10年。更换智能家电显得不切实际,如何将现有家电整合到智能家居中,并尽可能减少对原有电路的改动是目前智能家居普及比较现实的一个问题。最简单的方案就是对原有遥控器进行克隆,将遥控器整合到智能家居的系统中,就可以实现对该家电尽可能多的智能操作。遥控器克隆技术已经相当成熟,学习型红外遥控器已经在市面上有售。对于我们DIY爱好者来说红外接收基本没有难度。单片机开发板上都有这一模块。获得的红外编码存储后如何发射是一个比较头疼的问题。特别是38KHz的红外方波难倒了不少人。网上比较通用的方式是使用555芯片加上外部电路产生38KHz方波。我为此也折腾了很长一段时间。当初的想法是用单片机定时器产生,但是发现12MHz的晶振根本产生不了。想买块发射模块,发现也没得卖。在逛了很多论坛之后无意之中发现一位大神写的用22.1184MHz晶振产生38kHz方波,并带有红外码发送的程序,兴奋不已。经过对程序的修改和调试,用了1天时间,经过逻辑分析仪反复读波形调试,成功完成了对空调的控制。虽然产生的方波略高于38kHz,约为38.6kHz。但空调可以准确读出并完成相应操作。自己写的一个读红外并串口发送的程序也可以识别。下边简单介绍这一程序。设置:定时器0工作方式:8位自动重装,初值TH0=0XE8;TL0=0XE8;(定时13us38K红外波晶振为22.1184MHz)。发送的一个字节红外码放在ircode中,下边是一个发送8位红外码的程序。voidsendcode_8(void)//8位红外码发送函数{uchari;for(i=0;i8;i++){set_count=40;//发送0.56ms38k红外波(编码中的0.56ms低电平)flag=1;//告诉定时中断发送一直是高电平count=0;//中断次数计数TR0=1;//定时器开while(countset_count);//等待中断次数到TR0=0;if(ircode&0x01)//判断红外编码最低位,1宽的高电平,0窄的高电平{set_count=130;}else{set_count=40;《自己动手打造智能宿舍》未删减版原稿刊登于《无线电》2013年4月第4页共12页版权所有仅供参考}flag=0;//告诉中断发送红外光count=0;TR0=1;while(countset_count);TR0=0;ircode=ircode1;//移位}}下边是发送多字节红外码的函数,其中将调用上一函数。函数中数组irsys[][]为红外编码表,提前定义并写入ROM中,具体如下:(空调为格力,电视品牌未知)ucharcodeirsys[7][6]={{0x3c,0x09,0x20,0x50,0x02,0x00},//airON空调打开(包含温度及其他信息){0x34,0x09,0x20,0x50,0x02,0x00},//airOFF空调关闭(包含温度及其他信息){0x1c,0x61,0xdc,0x4b,0xb4,0x03},//ON/OFF电视开关{0x1c,0x61,0xdc,0x4f,0xb0,0x03},//CH+电视频道加{0x1c,0x61,0xdc,0x5f,0xa0,0x03},//CH-电视频道减{0x1c,0x61,0xdc,0x43,0xbc,0x03},//VO+电视音量加{0x1c,0x61,0xdc,0x53,0xac,0x03}//VO-电视音量减};函数为:voidsendcode(unsignedcharm){ET0=1;//定时器0中断使能ES=0;//关闭串口中断delay(1);set_count=696;//发送9ms38K红外光flag=1;count=0;TR0=1;while(countset_count);TR0=0;set_count=348;//间隔4.5msflag=0;count=0;TR0=1;while(countset_count);TR0=0;ircode=irsys[m][0];//1sendcode_8();ircode=irsys[m][1];//2sendcode_8();ircode=irsys[m][2];//3《自己动手打造智能宿舍》未删减版原稿刊登于《无线电》2013年4月第5页共12页版权所有仅供参考sendcode_8();ircode=irsys[m][3];//4sendcode_8();ircode=irsys[m][4];//5sendcode_8();ircode=irsys[m][5];//6sendcode_2();//这是发送2位红外码的函数,根据8位简单修改而来,因为空调这一字节只用到两位,不做具体介绍.set_count=40;//发送0.56ms38k红外波(编码中的0.56ms低电平)flag=1;count=0;TR0=1;while(countset_count);TR0=0;ir=1;delay(23);//延时23ms(编码中的23ms高电平)set_count=696;//发送9ms38k红外波flag=1;count=0;TR0=1;while(countset_count);TR0=0;set_count=348;//间隔4.5msflag=0;count=0;TR0=1;while(countset_count);TR0=0;set_count=30;//发送0.56ms38k红外波(编码中的0.56ms低电平)flag=1;count=0;TR0=1;while(countset_count);TR0=0;ir=1;ET0=0;ES=1;}注:数组中有6个字节数,以上程序中只发送了4个字节加两位。因为空调总共用到34位,电视用到43位。具体程序可以用if判断第6字节是否为0来决定是否完整发送第5字节和第六字节前三位。下边是中断函数:其中ir为P1.0即红外二极管阴极,阳极直接接VCC。使用灌流驱动(只用于增强型8051单片机)。《自己动手打造智能宿舍》未删减版原稿刊登于《无线电》2013年4月第6页共12页版权所有仅供参考voidtimer0(void)interrupt1{count++;if(flag==1)//flag=1需要发送红外码{irout=~irout;}else//不需要发送,直接高电平。{irout=1;}ir=irout;}说明:由于空调和电视往往不在一个方向,用一个二极管没法对两台电器进行控制,可以通过在P1.1再加一个二极管,在程序中加入ir1,通过判断具体是电视还是空调的红外码决定从哪个二极管发出。实现对两台电器的控制。红外发射头实物改进建议:1.为了调试,我把控制红外发生的单片机放到了主机里。在实际中可以将单片机和二极管做到同一块PCB上,方便扩展更多发射头。2.程序中我使用都是固定的红外编码。但是红外编码往往都有规律可循。比如格力空调温度就是第二字节低四位从0到C变化对应温度18度到30度。第一字节高四位为4时表示关闭空调,为C是表示打开空调。又比如电视,所有编码1、2、3字节都是一样的,第4、5字节根据功能不同有所区别。在编码表中就只需要存储这两个字节的数据。从而节约ROM资源。3.合理布置红外发射头的位置。我在布线时把发射头放的离空调比较近,离电视比较远。于是就出现了有时候发送了但是没有成功接收的情况。PART3电动窗帘电动窗帘第一次进入大家的视线可能是在那部很有名的电影《非诚勿扰》。范伟住的豪宅按一下遥控器窗帘就

1 / 12
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功