APP下载

一种基于蓝牙技术的嵌入式防盗系统设计

2014-03-05袁晓峰赵越李岩高德远高武

现代电子技术 2014年4期

袁晓峰+赵越+李岩+高德远+高武

摘 要: 为了保护贵重物品的安全,设计出一款基于超低功耗单片机MSP430和蓝牙技术的防盗系统。防盗器的控制端是基于安卓智能手机开发的应用软件,操作便捷,智能手机用户即是防盗器的潜在用户。手机通过读取防盗器蓝牙的RSSI值,可以判断手机与防盗器的距离,从而根据距离实现防盗功能。实验表明,防盗器设计方案可以实现主动报警和防盗功能,且软件所测的距离在5 m的范围内精度达到1 m以内,具有良好的实用性。

关键词: 防盗器; MSP430; 蓝牙技术; 安卓系统; 接收信号强度

中图分类号: TN926?34; TP39 文献标识码: A 文章编号: 1004?373X(2014)04?0045?04

Design of anti?theft system based on Bluetooth technology

YUAN Xiaofeng, ZHAO Yue, LI Yan,GAODeyuan, GAO Wu

(School of Computer, Northwestern Polytechnical University, Xian 710072, China)

Abstract: In order to protect the security of valuables, an anti?theft system based on ultra?low power MSP430 and Bluetooth technology was designed. The burglar alarm is controlled by application software developed for Android smartphone. Its easy to operate. Smartphone users are the potential users of burglar alarm. The smartphone APP can judge the distance between the cellphone and burglar alarm by reading the RSSI values of the burglar alarm Bluetooth. The results obtained in a lot of experiments show that the burglar alarm can realize the functions of initiative alarm and anti?theft. The softwares measuring accuracy is 1 m in the range of 5 m. The design scheme has better practicability.

Keywords: burglar alarm; MSP430; Bluetooth technology; Android system; RSSI

0 引 言

随着现代生活节奏的加快,贵重物品经常会丢失或被遗忘。利用嵌入式计算机技术和电子技术设计的防盗器,可以帮助人们有效地保护贵重物品。防盗器因其特殊的应用场景,应该具备小体积、低功耗、大电量等特点。传统的电子防盗器多分为主机和子机,需要通过主机控制子机来实现防盗功能[1],无疑增加了操作难度和制作成本。近年来智能手机的用户数量呈爆炸式增长,将智能手机应用于物联网领域,可以节约成本,而且产品将拥有大量的潜在用户[2]。

本文设计出可以利用智能手机软件进行控制的防盗器,防盗器与智能手机之间通过蓝牙进行无线连接。我们只需要在智能手机安装控制软件APP并建立蓝牙连接,即可轻松控制防盗器实现主动报警、断开连接报警、超出安全距离报警、更改防盗器名称以及蓝牙连接密码等功能。当监测到贵重物品可能丢失时,手机和防盗器均会立即发出报警声音,具有很强的实用性和良好的市场前景。

1 总体设计方案

防盗器系统包括硬件系统和软件系统两部分。防盗器的硬件实物体积轻巧,与需要保护的贵重物品放在一起来实现防盗功能。软件系统包括单片机嵌入式软件和智能手机应用软件两部分。单片机代码的主要功能是监测蓝牙连接状况和接收手机发送的指令,从而控制外围电路进行相应操作。智能手机控制软件则是基于Android系统开发的一款应用APP,手机通过控制软件可以与防盗器建立蓝牙连接、发送响铃和修改名称等指令、设置安全距离等。图1展示了防盗器与智能手机之间的通信原理。

为了提高贵重物品的安全系数,防盗器在两种情况下可以报警,一种是蓝牙连接断开后,另一种是智能手机和防盗器之间的距离超过控制软件设置的安全距离。智能手机通过不断检查Android系统的蓝牙设备是否读取错误来实现蓝牙连接状态的检测。防盗器中的单片机通过向蓝牙发送“AT”指令来检测蓝牙连接状态:当蓝牙连接时,手机会收到单片机发送的字符;若蓝牙断开,防盗器的蓝牙模块则会向单片机返回“OK”字符,单片机检测到“OK”字符后得知蓝牙连接断开,从而发出报警响铃。

图1 防盗器与智能手机的连接

智能手机的控制软件可以通过RSSI(Received Signal Strength Indicator)来判断手机与防盗器的距离。RSSI是接收信号的强度指示,智能手机通过Android系统的intent.getExtra(BluetoothDevice.EXTRA_RSSI)获取蓝牙信号RSSI值的变化。当控制软件监测到手机与防盗器的距离超出所设置的安全距离时,立即进行报警并向防盗器发送报警指令,使得防盗及时响铃报警。手机接收到的信号强度PR与传输距离r的关系如式(1)所示:

[PR=A-10nlgr] (1)

式中:A为距离1 m时手机接收到防盗器的RSSI值;n为传播因子,与所处的环境有关[3]。

2 硬件系统设计

防盗器的硬件系统采用小体积、低功耗的商用现成芯片(COTS)搭建而成,硬件系统功能模块如图2所示。

图2 防盗器硬件系统功能模块

控制模块核心为超低功耗单片机MSP430G2553。MSP430系列单片机是TI公司推出的16位精简指令集混合处理器,大量实验和产品应用证明,MSP430相较其他系列的单片机具有卓越的低功耗的性能[4],可以大大节省防盗器的电量。单片机根据防盗器系统状态以及智能手机发送的指令,对防盗器的功能模块发送控制信号,从而实现相应操作。

蓝牙模块是采用CSR(Cambridge Silicon Radio)公司的蓝牙芯片,支持AT指令集,通过串口与单片机进行数据通信。蓝牙模块与手机的蓝牙建立连接后,为智能手机和防盗器提供无线通路,可传输数据和控制指令。

电源模块为防盗器系统的各个模块提供所需的电源,主要包括小体积的锂电池和LDO芯片。锂电池的使用,使防盗器具有充电功能,无需频繁更换电池,从而更加实用。LDO芯片则将锂电池的输出电压转换为稳定的3.3 V,保证芯片正常工作。

指示模块由多个LED灯组成,分别指示防盗器电源的开关、蓝牙通路连接的状态以及工作模式等。

报警模块可以是蜂鸣器或音乐芯片等。单片机接收到手机发来的响铃指令或检测到蓝牙连接断开后,可以控制报警模块进行响铃报警。

用户通过按键,可以控制防盗器的电源开关和单片机的复位功能。

此外,LCD显示模块可以和用户更好的交互,必要时可以实现这部分的功能。由于LCD显示模块需要占用大量面积,与防盗器小体积的目标相悖,本设计没有采用显示模块,而是通过智能手机的控制软件进行可视化操作。

所制作的防盗器实物如图3所示。

图3 防盗器硬件系统

3 软件系统设计

3.1 嵌入式软件设计

防盗器的单片机需要实现的主要功能为接收手机发送的指令并判断所要执行的操作、控制响铃的开关以及修改蓝牙模块的名称和密码等[5]。单片机代码的主要功能函数及作用如下:

CLOCK_INIT(); // 设置单片机运行的系统时钟

UART_INIT (); // 初始化单片机与蓝牙模块之间的串口,配置波特率为9 600 b/s

LINK_STATUS(); // 判断蓝牙的连接状态

MODIFY_NAME(); // 修改防盗器的名称

CHANGE_PW(); // 修改蓝牙的连接密码

在防盗功能中,单片机MSP430在上电后的运行流程如图4所示。

图4 单片机代码流程图

单片机接收到手机软件所发送操作指令误命令的概率与指令码集的最小码距有关。假设指令码集的大小为n(n个指令码),码距为d,指令码长度为L,则指令码集的误命令概率为[(n-1)Pde(1-Pe)L-d],其中Pe为信道误码率[6]。从上式可以看出,在码集大小n和指令码长度L相同时,指令码集的最小码距越大,发生误命令的概率越低。因此手机发送的蓝牙指令集应尽可能选择最小码距较大的指令集。

本文定义操作指令为8 b,需要6条指令,所以最小码距为4的操作指令及其对应操作定义如表1所示[7]。

表1 指令定义

3.2 安卓应用软件设计

智能手机端应用软件是基于Android开源平台开发的蓝牙控制软件。利用Android平台提供的UI管理机制和蓝牙设备管理接口,可以轻松方便地实现智能手机蓝牙适配器与防盗器蓝牙模块之间的通信以及接收信号强度(RSSI)测量[7]。

安卓控制软件的功能模块如图5所示。

图5 安卓应用软件模块结构

其中,主界面模块显示软件的功能按钮和当前防盗器的状态,在后台接收其他模块返回的蓝牙操作请求,并通过与蓝牙设备服务模块进行交互来实现这些操作。

蓝牙设备服务模块通过调用Android系统API来处理各种前台发出的蓝牙设备操作请求。

设备列表模块负责显示手机蓝牙已配对的设备列表(Paired Device List)和新发现的设备列表(Discovered Device List),并且负责管理后台刷新线程,通过不断刷新设备列表来寻找新的设备。

设备功能菜单模块显示设备相关的功能操作(如修改名称、响铃报警等),并将用户选择的功能转换为后台命令传送至主界面模块,进而完成相应的操作。

环境设置模块通过较为直观的方式,采集环境嘈杂度和安全距离两个数值,为测距函数提供参数。

防盗器安卓控制软件的核心为蓝牙设备服务模块,主要负责手机蓝牙的打开与关闭、蓝牙扫描的启动与中止、扫描结果的获取、蓝牙连接的创建与断开以及蓝牙设备的距离检测等功能。

蓝牙设备服务模块作为监控系统蓝牙设备的模块,具有以下四种状态[8]:就绪状态、侦听状态、连接请求状态和已连接状态。功能模块的状态转化关系见图6。

图6 蓝牙设备服务模块的状态转换

如图6所示,当软件启动时,该模块自动初始化为就绪状态,并将利用BluetoothAdapter.getDefaultAdapter() 函数获取手机默认的蓝牙适配器(Bluetooth Adapter),并检查其是否可用。若手机蓝牙适配器可用,模块将转换为侦听状态,启动Accept Thread线程来侦听防盗器蓝牙设备(Bluetooth Device)的连接请求。若侦听状态下得到其他蓝牙设备的连接请求,则侦听线程的listenUsingRfcommWithServiceRecor() 函数将被唤醒,并尝试建立蓝牙Socket连接[9],此时模块将转换为已连接状态。而当模块在侦听状态下得到前台模块(如主界面模块等)发出的连接防盗器蓝牙设备的请求时,模块会转换为请求连接状态。在此状态转换时,会终止Accept Thread线程并启动Connect Thread,Connect Thread线程则会调用安卓系统API中对应蓝牙设备类的createRfcommSocketToServiceRecord()方法来尝试与防盗器蓝牙建立Socket连接。若在请求连接时,得到了防盗器的响应,并成功创建了蓝牙连接,则该模块将转换为已连接状态。当转换为已连接状态时,模块将终止其他一切线程,并创建Connected Thread线程来维护连接。同时,通过该线程提供与防盗器蓝牙设备消息的输入和输出操作。

蓝牙设备服务模块在提供了模式转换的同时,封装了一些常用的操作,来使前台模块更容易与该后台模块进行交互。下面是前台模块常用到的操作:

start (); // 启动/重置服务

getState (); // 获取模块状态

connectDevice (); // 连接指定设备

stop (); // 停止服务

write (); // 向设备写入字符

read (); // 从设备读取字符

connectionFailed (); // 当连接请求失败时的操作

connectionLost (); // 当已建立的连接断开时的操作

基于Android系统设计的应用软件功能界面截图如图7所示。

图7 软件功能界面

4 系统测试

打开控制软件,与防盗器建立蓝牙连接后,发送响铃指令,防盗器主动报警;停止响铃指令则可使防盗器停止报警。手机软件对防盗器进行追踪,可实现蓝牙连接断开后报警和超出安全距离后报警的功能,有效防止贵重物品的遗失。此外,点击软件“修改名称”和“修改密码”按钮,并输入新的名称密码,即可成功修改防盗器的名称和蓝牙连接密码。

在空旷的环境下,对安卓应用软件的测距功能进行了测试。软件除了可以手动设置外界环境参数,还具有学习A和n值的功能,从而提高所测距离的精度。根据式(1),在手机和防盗器距离1 m时测得A值,然后根据距离2 m时的RSSI值计算出n值,则距离r与防盗器的RSSI值PR关系如式(2)所示:

[r=10[(A-PR)/(10?n)]] (2)

手机软件所测得防盗器的距离与实际距离的对比如表2所示。

表2 手机与防盗器距离 m

由表2的数据可以看出,控制软件在5 m以内的范围内所测数据精度较高,在1 m以内;当距离大于5 m时,软件所算出的距离精度较差,但蓝牙连接断开后报警的功能可以弥补精度的不足。

5 结 论

本文设计的防盗系统,体积小巧,通过智能手机控制即可实现防盗功能,操作方便。所设计的安卓应用软件操作界面简洁,功能完善,5 m以内的测距精度可达1 m以内。后续可将本设计继续优化,将防盗器做的更小;同时也可增加GPS、GSM等模块,实现可定位的小孩防丢器等更强功能的作品。此外,开发基于其他操作系统的控制软件,可以使个人计算机和其他智能系统的手机控制防盗器,从而有更好的市场前景。

参考文献

[1] 张立霞,周立余,冯新.基于 AVR 和 RFID 的电子防丢防盗器设计[J].现代电子技术,2013,36(15):91?94.

[2] 王贺.谈物联网于智能手机应用系统设计环节[J].河南科技,2013(4):23?24.

[3] 方震,赵湛,郭鹏,等.基于RSSI测距分析[J].传感技术学报,2007,20(11):2526?2530.

(上接第48页)

[4] Texas Instruments. MSP430x2xx family user's guide [EB/OL]. [2013?07?10]. http://www.ti.com.

[5] 沈建华,杨艳琴,翟骁曙.MSP430系列16位超低功耗单片机原理与应用[M].北京:清华大学出版社,2004.

[6] 谭维炽.关于遥控指令错误概率的计算[J].遥测遥控,2003(4):63?65.

[7] Anon. Android Bluetooth connection:service discovery failed [EB/OL]. [2012?08?23]. http://developer.android.com/guide/topics/connectivity/bluetooth.

[8] 郑昊.基于Arduino/Android 的蓝牙通信系统设计与实现[D]. 武汉:湖北大学,2012.

[9] 范晨灿.基于蓝牙4.0传输的Android手机心电监护系统[D].杭州:浙江大学,2013.

[10] 于敏芳,曾连连,张明哲.最小码距为4比特、长度为12比特的复合正交码集的生成方法[J].遥测遥控,2013(3):9?11.

图6 蓝牙设备服务模块的状态转换

如图6所示,当软件启动时,该模块自动初始化为就绪状态,并将利用BluetoothAdapter.getDefaultAdapter() 函数获取手机默认的蓝牙适配器(Bluetooth Adapter),并检查其是否可用。若手机蓝牙适配器可用,模块将转换为侦听状态,启动Accept Thread线程来侦听防盗器蓝牙设备(Bluetooth Device)的连接请求。若侦听状态下得到其他蓝牙设备的连接请求,则侦听线程的listenUsingRfcommWithServiceRecor() 函数将被唤醒,并尝试建立蓝牙Socket连接[9],此时模块将转换为已连接状态。而当模块在侦听状态下得到前台模块(如主界面模块等)发出的连接防盗器蓝牙设备的请求时,模块会转换为请求连接状态。在此状态转换时,会终止Accept Thread线程并启动Connect Thread,Connect Thread线程则会调用安卓系统API中对应蓝牙设备类的createRfcommSocketToServiceRecord()方法来尝试与防盗器蓝牙建立Socket连接。若在请求连接时,得到了防盗器的响应,并成功创建了蓝牙连接,则该模块将转换为已连接状态。当转换为已连接状态时,模块将终止其他一切线程,并创建Connected Thread线程来维护连接。同时,通过该线程提供与防盗器蓝牙设备消息的输入和输出操作。

蓝牙设备服务模块在提供了模式转换的同时,封装了一些常用的操作,来使前台模块更容易与该后台模块进行交互。下面是前台模块常用到的操作:

start (); // 启动/重置服务

getState (); // 获取模块状态

connectDevice (); // 连接指定设备

stop (); // 停止服务

write (); // 向设备写入字符

read (); // 从设备读取字符

connectionFailed (); // 当连接请求失败时的操作

connectionLost (); // 当已建立的连接断开时的操作

基于Android系统设计的应用软件功能界面截图如图7所示。

图7 软件功能界面

4 系统测试

打开控制软件,与防盗器建立蓝牙连接后,发送响铃指令,防盗器主动报警;停止响铃指令则可使防盗器停止报警。手机软件对防盗器进行追踪,可实现蓝牙连接断开后报警和超出安全距离后报警的功能,有效防止贵重物品的遗失。此外,点击软件“修改名称”和“修改密码”按钮,并输入新的名称密码,即可成功修改防盗器的名称和蓝牙连接密码。

在空旷的环境下,对安卓应用软件的测距功能进行了测试。软件除了可以手动设置外界环境参数,还具有学习A和n值的功能,从而提高所测距离的精度。根据式(1),在手机和防盗器距离1 m时测得A值,然后根据距离2 m时的RSSI值计算出n值,则距离r与防盗器的RSSI值PR关系如式(2)所示:

[r=10[(A-PR)/(10?n)]] (2)

手机软件所测得防盗器的距离与实际距离的对比如表2所示。

表2 手机与防盗器距离 m

由表2的数据可以看出,控制软件在5 m以内的范围内所测数据精度较高,在1 m以内;当距离大于5 m时,软件所算出的距离精度较差,但蓝牙连接断开后报警的功能可以弥补精度的不足。

5 结 论

本文设计的防盗系统,体积小巧,通过智能手机控制即可实现防盗功能,操作方便。所设计的安卓应用软件操作界面简洁,功能完善,5 m以内的测距精度可达1 m以内。后续可将本设计继续优化,将防盗器做的更小;同时也可增加GPS、GSM等模块,实现可定位的小孩防丢器等更强功能的作品。此外,开发基于其他操作系统的控制软件,可以使个人计算机和其他智能系统的手机控制防盗器,从而有更好的市场前景。

参考文献

[1] 张立霞,周立余,冯新.基于 AVR 和 RFID 的电子防丢防盗器设计[J].现代电子技术,2013,36(15):91?94.

[2] 王贺.谈物联网于智能手机应用系统设计环节[J].河南科技,2013(4):23?24.

[3] 方震,赵湛,郭鹏,等.基于RSSI测距分析[J].传感技术学报,2007,20(11):2526?2530.

(上接第48页)

[4] Texas Instruments. MSP430x2xx family user's guide [EB/OL]. [2013?07?10]. http://www.ti.com.

[5] 沈建华,杨艳琴,翟骁曙.MSP430系列16位超低功耗单片机原理与应用[M].北京:清华大学出版社,2004.

[6] 谭维炽.关于遥控指令错误概率的计算[J].遥测遥控,2003(4):63?65.

[7] Anon. Android Bluetooth connection:service discovery failed [EB/OL]. [2012?08?23]. http://developer.android.com/guide/topics/connectivity/bluetooth.

[8] 郑昊.基于Arduino/Android 的蓝牙通信系统设计与实现[D]. 武汉:湖北大学,2012.

[9] 范晨灿.基于蓝牙4.0传输的Android手机心电监护系统[D].杭州:浙江大学,2013.

[10] 于敏芳,曾连连,张明哲.最小码距为4比特、长度为12比特的复合正交码集的生成方法[J].遥测遥控,2013(3):9?11.

图6 蓝牙设备服务模块的状态转换

如图6所示,当软件启动时,该模块自动初始化为就绪状态,并将利用BluetoothAdapter.getDefaultAdapter() 函数获取手机默认的蓝牙适配器(Bluetooth Adapter),并检查其是否可用。若手机蓝牙适配器可用,模块将转换为侦听状态,启动Accept Thread线程来侦听防盗器蓝牙设备(Bluetooth Device)的连接请求。若侦听状态下得到其他蓝牙设备的连接请求,则侦听线程的listenUsingRfcommWithServiceRecor() 函数将被唤醒,并尝试建立蓝牙Socket连接[9],此时模块将转换为已连接状态。而当模块在侦听状态下得到前台模块(如主界面模块等)发出的连接防盗器蓝牙设备的请求时,模块会转换为请求连接状态。在此状态转换时,会终止Accept Thread线程并启动Connect Thread,Connect Thread线程则会调用安卓系统API中对应蓝牙设备类的createRfcommSocketToServiceRecord()方法来尝试与防盗器蓝牙建立Socket连接。若在请求连接时,得到了防盗器的响应,并成功创建了蓝牙连接,则该模块将转换为已连接状态。当转换为已连接状态时,模块将终止其他一切线程,并创建Connected Thread线程来维护连接。同时,通过该线程提供与防盗器蓝牙设备消息的输入和输出操作。

蓝牙设备服务模块在提供了模式转换的同时,封装了一些常用的操作,来使前台模块更容易与该后台模块进行交互。下面是前台模块常用到的操作:

start (); // 启动/重置服务

getState (); // 获取模块状态

connectDevice (); // 连接指定设备

stop (); // 停止服务

write (); // 向设备写入字符

read (); // 从设备读取字符

connectionFailed (); // 当连接请求失败时的操作

connectionLost (); // 当已建立的连接断开时的操作

基于Android系统设计的应用软件功能界面截图如图7所示。

图7 软件功能界面

4 系统测试

打开控制软件,与防盗器建立蓝牙连接后,发送响铃指令,防盗器主动报警;停止响铃指令则可使防盗器停止报警。手机软件对防盗器进行追踪,可实现蓝牙连接断开后报警和超出安全距离后报警的功能,有效防止贵重物品的遗失。此外,点击软件“修改名称”和“修改密码”按钮,并输入新的名称密码,即可成功修改防盗器的名称和蓝牙连接密码。

在空旷的环境下,对安卓应用软件的测距功能进行了测试。软件除了可以手动设置外界环境参数,还具有学习A和n值的功能,从而提高所测距离的精度。根据式(1),在手机和防盗器距离1 m时测得A值,然后根据距离2 m时的RSSI值计算出n值,则距离r与防盗器的RSSI值PR关系如式(2)所示:

[r=10[(A-PR)/(10?n)]] (2)

手机软件所测得防盗器的距离与实际距离的对比如表2所示。

表2 手机与防盗器距离 m

由表2的数据可以看出,控制软件在5 m以内的范围内所测数据精度较高,在1 m以内;当距离大于5 m时,软件所算出的距离精度较差,但蓝牙连接断开后报警的功能可以弥补精度的不足。

5 结 论

本文设计的防盗系统,体积小巧,通过智能手机控制即可实现防盗功能,操作方便。所设计的安卓应用软件操作界面简洁,功能完善,5 m以内的测距精度可达1 m以内。后续可将本设计继续优化,将防盗器做的更小;同时也可增加GPS、GSM等模块,实现可定位的小孩防丢器等更强功能的作品。此外,开发基于其他操作系统的控制软件,可以使个人计算机和其他智能系统的手机控制防盗器,从而有更好的市场前景。

参考文献

[1] 张立霞,周立余,冯新.基于 AVR 和 RFID 的电子防丢防盗器设计[J].现代电子技术,2013,36(15):91?94.

[2] 王贺.谈物联网于智能手机应用系统设计环节[J].河南科技,2013(4):23?24.

[3] 方震,赵湛,郭鹏,等.基于RSSI测距分析[J].传感技术学报,2007,20(11):2526?2530.

(上接第48页)

[4] Texas Instruments. MSP430x2xx family user's guide [EB/OL]. [2013?07?10]. http://www.ti.com.

[5] 沈建华,杨艳琴,翟骁曙.MSP430系列16位超低功耗单片机原理与应用[M].北京:清华大学出版社,2004.

[6] 谭维炽.关于遥控指令错误概率的计算[J].遥测遥控,2003(4):63?65.

[7] Anon. Android Bluetooth connection:service discovery failed [EB/OL]. [2012?08?23]. http://developer.android.com/guide/topics/connectivity/bluetooth.

[8] 郑昊.基于Arduino/Android 的蓝牙通信系统设计与实现[D]. 武汉:湖北大学,2012.

[9] 范晨灿.基于蓝牙4.0传输的Android手机心电监护系统[D].杭州:浙江大学,2013.

[10] 于敏芳,曾连连,张明哲.最小码距为4比特、长度为12比特的复合正交码集的生成方法[J].遥测遥控,2013(3):9?11.