【基于单片机的智能温控风扇的设计6800字(论文)】_第1页
【基于单片机的智能温控风扇的设计6800字(论文)】_第2页
【基于单片机的智能温控风扇的设计6800字(论文)】_第3页
【基于单片机的智能温控风扇的设计6800字(论文)】_第4页
【基于单片机的智能温控风扇的设计6800字(论文)】_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

基于单片机的智能温控风扇的设计摘要:现如今智能家居产业的发展一日千里,给使用者带来非常舒适的体验。为了使风扇更加智能与实用,本设计对风扇控制器部分进行重新设计,实现风扇转速随温度变化自动调节,从而提高用户使用风扇时的舒适性。目前在网上查阅相关设计,大多为使用单片机来自动控制风扇转速,而无法使用手机APP来控制,这就造成无法让风扇随用户主观意愿来调节。本设计增加手机APP中的手动模式,使用此模式时风扇不再受传感器控制而是由用户控制。本设计将先进行框架思路设计,之后部署好开发环境,再选择易用的元器件,逐个编写模块代码,如温度获取模块,液晶显示模块等,同时对不合适的元器件进行优缺点比较并确定是否更换,最后将各个分立模块整合。预期效果为手机APP中可以看到两种模式并进行选择:使用自动模式时,单片机根据温度变化自动控制风扇;当使用手动模式时,则单片机受用户手机APP控制再而控制风扇转速。关键词:89C52单片机;自动调温;风扇;蓝牙目录TOC\o"1-3"\h\u1.引言 11.1.研究背景 11.2.方案流程图 12.开发工具(软件)简介 22.1.KeilμVision5 22.2.AndroidStudio 23.硬件介绍 43.1.STC89C52RC单片机 43.1.1.STC89C52RCMCU介绍 43.1.2.使用方法 43.2.DS18B20温度传感器 43.2.1.DS18B20温度传感器介绍 43.2.2.使用方法 53.3.LCD1602液晶显示模块 73.3.1.LCD1602液晶显示模块介绍 73.3.2.使用方法 83.4.HC-06蓝牙模块 93.4.1.HC-06蓝牙模块介绍 93.4.2.使用方法 93.5.色环电阻 93.5.1.色环电阻介绍及分辨方法 94.电路设计原理 114.1.总体概括 114.2.单片机最小系统 134.3.风扇电路 134.4.其他电路 145.APP与蓝牙通讯 155.1.APP调试工具 155.2.权限 155.3.布局 155.3.1.主页面 155.3.2.设备列表页面 165.4.蓝牙模块使用方法 166.调试 197.总结 20参考文献 21附录单片机主程序 22引言研究背景随着移动通信技术的发展,设备与设备之间的传输时延越来越低、丢包率越来越小。并且随着国家对通信基站建设任务的进一步加强,以及家用无线路由器的普及,通信设备变得更容易接入互联网。这就使智能家居产品越来越普及、实惠,并且这些产品极大的提高了用户的生活质量。用户可以在灯、空调、热水器、窗帘等家电上加入传感器以及自动控制芯片,使它们根据环境的变化完成不同的操作,解放双手。作为家居产品,不可能使用PC或者手机那样体积大且价格较高的CPU,本设计主控制器用的是MCS-51单片机,这种超小型化的单片机,具有体积小、价格低和RAM、ROM、I/O接口等资源齐全的显著优点[1];使用DS18B20芯片作为温度获取传感器。当用户不想动手或者由于其他原因腾不出手去控制设备时,让风扇根据温度自动调节转速,这是手动模式;而当用户对当前自动风速不满意时,可以通过APP来控制,这是手动模式。手机与单片机间通信有两种常见的方式:蓝牙(如HC-05芯片)和WIFI(如ESP8266芯片)。对于使用ESP8266,可以在局域网内通讯或者非同一局域网通讯,但缺点是在与单片机连接时,会切断正常使用的WIFI,影响正在使用的APP尤其是即时通讯类APP的信息接收与发送,蓝牙芯片及蓝牙功能存在于手机并且多数情况下处在闲置的状态,又因为蓝牙芯片价格低廉,本设计使用了蓝牙通信方式。方案流程图整体设计流程如图1.1所示:DDS18B20初始化手动模式DS18B20手动模式DS18B20初始化初始化APP控制APP控制自动模式传感器控制 模式判断自动模式传感器控制图1.1方案流程图开发工具(软件)简介KeilμVision52013年,美国的KeilSoftware公司设计并且面向全球硬件开发者发布了KeilμVision5软件,KeilμVision软件是51型单片机开发工具,并且用户在进行硬件开发时可以使用C语言,非常方便,Keil被国内80%以上电子工程师所使用,现如今在大学校内仍是主流的硬件开发工具。官网:/官网首页如图2.1所示:图2.1Keil官网AndroidStudioAndroidStudio是美国Google公司推出的安卓集成开发工具,运行速度快,安装简单,可以自动下载程序开发时所要用到的环境依赖包,并且提供了强大的UI界面,能够实时展示页面布局,对新手友好。官网:/studio/AndroidStudio开发工具主页面如图2.2所示:图2.2AndroidStudio主页面图

硬件介绍STC89C52RC单片机STC89C52RCMCU介绍STC89C52MCU价格低、功耗低,抗干扰性与抗静电能力强,并且可靠性高,单片机具有40个管脚,且有32个I/O管脚,供单片机与外部设备连接、数据交换使用。MCS-51单片机由英特尔设计,著名半导体公司TI、Atmel、NXP以及国内的宏晶公司仍在生产基于51内核结构多种类型的单片机[2]。MCS-51单片机中采用CHMOS工艺生产的单片机在命名编号中加C来区分,如80C51。单片机与DIP封装示意图如下:图3.1单片机与DIP封装示意图使用方法正极VCC与负极VSS管脚分别是40、20,分布在单片机的两个对角位置,将其接规定电源即可供电。为了防止程序跑飞无法恢复需要将复位按键接入到9号脚,还需有晶振提供时钟,晶振两端分别接到19、20号脚。单片机必须执行特定的程序才能实现用户的要求,因此HEX文件烧录软件也是必不可少的,通常厂商会提供烧录软件以及连接电脑用到的驱动程序。DS18B20温度传感器DS18B20温度传感器介绍硬件开发时常用的温度传感器是DS18B20晶片,此元件硬件接口极其简单,并且精度很高,只有两条电源线以及一条数据线,但是硬件的简单带来了使用复杂的问题。通过“1-Wire”协议可以只使用一条数据线实现单片机与温度传感器的半双工双向通信功能,可与此传感器通信以读取温度。因为不管是读还是写操作都是在同一条线上传递信息,所以对时间要求非常严格。使用方法初始化,检测传感器是否存在单片机首先拉高数据线电平,做好准备,稍微延时后就将电平拉低,将低电平状态维持550微秒左右,然后拉高,此时就会产生一个上升沿脉冲,如果传感器检测到此脉冲,它将会在15至60微秒后产生低电平信号回应,此时需要将单片机IO口状态调整为读取,如果读到了此回应,说明传感器存在,也就是初始化成功,初始化时序图如图3.2所示。图3.2初始化时序初始化模块源码[3]: unsignedintDS18B20_Init(void){ unsignedintstate=0; DS1=1;//做好准备 DS18B20_Delay(10);//稍做延时 DS1=0;//拉低DS18B20数据线 DS18B20_Delay(80);//保持 DS1=1;//释放 DS18B20_Delay(15);//稍做延时 state=DS1; //state值为"0"代表初始化成功,否则失败DS18B20_Delay(20); return(~state);}DS18B20的写数据操作写数据也是通过一个特定的时序来完成的,当传感器感知到对应时序,就会写入1或0。首先单片机将数据线拉低并且持续1微秒以上,产生一个写数据信号,写一个字节的周期在60微秒到120微秒之间,如果需要写入1,就在1微秒后拉高电平,如果是写0就保持低电平不动,一直持续到本周期结束。写入模块源码局部:for(i=8;i>0;i--) { DS1=0; DS1=dat2&0x01; DS18B20_Delay(5); DS1=1; dat2>>=1; }DS18B20的读数据操作:读数据与写数据非常相似,只是收发数据的主体交换,仍然是主机将数据线拉低1微秒后释放,传感器感知到此读取信号后就开始发送数据,若要发送0就持续将数据线拉低,若要发送1就持续拉高数据线直到此周期结束。然后单片机在15微秒内读取数据。读取模块源码局部:for(i=8;i>0;i--) { DS1=0;//信号 dat1>>=1; DS1=1;//信号 if(DS1)dat1|=0x80; DS18B20_Delay(5); } returndat1;LCD1602液晶显示模块LCD1602液晶显示模块介绍LCD1602是2x16字符型液晶显示模块,可以显示两行,每行16个字符,采用5x7点阵显示[4],1602的控制器大部分为HD44780驱动芯片。此模块分为不带和带字库两种,带字库的偏厚一些。使用时首先设置要显示的坐标,再设置要显示的内容,即可显示用户想要的字符。1602液晶主要参数如下表:显示容量16x2个字符芯片工作电压4.5~5.5V字符尺寸2.0mA(5.0V)模块最佳工作电压5.0V字符尺寸2.95x4.35mm(宽乘高)表3.11602液晶主要参数LCD1602液晶显示模块引脚说明如下表:编号符号功能编号符号功能1VSS电源地6E使能2VDD电源正极7~14Di数据3VL液晶显示偏压15BLA背光正极4RS数据命令选择16BLK背光负极5R/W读写选择表3.2LCD1602液晶显示模块引脚说明如果在使用中,所有逻辑都正确但是不显示字符,应该检查VL脚,这一脚控制背景光,应该将所连电阻分别划到最大值或者最小值检查是否可以正常显示,接线图如下:图3.3LCD接线图使用方法开始LCD初始化延时设置第i行开始LCD初始化延时设置第i行显示位置设置第i行显示数据图3.4LCD1602使用方法流程图LCD1602液晶写入字符程序:voidLCD_Write_Char(unsignedchara,unsignedcharb,unsignedcharData){ if(b==0) { LCD1602_Write_Com(0x80+a); } else { LCD1602_Write_Com(0xC0+a); } LCD1602_Write_Data(Data);}HC-06蓝牙模块HC-06蓝牙模块介绍常见且使用较为广泛的蓝牙模块有HC-06与HC-05,它们都是蓝牙串口模块,HC-05更贵一些,功能也更多一些,它可以作为主机向从机发送指令,也可以作为从机接收主机的指令。对于HC-06仅仅有从机模式。此模块板载PCB天线,空旷的环境下能达到10米通信距离甚至能超过10米。HC-06模块的第24脚LED灯常量代表配对成功。使用方法给模块供电但不对它进行连接会自动进去AT模式,可以通过专用数据线向它发送指令修改名字和密码,AT模式常用指令与功能如下:指令返回功能ATOK确认连接AT+VERSIONOKlinvorV1.8查看版本AT+NAMExxxxOKsetname设置蓝牙名称AT+PINxxxxOKsetPIN设定密码AT+BAUD1OK1200波特率设为1200AT+BAUD2OK2400波特率设为2400AT+BAUD3OK4800波特率设为4800AT+BAUD4OK9600波特率设为9600AT+BAUD5OK19200波特率设为19200AT+BAUD6OK38400波特率设为38400AT+BAUD7OK57600波特率设为57600AT+BAUD8OK115200波特率设为115200表3.3蓝牙模块AT模式常用指令与功能APP实现通讯见本文5.3节蓝牙模块使用方法。色环电阻色环电阻介绍及分辨方法色环电阻是在封装时涂上一层带有颜色材料的电阻,用户可以根据色环的颜色快速并且方便的读出阻值,色环电阻阻值较大,在高度集成的电路中不适用,但是用在本设计中完全没有问题。对于四环电阻:前两个色环按照以下数值对应关系读数:第3环表示10的幂数,最后一环代表误差。误差环通常是金色、银色、棕色之一,金色误差为百分之五,银色误差为百分之十,棕色误差为百分之一,无色的误差为百分之二十,军用精密电阻误差环用绿色表示。色环颜色对应的误差如下:例:绿红黄银即:52*104=520KΩ误差10%。对于五环电阻:前三环表示数字,按照1中的对照关系读数,第四第五环同上。三环电阻误差是20%(无色)。

电路设计原理总体概括总体电路图如图3.7所示图3.7总体电路图本设计以单片机作为核心,并设计了interrupt1定时器中断与interrupt4串口中断,在选择手动模式时,串口中断服务函数实时检测蓝牙模块传递过来的数据,在本设计中,分别以APP通过蓝牙串口向单片机发送a、b、c、d、e、f六个字母代表手动模式、自动模式、风扇加速、减速、风扇关、开六个状态,检测函数源码如下:/*串口服务函数*/voidtime()interrupt4{ if(RI) { RI=0; switch(SBUF) { case'a':Ctrl_Mode=0;set=0;break;//手动 case'b':Ctrl_Mode=1;set=0;break;//自动 case'c':set++;break; case'd':set--;break; case'e':set=0;break; case'f':set=10;break; } } } 风扇转速由定时器中断服务函数来控制,没有专门编写PWM脉宽调制函数,本设计共设定了6个档位,0档位停止即关闭档,并且可以使用APP中的加速、减速按钮来调节档位。在自动模式中,若判断为温度小于10℃,则自动调为0档位且风扇停止,大于等于10摄氏度且小于15摄氏度时为1档,以此每增加5摄氏度增加一个档位。风扇风速调节的原理是:设定一个参考值比如10,定义一个初值为零的unsignedchar型变量count,在定时器中断服务函数中,比较count与档位(比如3档)的大小,若相等则风扇停止,之后count进行一次自增再与10进行比较,若count增到与10相等则打开风扇同时对count赋0值,这样使得变量count在0到档位(比如3档)之间是开启状态,档位到10之间是关闭状态,因此档位越高风速越快。代码如下:voidtimer()interrupt1{ TH0=(65536-1000)/256; TL0=(65536-1000)%256; if(count==set) {Fan1=1; } count++; if(count==refer) { count=0; if(set!=0) Fan1=0; }}单片机最小系统[5]电源:为MCU提供能量。晶振电路:由晶振与电容组成,在程序运行中要有先后顺序,还需要有计时程序,因此晶振电路来提供此服务。复位电路:当单片机开机时,要进行一个初始化过程,这属于上电复位;当单片机受不明因素跑飞时,需要一个按键,按一下此按钮以使单片机重新运行,本设计将会使用一个四角按键作为复位按钮;往往单片机还有自动复位机制。风扇电路风扇电路如下图所示,为了方便连接,本设计使用了USB-A口插针式的风扇,USB-A端口共四条电缆,分别是电源正、电源负、以及两条数据线,本设计只使用两条电源线即可。端口母座的负极已经接好,对于正极,为了避免单片机IO口供电能力不足的问题,采用了一个由PNP三极管构成的简易电路来实现,电路图如下:图3.8风扇电路PNP晶体管是半导体基本元器件中比较重要的,有放大,饱和,截止三种工作情形,以下图为例,晶体管经过一个1K的限压电阻接到单片机上(本设计接到了P2.0口上),发射极已经接到电源,集电极接到了风扇接口母座的电源正极接线端,如果单片机P2.0口给出高电平信号“1”时,此时发射极与基极之间没有压降,晶体管就不会导通,风扇母座正极这条线路可以看做是开路的因此风扇不会工作,如果单片机P2.0口给出低电平,那么将产生压降,并且晶体管处于导通状态,风扇可以正常工作。其他电路为了设计需要,还设计了一些其它的电路,比如用来指示工作状态(手动模式与自动模式)的LED灯电路,它们连接到了MCU的P2.1口与P2.2口;还有为使用DS18B20传感器而设计的电路,它的数据线引脚连接到了MCU的P1.3口;为了方便供电,还设计了电源电路等。

APP与蓝牙通讯APP调试工具在进行Android开发时,一定会遇到程序调试问题,本设计在安卓程序设计中使用逍遥模拟器进行程序调试,在开发完成之后再将程序安装在手机,这样可以避免程序设计错误对手机带来的不良影响,并且模拟器直接安装在PC机上,更加方便。除此之外,AndroidStudio官方也提供了模拟器,但是运行比较缓慢,本设计没有使用。权限随着用户对隐私越来越重视,应用程序如果要使用一些硬件设备,必须要申请权限,防止信息泄露,使用蓝牙要申请如下:BLUETOOTHBLUETOOTH_ADMINACCESS_COARSE_LOCATION在安卓6.0以前的版本中,只需要申请前两者,在“Manifest”文件中申请即可;在6.0以后的版本中,需要在手机开启位置服务的前提下动态申请,需要加如下权限:<uses-permission-sdk-23android:name="android.permission.ACCESS_COARSE_LOCATION"/>布局主页面在进行页面布局开发时,可以将工程切换成Project视图,找到.xml文件,并将工作区选为Spilt结构,同时显示代码与视图元素,这样非常方便。主页面图如图4.1所示,可以看到在主页面中分为五部分:实时温度显示部分,工作模式选择部分,手动模式参数设置部分,以及logo、查找设备。用户打开APP进入此页面,此时可以看到实时温度,并根据需要选择工作模式,并可以手动调节速度。图4.1APP主页面图图4.2APP搜索蓝牙设备页面设备列表页面当用户点击主页面中的连接设备按钮后,会跳出窗口形式的页面,如上图4.2所示,点击搜索设备,后台会搜索周围蓝牙设备,并把新搜索到的设备显示在左列,已配对过的设备显示在右列,共用户选择。蓝牙模块使用方法流程概括:首先判断设备是否支持蓝牙,若不支持,抛出提示信息并结束,若支持,则下一步检查蓝牙功能是否处于开启状态,如果未开启,提示用户打开蓝牙开关,待蓝牙打开后,需要搜索设备,搜索设备时分别可以搜索到已连接过、未连接过的设备,如果搜索到设备,系统会以广播的方式将信息传给APP,因此要注册广播接收器,到搜索结束时销毁,在实际逻辑中,搜索到设备后需要用户进行选择,因此在搜索前需要创建设备显示页面和取消搜索按钮,用户选择设备后建立连接通信,发送数据。判断开启状态并跳转的方法:publicvoidonClick(Viewv){ if(wfu_bluetooth.isEnabled()==false){//未开启,则提示 Toast.makeText(BTClient.this,"请打开蓝牙开关...",Toast.LENGTH_LONG).show(); return; } /*跳转到DeviceListActivity进行搜索*/ if(wfu_socket==null){ IntentserverIntent=newIntent(BTClient.this,DeviceListActivity.class); startActivityForResult(serverIntent,REQUEST_CONNECT_DEVICE); } else{ /*关闭连接socket*/ try{ Data_in.close(); wfu_socket.close(); wfu_socket=null; Flag=false; }catch(IOExceptione){} } return; }查找与搜索设备方法局部:publicvoidonReceive(Contextcontext,Intentintent){

Stringaction=intent.getAction();

StringNoDevice="没有找到";

if(BluetoothDevice.ACTION_FOUND.equals(action)){

BluetoothDevicedevice=intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

if(device.getBondState()!=BluetoothDevice.BOND_BONDED){

WFUDeviceAdapter.add(device.getName()+"\n"+device.getAddress());

}else{

mPairedDevicesArrayAdapter.add(device.getName()+"\n"+device.getAddress());

}

}elseif(BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)){

setProgressBarIndeterminateVisibility(false);

setTitle("请选择:");

if(WFUDeviceAdapter.getCount()==0){

WFUDeviceAdapter.add(NoDevice);

}

}

}

调试本设计调试使用的是普中科技试验仪HC6800-EM3V2.2版本,在试验仪中,LCD1602的RD、WR、LCDE引脚已经接好到P26、P25、P27脚,数据线已经接好到P0口,温度数据线接好到P37口,因此在调试时要修改源代码中的引脚对应关系以匹配试验仪中的真实电路。测试时,对P1.1口赋值为“1”产生高电平作为5V电源使用,以LED灯代表风扇,接入到电路中可以看到在档位变化时,LED灯有轻微闪烁,并且LCD数字有变化,符合实验时房间温度正常值,代表风扇调速功能正常以及显示功能正常,另一颗LED灯接入到自动模式指示电路,可以看到LED灯亮,指示电路没有问题。蓝牙模块测试将在手机上调试。图6.1单片机实验箱调试图

总结本次设计以51单片机为“大脑”,辅以所需的电路部分,在实现必要功能的基础上做到了低成本,在价格上具有可行性,并且设计的功能合理,符合需求,在设计逻辑上也可行。单片机电流驱动能力较小,因此多数将元器件负极接到单片机。在设计程序时,需要仔细思考程序执行流程逻辑,例如,随着加速按钮的点击,set的值不断增加,但它不可能会超过参考值,因此要想修改风扇调节精度,就需要多方面思考,还有一些延迟程序,在数据交换时要求非常精确,需要严格控制,在Android程序设计方面,比如用户点击搜索时,可能系统并未打开蓝牙开关,此时需要有提示,否则用户会认为按键失灵。在硬件设计方面,需要注意元件的工作电压,防止供电不足而无法工作的现象,也要兼顾电流太大会击穿元器件的问题,作为一个长期通电的系统,散热是设计中非常重要的一项,如果散热效果差,又长期运行,极有可能会烧毁电路引起火灾。这次设计过程中,所用到知识都可以在大学课程中找到,通过这次设计,更加深刻理解了单片机的工作原理,各种中断的机制,也更加熟悉了模拟电路的部分内容,对于Android程序设计,学到了更多环境配置的知识与纠错的本领。

参考文献[1]曹建树.单片机原理与应用实例[M].北京:机械工业出版社,2014年.[2]毋茂盛.单片机原理与开发[M].北京:高等教育出版社,2015.2.[3]王冬星,许有军.单片机技术及51仿真与应用[M].北京:北京理工大学出版社,2015.2.[4]谢维成,杨加国.单元机原理与应用及C51程序设计[M].北京:清华大学出版社,2020年.[5]宋雪松,李冬明,崔长胜.手把手教你学51单片机[M].北京:清华大学出版社,2014年.

附录单片机主程序#include<reg52.h>#include<intrins.h>//晶振:11.0592MhzsbitDS1=P1^3; //传感器引脚sbitFan1=P2^2;//风扇引脚sbitRS=P2^6;//LCD1602液晶控制脚sbitRW=P2^5;sbitLCDE=P2^7;bitCtrl_Mode=0; //控制模式sbitAutoModeLed=P2^0;//自动模式LED灯引脚sbitManualModeLed=P2^1;//手动模式LED灯引脚unsignedinta=0;uns

温馨提示

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

评论

0/150

提交评论