5841| 3
|
[第二届] 第二届UEAL第四轮主观题--儿童防丢器 |
本帖最后由 秦时茗月 于 2016-5-27 09:40 编辑 第四轮主观题——儿童防丢器 --冰城雪狸队starysoul 视频链接: http://pan.baidu.com/s/1cp3iWm 密码:mpf4 简介:本次设计了一个基于BlunoM3控制器实现儿童防丢器设计。该系统的硬件单元包括报警电路,接收器件和发射器件,液晶显示电路等。此次设计完成了全部基本功能,但由于没有GPS等拓展模块加上时间不够,故而没有进行发挥部分的设计。 1、器件简介及方案论证 1.1 Bluno M3 控制器简介 Bluno M3 是一款基于ARM处理器并且兼容Arduino接口的开源硬件平台。一款集成了蓝牙4.0通信模块和32位主控芯片STM32F103RET6的微控制 器。作为Bluno 家族新的一员, Bluno M3继承了Bluno系列的几个特点:支持蓝牙通信、支持无线编程和支持手机控制等。在此基础上BlunoM3 也新增了新的功能——更强大的处理性能,更大的存储空间和更多的接口资源。这完全得益于它现在采用的32位主控芯片。 32位主控器相比传统的8位单片机,在性能上拥有显著的优势,但它的开发环境较为复杂,开发难度也相对较高。Bluno M3不同于以往其他的32位主控,在保留了其强大性能的同时,也兼容了Arduino的简单方便的使用方法。 Bluno M3拥有39个数据输入/输出口,管脚分布兼容了Arduino UNO 管脚,提供SPI和I2C通信接口,支持无线烧录功能及其BLE通信功能,可与手机APP配合"走你"APP使用。板载电源管理系统支持USB和外接电源 自动切换,可直连USB供电或7-12v的宽电压供电。并支持传统STM32 SWD编程调试。 1.1 方案论证 通信方案设计: 方案一:采用两块bluno M3板卡进行通信。 方案二:采用bluno M3板卡与Bluetooth模块进行通信 方案三:使用安卓手机与之bluno M3进行通信 此次设计要求了必须采用给定板卡进行设计,而bluno M3是采用蓝牙4.0技术,bluetooth却是采用的蓝牙2.0技术,理论上无法进行通信,而手中只有一块m3的板卡,因此,本设计采用方案三。 2、显示电路的选择 方案一:采用LCD1602。 方案二:采用OLED12864。 由于此次设计需要显示的数据较多,采用LCD1602可能需要滚屏显示,这样会增加软件设计的复杂程度。显示器件采用wavesheer公司的 12864OLED模块,同等条件下,该器件显示效果要比LCD好。因此采用方案二。采用4线SPI方式进行数据传输,这样做的目的是节省IO,使硬件连 接上也更为简洁。 3、收发信号装置的选择 此次设计采用了Bluno M3控制器板卡作为发射装置。Bluno M3控制器而这款控制器集成了蓝牙4.0通信模块和32位主控芯片STM32F103RET6的微控制器,因此,可以使用板载蓝牙模块与接收端通信。 接收端则选用的是安卓手机。安卓手机可以连接Bluno M3,通过二者间的蓝牙通信判断发射与接收端距离。当手机距离开发板3至5米时,蜂鸣器将报警并持续5秒。而在10米至20米后,蜂鸣器将持续报警。 4、报警的实现 电路图如下: 用了三极管来驱动蜂鸣器, R38 主要用于防止蜂鸣器的误发声。当 BEEP 输出高电平的时候,蜂鸣器将发声, 当 BEEP 输出低电平的时候,蜂鸣器停止发声。 5、系统设计 5.1 接受与发射装置间通信的实现 首先解释一下通过蓝牙进行距离的测定方法: 距离计算公式: d = 10 ^ ((abs(RSSI) - A) / (10 * n) 其中d为距离,RSSI是接收到的信号强度。 A是发射端和接收端相距1米时的信号强度。 n则是指环境衰减因子。 在信号传输时,控制器接收到RSSI值之后,返回距离。在设计时,A值和n值通过调试后分别取了70和1.8。 实现的代码如下: 将蓝牙进行连接,arduino 端先通过UART端口实现对蓝牙写如下指令: AT + BAUD4 :配置波特率为115200 (在Bluno M3中能够自动连接上手机) AT + MODE2 :设置为透传及遥控模式 AT + ROLE1:主从设置 之后arduino端通过发送AT + RSSI监听UART口的返回的数据。使用sring函数处理并提取设备的RSSI值。 值得注意的是,在室内信号传输时,信号在传输过程中会受到由于障碍物形成的反射和散射信号的影响,因而得到的结果可能有些偏差,需要对数学模型进行修正,在室内条件下,可以考虑用正态分布模型。 5.2 Bluno AT指令集 AT 指令列表见附录1 6、系统总体框图 7、软件设计流程 8、结语 能够完成此轮比赛我真的是感到非常幸运,期间咨询了很多进行过相关项目开发的同学,也获得了社区中大神们 的辅助。在通过蓝牙测距的实现上,以前一直只知道蓝牙用来通信,多方打探才知道了蓝牙测距的原理和实现方法,期间学习的过程真是充满艰辛,惊喜和满足的。 在此,我对他们表示衷心的感谢。此外,还要感谢云汉集团给予我们高校学子的锻炼机会,你们所组织的这个高校电子竞赛也让我们受益匪浅。虽然所学不多,但会 尽力为支持你们的这个活动做出自己的成果,为支持你们这种活动和精神贡献出自己的一份力。不论最后结果如何,这次比赛让我见识到了其他学校优秀的同学们, 也深刻认识到了自己在求知的路上还需兢兢业业,刻苦学习。最后,祝愿此次大赛圆满成功! 9、实物展示 视频链接: http://pan.baidu.com/s/1cp3iWm 密码:mpf4 附录1 <CR+LF> 即回车+换行,所有的AT指令都是以windows下的回车作为结束符 不要把“<CR+LF>”这几个字符当做AT指令的一部分 1. "AT+FSM" 设置BLE芯片工作模式 AT+FSM=FSM_TRANS_USB_COM_BLE<CR+LF> 设置USB转串口模式,开启BLE功能。 AT+FSM=FSM_HID_USB_COM_BLE_AT<CR+LF> 设置USB转串口模式,开启BLE HID功能 AT+FSM=?<CR+LF> 查询当前BLE芯片的工作模式(默认:FSM_TRANS_USB_COM_BLE) 2. "AT+ROLE" 设置BLE芯片主从机状态 AT+ROLE=ROLE_CENTRAL<CR+LF> 设置BLE工作在主机状态下 AT+ROLE=ROLE_PERIPHERAL<CR+LF> 设置BLE工作在从机状态下 AT+ROLE=?<CR+LF> 查询当前BLE芯片的主从机状态。 (默认值为ROLE_PERIPHERAL) 3. "AT+MIN_INTERVAL" 设置BLE芯片最小通信间隔,以毫秒为单位 AT+MIN_INTERVAL=10<CR+LF> 对于PC和Android,建议设为为10。 AT+MIN_INTERVAL=20<CR+LF> 对于iOS设备,建议设置为20。 AT+MIN_INTERVAL=?<CR+LF> 查询当前BLE芯片的通信间隔。 默认值为10 4. "AT+MAX_INTERVAL" 设置BLE芯片最大通信间隔,以毫秒为单位 AT+MAX_INTERVAL=10<CR+LF> 对于PC和Android,建议设为为10。 AT+MAX_INTERVAL=40<CR+LF> 对于iOS设备,建议设置为40。 AT+MAX_INTERVAL=?<CR+LF> 查询当前BLE芯片的通信间隔。 默认值为10 5. "AT+UART" 设置物理串口波特率 AT+UART=115200<CR+LF> 设置物理串口波特率为115200 AT+UART=?<CR+LF> 查询当前BLE芯片物理串口的波特率。 默认值为115200 6. "AT+BIND" 设置BLE芯片绑定蓝牙地址 AT+BIND=0x0017ea9397e1<CR+LF> 设置BLE芯片绑定的蓝牙地址为0x0017ea9397e1 AT+BIND=?<CR+LF> 查询当前BLE芯片绑定蓝牙地址。 默认值为0x000000000000 7. "AT+CMODE" 设置BLE芯片连接模式 AT+CMODE=UNIQUE<CR+LF> 设置连接模式为指定蓝牙地址连接模式(指定蓝牙地址由BIND命令设置,见"AT+BIND" ) AT+CMODE=ANYONE<CR+LF> 设置连接模式为任意蓝牙地址连接模式(不受BIND命令设置地址的约束,见"AT+BIND") AT+CMODE=?<CR+LF> 查询当前BLE芯片连接模式。 默认值为ANYONE 8. "AT+MAC"查询BLE芯片MAC地址 AT+MAC=?<CR+LF> 查询当前BLE芯片MAC地址 9. "AT+NAME" 设置和查询当前设备名称 AT+NAME=DFBLEduinoV1.0<CR+LF> 设置模块名称为“DFBLEduinoV1.0”。ascii码形式,小于等于13字节 AT+NAME=?<CR+LF> 查询当前模块名称, 默认值为DFBLEduinoV1.0 10. "AT+RESTART" 重启BLE芯片 AT+RESTART<CR+LF> 重启BLE芯片 11. "AT+SETTING" 改变或恢复默认设置 (BLE firmware 1.6 新功能) AT+SETTING=DEFAULT<CR+LF> 恢复初始设定,和“PERIPHERAL”初始设定相同 AT+SETTING=DEFPERIPHERAL<CR+LF> 恢复成从机模式的初始设定 AT+SETTING=DEFCENTRAL<CR+LF> 恢复成主机模式的初始设定 AT+SETTING=?<CR+LF> 询问初始设定 (默认: DEFPERIPHERAL). 如果使用了AT指令更改了一些设置,BLUNO将会回复 "UNKNOWN" 12. "AT+BLUNODEBUG" 控制蓝牙已连接状态下,BLE芯片串口接收到的数据是否通过usb串口打印出来。这样就可以通过Arduino的串口监视器得到BLUNO发送的串口数据(BLE firmware 1.6 新功能) AT+BLUNODEBUG=ON<CR+LF> 控制蓝牙已连接状态下,BLE芯片串口接收到的数据通过usb串口打印出来。 AT+BLUNODEBUG=OFF<CR+LF> 控制蓝牙已连接状态下,BLE芯片串口接收到的数据不通过usb串口打印出来。 AT+BLUNODEBUG=?<CR+LF> 查询蓝牙已连接状态下,BLE芯片串口接收到的数据是否通过usb串口打印出来 (默认: ON) 13. "AT+USBDEBUG" 控制蓝牙数据是否通过USB口打印出来 (BLE firmware 1.6 新功能) AT+USBDEBUG=ON<CR+LF> 开启蓝牙数据通过USB串口打印开关。 AT+USBDEBUG=OFF<CR+LF> 关闭蓝牙数据通过USB串口打印开关。 AT+USBDEBUG=?<CR+LF> R查询当前蓝牙数据开关的状态 (默认: OFF) 14. "AT+TXPOWER" 设置蓝牙发射功率. (BLE firmware 1.6 新功能) AT+TXPOWER=0<CR+LF> 设置发设功率。 (4, 0, -6 或 -23) AT+TXPOWER=?<CR+LF> 查询当前发射功率 (默认: 0) 15. "AT+IBEACONS" 是否开启iBeacons功能(BLE firmware 1.6 新功能) AT+IBEACONS=ON<CR+LF> 开启ibeacons广播 AT+IBEACONS=OFF<CR+LF> 关闭ibeacons广播。 AT+IBEACONS=?<CR+LF> 查询当前ibeacons广播的状态(默认:ON) 16. "AT+VERSION" 查看固件版本(BLE firmware 1.6 新功能) AT+VERSION=?<CR+LF> 查看当前固件版本 17. "AT+RSSI" 返回当前的RSSI值 (BLE firmware 1.6 新功能) AT+RSSI=?<CR+LF> 返回当前的RSSI值(未连接状态下返回-000) 18. "AT+MAJOR" 设置iBeacons的MAJOR号 (BLE firmware 1.6 新功能) AT+MAJOR=0<CR+LF> 设置iBeacons的MAJOR号为 "0". (0-65535) AT+MAJOR=?<CR+LF> 查询当前iBeacons的MAJOR号(默认: "0") 19. "AT+MINOR" 设置iBeacons的MINOR号(BLE firmware 1.6 新功能) AT+MINOR=0<CR+LF> 设置iBeacons的MINOR号为"0". (0-65535) AT+MINOR=?<CR+LF> 查询当前iBeacons的MINOR号.(default "0") 20. "AT+PASSWORD" 设置和查询匹配后AT指令密码(BLE firmware 1.7 新功能) AT+PASSWORD=?<CR+LF> 查询蓝牙匹配后AT指令密码(一般通过USB连接查询) AT+PASSWORD=abc<CR+LF> 设置蓝牙匹配后AT指令密码(一般通过USB连接设置) 21. "AT+EXIT" 退出AT指令模式(BLE firmware 1.8 新功能) AT+EXIT<CR+LF> 退出AT指令模式 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed