5192| 1
|
[第二届] UEAL第2届电子设计大赛第四轮——儿童走失报警器 |
UEAL第2届电子设计大赛第四轮——儿童走失报警器 东华理工大学 东华理工大学——儿童走失报警器作品介绍链接:演示篇: 题目要求: 利用DFRobot M3开发板设计一款儿童走失报警,使用时发射端放在儿童口袋内,接收端由家长携带。 基本要求: 1. 当发射端与接收端相距大于3~5米时,接收端应发出提示声,提示音持续时间为5秒。 完成 2. 当发射端与接收端相距大于15~20米时,接收端应发出连续报警声。 完成 3、显示部分要求显示云汉社区logo与参赛高校logo 完成 4、上传视频 完成 5、根据自己设计的功能有详细的讲解步骤 完成 发挥部分:1.显示时间与日期功能;温湿度 2.报警距离可调; 3.超出蓝牙(其他无线装置)极限30m距离后,可自动通过GPRS切换GPS定位,并实时更新儿童所在位置; 4. 低电量短信通知功能 ;当电源不足时,此时会主动发出一通短信通知第一组紧急联络人 5.其它创新 评分标准:
题目完成情况: 基本部分:1、2、3、4、5全部完成。评委可在接下来的帖子与视频中证实。 发挥部分:1、2、3,5完成,4未完成 特色与创新:将蓝牙报警器作为一个简单的儿童蓝牙手表,具有温湿度,距离范围,时钟,震动报警,声光报警,防丢牌等功能。特别是时钟,我们将表盘与DFROBOT的LOGO结合,既美观又实用。对于测试,我们使用MATLAB对RSSI数据表进行大量的计算,用于测试结果的正确与否。 UEAL第四轮主观题设计报告蓝牙报警器东华理工大学电子科技协会一、方案设计与论证: 基于蓝牙的距离测试方法: 蓝牙测距是通过查询蓝牙的RSSI值进行运算,得到一个距离值。虽然随着环境的改变,该值可能并不准确,但是大体上符合测距的要求。 我们使用的是DFROBOT的Bluno m3蓝牙Arduino开发板,使用简单的AT指令便可以获取RSSI的值。然后进行一定的运算,得到距离值给其它模块进行调用。 DFROBOT Bluno m3 介绍: Bluno M3 是一款基于ARM处理器并且兼容Arduino接口的开源硬件平台。一款集成了蓝牙4.0通信模块和32位主控芯片STM32F103RET6的微控制 器。作为Bluno 家族新的一员, Bluno M3继承了Bluno系列的几个特点:支持蓝牙通信、支持无线编程和支持手机控制等。在此基础上Bluno M3 也新增了新的功能——更强大的处理性能,更大的存储空间和更多的接口资源。这完全得益于它现在采用的32位主控芯片。 CC2540配置方式: 测距需要两个蓝牙器件进行链接后才可以进行,我们使用Bluno作为从机,Bluno m3作为主机。也就是说把Bluno m3的CC2540配置为ROLE_CENTRAL模式,Bluno的CC2540配置为ROLE_PERIPHERAL模式 AT指令: AT指令集是从终端设备(Terminal Equipment,TE)或数据终端设备(Data Terminal Equipment,DTE)向终端适配器(Terminal Adapter,TA)或数据电路终端设备(Data Circuit Terminal Equipment,DCE)发送的。 AT指令是以AT作首, 字符结束的字符串,AT指令的响应数据包在 中。每个指令执行成功与否都有相应的返回。其他的一些非预期的信息(如有人拨号进来、线路无信号等),模块将有对应的一些信息提示,接收端可做相应的处理。 PC端发送AT指令读取M3的RSSI值的方法: 1.打开Arduino IDE 2.在菜单-》工具-》串口中选择正确的设备 3.开启串口监视器 (点击窗口的右上角的按键) 4.在两个下拉菜单中选择"No line ending"(①)和115200 baud(②) 5.在输入框中(③)输入"+++",并点击发送键(④) 6.如果收到“Enter AT Mode”(⑤),就证明已经进入AT指令模式. . M3发送AT指令读取RSSI值的方法: 我们参考了网友的程序,并进行了修改。其中需要注意的是,一旦进入AT模式,与CC2540相连的串口就不能使用。因此我们增设了一组虚拟串口,使用外接的PL2302 USB串口用于获取返回的RSSI值。具体程序见附录。 M3与Bluno指令交互的拓扑结构: 当蓝牙链接时,链接指示灯LINK灯亮,屏蔽主机串口回路,不能收发。 链接到从机串口回路,对从机可进行串口收发。 回路为:PC-主机CC2540--从机CC2540-从机-从机CC2540--主机CC2540-PC 作品全局展示:M3与Bluno指令交互的拓扑结构: 当蓝牙链接时,链接指示灯LINK灯亮,屏蔽主机串口回路,不能收发。 链接到从机串口回路,对从机可进行串口收发。 回路为:PC-主机CC2540--从机CC2540-从机-从机CC2540--主机CC2540-PC 作品全局展示: 彩屏GUI展示: 主要界面 防丢牌 GPS模块展示: GPS定位功能图片展示: 机智云扩展板介绍: 板载了正反转可调速电机马达、温湿度传感器、红外感应器、RGB全彩LED灯,另外增加了OLED扩展接口 方案论证: 以上方法经过实际测试,均可以使用。 二、参数计算:1.RSSI--距离公式 计算公式: d = 10^((abs(RSSI) - A) / (10 * n)) 其中: d - 计算所得距离 RSSI - 接收信号强度(负值) A - 发射端和接收端相隔1米时的信号强度 n - 环境衰减因子 在实际使用中,A我们取值59,n我们取值2.0较符合! 三、电路图[size=21.3333px] 四、软件流程图: 1.功能模块: (一)AT指令发送模块: Serial.print("+"); Serial.print("+"); Serial.print("+"); // Enter the AT mode delay(1000); // Slow down and wait for connectin establishment 该模块放在setup()中用于进入AT模式,注意,发送完指令后需要进行等待。 (二)RSSI指令读取模块: uchar ScanDis(uint *Dis); 以下是AT指令获取部分程序代码 char Data[100]; char RAW[3]; int INDEX; char Value = '-'; Serial.println("AT+RSSI=?"); // Ask about the RSSI delay(100); Serial.println("AT+RSSI=?"); // Ask about the RSSI delay(100); for(int x=0 ; Serial.available() > 0 ; x++ ){ // get the Enter AT mode words Data[x] = Serial.read(); // Read and store Data Byte by Byte if (Data[x] == Value ) // Look for the elemnt of the array that have "-" that's the start of the RSSI value { INDEX=x+1; } } RAW[0] = Data[INDEX]; // Copy the RSSI value to RAW Char array RAW[1] = Data[INDEX+1]; RAW[2] = Data[INDEX+2]; Dis[0] = atoi(RAW); //Convert the Array to an integer Dis[0] RSSI值,2字节数 Dis[1] 距离值,2字节数 Dis[2] 距离状态变量,2字节数 0: 1米范围之内 1: 1-3米范围 2: 3-5米范围 3: 5-20米范围 4: 20-30米范围之外 5: 30米范围之外 (三)温湿度检测模块: uchar ReadHt(uchar *HTData); 函数参数列表为: HTData[0] 湿度值,单字节数 HTData[1] 温度值, 单字节数 (四)报警处理模块: void Motor_status(MOTOR_T motor_speed); void AlarmHandle(uint Time); Motor_status用于配置电机的转速,>5正转,<5反转 AlarmHandle 用于定时器延时,避免使用Delay延时函数,造成系统卡顿。 Time的单位为毫秒 (五)显示屏指令发送读取模块: uchar Display(uint *Par); void my_display(uint *Data); Par[0] 湿度值 2字节数 Par[1] 温度值 2字节数 Par[2] RSSI值 2字节数 Par[3] 距离值 2字节数 Par[4] 屏幕返回值 2字节数 (六)数据处理模块: 串口模块: SoftwareSerial mySerial(8, 9); // RX, TX SoftwareSerial mySerial2(10, 11); // RX, TX mySerial为Bluno与串口屏通讯端口 mySerial2 为测试通讯端口 [size=12.0000pt](七)初始化模块: 2.状态机: enum MAINSTATE {SENDDIS = 0, READHT, SCANDIST, HANDLE}; switch (State) { case SENDDIS: { NState = READHT; Display(MainData.DisData); MainData.HandleD[0] = MainData.DisData[4]; } break; case READHT: { NState = SCANDIST; ReadHt(MainData.HTData); MainData.DisData[1] = MainData.HTData[0] * 100; MainData.DisData[0] = MainData.HTData[1] * 100; MainData.HandleD[1] = MainData.HTData[0]; MainData.HandleD[2] = MainData.HTData[1]; Temp = MainData.HTData[1]; Humidity = MainData.HTData[0]; } break; case SCANDIST: { NState = HANDLE; ScanDis(MainData.DistanceData); MainData.DisData[2] = MainData.DistanceData[0]; MainData.DisData[3] = MainData.DistanceData[1]; MainData.HandleD[3] = MainData.DistanceData[0]; MainData.HandleD[4] = MainData.DistanceData[1]; MainData.HandleD[5] = MainData.DistanceData[2]; } break; case HANDLE: { NState = SENDDIS; HandleData(MainData.HandleD); } break; } State = NState; 五、测试方法与数据:1.PC端测试RSSI 2.板载指示灯显示指令发送状态 3.虚拟串口采集状态 4.数据测试:MATLAB 计算RSSI与距离的关系 我们使用了四组不同的参数计算RSSI与距离的关系,实际测得第一组A=59,n=2.0比较合适。 六、结果分析等 1.功能解读: 我们的作品具有的功能如下: 使用彩屏显示各种信息,例如时间,温度湿度,RSSI值,距离值,震动报警,声光报警,给主机端报警请求,防丢牌功能显示儿童父母的信息以及住址信息。 温湿度采集: 我们直接采用了本次比赛的赞助商机智云的扩展板接入DFROBOT Bluno上,扩展板上有我们需要的温湿度采集器DHT11,震动马达,RGB led。极大地方便了我们功能的实现。 附录 一、MATLAB测试程序: %subplot(2,2,1); RSSI = 0:1:100; A = 59; n = 2.0; d = 10.^((abs(RSSI)-A)/(10*n)); plot(RSSI,d,'b'); ylim([0 30]); grid on hold on %grid minor %subplot(2,2,2); RSSI = 0:1:100; A = 60; n = 2.0; d = 10.^((abs(RSSI)-A)/(10*n)); plot(RSSI,d,'m'); ylim([0 30]); grid on hold on %grid minor %subplot(2,2,3); RSSI = 0:1:100; A = 59; n = 1.0; d = 10.^((abs(RSSI)-A)/(10*n)); plot(RSSI,d,'c'); ylim([0 30]); grid on hold on %grid minor %subplot(2,2,4); RSSI = 0:1:100; A = 60; n = 1.0; d = 10.^((abs(RSSI)-A)/(10*n)); plot(RSSI,d,'r'); ylim([0 30]); grid on hold off %grid minor xlabel('-RSSI/dbm'),ylabel('Distance/m'); title('d = 10 pow ((abs(RSSI) - A) / (10 * n))'); legend('A=59,n=2.0','A=60,n=2.0','A=59,n=1.0','A=60,n=1.0'); 我们使用了四组不同的参数计算RSSI与距离的关系,实际测得第一组A=59,n=2.0比较合适。 六、结果分析等 1.功能解读: 我们的作品具有的功能如下: 使用彩屏显示各种信息,例如时间,温度湿度,RSSI值,距离值,震动报警,声光报警,给主机端报警请求,防丢牌功能显示儿童父母的信息以及住址信息。 温湿度采集: 我们直接采用了本次比赛的赞助商机智云的扩展板接入DFROBOT Bluno上,扩展板上有我们需要的温湿度采集器DHT11,震动马达,RGB led。极大地方便了我们功能的实现。 附录 一、MATLAB测试程序: %subplot(2,2,1); RSSI = 0:1:100; A = 59; n = 2.0; d = 10.^((abs(RSSI)-A)/(10*n)); plot(RSSI,d,'b'); ylim([0 30]); grid on hold on %grid minor %subplot(2,2,2); RSSI = 0:1:100; A = 60; n = 2.0; d = 10.^((abs(RSSI)-A)/(10*n)); plot(RSSI,d,'m'); ylim([0 30]); grid on hold on %grid minor %subplot(2,2,3); RSSI = 0:1:100; A = 59; n = 1.0; d = 10.^((abs(RSSI)-A)/(10*n)); plot(RSSI,d,'c'); ylim([0 30]); grid on hold on %grid minor %subplot(2,2,4); RSSI = 0:1:100; A = 60; n = 1.0; d = 10.^((abs(RSSI)-A)/(10*n)); plot(RSSI,d,'r'); ylim([0 30]); grid on hold off %grid minor xlabel('-RSSI/dbm'),ylabel('Distance/m'); title('d = 10 pow ((abs(RSSI) - A) / (10 * n))'); legend('A=59,n=2.0','A=60,n=2.0','A=59,n=1.0','A=60,n=1.0');我们使用了四组不同的参数计算RSSI与距离的关系,实际测得第一组A=59,n=2.0比较合适。 学习的过程是痛并快乐的,感谢ICKEY社区及DFRobot提供的DFRobot bluno,我们会更加优秀的成绩展示自己最好的作品。 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed