《实用智能窗帘控制器的设计-学位论文.doc》由会员分享,可在线阅读,更多相关《实用智能窗帘控制器的设计-学位论文.doc(84页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 本科毕业设计实用智能窗帘控制器的设计 毕业设计(论文)题目: 系 别 信息工程系专业名称 电子科学与技术班级学号 学生姓名 指导教师 二 O一 四 年 五 月 1绪论1.1研究意义随着电子信息技术迅猛发展,人们对智能家居的要求越来越强烈,方便及舒适的智能窗帘是适应现代化办公和生活环境的迫切需要。智能家居控制系统必将成为未来住宅的发展趋势,走进普通居民的家居,进一步提高居民的家居生活品质与品味1。智能窗帘作为其中的一个重要组成部分,其发展也标志着智能家居的发展程度,现在的智能窗帘控制系统集现代光、机、电为一体,是智能家居的理想选择,尽力达到完美与和谐的统一。本设计根据现代化办公和生活环境的迫切
2、需要,以单片机STC89C54RD+为主控芯片,利用光强度传感器BH1750FVI、温湿度传感器、红外遥控器、红外对管等传感器设计一个实用智能窗帘控制器。其取代了传统的手动推拉窗操作,以一种人性化的工作模式适应人们日益追求简单、方便、舒适的生活方式。1.2 实用智能窗帘控制器的设计的发展自从世界上第一幢智能建筑1984年在美国出现后,美国、加拿大、欧洲等经济比较发达的国家在智能家居的设计上也提出了各种方案2。智能窗帘作为其中的一个重要组成部分,其发展也标志着智能家居的发展程度,智能窗帘是未来居家生活的发展方向,虽然现在普及比较少且大多是有钱人的专属,但是随着电子技术的飞速发展和电子元件价格的下
3、降,具有功能完备、安全性较高、便于窗帘的维护、性价比高等优点的智能窗帘得到窗帘设计者的青睐。1.2.1基于无MCU智能窗帘控制器的设计 无MCU的智能窗帘控制器典型设计原理如图1.1,其核心电路为CK-95专用窗帘驱动模块。该控制器把控制信号经逻辑变换和电平变换后送到CK.95窗帘驱动模块控制电机工作,根据控制信号执行输出从而控制窗帘的开和关3。奥兰AL.CK01由驱动模块、电源模块、遥控接收及定时电路、控制电路等组成,其体积小巧,安装方便。但是,这种设计的控制器没用到微处理器MCU,使其控制不灵活,每一种功能上改动必会引起硬件上的变化,显得并不智能,不能满足高效、智能窗帘控制机的要求。信号变
4、换电路遥控译码电路红外就收电路S1S3S4S2自动停止主机开/关关副机开/关关去副机光敏电阻CK.95窗帘驱动模块mSP.18D电源模块220VVDDR图1.1典型无MCU的智能窗帘控制器原理图1.2.2基于PLC智能窗帘的设计 基于PLC智能窗帘的设计框图如图1.2所示。接通开关后,打开PLC电源,PLC启动后就对煤气检测模块、烟雾检测模块、温度检测模块、红外线检测模块等进行检测4。PLC根据这些信息自动控制窗户或者窗帘的开关。该智能窗设计最大的特点是功能模块化,PLC的接口较多,使得该设计的制作和编程较为方便。显然PLC的功能强大可以完成一个智能窗户的所有功能,其利用输入的各个检测信号输入
5、到预处理模块进行电量转换,并将信号输入到PLC处理,控制输出模块的动作,进行智能窗户的设计,功能十分完备。但是,其价格昂贵,一个低端的PLC裸机就高达一千元左右,再加上其体积庞大不易安装、I/O接口的浪费,显然是大材小用了。控制按钮电源气敏传感器烟雾传感器湿度传感器红外传感器温度开关输入模块 FXIN-24MR 输出模块直流电机排气扇声光报警器指示灯图1.2 基于PLC的智能窗帘的设计框图1.2.3基于网络化智能窗帘控制器的设计 基于Zigbee技术设计的智能窗帘网络化控制系统,其典型的原理框图为图1.3。利用系统网络的拓扑和采用Zigbee网络技术来对整栋办公大楼的窗帘进行集中控制管理5。根
6、据室外温度、光照强度等参数控制窗帘或者窗户,同时可以起到节约能源和美化整栋建筑幕墙的作用。但是这种方案把每个办公室的温度和光强的情况统一化了,没有按照每个办公室的实际需要而进行统一的管理和控制,使其在广泛利用方面有一定的局限性。图1.3 基于Zigbee技术的智能窗帘网络化控制系统开始程序初始化判断窗帘初始化状态打开关闭是否有强光或者较大湿度是否有弱光或者湿度低否否向Zigbee模块发射关窗信号向Zigbee模块发射开窗信号A1.3 研究内容设计内容:设计一个智能窗帘,用STC89C54RD+为主控芯片,以数字光强度、湿度、温度等传感器作为外围电路的窗帘控制器。将各传感器的信号送入单片机,利用
7、单片机发出控制信号去驱动电机转动,完成一个窗帘控制器的设计,使其具有功能完备、安全性较高、便于维护等特点。该控制器能检测环境的光线强度和湿度,并根据自己设点值自动打开窗帘的打开程度;定时早晚开关窗帘;红外遥控远程控制窗帘的开关和参数设置;能用液晶显示实时显示工作参数等。1.4 论文结构整个论文结构安排如下:第1章 绪论:介绍智能窗帘的背景、意义和发展现状第2章 系统硬件设计:讲述本设计所用到的各硬件模块的功能和实现方案第3章 系统硬件模块:系统的介绍硬件系统的总体电路和各个模块硬件功能的实现第4章 系统软件设计:系统地介绍软件流程、各模块的软件设计和总体程序组合第5章 系统的调试:从模块到整机
8、的调试第6章 结束语2系统硬件设计2.1功能要求主要功能: 光线强度检测:通过光线强度传感器实时检测光线强弱,控制窗帘打开的合适程度,为室内提供设定的光线强度; 时钟定时及万年历功能:能提供一个简单的万年历功能并能够定时早晚开关窗帘; 红外遥控远程控制:可以用遥控进行窗帘的开和关,以及各个参数的设置; 湿度检测:能完成湿度检测,当房屋内湿度太大能自动打开窗帘进行通风; 各参数(光线强度、湿度、工作模式、万年历等)的实时显示; 窗帘的完全关闭和打开的自动检测及控制等。根据设计的需要,将单片机最小系统、传感器模块、液晶12864显示、电机驱动电路和电机模块、红外遥控器和遥控接收模块、电源模块等有机
9、组合完成以上的设计要求。2.2设计方案利用单片机STC89C54RD+为主控芯片,以数字光强度、湿度、温度、红外对管等传感器为外围电路的有机结合,送入单片机中去驱动电机的转动。最终完成一个具有功能完备、安全性较高、便于窗帘维护等特点的窗帘控制器, 总体设计框图如图2.1。模块化设计: 单片机最小系统模块:单片机的电源电路、开关、必要的时钟电路、复位电路及按键; 传感器模块:BH1750FVI是用16位数字光强度传感器,利用内部的模数转换器把采集光的强度实时送到STC89C54RD+中进行处理,理将温湿度传感器等信号通过电量转换送入单片机6; 显示模块:通过液晶12864显示时间和工作模式及其参
10、数等; 电机模块:经过单片机对各种传感器的实时信息输入,根据预先设置好的参数对电机进行控制,主要为正转和反正的控制; 遥控模块:通过红外解码,进行遥控器的重新设计; 红外对管的模块,设计红外对管电路,能完成窗帘的完全关闭和打开的自动检测及控制等。STC89C5212864液晶显示红外遥控BH1750FVI数字光强度监测温湿度监测复位电路时钟电路(走时、定时)红外对管模块完全打开关闭检测电机模块供电模块模式选择(手动、自动)图2.1 窗帘总体设计框图2.3小结本章主要讲述了该设计要完成的主要功能和设计方案,根据功能确定智能窗帘设计的总体框图,以及其硬件电路设计的整体情况。完成了分析功能要求和确定
11、设计方案。3 系统硬件模块3.1系统总体电路本设计的系统总体电路如图3.1所示。控制部分是以STC89C54RD+单片机为核心的最小系统7;液晶12864显示各参数包括光线强度、湿度、工作模式、万年历等;把BH1750FVI实时采集光强信号和DHT11实时采集温湿度值送入最小系统进行处理;红外接收头接收遥控输入数据主要为功能键和数值键;DS1302提供一个万年历的功能,让预设时间和万年历时间一致,完成早晚开窗帘的开和关;2对红外对管分别完成完全打开和完全关闭的检测功能,使得电动机在完全打开和完全关闭时停下来。图3.1 系统总体电路图3.2 STC89C54RD+单片机最小系统主控制器在一定程度
12、上也决定了系统的整体性能,本设计选择的主控芯片是STC89C54RD+单片机。STC89C54RD+是宏晶科技公司推出的抗干扰性强、低功耗、高速、完全兼容传统8051指令代码且具有良好性价比的单片机。此单片机具有双倍速功能,支持6周期模式运行;还具备ISP在线系统编程功能,不用购买额外的编程器,为开发带来方便;最主要的是其具有16字节Flash程序存储器和1280字节的数据存储器,可以大大的满足使用者在编写复杂程序时遇到容量不够用的问题。本设计使用的传感器和外围电路较多,因此需要较大的存储容量,无需扩展外部程序存储器和数据存储器。考虑以上因素STC89C54RD+单片机是最好的选择,其最小系统
13、为图3.2。图3.2 单片机最小系统3.3 LCD12864显示模块本设计采用带有中文字库的液晶显示器12864,显示的分辨率是128*64,内置有8192 个16*16 点汉字和128个16*8点的ASCII字符。该模块的接口方式灵活、简单,让程序的编写也较为方便;同时还具有工作电压低、耗电量低等特点。由该模块构成的液晶显示与同类型图形的点阵液晶显示模块相比,在硬件电路结构和显示程序上都要简洁得多。考虑到要实时显示时间、光线强度、湿度、窗帘模式等参数,从而12864成为本设计的最佳选择。引脚接法如图3.3所示。图3.3液晶显示电路模块3.4时钟模块DS1302 是DALLAS公司推出的新一代
14、低功耗、高性能、自带RAM的时钟电路芯片。其可对年、月、日、周日、时、分、秒等精确计时,可以工作在2.5V5.5V之间,满足本设计的5V电源供电;DS1302内部结构中包含一个为318临时性存放数据的寄存器RAM;可以在工作时接上主电源和后备电源双电源引脚,同时也为备用电源CR2032充电。本设计采用三线(SCLK、I/O、RST)接口与单片机之间的同步通信。按照设计需要利用DS1302和单片机结合做有一个万年历模块设计 8。利用万历年中的时间进行早晚开关窗帘设定,时钟模块的电路如图3.4所示。图3.4 时钟模块外围电路3.5光线传感器模块一般测光线强度的电路模块用到光敏电阻,光敏电阻需要用模
15、数转换器将其模拟信号转换为数字信号,电路复杂、费用高而且光敏电阻进行光强度采集不够理想等缺点。从而人们提出了一种利用16位高精度数字光线强度传感器BH1750FVI进行光强度检测仪的设计方案9。利用 IC 总线接口数字型光强度传感器还可以避免额外的模数转换带来的误差,可在12864液晶显示器上进行测量数值的显示。该传感器具有光强度采集精度较高、实时性较强、反应速度非常灵敏等优点,并且电路设计较为简单,利用它的高分辨率可以探测较大范围的光强度变化(1lx.65535lx),可以很好地满足人们办公和居家的使用需要。除电源和接地外,只需使用2个I/O接口就可以实现光线强度的实时读取,使用十分方便,其
16、引脚接法如图3.5所示。图3.5光线传感示模块外围电路3.6红外遥控模块红外遥控系统如图3.6所示,由发射器和接收器两部分组成。遥控发射部分一般包括键盘矩阵、编码调制电路和LED红外发射器;接收部分一般由光、电转换放大器、解调和解码电路等组成。本设计采用的是1838T红外接收头,其体积和普通的三极管样的体积一样大小,使用十分方便,它集成红外线的接收、放大、解调,不需要外接任何其他元件就能完成从红外接收到输出与TTL电平信号兼容的所有工作。1脚接VCC接电源,2脚GND是地线,3脚脉冲信号输出(P33),系统只要检测到INT0信号下降沿就能测出控制指令,从而完成相应的功能。根据遥控信号进行编码1
17、0、周期波形图如图3.7所示进行解码11。1838T红外接收头的引脚排列如图3.8所示。键盘编码调制LED光/电放大解调解码遥控发射器遥控接收器图3.6 红外遥控系统框图遥控信号编码波形图遥控信号周期波形图图3.7遥控信号编码、周期波形图图3.8 1838T的引脚排列3.7温湿度传感器模块DHT11数字温湿度传感器是一个内部包含已校准的数字信号输出温湿度复合型传感器,其应用专用的温湿度传感技术和数字模块采集技术,以确保产品具有很高的稳定性;本设利用其中的测温元件NTC和电阻式感湿元件与一个STC89C54RD+单片机相连接,完成湿度的精确读取;极低的功耗、超小的体积、连接方便(只需用到单片机的
18、一个I/O接口)。在工作中同时提供温度和湿度的实时读取。本设计利用STC89C54与 DHT11之间的同步通讯,采用单总线数据格式。一次通讯时间4毫秒左右,传输完整的数据为40bit,高位先出。把数据分为整数部分和小数部分,根据具体格式为:8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据+8bit校验就能提取湿度值12。温湿度感器模块如图3.9所示。图3.9湿度传感器模块 3.8电机模块步进电机28BYJ48是四相八拍型电机,工作电压为DC5VDC12V。当对步进电机施加一系列连续不断的控制脉冲时,就可以连续不断地转动13。本设计采用的是A.AB.B.BC.
19、C.CD.D.DA.A节拍方式如图3.10所示,当数组中的值改变并完成完成一个循环的时候,转子就转过一个齿距,以此类推地连续工作。其中因为P1的低字节已作为按键使用,所以P1 =(P1&0x0f)|(0xf0&FFWj,使得P1的高字节(FFWj的值依j的变化次循环)在不影响P1低字节的变化,去驱动步进电机。因此数组FFW的值为0x1f,0x3f,0x2f,0x6f,0x4f,0xcf,0x8f,0x9f,使得电动机正转。同理可以利用数组REV的值为0x9f,0x8f,0xcf,0x4f,0x6f,0x2f,0x3f,0x1f去完成电动机反转。由于单片机接口信号不够大需要通过ULN2003放大
20、后再连接到相应的电机接口。电机接口的电路如图3.11所示,驱动方式:(4-1-2相驱动),从左到右 CCW旋转方向(轴伸端视)。导线颜色123456785红+4橙-3黄-2粉-图3.10步进电机运行方式1蓝-图3.11电动机模块3.9红外对管模块2对红外对管分别完成窗帘的完全打开和完全关闭检测功能,使得电动机在完全打开和完全关闭的时停下来。当窗帘通过D2和D3之间时,D3就会导通,此时P00为低电平,否则就是高电平。同理窗帘通过D4和D5之间时,D5就会导通,此时P01为低电平,否则就是高电平。所以,设定2个全局变量openall(完全打开)和closeall(完全关闭)分别为P00和P01的
21、电平信号值,就可以反馈窗帘的打开程度,以使得电动机在完全打开和完全关闭的时停下来。其电路如图3.12。图3.12 红外对管模块3.10电源模块设计直流稳压电源通常由电源变压器、整流电路如图3.13所示、滤波电路和稳压电路这四部分组成。变压器将220V的交流电变换为所需要的电压值;整流电路将正负交替的交流电变换成单向的脉动电压;滤波电路将单向的脉动电压变换成比较平滑的直流电压;稳压电路将平滑的直流电压变成恒定的直流电压,并且当电网电压波动,负载和温度变化时,维持输出的直流电压稳定14。12V电源模块如图3.14所示,主要由核心元件是7812和7912。5V电源模块如图3.15所示,核心元件是LM
22、7805和7905,为不同的电动机在不同工作环境提供相应的电压。图3.13 整流电路模块图3.14 12V电源模块图3.15 5V 电源模块C170.33uFC312.2nFC190.1uFC270.01uFC280.01uFC294.7nFC230.1uFC240.1uFC250.033C260.033C322.2nFC304.7nFC21220uFC201uFC22220uFC182.2uFD31N4148D41N4148AB+5.5GNDVin1Gnd2+5V3U3LM7805CTVin2Gnd1.5V3U4LM79053.11遥控版面设计 将遥控器进行解码,将原有的遥控版面如图3.16
23、所示,进行重新设计,最终完成适合该设计实际应用的版面如图3.17所示。开 停 关 手/自 时间 确定 0 设置 1 2 3 4 5 6 7 8 9 图3.17遥控版面重新设计图3.16 遥控原有版面重新设计3.12小结本设计使用的模块较多、较散,必须在模块化设计时把每个模块的最终协调工作考虑进去,从而为系统的软件设计提供方便和做好准备。4 系统软件设计4.1程序工作流程图4.1.1程序总体工作流程图本设计使用C语言完成程序的编写和调试, Keil软件是目前开发51系列单片机最流行的软件,可直接用串口转USB下载由Keil软件生成的.hex文件进行程序烧录,使用十分方便。与汇编语言比较,C语言有
24、程序灵活性强、代码简洁、容易进行模块化设计等优点15。总体工作流程如图4.1所示,首先,进行程序初始化,其包括单片机、液晶、各传感器等模块的初始化。进入界面后按照DS1302原有的时间进行走时,该界面也提供一个万年历的功能,可以使用遥控查看时间包括年、月、日、时、分、秒、星期的查看,如果不进行时间调整,就可以进入自动模式和手动模式的任意切换,默认下为自动模式。初始化是否调整窗帘显示时间是否年、月、日、时、分、秒、星期调整是否让窗帘工作在手动模式否是是否工作在手动模式工作在自动动模式是否退出自动模式是否完成设置否图4.1 程序总体工作流程图是4.1.2自动模式工作程序流程图如果工作自动模式的流程
25、图如图4.2所示,则按照预设定的值(最适宜的光线强度值、最大湿度值、早晚开窗时间)进行工作,其中这些值可以用遥控进行修改。系统有个全局变量dayfalg,它可以判断当前时间是否在早晚开窗时间之间,从而决定早晚开窗时间。如果是晚上就完全关闭窗帘,除非用手动模式打开窗帘。在早晚开窗时间之间,如果当前湿度大于设定值,就完全打开穿了通风,如果光线强度值不满足设定要求,就进行正反转自动调节。是是是是图4.2 自动模式工作流程图完全打开电动机正转完全关闭电动机反转是当前当前光线是否小于设定要求是否否当前光线是否大于设定要求 完全打开是否电动机正转是当前湿度是否大于设点最大值否完全关闭是否电动机反转否当前时
26、间是否在早晚开窗时间之间是否完成设置是否设置各预设定的参数是是否调整适宜光线强度值、最大湿度值、早晚开窗时间工作在自动模式4.1.3手动模式工作程序流程图如果工作在手动模式下流程如图4.3所示,不受设定值的影响,自由地进行打开和关闭窗帘。工作在手动模式是否按下打开否是电动机正转否是是否按下停止是否按下关闭否是完全打开是电动机反转否是 是否按下停止是 完全打开否否否否否否图4. 3手动模式工作流程图4.2 BH1750FVI数字型光强度值读取主要程序写好BH1750FVI的初始化程序后,主要通过Single_Read_BH1750(uchar REG_Address)和void Multiple
27、_read_BH1750(void)子程序读取光线强度数据。uchar Single_Read_BH1750(uchar REG_Address) /单字节读取/ uchar REG_data; BH1750_Start(); /起始信号/ BH1750_SendByte(SlaveAddress); /发送设备地址加写信号/ BH1750_SendByte(REG_Address); /发送存储单元地址,从最开始的单元开始/ BH1750_Start(); BH1750_SendByte(SlaveAddress+1); /发送设备地址加读信号/ REG_data=BH1750_RecvBy
28、te(); /读出寄存器数据/BH1750_SendACK(1); BH1750_Stop(); / /信号停止/ return REG_data; void Multiple_read_BH1750(void) /连续读出BH1750内部数据 uchar i; BH1750_Start(); /起始信号/ BH1750_SendByte(SlaveAddress+1); /发送设备地址加读信号/ for (i=0; i2) flag_num=0; sum=sum*10+buf; for(i=0;i1) zidong=0; if(wangnianli1) wangnianli=0; for(i
29、=0;i4;i+)/关闭接收 防止进入死循环/ ircodei=0; 4.4温湿度传感器工作程序void read_init() DHT=0; /使DHT11低电平并延时至少18ms/delay_ms(21);DHT=1; /置DHT11高电平2040us,并等待从机相应/delay_10us();DHT=1;if(!DHT) /从机发出响应信号/ flag=2;while(!DHT)&flag+);/等待从机发高电平结束/flag=2;while(DHT&flag+);/开始采集数据/tr_shiZ=read_datadht(); /采集湿度整数部分/tr_shiX=read_datadht
30、(); /采集湿度小数部分/tr_wenZ=read_datadht();/采集温度整数部分/tr_wenX=read_datadht();/采集温度小数部分/check=read_datadht();/采集校验位/DHT=0;delay(20); /采集完数据后/ char read_datadht()uchar i,num,tempp;num=0;for(i=0;i8;i+) flag=2;while(!DHT)&flag+);/等待50毫秒低电平/delay_10us(); /延时判断0还是1/if(DHT=1) tempp=1;flag=2;while(DHT&flag+);elset
31、empp=0;num=1;num|=tempp; return(num);湿度 (shiZ)的值和预设定值shidu0进行比较,如果在设定的早晚时间之间,当shiZ大于shidu0就执行打开窗帘通风。4.5早晚定时开窗主要程序在早晚定时的程序中,如果当前时间不在早晚定时之间,dayflag为0,如果当前时间在早晚定时之间,dayflag为1。程序段为:read_init(); /读传感器数据/read_time(); /读时间子程序/if(am0*10000+am1*10)(shi*10000+fen*10)(SET_guangqiang+20)|(dayflag=0)&(closeall=0
32、)&zidong).4.6电动机模块以打开窗帘为例,程序段为:dakai() int i,j; for(i=0;i16;i+) for(j=0;j(SET_guangqiang+20)|(dayflag=0)&(closeall=0)&zidong)while(tempshidu0)&(dayflag=1)&(openall=1)&zidong)只有closeall为低电平才能执行第一个while循环体内容(关闭操作),只有openall为高电平才能执行第一个while循环体内容(打开操作)。4.8系统主程序void main()uint SET_guangqiang; uchar i,j;
33、while(1) float tempp; delay_ms(200); /延时200ms lcd_init(); /初始化LCD Init_BH1750(); /初始化BH1750 timer0init(); int0init(); while(1) if(k4flag=1) /如果按下k4即设置键,进入调整时间 lcd_wcmd(0x80);xianshi(智能窗帘 时钟 );lcd_wcmd(0x91);xianshi(20 年 月 日);lcd_wcmd(0x8A);xianshi(星 期 ); lcd_wcmd(0x9a);xianshi(00: 00: 00 );while(k4f
34、lag=1)if(k1=0) read_time(); /读时间子程序dingwei(); keyscan(); /设置退出if(key4=0)k4flag=0; if(key4=0)k4flag=0;break; if(k4flag=0) read_init(); /读传感器数据 read_time(); /读时间子程序 /if(am0*10000+am1*10)(shi*10000+fen*10)(pm0*10000+pm1)*10) if(am0*10000+am1*10)(shi*10000+fen*10)(pm0*10000+pm1)*10) dayflag=1; else dayflag=0; keyscan(); if(key4=0) k4flag=1; break; gkey(); if(wangnianli) cwannianli(); /查看万年历 lcd_wcmd(0x80); xianshi( : : ); receive(); if(ircode2=0x0d)/光线强度/湿度/早晚开关时间设置