摘要
本文利用所学51单片机基础知识结合自动控制技术和蓝牙4.0通信技术、nRF24L01无线技术,设计完成一套两种不同的上位机控制的无线遥控家电开关系统。本设计详细地讲述了51单片机控制原理和单片机编程技术,HC-05蓝牙通信技术、nRF24L01无线技术以及自动化控制技术。整个系统以IAP15F2K61S2单片机为核心,单片机实现HC-05蓝牙指令的解析与继电器开关控制指令的发出。蓝牙模块在整个系统中负责蓝牙指令的接收和传输;家电开关的自动控制部分采用12路继电器开关来实现,为了使系统设计简便,操作演示方便,家用电器部分采用12种LED灯来模拟替代,通过继电器开关上接的LED灯的亮灭来模拟所控制的电器的开启和关闭,系统LCD12864液晶实时显示12种家电开关的开启与关闭状态。整个系统设计思路清晰,设计成本较低,具有较高的使用和推广价值。
基于单片机的蓝牙家电开关控制系统设计
(第十四题)
【第四组】
1.系统方案
本系统主要由核心控制模块、无线模块、温度传感器模块、显示模块、键盘模块、输出控制模块、电源模块组成,下面分别论证这几个模块的选择。
1.1核心控制模块论证与选择方案一:采用51系列8位单片机。
51系列单片机价格便宜,编程相对简单,但I/O口资源紧缺,存储空间小,响应速度慢,烧写程序复杂,需专门的下载工具,不支持在线调试。
方案二:采用MSP430系列16位单片机。
MSP430系列单片机功耗低,16位的精简指令集,8M晶振驱动下125纳秒的指令周期,内置JTAG电路,支持Flash在线编程技术,大容量ROM和RAM,能够存储大容量程序。当今工业控制向32位处理器ARM发展趋势日益加快,MSP430 16位处理器相对落后。
方案三:STC15系列单片机,1T STC-Y5 内核,比传统51系列快6-12倍,并且内部RAM扩大,传统51为128字节或256字节,它达到了2.25KB,内部高精准可调RC振荡器,有一个16位自动重载定时器,串口波特率设置更灵活,有片内SPI控制器,速度可达1/4主频速度,有片内PWM/PCA控制器,可捕获外部缓冲或者产生PWM,有片内AD,分辨率10位,8通道。
所以综上方案本系统选择方案三。
1.2 无线模块论证与选择方案一采用NRF24L01无线射频方式进行遥控控制,采用此方案进行设计具有设计成本低廉,开发难度低等优点,便于推广和应用;不足之处是发射终端同样需要单片机进行控制,远程控制需要随时随地携带控制设备,同时由于没有相应的密码设置,容易被附近同样频段的遥控设备误操作。
方案二采用GSM移动通信网络的方式进行远程控制,系统通过手机远程发送短信的模式实现家用电器的开启和关闭采用此方案进行设计具有操作灵活,不用携带额外控制器即可远程控制,同时控制不受距离限制的优点;不足之处是开发难度大,设计成本相对较高,通过手机短信进行控制需要缴纳一定的通信费用,在一些低端的住宅场合推广具有一定的难度。
方案三采用手机蓝牙终端进行遥控控制,系统通过手机蓝牙实现家用电器开关的遥控开启和关闭,采用此方案进行设计具有控制方便灵活,不用额外携带控制设备即可实现家用电器的开启关闭的操作,同时蓝牙遥控具有密码匹配在操作安全性上有很好的保证,同时又不需要缉拿相应的通信费用。
通过以上三种方案的比较和分析论证,在当今人们追求生活便利作为主要目的的环境下,方案一虽然成本相对低廉,但是由于受制于安全性和操作的便利性,不过我们介于学习中的状态完全可以加入我们的设计中,因而在三种设计方案进行对比后,首先选择方案一。方案二和方案三是目前家电开关无线控制系统最好的两种方案,两种方案各有千秋,方案三相比方案二开发难度低,开发周期短,推广相对容易,方案二由于需要借助于移动通信网络进行远程控制,因而需要收取一定的通信资费,同时一单手机停机会造成无法遥控控制的情况。鉴于以上三种方案的对比,本文最终选择方案一、方案三作为整个系统的设计方案。
1.3温度传感器模块选择与论证方案一采用模拟温度传感器AD590,转换结果需要经过运算放大器和AD转换器传送给处理器。它控制虽然简单,成本低,但是后续电路复杂,且需要进行温度标定,集成温度传感器AD590输出为电流信号,且输出信号较弱,所以需要后续放大及A/D转换电路,如采用普通运放则精度难以保证,而测量放大器价格较高,这样会使成本升高。
方案二采用了数字温度传感器DS18B20,它能在现场采集温度数据,直接将温度物理量变换为数字信号并以总线方式传送到单片机进行数据处理,并且可根据实际要求通过简单的编程实现9-12位的数字式读数方式,因此,该方案完全具有可行性,同时体现了技术的先进性,经济上也有很大的优势。
综合上述选择方案二作为我的上位机采集温度传感器。
1.4显示模块论证与选择方案一:采用数码管显示。
数码管显示清晰,价格较低,性价较高,方便易行,但外部电路复杂,占用I/O口资源较多,显示信息单一,只能显示数字和少量字母。动态显示则需循环刷新数码管,占用更多的程序储存空间。
方案二:使用带中文字库LCD12864液晶屏显示。
液晶屏具有显示质量高,数字式接口,体积小,质量轻,功耗小,显示内容多,并且带有汉字库,能够显示汉字、字母、数字、图形等。
方案三:采用LCD1602显示,美观大方,液晶显示模块具有体积小、功耗低、显示内容丰富、超薄轻巧等优点
方案三虽然体积小功耗低,但是方案二都具有方案三的特点,方案二的功能比方案三的功能更强大,所以显示模块选择方案二。
1.5键盘模块论证与选择方案一:采用矩阵式键盘,程序复杂,电路复杂,调试困难,占用I/O资源多。不适合本系统。
方案二:采用独立按键,电路简单,编程方便,本系统使用按键数不多,占用I/O口资源少。
综上所述:选择方案二。
1.6输出控制模块论证与选择方案一:采用继电器,电路简单,成本较低使用方便,但是有触点闭合时会产生一定的电弧,寿命在十万次以上,使用时只能作为开关使用不能起到调光作用。
方案二:采用可控硅,电路简单,成本低使用方便不仅能作为开关使用还可作为PWM调压,寿命久合适使用在调光、调速电路。
综合上述:方案一在系统中只作为简单的开关使用,方案二作为调速、调光设备使用。
1.7电源模块论证与选择由于本系统需要电池供电,我们考虑了如下集中方案为系统供电。
方案一:
采用3节1.5V干电池供电,电压达到4.5V,给上位机单片机系统和其他芯片供电。这个方案体积小、重量轻、成本低、携带方便我们选择这种方案作为上位机供电。
方案二:
采用220V转5V的充电头给主机供电,USB接口给单片机系统和其他芯片供电。出来的电源电流驱动能力以及稳定的电压输出性能。这个方案比较合适主机供电,在不经常拿起的情况下使用极为方便,并且充电头的价格比较低。因此我们选择了此方案。
方案三:
调试时直接用开关电源,调到12V进行调试。
综上考虑,我们选择了方案一作为上位机电源供电、方案二作为主机供电。
2.主机电路与上位机电路、安卓APP设计2.1.1主机总电路图单片机主机机系统电路为整个系统的控制核心,用于控制这个系统的正常运行,单片机主机系统电路主要有IAP15F2K61S2单片机该芯片内置晶振电路、复位电路,外加 NRF24L01模块电路,液晶电路、继电器控制电路、接收指示灯组成。此部分电路图如图1所示
图1 主机总电路图
2.1.2 NRF24L01上位机总体框图(见附件)
图2 上位机设计系统总框图
2.1.3 NRF24L01上位机总电路图单片机 NRF24L01上位机系统电路为整个系统的发射控制核心,用于控制这个系统的正常运行,单片机 NRF24L01上位机系统电路主要有IAP15F2K61S2单片机该芯片内置晶振电路、复位电路,外加 NRF24L01模块电路,DS18B20温度采集传感器、键盘电路、液晶电路、接收指示灯组成。此部分电路图如图3所示。
图3 NRF24L01上位机总电路图
2.1.4蓝牙上位机软件框图
图4 安卓上位机框架与成果图
2.1.5主机蓝牙通信电路设计系统蓝牙通信电路采用HC-05模块作为核心,加以外围电路完成系统蓝牙通信电路的设计,蓝牙部分电路设计如图5所示。

图5 HC-05通信模块电路图
如图5所示,U6为系统蓝牙通信模块HC-05模块,二极管D5、D6和电阻R10、R11组成电平转换电路以保证系统可以同时在5V和3.3V的电压下工作,D7为蓝牙模块工作状态指示灯,其工作状态有以下三种:一,在模块上电的同时把BS-KEY引脚设置为高电平(或接到VCC)此时D7以亮一秒灭一秒的频率慢闪,模块进入AT状态,此时波特率为固定的9600。二,在模块上电的同时把BS-KEY引脚设置为低电平(或接地),此时D7以一秒闪烁2次的频率快闪,表示模块进入可配对状态,如果此时再将BS-KEY引脚电平置高,模块会进入AT状态,但是D7的闪烁频率不变。三,模块配对成功,此时D7双闪,一次闪2下,2秒闪一次。系统有了D7指示灯就能够很直观的判断模块的当前状态,方便使用。
2.1.6主机蓝牙模块功能测试蓝牙模块电路设计焊接好后,为了保证模块能够正常使用,首先要测试一下蓝牙模块收发功能是否正常,具体测试过程如下所述。
首先HC-05模块通过usb转TTL模块连接到电脑串口,连接方式如图6所示。

图6蓝牙模块与TTL模块接线方式图
HC-05模块出厂设置为从模式,所以发送AT+ROLE?得到的返回值为+ROLE:0,发送AT+ROLE=1即可设置模块为主机、具体操作界面如图7所示。


图7蓝牙模块测试界面图
2.1.7 主机家电控制电路设计与原理系统家电控制电路采用12路继电器控制实现,12路继电器分别控制饮水机开关、窗帘开关、冰箱开关、风扇开关、大厅灯开关、睡眠灯开关、卧室灯开关、插座1~插座5开关。继电器控制电路采用弱电控制强电的工作原理,单片机通过控制继电器的断开和吸合来控制外接家电的通断,具体控制电路如图8所示。

图8系统家电控制电路图
如图8所示,信号口分别接到单片机的IO口上,当单片机输出低电平的时候继电器吸合,外部接家电的开关吸合接通,家电启动工作;当单片机输出高电平的时候三极管断开,继电器外部开关断开,外接的家电停止工作。考虑到实际的可操作性,以及能够直观的分辨出继电器开发的接通和断开,外部家电采用LED灯的亮灭来替代,当对应家电的LED灯点亮代表对应家电电源接通,家电处于工作状态,当对应的LED灯熄灭代表对应的家电电源开关断开,家电停止工作。
2.1.8 主机与上位机系统显示电路设计与原理LCD液晶显示,采用点阵和带中文字符型 LCD 液晶显示,液晶显示模块具有体积小、功耗低、显示内容丰富等特点,现在字符型液晶显示模块已经是单片机应用设计中最常用的信息显示器件,但采用LCD液晶显示会造成设计成本增加。
考虑到为了提高显示效果,系统选用LCD12864作为显示部分。LCD12864液晶显示电路如图9所示。

图9系统显示器件电路图
2.1.9上位机按键电路设计与原理按键采用轻触开关当页面切换按键按下时单片机统计按键的次数液晶显示不同的页面,同时也通过NRF24L01发送一个相应的信号到主机中让主机与上位机同步显示。确定按键,按下一次则保存选择按键的数据并且发送相应的数据到主机上控制不同的继电器开关。选择按键有加也有减、按下按键选择不同的开关信号由确定键保存和发送,如下图所示。

图10 系统显示器件电路图
2.2.0上位机DS18B20电路设计与原理DS18B20数字温度传感器是DALLAS公司生产的1—Wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,在一根通讯线,可以挂很多这样的样的数字温度计,十分方便。 单片机也能直接读取DS18B20的数据程序也非常简单。电路如11图所示。

图11 DS18B20电路图
2.2.1接收和发送指示灯电路设计与原理LED指示灯采用共阴极接法,R5与R10为限流电阻,当NRF24L01上位机进入发送函数时P3^6口得到低电平D2亮,否则灭。当主机接收到信号时P4^5得到低电平D8亮,否则灭


图12接收和发送指示灯电路图
3.程序的设计3.1系统软件编程环境介绍系统软件设计采用C语言编程,编译环境为Keil。
Keil c51 是美国Keil Software 公司出品的51 系列兼容单片机C 语言软件开发系统,和汇编相比,C 在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
Keil c51 软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows 界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil c51 生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。
Keil C51 可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE 本身或其它编辑器编辑C 或汇编源文件,然后分别有C51 及A51 编辑器编译连接生成单片机可执行的二进制文件(.HEX),然后通过单片机的烧写软件将HEX 文件烧入单片机内。软件主要三个方面:一是初始化系统;二是数据采集;三是数据处理并进行显示。这三个方面的操作分别在主程序中来进行。程序采用模块化的结构,这样程序结构清楚,易编程和易读性好,也便于调试和修改。
3.2系统主程序流程图系统主程序主要包括系统的初始化、蓝牙串口通信、 NRF24L01通讯、开关状态的显示以及信号的输出控制等,系统主程序流程图如图13所示。

图13 主机程序流程图
系统主程序流程如图13所示,当系统上电后首先完成各个组件的初始化,一个系统的初始化是程序运行必不可少的环节,系统初始化部分主要包括:系统的初始化、蓝牙串口通信、 NRF24L01通讯、开关状态的显示以及信号的输出控制初始化等;初始化完成以后系统首先要启动蓝牙串口通信模块,保证蓝牙模块和手机蓝牙控制终端完成匹配。单片机通过串口通信的方式实现和蓝牙模块的通信,单片机对蓝牙模块接收到的指令进行解析然后输出控制指令到继电器开关,从而实现对家电开关的控制;LCD液晶对12路家电开关的开启和关闭状态进行显示,便于直观的测试。
3.3系统蓝牙通信模块子程序系统蓝牙通信模块子程序主要完成手机蓝牙指令的接收以及和单片机直接的数据通信等,此部分程序的完成是整个系统软件设计成功与否的关键所在。图14为系统蓝牙通信子程序流程图。
图14系统蓝牙通信子程序流程图
3.4系统24L01通信模块子程序图14系统24L01子程序流程图
4.测试方案与测试结果4.1测试方案使用自制好的NRF24L01上位机与安卓APP对主机进行测试因为在编程程序时一边写一边调试所以做出来的硬件和程序都没有任何问题。
硬件测试:核心板子使用完整的IAP15F开发板作为调试主体,使用面包板搭建继电器电路通过单片机输出信号对相应的继电器做开关信号。
4.2 测试条件与仪器测试条件:一台主机、一台手机、一台NRF24L01上位机
仪器: 万用表、示波器
4.3系统的功能测试与检验蓝牙遥控测试主要完成12路继电器的开启和关闭,为了直观的看出测试结果,每路继电器输出开关上接一个LED指示灯,通过观察对应继电器输出的LED灯的亮灭来测试,具体测试过程如下所述。
手机蓝牙发送指令“101”一次继电器1吸合,LED1点亮,再次发送指令“102”继电器1断开,LED1熄灭。
手机蓝牙发送指令“103”一次继电器2吸合,LED2点亮,再次发送指令“104”继电器2断开,LED2熄灭。
·
·
·
手机蓝牙发送指令“122”一次继电器12吸合,LED12点亮,再次发送指令“123”继电器12断开,LED12熄灭。
NRF24L01也是差不多一样的模式;
4.4有效距离手机蓝牙与主机蓝牙有效距离: 最佳距离:30米内
24L01上位机与主机24L01有效距离:最佳距离:100米内
5.总结与分析通过这次毕业设计的制作,巩固了我在大学3年里学过的知识,尤其是单片机和C语言编程方面的知识,同时也提高了单片机编程的能力,获得了软件调试的经验,并且也了解到了其它相关领域的知识,不论是对今后的工作还是学习都有着极大的帮助。
此次设计完成的作品主要有如下功能和特点:
- 系统能够实现通过手机蓝牙与NRF24L01完成12路家用电器开关的遥控控制;
- 系统可以通过外置显示终端实时显示12路开关的开启和关闭状态,显示终端可
以方便直观的观察到控制指令的接收和解析是否正确,便于功能的调试。
- 整个系统具有功耗低、操作方便、性能稳定等诸多优点,具有良好
的应用和推广价值。
同时由于时间仓促,自己经验不足,在理论方面也相应存在缺陷,在整个系统的设计过程中也存在着一些问题,现总结如下:
1、电子电路的设计中对各种影响因素的考虑不够完全,比如在对系统电源部分的处理不够完善,早期系统工作不是很稳定。
2、没有扩展更多电路,如室内环境监测功能,通讯接口电路与上位机(PC机)进行通讯,上位机显示功能从而将大量的商品数据存于上位机,然后通过串口或并口通讯与系统相连,达到远距离监控的目的。
3、对各种实用芯片价格了解不够,在选择上有欠缺,如所选的显示终端价格较贵,从而使设计成本有所提高。
通过此次远程家电开关控制系统的设计和总结对我今后的学习和工作带来了积极的影响。
参考文献
[1] 李朝青.单片机原理及接口技术[M].北京:北京航空航天大学出版社,2005.
[2] 康华光.电子技术基础模拟部分(第五版) [M].北京:高等教育出版社, 2005.
[3] 阎石.数字电子技术基础(第四版)[M].北京:高等教育出版社,2005.
[4] 白延敏.51单片机典型系统开发实例精讲[M].北京:电子工业出版社,2009.
[5] 张齐,杜群贵. 单片机应用系统设计技术[M]. 北京:电子工业出版社,2007.
[6] 杨金岩等. 8051单片机数据传输接口扩展技术与应用实例[M].北京:人民邮电出版社,2005.
[7] 求是科技.单片机通信技术与工程实践[M].北京:人民邮电出版社,2005.
[8] 郭永贞主编. 数字电子技术[M]. 西安电子科技大学出版社,2000.
[9] 李广弟. 单片机基础[M].北京:北京航空航天大学出版社,2001.
[10] 张洪润. 电子线路与电子技术[M].清华大学出版社[M],2005.
[11] 张齐,杜群贵. 单片机应用系统设计技术[M].电子工业出版社,2004.
[12] Julian W. Gamder, Intelligent Data Acquisition System B, 2005,4:109-115.
[13] Dejie Song, Boxue Tan, Wenfeng Liu. Application of Wireless Communication in Temperature Measurement [J]. Berlin Heidelberg: Springer-Verlag,2011,175(1): 428—433.
[14] Xingrui Liu and Guohong Gao. Temperature Monitoring System Based on AT89C51 [J]. Berlin Heidelberg: Springer-Verlag,2011,105(1): 601—605.
附录1:电路原理图
NRF24L01上位机原理图

主机原理图
附录2: 系统硬件实物图 


附录3:源程序- /***************主机主程序************************/
- #include "STC15F2K.H"
- #include "intrins.h"
- #include "delay.h"
- #include "io.h"
- #include "api.h"
- #include "shoujie.h"
- #include "12864.h"
- #include "rx_data.h"
- #include "lanya.h"
- /**************************************************
- 函数:main()
- /**************************************************/
- void main(void){
- init_io(); // 初始化IO口
- RX_Mode(); // 设置为接收模式
- LCD_init(); // 初始化液晶
- SerialIni(); // 初始化定时器
- while(1){
- gnenqhuan(); // 蓝牙数据处理程序
- RX_MAIN(); // 判断是否接收到开关数据
- RX_MAIN1(); // 判断是否接收到温度数据
- sta = SPI_Read(STATUS); // 读状态寄存器
- }
- }
- /***************NRF24L01上位机主程序************************/
- #include "STC15F2K.H"
- #include "intrins.h"
- #include "io.h"
- #include "delay.h"
- #include "18b20.h"
- #include "key.h"
- #define uint unsigned int
- #define uchar unsigned char
- void main(){
- init_io(); //初始化IO
- TX_Mode(TX_BUF); //设置为发送模式
- LCD_init(); //液晶初始化
- while(1){
- fasong(0,0,key_dtat); //发送模式,发送 开关 数据
- fasong(1,1,(tvalue/10)); //发送模式,发送 温度 数据
- …………
- …………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
完整的Word格式文档51黑下载地址(还有源码与app):