职场文秘网

首页 > 总结汇报 > 述职报告 / 正文

基于单片机的智能窗帘控制系统设计毕业论文

2020-04-24 12:20:57

  基于单片机的智能窗帘控制系统设计 摘 要 在现代的社会中,人们对生活环境很重视,智能家居对人们的生活产生了极其重要的影响。本文将研究一种基于单片机的智能窗帘控制系统。在此设计系统中,以STC89C52单片机作为电路的主控部分,语音识别芯片和光敏电阻作为信号输入部分,加以按键控制和液晶显示,从而实现电动窗帘的智能控制。硬件电路是由语音识别模块、按键模块、系统总控制模块、光控模块、步进电机驱动模块和液晶显示模块等相关电路组成。通过软件调试实现窗帘的手动控制、半自动控制、自动控制等功能。最后经过硬件和软件的整体联调实现了语音控制、手动控制、光照控制窗帘的开关等基本功能。从而使窗帘达到智能的效果,在市场上有较好的应用前景。 关 键 词 智能窗帘,步进电机,单片机STC89C52,语音识别

  Design of control system for intelligent curtain based on MCU Abstract In modern society, people's living environment is very important, smart home for people's lives have a very important impact. This paper will research a kind of intelligent curtain control system based on single chip microcomputer. In this design system, STC89C52 microcontroller as the master control part of the circuit, speech recognition chip and photosensitive resistance as a signal input part, be keyboard control and LCD display, in order to achieve intelligent control electric curtain. Hardware circuit is made up of the speech recognition module, keys module, system control module, optical module, stepper motor driver module and LCD module circuit. Through the software to realize the curtain of the manual control, semi-automatic control, automatic control and other functions. At last, the basic functions of voice control, manual control, light control curtain switch and other basic functions are realized through the whole combination of hardware and software. So that the curtain achieved the effect of intelligence, has good application prospect in the market. Keywords

 intelligent curtain,stepping motor,MCU STC89C52,speech recognition

  目录

  摘要 I Abstract

 II 前言 3 1课题研究的背景及意义 3 2课题研究的内容及章节安排 3 3课题难点 4 4课题的设计任务和要求 4 5本章小结 4 第一章

 方案论证及总体设计 5 1.1光电传感器的方案选择和论证 5 1.2按键模块的方案选择 5 1.3语音识别模块的选择方案 5 1.4显示模块的选择方案和论证 6 1.5步进电机驱动芯片的选取 6 1.6系统的各部分功能实现 6 1.7系统的总体设计思路 7 1.8本章小结 7 第二章

 系统硬件设计 8 2.1主控模块及相关电路 8 2.1.1 STC89C52单片机的介绍 8 2.1.2晶振电路 9 2.1.3复位电路 10 2.1.4 电源电路 10 2.2按键模块 11 2.3光控模块 11 2.4语音识别模块 12 2.5步进电机驱动模块 13 2.6显示模块 14 2.7本章小结 14 第三章

 系统软件设计 15 3.1软件设计总体说明 15 3.2按键程序设计 16 3.3光控模块程序 17 3.4语音识别模块程序 18 3.5步进电机驱动软件设计 19 3.6显示模块程序 20 3.7本章小结 21 第四章

 调试与仿真 22 4.1 Proteus软件概述 22 4.2智能窗帘控制系统PROTEUS仿真 22 4.3调试的注意事项 23 4.4系统联调 23 结束语 27 附录 28 附录1:电路原理图及实物图 28 附录2:源程序 29 附录3:元器件清单 39 参考文献(References) 40

 前言 1课题研究的背景及意义 科学技术的不断创新和提高,电子产品的种类越来越丰富且发展速度也非常惊人。原有的模拟产品正在慢慢地转化为数字产品,这还远远不够。人们更加看重的是产品能够根据用户不同层次的需求进行工作,体现出产品的人性化。近年来,由于物联网技术、微电子技术和计算机控制技术的迅速发展,因此出现了智能家居系统。跟普通的对比,它具有很大的优势。最主要的就是实现多方位的信息交流功能,提高人们的生活质量。智能家居不仅具备传统的居住功能,还使现代建筑和家电设备更加的智能化。从此家庭内部环境与外面世界信息交换变得更加方便、安全和畅通,增强人们居家生活的舒适性,节省家庭的日常开支。由于智能家居控制系统具有性能稳定、功能灵活、工作效率高、扩展容易等特点,人们开始普遍接受和应用其智能产品。 当今社会经济不断向前发展,科技正在进步。人们的生活质量得到提高,消费需求正发生巨大的变化。家用电器开始逐渐普及,但是智能化程度不够高。再说中国城镇化进程正在加快推进,到处都在搞房地产建设。现在的大型建筑是越来越多,窗户是这些建筑当中不可缺少的一环,其中落地窗已成为趋势,落地窗不仅采光好,还体现了这家人高大上的生活品味。在这种趋势下,传统的窗帘操作不方便,需要手动拉开,这不仅耗费时间,还浪费力气。特别是现在的很多家庭使用落地窗,窗帘大而笨重,已经无法满足普通大众的正常需要。到了冬天,天气比较冷。早晨九点钟左右太阳出来,人们想要享受阳光的味道却不愿意起床手动打开窗帘,所以人们怎样做不用起床就可以把窗帘打开呢?因此,智能窗帘已成为如今社会设计人才的主要研究方面。 本文主要针对单片机具备稳定性好、功耗低、体积小、大容量、价格便宜和集成度高等特点设计智能窗帘。在此次系统设计中,利用各个模块接口标准协议与单片机进行连接,然后将光敏电阻等传感器采集来的信号输送到51单片机中进行数据处理,处理后的数据送到步进电机执行模块,同时在LCD显示屏中显示出来。单片机在实际应用中从本质上颠覆了传统的控制系统设计思路和设计方法。用软件技术代替硬件的控制技术将成为时代的主流,现在可以用单片机通过编译软件程序来实现功能的运行,不用再向从前那样一定由模拟电路或数字电路来满足大部分功能的实现。 2课题研究的内容及章节安排

 本课题研究的是如何对智能窗帘控制系统进行总体的设计,此系统设计的主要依据是用户对智能窗帘控制系统功能的要求。声控、光控、定时控制和遥控是智能窗帘的主要四种控制方式。光控归类于全自动类;声控和遥控归类于半自动。由于红外线遥控是直线传播,无需频率的限定,发射端一定要对应接收端,他们中间不可以有障碍物挡著,也不可以斜对着被控对象。而无线遥控是按照无线电波的频率来遥控的,它的信号在空气中传播,能够穿过某些障碍物。但是其唯一的缺点就是容易受到其它频率无线电波的干扰,影响正常的工作。基于以上因素的分析,这次设计不打算使用遥控来控制智能窗帘。考虑到语音控制窗帘的产品并不常见,目前市场上还没有生产出来。在本次设计中可以根据人们的语音识别来控制智能窗帘的关闭,人们通过发出语音识别指令,语音识别模块接受指令。然后指令和关键字进行匹配,再将匹配的结果发送给单片机,单片机控制步进电机执行其相应的功能所以采用语音控制和光照强度控制的窗帘具有很好的发展前景。 在此次设计系统中,主要由按键模块、光敏电阻和运放组成的光控电路、单片机STC89C52控制系统、步进电机驱动电路、语音识别模块、和LCD显示等组成。步进电机驱动模块主要是通过步进电机的正反转来模拟窗帘的开启或关闭。光控模块就是利用光敏电阻的感光性实现窗帘自动的开和关。语音识别模块采用的语言记忆功能,把“开窗”和“关窗”的指令事先编写入程序中,再将程序植入到模块中,当有人发出非特定人语音识别指令控制窗帘的开闭。从此达到智能窗帘控制的功能要求。 智能窗帘控制系统章节安排如下: (1)绪论:讲述智能家居的研究背景及意义。

 (2)整体设计方案选取和论证:智能控制窗帘的总体方案框架以及各个模块的选择。 (3)硬件电路的描述:详细叙述系统所用到的电路原理。 (4)软件程序的编写:介绍所用的软件及设计流程。 (5)系统仿真及调试:讲述系统所用的仿真软件和调试的整个过程。 (6)设计总结:对本次设计做一个总结性的描述。 3课题难点 (1)光控电路的设计。 (2)怎样通过语音控制,实现智能窗帘的开/闭功能。 (3)如何实现步进电机的驱动问题。 (4)选用什么型号的传感器。 4课题的设计任务和要求 (1)根据要求完成对窗帘智能化控制的设计思路, (2)根据要求完成根据阳光和声音控制窗帘动作的控制要求 (3)完成整个控制系统硬件电路原理图设计和软件设计,编程工作。 (4)完成软硬件联调工作,实现设计功能 5本章小结 本章主要讲述了智能窗帘的研究背景和在人们日常生活中的重要意义,以及当前窗帘的主要控制方式分别是遥控、时控、光控和声控。在本次设计中确定自己想要往哪些方面研究智能窗帘的控制系统,实现什么样的功能。还提出来在设计的过程中会遇到的问题,大概的想了一下怎么完成本次设计的任务。

  第一章

 方案论证及总体设计 1.1光电传感器的方案选择和论证 由于白天和黑夜的光照强度不同则需要光电传感器自动开关窗帘,这是智能窗帘不可缺少的部分。那么选择什么样光电传感器比较好呢?通过自己查找资料,发现光电传感器主要有以下几种选择方案。 方案一:采用光敏电阻作为光控模块,主要是利用光电感应效应原理工作的,在没有光线的地方,光敏电阻的阻值比较大,电流很小;当有光照较强时,其电阻值瞬间变小,电流增大。为了使光敏电阻器吸收更多的光能,光敏电阻被制成薄片形状。光敏电阻具有体积小、灵敏度高、稳定性好、质量轻等特点。因此光敏电阻被用于很多光电控制系统,如路灯,照相机自动曝光装置,光电计数器等方面[5]。 方案二:采用光敏二极管作为光控模块,主要是通过单向导电性工作的,光照特性比较好。在没有光照时,反向电阻很大,反向电流比较小,二极管截止。当受到光照时,PN结导通,电阻迅速变小,电流变大,二极管导通,电路工作。但是它的能耗相对其它光电传感器而言比较高,容易引起发热等现象。所以在本次设计中,不适合使用。 方案三:采用光敏三极管作为光控模块,光敏三极管对电路中的电流有很大的放大作用。但是光敏三极管的光照特性和灵敏度没有光敏二极管好,还容易受温度的影响。 因为光敏电阻器的应用范围广、性能相对较好、体积小、价格便宜等特点。所以本次设计选用光敏电阻作为光电传感器。 1.2按键模块的方案选择 方案一:矩阵键盘电路连接复杂,但节省了很多I/O口,提高了端口的利用率。软件编程比较难,适合按键使用量大的场合。 方案二:独立键盘电路相对简单,每个按键只占用一个I/O口,编写程序简单。独立按键具有体积小、装配方便、价格便宜等特点。适用于比较少的场合。但按键数量多时,需要占用多个输入或输出端口。 由于独立键盘价钱便宜,需要的数量比较少,所以本系统采用方案二 1.3语音识别模块的选择方案 方案一:特定人语音识别仅考虑对于专人的话音进行识别。识别性能好,在寂静的状态下大于96%。设计模块化,可独立使用,也可配合其他控制模块工作。但此语音识别系统不适用于人们灵活的说话方式。 方案二:非特定人语音识别的语音与人无关,通常要用大量不同人的语音数据库对识别系统进行识别。非特定人语音识别可以单独解决语音识别问题,不用外接任何辅助的芯片,也不用使用者提前准备录音工作。 因为非特定语音识别简单、方便、灵活且实用性强等特点,所以选择方案二。 1.4显示模块的选择方案和论证 方案一:八个发光二极管组成LED数码管的显示。这些段分别由字母a, b, c, d, e, f, g, dp来表示。我们看到的字样是电压被加到数码管特定段上显示出来的。据我所知,一个发光二极管的管压降为2.0V左右,电流在20mA以内。共阳极数码管是将发光二极管的阳极和电源正极连接起来,共阴极数码管就是将发光二极管的阴极和电源负极连接在一起。 LED对电流很敏感,容易受温度的影响。它的管压降的发散性比较大,因此它对工作环境要求比较高。LED 只有工作在恒定电流值下才能保证数码管具有清晰均匀的亮度显示。发光效率拌随着长时间的使用LED数码管而下降。 方案二:LCD内部自带显示芯片,使用其物理特性改变其电压来显示文字、数字和图形。LCD液晶显示器可以直接驱动集成度高的电路,它具有稳定性好、显示清晰等特点,让人看了一目了然。 由于LCD液晶显示质量高、接口简单、便于操作、功耗低等特点。显示模块则选择LCD液晶显示。 1.5步进电机驱动芯片的选取 方案一:SGS公司生产的L298N电机驱动芯片,可以在电压43V左右工作,电流正常工作相比。它采用的是H桥驱动,能够从线圈正反两个方向通电。L298N可以直接控制电机运行,不需要外接辅助电路,能够通过电源调节输出电压。它既能同时驱动两台直流减速电机,也能驱使一台二相或四相的步进电机工作。但是工作时间长容易发热。 方案二:Uln2003芯片是由七个PNP达林顿晶体管组成的非门电路。输入和输出电流状态相反。它能在电流500mA、电压50V的情况下正常工作。应用范围比较广,在各种控制电路中常用作继电器的驱动芯片。 基于成本,结构简单的特点,本设计采用的是Uln2003。 1.6系统的各部分功能实现 (1)语音控制:当人们发出“开窗”的语音指令时,实现步进电机正转(电机逆时针转动),模拟窗帘打开。当人们发出“关窗”的语音指令,步进电机反转(电机顺时针转动),模拟窗帘关闭。 (2)环境亮度控制:光敏电阻根据白天和晚上的外界环境亮度程度不同工作。夜晚光照强度比较暗,电机顺时针转动(反转),模拟窗帘关闭。这是本次光控模块设计运行的初始状态。白天光照强度比较强,电机逆时针转动(正转),模拟窗帘关闭。实物演示时,为了不产生误动作,需要强电源来演示白天的工作状态。到了夏天,夜晚时间变短,白天时间变长,一般六点钟左右天就亮了,特别是对于上班族来说,有时晚上工作很晚,天亮不想打开窗帘,可以调节电位器,使光敏电阻的阻值变大。只有早晨八九点钟当太阳光很强时,窗帘就自动打开。 (3)手动控制:该功能使智能窗帘打开或关闭。并增加功能状态指示,电机正转,液晶LCD显示为“1”,电机反转,显示为“2”,电机停止,显示为“0”。 1.7系统的总体设计思路 根据任务和实际要求,该系统总体方案是由语音识别模块、光敏电阻和运放组成的光控电路、STC89C52单片机控制系统、按键模块、步进电机驱动模块,LCD显示等有关电路组成。整个设计结构图如图1.1所示,本控制系统是由单片机通过软件程序来实现智能控制。

 图1.1系统总体设计原理框图 1.8本章小结 本章分析了各个模块电路的选择方案并进行论证,比较它们的优缺点,进而选取最佳设计方案。根据用户的功能需求,进行具体分析,阐述如何实现窗帘的智能化并且设计系统的整体框架。

 第二章

 系统硬件设计 2.1主控模块及相关电路 2.1.1 STC89C52单片机的介绍 STC89C52单片机是由深圳宏晶公司代理销售的一款MCU,它的生产商是美国ATMEL公司。一个芯片由8位CPU构成,片内含4kbytes的可反复擦写的FlashROM和128bytes的RAM,2个16位定时计数器。

 其管脚图如图3.1所示。程序状态字PSW、存储器RAM和ROM、累加器、并行I/O接口P0~P3、地址指示DPTR、寄存器B、定时器/计数器以及时钟电路和复位电路等这些功能部件由内部总线联接在一起,组成单片机[3]。

  图2.1 STC89C52单片机结构图 VCC引脚:接5V电源供电。 GND引脚:接地端 XTAL1:接外部晶体的一个引脚,此引脚接入外部时钟信号。 XTAL2:接外部晶体的另一个引脚,外部时钟信号由此引脚接入。 RST引脚:复位输入端。VCC失电后,此引脚可接备用电源,保持内部RAM中的数据。 P0口:常用作地址和数据总线口。

  P1端口:供用户编程的输入或输出口。

 P2口:作为扩展系统的高8位地址总线口,也可以当I/O口使用。 P3口: 内部带8 个上拉电阻的双向I/O口,具备两种功能。作为第一种使用时,与P1口相同。P3口第二种功能见表2.1.

 表2.1

 P3端口的特殊功能

 ALE/PROG引脚:锁存P0的低8位地址,输入EPROM编程脉冲。 EA/VPP:当/EA使能端保持低电平时,单片机只访问外部存储器。当/EA端保持高电平时,单片机拜访内部程序存储器。 PSEN引脚:读写外部程序存储器信号。

 2.1.2晶振电路 如图3.2所示,这就是时钟电路图。电路程序正常工作要在规定的时间内完成,否则就无法和单片机进行联系。单片机内所有的位操作的时间是以时钟电路为基准的。内部振荡和外部振荡是时钟电路的两种形式。本设计就采用这种外接晶振的方法,这种方式是把存在的时钟信号引入单片机中,从而使内部时钟和外部信号联系到一起。晶振电路通常选用12MHz的晶振。单片机正常工作离不开它提供稳定的计时信号。一般情况下,时钟频率和单片机的运行速度成正比。电容C1、C2起到稳定震荡频率的作用。电容范围在20-40pF之间,这里连接的是30pF的电容。

  图2.2晶振电路 2.1.3复位电路 复位操作使单片机回到初始化状态,对于单片机而言,复位是不可或缺的。如果没有复位电路,当程序运行错误或者使用者操作不当导致系统处于锁死状态时,单片机系统就会瘫痪。这就是人们常说的“跑飞”或者“死锁”现象。只需要给单片机STC89C52至少五毫秒的高电平时,单片机就会自动完成复位操作。复位操作通常分为两种形式:上电复位、开关复位。上电复位是接通电源后,自动完成复位动作。开关复位是在电源接通时,单片机正在工作的时候,突然发生死机状态,手动按动按钮开关操作使单片机复位并进行初始化工作。复位电路图如图2.3所示。

 图2.3 复位电路 2.1.4 电源电路 干电池具有价格便宜,方便使用等特点。电源电路采用干电池供电,每节干电池为1.5V,需要三节干电池串联进行供电给单片机。由于还要供电给液晶显示屏LCD1602和语音识别模块,耗电量比较大,三节干电池是远远不够的,需要6节电池,才能使整个电路正常工作。况且6节电池串联为7.5V,单片机工作为5V,需要加一个三端集成稳压器LM7805使其正常工作。三端集成稳压器LM7805具有过流保护、过热保护、性能可靠、电路简单等特点,所以应用比较广。其内部结构图如图2.4所示。

 图2.4 LM7805内部示意图 2.2按键模块 键盘在单片机控制系统中能实现向STC89C2输入数据,传送指令的功能,它是人为干扰主控系统的重要手段。6个按键被用在这次毕设中。其中K1为手动开窗按键,当按下K1键时,电机正转模拟窗帘打开。K2为手动关窗按键,当按下K2键时,电机反转模拟窗帘关闭。K3为停止按键,当模式为手动时,人们可以使用此键把窗帘打开或关闭一半。K4和K5键分别是限位开关键,用来判断智能窗帘是否到达预定位置。当窗帘接近顶端时,会触碰到开窗限位开关K4键使其闭合,当智能窗帘到达底端时,接触到开窗行程开关K5键,然后闭合。当开关在弹簧的作用下恢复到常开状态时,表示窗帘离开限位开关。K6 是模式选择键,可以切换不同的工作模式。键盘电路如图2.5所示。

 图2.5按键模块电路 2.3光控模块 智能窗帘的光控功能是可以根据外界环境的光照强度来自动控制窗帘的开闭,因此需要用到光照传感元器件,选取型号为GL5516的光敏电阻作为光控模块。光控电路如图2.6所示。

 图2.6光敏电阻原理图 光敏电阻和运放组成了光控电路,有两个电阻在同向输入端分压得到一个基准电压值。而反相输入端用一个光敏电阻采集外部环境的光照,利用其光线暗时电阻大,亮时电阻小的特点,来确定反向输入端的电压值。再将两者的值进行对比,比较后的信号再送入单片机的P1口,从而通过主控系统来控制电机的正反转。实现白天窗帘自动打开,晚上窗帘关闭这一智能控制的功能。 2.4语音识别模块 由IC Route公司设计生产的LD3320是一种非特定人语音识别芯片。精准度高的A/D和D/A接口被装在模块内部,不再要外接辅助的电路,根据编辑需要识别的关键语句就可以实现语音识别和人机交流功能。 [4]LD3320也不需要使用者提前训练和录音来完成语音识别功能,真正实现了单芯片的语音识别解决方案。因此识别的准确率比较高,达到93%以上。LD3320语音识别模块图如图2.7所示。

 图2.7 LD3320语音识别模块图 LD3320芯片的工作流程如图2.8。首先对输入话筒的语音进行识别。然后,与芯片的关键词列表中的语句进行对比,最终选出得分最高的关键词作为识别的结果进行输出。

 图2.8 LD3320模块原理框图 2.5步进电机驱动模块 步进电动机是一种把电脉冲转化为机械角位移的控制电机,常用作数字控制系统中的执行器件。步进电机不可以直接接到直流或交流电源上,一定要使用专有的驱动器才能正常工作。在简单的运动控制中,单片机作为控制系统的大脑,通过步进电机专用驱动芯片实现其速度可调和位置准确定位的控制。步进电机在运行中具有性能稳定、精准度高、结构简单等特点,被普遍应用于各种自动化控制系统,特别是工厂自动化生产的流水线、智能仪表、机电一体化等方面。如图3.9所示,步进电机控制系统是由脉冲控制器,功率驱动电路,电机等组成的。 图2.9步进电机控制系统方框图 本次设计采用型号为28BYJ-48型四相八拍步进电机对旋转角度和位移进行控制,该步进电机力矩大、耐负载冲击、精度高。步进电机的工作电流较大,需要驱动芯片。当然也能通过使用下拉电阻或三极管是可以驱动电机运行,但是这种方法产生的扭力比较小,效果没有使用集成芯片驱动模块那么好罢了,所以系统的驱动用ULN2003。电机驱动接线图如下图所示。

 图2.10步进电机驱动电路 2.6显示模块 采用LCD1602的显示电路来观察智能窗帘的工作状态。液晶显示电路如图2.11所示。由于P0口带负载能力差,故需接上拉电阻(这里用1K的排阻),P0口作为数据口连接LCD1602的7~14口,来传输数据及指令。单片机P2.7口接显示屏的6脚使能端E,LCD1602的5脚R/W(读写选择端)接P2.6,P2.5口接液晶显示的选择数据或指令的RS端。调节LCD1602的亮度用到电位器RV2。

 图2.11液晶显示电路 2.7本章小结 本章主要介绍硬件电路所有的模块设计思想及其功能分析,对智能窗帘中的STC89C52单片机各个引脚进行解释,确定各个模块选用器件的型号以及原理图。

 第三章

 系统软件设计 3.1软件设计总体说明 本系统的程序采用C语言编写,为了便于修改和调试,系统软件采用模块化设计,程序的编写编译在WAVE6000软件中完成。将各个模块的程序分别输入KeiluVision4软件中运行,观察工作状态并进行调试。C51单片机是本次智能窗帘控制系统设计所采用的核心控制芯片,编程语言的开发工具是用的Keil C编程软件。C语言及汇编语言两者的功能都能集合于Keil C编程软件里,其主要优点有两方面:一是文本编辑器能被自身所加载,二是仿真模拟能够被Keil C所调试。在此次设计系统采用的是KeiluV4,其能提供友好的界面。图3.1是它的工作界面。

 图3.1Keil工作界面 仿真部分采用Proteus 软件,此软件功能强大且操作较为简单,可以很容易的实现各种系统的仿真。打开Proteus件,找出对应的器件绘制原理图;将wave6000已经编译好的*.hex文件放到画好的原理图中,点击运行,观察显示结果,再依据其工作状态和课题的要求修改程序,修改好后继续运行程序,直到满意为止。 系统软件设计主要有几部分组成,其中包括按键模块子程序,光控模块程序,语言识别模块程序,LCD显示子程序,步进电机驱动程序等。本章介绍了智能窗帘控制系统的各个功能模块的设计流程,程序代码详见附录。 3.2按键程序设计 按键模块子程序如图3.2所示。在很多单片机设计系统中,键盘程序对系统的运行有时起到决定性的作用。按键在扫描的过程中它会产生抖动现象,有时按键按快了没反应,按慢了接连响应好几次。如果不采取有用的方法,将会导致单片机STC89C52错误操作按键指令。那么如何解决这个问题呢?我们正常采取软件延时的方法来解决抖动现象。它的大致操作过程是这样的,扫描的到某个按键按下时,判断是否有6ms的延时,再次扫描键盘,如果按键此时处于按下状态,说明上面的动作是有效的。按下按键后再延时12ms就可以消除键盘的抖动现象。然后再由单片机进行键码分析,执行相应的模块,显示后返回。

 图3.2按键模块程序流程图 3.3光控模块程序 单片机STC89C52通过程序控制步进电机的正反转是由光照强度的不同导致的,继而实现窗帘的拉开或合上。如图3.3所示。当执行到该子程序入口时,首先进行初始化,根据光敏电阻判断当前光强是否大于2000LX,如果条件成立,电机正向转动,模拟窗帘打开。过会碰到限位开关,步进电机不转动,假如没有接触到行程开关,电机继续正转,直到碰到开关为止。在没有到条件要求的情况下,返回重新初始化。在窗帘打开的前提下,检测到当前的光照强度小于1000LX时,步进电机反转,模拟窗帘闭合。假如安装在智能窗帘滑轨上的限位开关被传送器碰到,电机就不工作,说明窗帘合上了。如果没有触碰到行程开关,电机持续反转,一直碰到限位开关为止,最后返回去执行其它模块程序。

 图3.3光控电路程序设计图 3.4语音识别模块程序 首先初始化系统,开始运行程序,然后对相应的模块发出指令。驱动LD3320语音识别模块,进入语音识别模式,此时等待声音信号的输入。当模块接收到语音信息时,LD3320会对信号源进行频谱分析,提取特征量,匹配到关键字就会驱动步进电机,让窗帘执行相对应的动作。语音识别模块程序运行流程图如图3.4所示。

  图3.4语音识别模块程序流程图 3.5步进电机驱动软件设计 当执行到该程序入口是,首先将单片机初始化,然后调用步进电机驱动程序,判断电机是否正转。如果是,输入正转脉冲序列;假如不是这样的情况,就传送反转的脉冲。再看步进电机的是否执行完设定的步数,是的话就结束电机转动,如果没有执行完,返回到前面的状态继续运行程序。

 图3.5步进电机驱动程序流程图 3.6显示模块程序 输入初始化程序,液晶显示过程如图3.6所示。当LCD1602的寄存器RS工作状态为高电平时,选择指令寄存器;读写选择线RW为0,执行写操作;使能端EN从高电平到低电平过程中产生下降沿信号,将显示数据送到P2口,LCD执行数据指令,判断执行是否完毕,如果执行命令完,把数据显示出来,子程序退出。假如没有,返回到选择指令寄存器继续重复执行以前的步骤。

 图3.6 LCD1602的程序流程图 3.7本章小结 本章主要描述了各个模块的设计过程,以及用什么软件来实现的。文字叙述加以流程图,让人看了一目了然,很容易理解作者的设计思路。

  第四章

 调试与仿真 4.1 Proteus软件概述 Proteus软件是由英国Labcenter Electronics公司开发的EDA工具软件,由ISIS和ARES两个软件构成,其中ISIS是一款便捷的电子系统仿真平台软件,ARES是一种高级的布线编辑软件,它集成了高级原理布图、混合模式SPICE电路仿真、PCB设计以及自动布线来实现一个完整的电子设计[11]。从画原理图、电路仿真、代码调试到系统协同仿真,体现了Proteus软件强大的功能,实现了产品设计从概念到成形的完整性。软件调试时可以把它与编写好程序的Keil uVision4连接起来,,实现软、硬件结合的联调,同时将整个系统进行仿真。 目前开发51系列单片机最流行的软件是Keil uVision4,通过在Keil软件中新建工程项目,编写编译程序,将Proteus设计出来的仿真电路载入程序进行整机调试。 4.2智能窗帘控制系统PROTEUS仿真

 打开PROTUES 6 professional软件,根据智能窗帘控制系统的原理图,把相应的元件在库编辑器中找出来,然后进行绘制;电路图画好后再选择KEIL中已经编译好的*.hex文件,点击运行按钮,仿真结果如图5.1所示。

 图4.1智能窗帘控制系统仿真图 4.3调试的注意事项 首先观察各个元器件的完好性,其次检测所有芯片的电源引脚和接地是否接触良好,然后用电烙铁在万用板上焊接器件,电路板焊好后用万用表检测各电源端、接地端的状态是否正常。检查没有发现问题后插上STC89C52芯片,烧录一段简易的程序,观察电路是否正常工作。最后将整个程序写进单片机中,依据显示现象进行调试直至成功。 4.4系统联调 系统接通电源,初始状态是手动模式,按下第一个按键,显示为“1”表示电机正转,模拟窗帘打开。如图4.2所示。

 图4.2窗帘手动控制开 当按下第二个按键时,显示为“2”表示电机反转,模拟窗帘关闭,如图4.3所示。

 图4.3窗帘手动控制关 当按下第二排第三个键时,切换到语音识别模式。对语音识别模块LD3320发出“开窗”的语音指令时,电机逆时针转动表示正转,模拟窗帘打开,显示其工作状态“sound 1”,如图4.4所示。

 图4.4语音控制窗帘开 对语音识别模块LD3320发出“关窗”的语音指令时,电机顺时针转动表示反转,模拟窗帘关闭,显示其工作状态“sound 2”,如图4.5所示。

 图4.5语音控制窗帘关 再次按下第二排第三个键时,切换到光控模式电路,电机顺时针转动,表示夜晚,模拟窗帘关闭。工作如图4.6所示

 图4.6光敏电阻控制窗帘关 用台灯的灯光模拟白天光照强度,实现电机正转,模拟窗帘打开,其工作状态如图4.7所示。

 图4.7光敏电阻控制窗帘开 智能窗帘控制系统整体测试完毕,智能窗帘控制系统基本达到设计要求,各个功能基本实现。

 结束语 时间如白驹过隙啊!将近四个月的毕设工作已基本完成,通过硬件电路和软件的共同设计实现了智能窗帘控制系统的基本功能。STC89C52作为主控模块、电源电路、时钟电路、复位电路、语音识别模块电路、步进电机驱动电路、LCD显示电路、按键模块等电路构成了整个硬件电路的设计。并且详细分析了各个电路的工作原理,以及所用芯片的性能指标和使用方法。软件部分设置各个模块的程序,同时画出相应部分的流程图,加以通俗易懂的语言叙述其用程序驱动电路的过程。让我的系统软件设计思路简洁明了的呈现在人们的眼前,更容易被大众所接受,这体现了本设计的实时性和灵活性。系统实现了以下多种功能: (1)手动控制:按下按键K1,电机正转,窗帘打开。按下按键K2,电机反转,窗帘关闭。 (2)光敏电阻根据外界环境的光照强度,控制电机正反转,实现窗帘的打开或关闭功能。

 (3)语音识别功能,这是本次设计的一大亮点,人们对语音识别模块LD3320发出语音指令,控制窗帘的开闭。 在这次毕业设计智能窗帘控制电路中缺少遥控和定时控制窗帘开闭的功能,由于能力和时间的问题只能到此为止,很是遗憾。然而这次系统设计最值得一提的是采用非特定人语言识别技术控制窗帘的关闭,实现其智能化。目前市场上做这块产品比较少,因此具有非常好的市场应用前景。通过这次毕设,让我对所用硬件模块也都有了大概的了解,对于这些电路还是应该自己动手实际操作才会有深刻理解。总之,在这次毕设过程中,设计方面有很多欠缺,需要去改进、去研究,也还要去不断学习以前的知识。知道怎样去收集、整理所要用的资料,写出一篇合格的论文。 我在这一次基于单片机的智能窗帘控制系统的设计过程中,遇到了很多问题。例如,对有些元器件不了解,不知怎么样选择元器件的来做毕设。最关键的问题就是语音识别,因为自己从没有接触到过这一块知识,不知如何实现语音控制。通过自己这几个月努力查找资料,仔细阅读理解。最终对语音识别的技术有了很透彻的了解,知道怎样通过语音来控制智能窗帘的开和关。这次毕业设计培养了我运用所学知识解决实际问题的能力。

 附录 附录1:电路原理图及实物图

 图1:智能窗帘控制系统原理图

 图2:智能窗帘控制系统实物图 附录2:源程序 #include<reg52.h> //包含头文件,头文件包含特殊功能寄存器的定义 #include<intrins.h> #include<stdio.h> #define uchar unsigned char

 //宏替换 #define uint

 unsigned int //这三个引脚参考资料 sbit E=P2^7;

 //1602使能引脚 sbit RW=P2^6; //1602读写引脚

 sbit RS=P2^5;

 //1602数据/命令选择引脚

 sbit K2=P3^4; //sbit K1=P2^4;

 sbit xianwei1=P2^0; sbit xianwei2=P2^1;

 sbit S1=P2^2; sbit S2=P2^3; sbit Guang=P3^7; unsigned char code F_Rotation[8]={0x08,0x18,0x10,0x30,0x20,0x60,0x40,0x48};

 //顺时针转表格 unsigned char code B_Rotation[8]={0x48,0x40,0x60,0x20,0x30,0x10,0x18,0x08};

 //逆时针转表格

 uchar xwflag=0; uchar FB_flag=0; uchar a1=0,a2=0; //按键使用

 uchar b1=0,b2=0; uchar c1=0,c2=0; uchar d1=0,d2=0; uchar moshi=0; /******************************************************************** * 名称 : Delay_1ms() * 功能 : 延时子程序,延时时间为 1ms * x * 输入 : x (延时一毫秒的个数) * 输出 : 无 ***********************************************************************/ void Delay(uint i) {

 uchar x,j;

 for(j=0;j<i;j++)

 for(x=0;x<=148;x++);

 } /******************************************************************** * 名称 : delays() * 功能 : 这个是一个1602专用延时函数 * 输入 : 输入的命令值 * 输出 : 无 ***********************************************************************/ void delays() {

 _nop_();

 _nop_();

 _nop_();

 _nop_();

 _nop_(); } /******************************************************************** * 名称 : bit Busy(void) * 功能 : 这个是一个读状态函数,读出函数是否处在忙状态 * 输入 : 输入的命令值 * 输出 : 无 ***********************************************************************/ bit Busy(void) {

 bit busy_flag = 0;

 RS = 0;

 RW = 1;

 E = 1;

 delays();

 busy_flag = (bit)(P0 & 0x80);

 E = 0;

 return busy_flag; } /******************************************************************** * 名称 : wcmd(uchar del) * 功能 : 1602命令函数 * 输入 : 输入的命令值 * 输出 : 无 ***********************************************************************/ void wcmd(uchar del) {

 while(Busy());

 RS = 0;

 RW = 0;

 E = 0;

 delays();

 P0 = del;

 delays();

 E = 1;

 delays();

 E = 0; }

 /******************************************************************** * 名称 : wdata(uchar del) * 功能 : 1602写数据函数 * 输入 : 需要写入1602的数据 * 输出 : 无 ***********************************************************************/

 void wdata(uchar del) {

 while(Busy());

 RS = 1;

 RW = 0;

 E = 0;

 delays();

 P0 = del;

  delays();

 E = 1;

 delays();

 E = 0; }

 /******************************************************************** * 名称 : L1602_init() * 功能 : 1602初始化,请参考1602的资料 * 输入 : 无 * 输出 : 无 ***********************************************************************/ void L1602_init(void) {

 wcmd(0x38);

 wcmd(0x0c);

 wcmd(0x06);

 wcmd(0x01); }

 /******************************************************************** * 名称 : L1602_char(uchar hang,uchar lie,char sign) * 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符显示"b" ,调用该函数如下

 L1602_char(1,5,'b') * 输入 : 行,列,需要输入1602的数据 * 输出 : 无 ***********************************************************************/ void L1602_char(uchar hang,uchar lie,char sign) {

 uchar a;

 if(hang == 1) a = 0x80;

 if(hang == 2) a = 0xc0;

 a = a + lie - 1;

 wcmd(a);

 wdata(sign); }

 /******************************************************************** * 名称 : L1602_string(uchar hang,uchar lie,uchar *p) * 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示"ab cd ef" ,调用该函数如下

  L1602_string(1,5,"ab cd ef;") * 输入 : 行,列,需要输入1602的数据 * 输出 : 无 ***********************************************************************/ void L1602_string(uchar hang,uchar lie,uchar *p) {

 uchar a,b=0;

 if(hang == 1) a = 0x80;

 if(hang == 2) a = 0xc0;

 a = a + lie - 1;

 while(1)

 {

  wcmd(a++);

  if((*p == '\0')||(b==16)) break;

  b++;

  wdata(*p);

  p++;

 } } /*------------------------------------------------

  主函数 ------------------------------------------------*/

 void main(void)

 {

  unsigned

 char i;

 IT0=1;

 //设置中断触发方式,下降沿

  EX0=1;

  PX0=1;

 //键盘中断级别高

  IT1=1;

 //设置中断触发方式,下降沿

  EX1=1;

  PX1=1;

 //键盘中断级别高

  EA=1;

 L1602_init();

 //初始化液晶屏

 Delay(100);

 L1602_char(1,1,'M');

 L1602_char(1,2,'o');

 L1602_char(1,3,'d');

 L1602_char(1,4,'e');

 L1602_char(1,5,':');

 while(1)

 { //

  L1602_char(2,6,FB_flag%10+48);

 if(i>7) i=0;

 if(FB_flag == 1){ P1 = F_Rotation[i]; }

 //顺时针转动

 else if(FB_flag == 2) { P1 = B_Rotation[i]; }

 //逆时针转动

  else { P1 = 0xff;}

 i++;

  Delay(100);

 //改变这个参数可以调整电机转速

 /*按键处理程序开始*/ // if(K1==0){a1=1;a2=0;} // if(a1==1&&a2==0) // {

 // FB_flag=0; // a2=1; // } // if(K1==1){a1=0;a2=0;}

  /*按键处理程序结束*/

 /*模式选择处理程序开始*/

 if(K2==0){d1=1;d2=0;}

 if(d1==1&&d2==0)

 {

 FB_flag=1;

  xwflag=0;

 d2=1;

 }

 if(K2==1){d1=0;d2=0;}

  if(moshi==0)

 {

  L1602_char(1,6,'H');

  L1602_char(1,7,'a');

  L1602_char(1,8,'n');

  L1602_char(1,9,'d');

  L1602_char(1,10,' ');

  L1602_char(1,16,FB_flag%10+48);

  L1602_char(2,16,' ');

  }

  if(moshi==1)

 {

  L1602_char(1,6,'S');

  L1602_char(1,7,'o');

  L1602_char(1,8,'u');

  L1602_char(1,9,'n');

  L1602_char(1,10,'d'); //

 if(S1==0) L1602_char(2,1,0+48); else L1602_char(2,1,1+48); //

 if(S2==0) L1602_char(2,2,0+48); else L1602_char(2,2,1+48);

  if(S1==1&&S2==0) {xwflag=0;FB_flag=1; L1602_char(1,16,FB_flag%10+48);}

  if(S1==0&&S2==1) {xwflag=0;FB_flag=2; L1602_char(1,16,FB_flag%10+48);}

  if(S1==1&&S2==1) {FB_flag=0; L1602_char(1,16,FB_flag%10+48);}

  L1602_char(2,16,' ');

 }

  if(moshi==2)

 {

  L1602_char(1,6,'L');

  L1602_char(1,7,'i');

  L1602_char(1,8,'g');

  L1602_char(1,9,'h');

  L1602_char(1,10,'t');

  if(Guang==1) L1602_char(2,16,0+48); else L1602_char(2,16,1+48);

  if(Guang==1) {xwflag=0;FB_flag=1;L1602_char(1,16,FB_flag%10+48); }

  else

  {xwflag=0;FB_flag=2;L1602_char(1,16,FB_flag%10+48); }

 }

  /*模式选择处理程序结束*/

 /*限位开关处理程序开始*/

 if(xianwei1==0){b1=1;b2=0;}

 if(b1==1&&b2==0)

 {

  FB_flag=0;

 xwflag=1;

 b2=1;

 }

 if(xianwei1==1){b1=0;b2=0;}

  if(xianwei2==0){c1=1;c2=0;}

 if(c1==1&&c2==0)

 {

  FB_flag=0;

 xwflag=2;

 c2=1;

 }

 if(xianwei2==1){c1=0;c2=0;}

  /*限位开关处理程序结束*/

  if(xwflag!=0) FB_flag=0;

  } }

 //按键中断处理程序 void it0() interrupt 0 {

  moshi++;

 if(moshi==3) moshi=0;

 FB_flag=0;

 }

  //按键中断处理程序 void it1() interrupt 2 {

 FB_flag=2;

 xwflag=0; }

 附录3:元器件清单 表1:智能窗帘控制系统元器件清单表 序号 器件名称 型号规格 数量 1 电阻 10k 10 2 电解电容 220uF 1 3 电解电容 47uF 1 4 单片机 STC89C52RC 1 5 三端稳压 LM7805 2 6 晶振 12M 1 7 电位器 3296W- 103(10K) 2 8 独石电容 103 2 9 光敏电阻 GL5516 1 10 步进电机 28BYJ-48 5V DC 1 11 驱动芯片 ULN2003 1 12 运算放大器 LM358 1 13 显示器 LCD1602 1 14 语音识别模块 LD3320 1 15 按键开关 触点式6*6*5MM 6 16 电源开关 自锁式7*7MM 1 17 三极管 S9018 2 18 发光二极管 红色LED灯 1 19 电池盒 4节 2 20 导线 双头镀锡 若干

 参考文献(References) [1]张永瑞.电子测量技术基础[M].西安电子科技大学出版社,1994. [2]刘文涛. 单片机应用开发实例[M].清华大学出版社,2005. [3]张毅刚.单片机原理及应用(第三版)[M].高等教育出版社,2010. [4]钟晨帆.基于LD3320芯片的语音识别系统与开发[D].南京大学,2015. [5]徐科军.传感器与检测技术(第三版)[M]. 电子工业出版社 ,2011. [6]冯娟,李燕君.基于步进电动机的智能电动窗帘设计与实现[J].微特电机,2014. [7]刘天顺,丁腾腾,毛强.基于LD3320语音控制智能车的设计[J].数学技术与应用,2015. [8]毕俊喜,薛志安,王志军. 基于AT98C52单片机的智能光控窗帘系统设计[J].机械研究与应用,2015. [9]浦灵敏,季爱民.基于STC89C52单片机智能窗户控制系统的设计[J].中国科技信息,2011. [10]刘丹.Proteus与Keil联合仿真在单片机教学中的应用[J].科教导刊(中旬刊),2013. [11]周润景,刘晓霞.基于PROTEUS的电路设计、仿真与制板[M].电子工业出版社,2013.

 

Tags:

搜索
网站分类
标签列表