基于蓝牙通信和上位机控制的智能风扇设计-课程设计论文_第1页
基于蓝牙通信和上位机控制的智能风扇设计-课程设计论文_第2页
基于蓝牙通信和上位机控制的智能风扇设计-课程设计论文_第3页
基于蓝牙通信和上位机控制的智能风扇设计-课程设计论文_第4页
基于蓝牙通信和上位机控制的智能风扇设计-课程设计论文_第5页
已阅读5页,还剩25页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

指导教师评定成绩:审定成绩:重庆邮电大学自动化学院基于蓝牙通信和上位机控制的智能风扇设计摘要在炎炎夏日,空调便成为了人们的必备武器,可是很多人没有注意到吹空调的危害,长时间吹空调,人很容易着凉感冒,降低身体的抵抗力。空调房间比较封闭,空气流通不好,容易有异味,空调通风处若不经常清理,容易积累灰尘和细菌,从而使人生病。并不是所有的人都适合吹空调,像老人,小孩,孕妇都不易长时间吹空调,对此我们设计了此款智能风扇,它以STC12C5A60S2做主控芯片,分别加入了红外模块,温湿度传感器模块,电机调速模块/测速模块,总共分为四个功能模块,分别为自动模式,节能模式,定速模式,定时模式,这些模式既可以很好地调节风速,同时也更加节能,而且增加了蓝牙无线模式,在上位机界面可以很轻松的切换以上模式。关键词:智能蓝牙无线上位机实用Abstractinthesummer,airconditioningbecameanecessaryweaponforpeople,butmanypeopledonotpayattentiontotheharmofblowairconditioning,longtimeblowingair,peopleareveryeasytocatchacold,reducethebody'sresistance.Airconditioningroomisclosed,theaircirculationisnotgood,easytohavepeculiarsmell,airconditioningandventilatingplaceifnotoftenclean,easytoaccumulatedustandbacteria,soastomakepeoplesick,notallpeoplearesuitableforblowingair,liketheelderly,children,pregnantwomenarenoteasytolongtimeblowairconditioning,tothiswedesignthissectionintelligentfan,itusesSTC12C5A60S2chipcontrol,respectively,joinedtheinfraredmodule,temperatureandhumiditysensormodule,motorspeedcontrolmodule/speedmodule,isdividedintofourfunctionalmodules,respectivelyistheautomaticmode,theenergy-savingmode,constantspeedmode,thetimingpatterns,thesepatternscanadjustthewindspeedisverygood,butalsomoreenergy,butalsoincreasetheBluetoothwirelessmode,canmoreeasilyinthemodeofhostcomputerinterface.Keywords:intelligentBluetoothhostcomputerpractical目录TOC\o"1-3"\h\u8594一、总体系统设计概述 Vss0电源地2Vcc+5v电源正3NC空脚4RS(CS)1/0RS=1,选择数据寄存器。RS=0,选择指令寄存器。5R/W(STD)1/0R/W=1,E=1,从lcd中读取数据。R/W=0,E=1→0时,写数据到lcd。6E(SCLK)1/0使能信号7~14DB0~DB71/0三态数据线15PSB1/0PSB=1,并行数据。PSB=0,串行数据16NC空脚171/0复位端,低电平有效。(可悬空)18NC空脚19AVdd背光电源正端20Kvss背光源负端表3-1LCD12864引脚图根据LCD12864的引脚功能描述,在本设计中最终采用8位并行的工作模式,因此第15引脚直接接高电平即可。图3-1LCD12864电路图3.2电动机模块在本设计中使用DC5V的直流电动机来模拟风扇,不要求正反转,只要能够实现PWM调速方案即可。测速时使电机的叶轮置于红外对射管之间,叶轮转过,挡住传感器,单片机的PCA模块就会捕捉到,从而实现计数,进而计算出电机的速度。3.2.1PWM调速L298N是ST公司生产的一种高电压、大电流电机驱动芯片。该芯片采用15脚封装。主要特点是:工作电压高,最高工作电压可达46V;输出电流大,瞬间峰值电流可达3A,持续工作电流为2A;额定功率25W。内含两个H桥的高电压大电流全桥式驱动器,可以用来驱动直流电动机和步进电动机、继电器线圈等感性负载;图3-2L298N引脚图图3-3L298N模块图3.2.2测速对射式光电开光是由一个发光器和一个收光器组成的光电开关就称为以射分离式光电开光,模块图形如下:图3-4对射式光电开光测速时将扇叶置于开关的中间,扇叶由四片组成,当扇叶阻挡了发射二极管的光线,“OUT”引脚就会输出高电平,没有阻挡时,输出低电平。设在1秒的时间内,单片机PCA捕获模块获得M次计数,则电机转速表示为S=M/4r/s。3.3温度采集模块温度采集模块采用DHT11模块,它既可以获取温度数字信号,也可以获取湿度的数字信号。DHT11模块一次完整的数据传输为40bit,高位先出。

数据格式:8bit湿度整数数据+8bit湿度小数数据

+8bi温度整数数据+8bit温度小数数据

+8bit校验和

。数据传送正确时校验和数据等于“8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据”所得结果的末8位。图3-5DHT11电路图3.4无线模块无线模块采用HC-05无线蓝牙主从一体无线串口通信模块,总共有6个引脚,功能描述如下:引脚描述Vcc电源(3.3~5v)Gnd地Txd模块串口发送引脚(不能接RS232电平)Rxd模块串口接收引脚(不能接RS232电平)Key高电平进入AT状态,低电平或悬空正常状态Led配对成功输出高电平,否则输出低电平表3-3HC-05无线蓝牙模块引脚图图3-6蓝牙串口模块与USB转串口模块连接图3-7蓝牙串口模块与单片机连接将模块上电同时(或者之前),将KEY接高电平,此时指示灯慢闪(1秒亮一次),模块进入AT状态,此时波特率固定38400。将模块上电后,将KEY悬空或者接地,此时指示灯快闪(1秒2次),表示模块进入可配对状态。此时如果将KEY接高电平,模块也会进入AT状态。但是指示灯依然是快闪(1秒2次)。若模块配对成功,此时STA双闪(一次闪2下,2秒闪一次)。3.5红外模块HC-SR501红外模块利用热释电红外传感器工作,热释电红外是一种能检测人或动物发射的红外线而输出电信号的传感器。其具有两种触发方式:L不可重复,H可重复。可跳线选择,默认为H。

A不可重复触发方式:即感应输出高电平后,延时时间一结束,输出将自动从高电平变为低电平。B可重复触发方式:即感应输出高电平后,在延时时间段内,如果有人体在其感应范围内活动,其输出将一直保持高电平,直到人离开后才延时将高电平变为低电平(感应模块检测到人体的每一次活动后会自动顺延一个延时时间段,并且以最后一次活动的时间为延时时间的起始点)。HC-SR501红外模块还具有感应封锁时间(默认设置:3-4秒):感应模块在每一次感应输出后(高电平变为低电平),可以紧跟着设置一个封锁时间,在此时间段内感应器不接收任何感应信号。此功能可以实现(感应输出时间和封锁时间)两者的间隔工作,可应用于间隔探测产品;图3-8HC-SR501模块图3.6PCB设计本设计使用AltiumDesigner09版绘制电路原理图,由于本设计很多是模块化器件,所以留出很多排针,以供连接使用。图3-9总原理图图3-10PCB图四、系统软件设计4.1流程图设计本次课程设计软件部分主要分为上位机程序和单片机控制程序,两者通过无线蓝牙模块互相通信,单片机程序主要完成温度的采集,红外信号的处理,LCD12864的显示,按键的输入处理,还有接收上位机的控制命令。4.1.1单片机设计图4-1单片机端流程图4.1.2上位机该部分主要使用VB.NET语言进行开发,VisualBasic.NET是基于微软.NETFramework之上的面向对象的编程语言。其在调试时是以解释型语言方式运作,而输出为EXE程序是是以编译型语言方式运作。可以看作是VisualBasic在.NetFramework平台上的升级版本,增强了对面向对象的支持。在.NETFramework2.0中提供了SerialPort类,该类主要实现串口数据通信等。SerialPort提供了DataReceived事件。当有数据进入时,该事件被触发。该事件的触发由操作系统决定,当有数据到达时,该事件在辅助线程中被触发。辅助线程的优先级比较低,因此并不能确保每个字节的数据到达时,该事件都被触发图4-2上位机端流程图4.2按键扫描设计按键扫描主要用来改变工作模式和输入其他一些变量。其常用的方法有1.编程扫描,2.定时扫描,3.中断扫描。定时扫描就是每隔一段时间对键盘扫描一次,它利用单片机内部的定时器产生一定时间(一般10ms)的定时,当定时时间到就产生定时器溢出中断。CPU响应中断后对键盘进行扫描,并在有键按下时识别出该键的功能程序。定时扫描有利于减少按键消抖所造成的系统时间中断。程序见附录。图4-3按键电路4.3模式控制设计该系统有4种模式,分别为自动模式,节能模式,定速模式,定时模式,四种模式既可以通过按键控制选择,也可以通过上位机经蓝牙无线模块发送切换命令。按键总共有3个,分别为1.模式键,2.加键,3.减键,模式键主要用于模式的切换,四种模式循环切换。加键和减键主要配合模式键使用,当模式为定速模式时,可通过加键,减键调节速度,当模式由定速模式切换到自动模式时,就可以设置定时时长,此时还可以将模式切换到节能模式和定速模式,分别实现“定时+节能模式”,“定时+定速模式”。若使用上位机设置模式,上位机向单片机发送一次六个字节的数组,通信格式如下所示:第0Byte第1Byte第2Byte第3Byte第4Byte第5Byte模式控制定速等级定时时长保留温度上限温度下限表4-1通信格式4.4温湿度采集软件设计用户MCU发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采集,用户可选择读取部分数据.从模式下,DHT11接收到开始信号触发一次温湿度采集,如果没有接收到主机发送开始信号,DHT11不会主动进行温湿度采集.采集数据后转换到低速模式。通讯过程如图4.4所示图4-4DHT11通讯图1总线空闲状态为高电平,主机把总线拉低等待DHT11响应,主机把总线拉低必须大于18毫秒,保证DHT11能检测到起始信号。DHT11接收到主机的开始信号后,等待主机开始信号结束,然后发送80us低电平响应信号.主机发送开始信号结束后,延时等待20-40us后,读取DHT11的响应信号,主机发送开始信号后,可以切换到输入模式,或者输出高电平均可,总线由上拉电阻拉高。图4-5DHT11通讯图2总线为低电平,说明DHT11发送响应信号,DHT11发送响应信号后,再把总线拉高80us,准备发送数据,每一bit数据都以50us低电平时隙开始,高电平的长短定了数据位是0还是1.格式见下面图示.如果读取响应信号为高电平,则DHT11没有响应,请检查线路是否连接正常.当最后一bit数据传送完毕后,DHT11拉低总线50us,随后总线由上拉电阻拉高进入空闲状态。数字0信号表示方法如图4.6所示:图4-6数字0信号数字1信号表示方法.如图4.7所示:图4-7数字1信号4.5调速、测速软件设计4.5.1调速软件设计在本次综合设计中使用了STC12C5A60S2单片机,它具有两路PCA/PWM模块,分别有四种工作模式,四种工作模式分别是:1.捕获模式,2.16位软件定时器模式,3.高速输出模式,脉宽调节模式。其中脉宽调节模式软件设置如下:voidinit_pwm(){CL=0;CH=0;CMOD|=0X00;//空闲模式,不允许溢出中断CCAPM0=0X42; //工作在PWM8位方式CCAP0L=CCAP0H=0X20;//设置输出50%的方波CR=1;}图4-8PWM模式4.5.2测速软件设计当STC12C5A60S2单片机的PCA/PWM模块工作在捕获模式时,可以设置为上升沿捕获或者下降沿捕获,或者两者同时,当P1.3或者P1.4引脚有脉冲输入时,PCA/PWM模块就会计数,可在中断中处理。本次综合设计采用PCA/PWM模块1计数,程序设置如下:voidinit_pca(){CMOD|=0X00; //空闲模式,不允许溢出中断CCAPM1=0X21;//上升沿捕获,允许捕获中断CCAP1L=CCAP1H=0;CR=1;}图4-9捕获模式联调效果当软件和硬件均设置好时,在开放过程中还必须进行软硬件的调试,正确的调试方法能够快速的找到软硬件的设计错误,从而更正错误,提升开发速度。5.1上位机上位机的界面设置如下,选择好相应的串口号和波特率,电机“打开串口”Button,就可以与单片机进行通讯了。然后依次点击四种模式的“设置”Button,结合LCD12864,依次观察电机的工作情况,若出现与预期效果不一样的情况,就对应的在VB程序中修改。图5-1上位机界面5.2蓝牙首先将蓝牙模块工作在AT指令状态,方法为:将模块上电同时(或者之前),将KEY接高电平,此时指示灯慢闪(1秒亮一次),模块进入AT状态,此时波特率固定38400,然后使用串口设置两个蓝牙模块的波特率为19200bps,AT指令为AT+UART=19200,0,0<回车>,然后设置两个蓝牙模块的密码一致,以便两者配对,AT指令为AT+PSWD=1234<回车>,最后要将其中一个模块设置为主模式,AT指令为AT+ROLL=1<回车>。完成以上步骤后,就可以分别把两个蓝牙模块连接到电脑端和单片机端,使用已编写好的上位机进行测试,观看是否通信正常。图5-2AT指令设置软件图5.3按键按键主要是用来底层的模式设置,依次使用按键设置各个功能,观看LCD12864上的中文提示符,以及电机的工作状态,根据问题进行调试程序。心得体会通过本次综合设计,锻炼了自己的编程能力与全局统一意识,大家一起讨论任务的要求,在任务一开始就分好每个人的任务,并且规定每周五大家一起讨论,汇报各自的进展。对我而言,我打算利用利用国庆的时间,每天规定自己必须完成的任务,一步步的实现系统的功能。当然,在开发过程中也遇到了很多问题,因为以前没用过蓝牙,在蓝牙的配置过程中浪费了很多的时间,心情也很烦躁,后来还是静下心来,仔细阅读说明文档,终于成功配对成功!在整个设计期间,小组成员合作非常愉快,大家提出了很多改进措施,使我们的设计更加完美,尤其是东西的最后组装,大家更是一起贡献智慧,使得本次综合设计锦上添花。最后要感谢李老师的大力支持,无论是技术上还是器件的提供上,都给与了很大的支持,随着大学学习生活的结束,通过这次综合设计,感觉自己还是进步了很多,编程技巧方面有所提升。参考文献[1]李江全,张茜等编著,串口通信及测控应用典型实例[M],北京:电子工业出版社,2012年3月第一次印刷[2]东方人化,VisualBasic.NET范例入门与提高[M],北京:清华大学出版社,2003年9月第二次印刷[3]丁向荣,增强型8051单片机原理与系统开发[M],北京:清华大学出版社,2013年9月第一版[4]向敏,程安宇等编著,微控制器原理及应用[M],北京:人民邮电大学出版社,2013年8月第二次印刷[5]郭天祥,新概念51单片机C语言教程[M],北京:电子工业出版社,2009年12月第五次印刷附录附录1:VB程序PublicClassForm1DimOpen_Or_Close_SerAsBoolean=FalseDimWrite_Data(6)AsByteDimMinuteAsIntegerDimSecondAsIntegerDimtimeAsInt16DimSpend(3)AsByte'以下是变量初始化和控件初始化PrivateSubForm1_Load(senderAsObject,eAsEventArgs)HandlesMyBase.LoadSerialPort1.DataBits=8'数据位SerialPort1.StopBits=IO.Ports.StopBits.One'停止位SerialPort1.Parity=IO.Ports.Parity.None'校验位Spend(0)=&H60Spend(1)=&H70Spend(2)=&H80Text_Mode.TextAlign=HorizontalAlignment.Center'居中显示Text_Mode.Text="智能调速"Write_Data(0)=CByte(2)'默认模式为智能模式Write_Data(1)=CByte(Spend(1))Write_Data(2)=CByte(0)Write_Data(3)=CByte(0)Write_Data(4)=CByte(Val(Temp_High_TextBox.Text))Write_Data(5)=CByte(Val(Temp_Low_TextBox.Text))Spend_2.Checked=TrueMinute_ComboBox.SelectedIndex=0Second_ComboBox.SelectedIndex=0EndSub'以下是串口端口号选择PrivateSubSerLine_SelectedIndexChanged(senderAsObject,eAsEventArgs)HandlesSerLine.SelectedIndexChangedSerialPort1.PortName=SerLine.SelectedItem.ToString'串口名称EndSub'以下是波特率选择PrivateSubBps_SelectedIndexChanged(senderAsObject,eAsEventArgs)HandlesBps.SelectedIndexChangedSerialPort1.BaudRate=Bps.SelectedItem.ToString'波特率EndSub'以下是打开串口初始化PrivateSubOpen_Ser_Click(senderAsObject,eAsEventArgs)HandlesOpen_Ser.ClickOpen_Or_Close_Ser=NotOpen_Or_Close_SerIfBps.SelectedIndex=-1AndSerLine.SelectedIndex=-1ThenMsgBox("请选择正确的串口号和波特率",0,"提示")ElseIfOpen_Or_Close_SerThenTrySerialPort1.Open()'打开串口Open_Ser.Text="关闭串口"CatchexAsExceptionMsgBox("异常0",0,"提示")EndTryElseTrySerialPort1.Close()'关闭串口Open_Ser.Text="打开串口"CatchexAsExceptionMsgBox("异常1",0,"提示")EndTryEndIfEndIfEndSub'以下是自动模式控制按钮PrivateSubAuto_Mode_Click(senderAsObject,eAsEventArgs)HandlesAuto_Mode.ClickWrite_Data(0)=CByte(1)'自动模式Write_Data(2)=CByte(Val(Time_TextBox.Text))Time_TextBox.Text=0IfSerialPort1.IsOpenThenTrySerialPort1.Write(Write_Data,0,6)Text_Mode.Text="自动模式"CatchexAsExceptionMsgBox("发送失败,请重新发送",0,"Error")EndTryElseMsgBox("请先选择好串口并且打开",0,"Error")EndIfEndSub'以下是智能模式控制按钮PrivateSubSmart_Mode_Click(senderAsObject,eAsEventArgs)HandlesSmart_Mode.ClickWrite_Data(0)=CByte(2)'智能模式Write_Data(2)=CByte(Val(Time_TextBox.Text))Write_Data(4)=CByte(Val(Temp_High_TextBox.Text))Write_Data(5)=CByte(Val(Temp_Low_TextBox.Text))Time_TextBox.Text=0IfIsNumeric(Write_Data(4))AndIsNumeric(Write_Data(5))AndWrite_Data(4)>Write_Data(5)ThenIfSerialPort1.IsOpenThenTrySerialPort1.Write(Write_Data,0,6)Text_Mode.Text="智能模式"CatchexAsExceptionMsgBox("发送失败,请重新发送",0,"Error")EndTryElseMsgBox("请先选择好串口并且打开",0,"Error")EndIfElseMsgBox("请先确定好上限和下限的数据,并且上限温度大于下限温度",0,"提示")EndIfEndSub'以下是定速模式控制按钮PrivateSubSpend_Mode_Click(senderAsObject,eAsEventArgs)HandlesSpend_Mode.ClickWrite_Data(0)=CByte(3)Write_Data(2)=CByte(Val(Time_TextBox.Text))'关闭计时模式Time_TextBox.Text=0IfSerialPort1.IsOpenThenTrySerialPort1.Write(Write_Data,0,6)Text_Mode.Text="定速模式"CatchexAsExceptionMsgBox("发送失败,请重新发送",0,"Error")EndTryElseMsgBox("请先选择好串口并且打开",0,"Error")EndIfEndSub'以下分别为定速模式三级调速的选择PrivateSubSpend_1_CheckedChanged(senderAsObject,eAsEventArgs)HandlesSpend_1.CheckedChangedWrite_Data(1)=CByte(Spend(0))'一级定速运行EndSubPrivateSubSpend_2_CheckedChanged(senderAsObject,eAsEventArgs)HandlesSpend_2.CheckedChangedWrite_Data(1)=CByte(Spend(1))'二级定速运行EndSubPrivateSubSpend_3_CheckedChanged(senderAsObject,eAsEventArgs)HandlesSpend_3.CheckedChangedWrite_Data(1)=CByte(Spend(2))'三级定速运行EndSub'以下分别是定时模式的时、分选择PrivateSubMinute_ComboBox_SelectedIndexChanged(senderAsObject,eAsEventArgs)HandlesMinute_ComboBox.SelectedIndexChangedMinute=CInt(Minute_ComboBox.SelectedItem)EndSubPrivateSubSecond_ComboBox_SelectedIndexChanged(senderAsObject,eAsEventArgs)HandlesSecond_ComboBox.SelectedIndexChangedSecond=CInt(Second_ComboBox.SelectedItem)EndSub'以下是定时模式选择PrivateSubTime_Mode_Click(senderAsObject,eAsEventArgs)HandlesTime_Mode.ClickIf(Minute*60+Second)<>0ThenWrite_Data(2)=CByte(Minute*60+Second)time=0Time_TextBox.Text=""IfSerialPort1.IsOpenThenTrySerialPort1.Write(Write_Data,0,6)IfWrite_Data(0)=CByte(1)ThenText_Mode.Text="定时+自动模式"ElseIfWrite_Data(0)=CByte(2)ThenText_Mode.Text="定时+智能模式"ElseIfWrite_Data(0)=CByte(3)Then

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论