Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
定位信息
24嵌入式设计大赛 基于蓝牙的定位系统辅助骑行装置
发布于 2024-09-18 19:32:36 浏览:166
订阅该版
[tocm] ### 1.硬件架构 蓝牙模块:用于与蓝牙信标通信,实时获取 RSSI 值。 蓝牙信标:放置在已知位置,用于发出蓝牙信号。 ### 3.蓝牙通信: 通过蓝牙模块检测并连接三个蓝牙信标。 实时监测信标的 RSSI 值,为后续定位提供数据支持。 RSSI 值处理与距离估算: 收集和滤波 RSSI 值,减小噪声,提高测量精度。 利用 RSSI 值与距离的关系公式,准确估算蓝牙模块与信标之间的相对距离。 ### 4.三角定位算法: 采用加权最小二乘法、卡尔曼滤波等优化算法,计算蓝牙模块的相对坐标。 保证定位结果的准确性和稳定性,提供可靠的定位数据。 ### 5.数据传输与处理: 实现高速数据传输协议,将相对坐标数据发送至开发板。 开发板接收并解析数据,进行实时显示和进一步处理。 ### 6.用户界面: 直接显示坐标位置,并根据算法判断是否在区域内,向主控器发送通知并实时显示。 ## 第一部分 作品概述 ### 1.1 功能与特性 本项目使用开发板、STM32 最小系统板以及蓝牙模块,构建了一个蓝牙三 角定位系统。该系统通过测量三个蓝牙信标的 RSSI 值,利用算法将这些值转换为相对坐标, 最终在 STM32WB55RG 开发板上进行显示和处理。 收集从三个蓝牙信标获取的 RSSI 值。 对 RSSI 值进行滤波和校正,以提高测量精度。 将 RSSI 值转换为相对距离,作为后续三角定位的输入数据。 采用三角测量法,利用获取的相对距离数据,计算出蓝牙模块与各个蓝牙信标之间的相对坐标。 使用算法处理定位数据,确保定位结果的准确性和稳定性。 数据传输与处理: 将计算出的相对坐标数据通过通信接口发送至开发板。 在 开发板上进行数据接收、解析和显示。 提供实时坐标显示功能,以及其他相关的数据处理和应用功能。 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240918/2daed92a8dfef754d39e78937670b538.png) ## 1.2 应用领域 在商场和购物中心,为顾客提供实时导航服务,帮助其快速找到所需商铺或服务设施在博物馆和展览馆,为参观者提供位置导航和展品介绍,提升参观体验。在复杂多变的室内环境中,它如同指南针,指引人们迅速准确地找到目的地,无论是商店、办公室还是紧急出口。这不仅提高了个人和团队的效率,还极大地提升了用户体验,减少了因迷路带来的不便和焦虑。同时,对于建筑管理者而言,室内导航数据有助于优化空间布局,提升运营效率。通过收集和分析用户的导航数据,管理者可以深入了解建筑内部的人流分布和流动规律,从而优化空间布局、调整资源配置,进一步提升建筑的使用效率和舒适度。此外,室内导航系统还可以与建筑内的其他智能系统(如安防、消防等)进行联动,形成一体化的智能管理体系,为建筑的安全和稳定运行提供有力保障。在机场和车站,帮助旅客快速找到登机口、候车室、服务台等重要设施。 ## 1.3 主要技术特点 RSSI 测量与处理: 距离估算:RSSI(Received Signal Strength Indication,接收的信号强度指示)是无线发送层 的一个部分,用于判定链接质量以及是否增大广播发送强度。它通过接收到的信号强弱来测 定信号点与接收点之间的距离,进而根据相应数据进行定位计算。根据 RSSI 值与距离的关 4 系,准确估算蓝牙模块与信标之间的相对距离。接收机测量电路接收到信号后,会进行一系 列处理以获取信号的强度。在 RSSI 的具体实现中,通常在 104 微秒内进行基带 IQ 功率积 分,得到 RSSI 的瞬时值(即 RSSI(瞬时)=sum(I2+Q2))。然后,在约 1 秒内对 8192 个 RSSI 的瞬时值进行平均,得到 RSSI 的平均值(即 RSSI(平均)=sum(RSSI(瞬时))/8192)。同时,还 会给出 1 秒内 RSSI 瞬时值的最大值和 RSSI 瞬时值大于某一门限的比率。 ### 三角定位算法: 多点定位:利用三角测量法,通过三个已知信标的位置和蓝牙模块测得的距离,计算出蓝牙模块的相对坐标。在室内环境中,由于 GPS 信号无法穿透建筑物,因此需要其他定位技术。三角定位算法可以与蓝牙等技术结合,通过测量信号强度或传输时间等参数来确定目标在室内空间中的位置。由于三角定位算法需要至少两个观测站才能确定目标的位置,且观测站之间的相对位置对定位精度有较大影响,当测量数据存在误差或观测站位置不准确时,定位结果可能会出现偏差,在复杂环境中,如多径效应严重的室内环境或信号遮挡严重的区域,三角定位算法的精度可能会受到影响。所以我们在其中对部分参数实时测试并调整参数。 ### 算法优化: 采用多种优化算法,提高定位精度和稳定性。 实时数据传输与处理: 高速通信接口:使用高效的数据传输协议,实现实时、可靠的数据传输。 实时处理与显示:开发板实时接收并处理定位数据,提供快速的坐标更新和显示。使用 IIC 协议的 OLED 模块显示数据。IIC(Inter-Integrated Circuit)总线是一种两线式串行总线,用于连接微控制器以及其外围设备。它是由数据线 SDA 和时钟 SCL 构成的串行总线,可发送和接收数据,在 CPU 与被控 IC 之间、 IC 与 IC 之间进行双向传送。 ### 模块化设计: 硬件模块化:蓝牙模块、STM32 最小系统板和开发板等组件模块化设计,方便维护和升级。 软件模块化:软件架构采用模块化设计,便于功能扩展和代码重用。 ### 低功耗设计: 节能算法:采用低功耗算法和机制,延长设备的电池寿命。 硬件优化:选用低功耗蓝牙模块和 STM32 系列微控制器,降低整体功耗。 RF-BM-BG22A3 蓝牙主机性能指标 ### 工作电压: 2.2 V~3.8 V工作频段:2402 MHz ~2480 MHz最大发生功率+6dB睡眠模式:3.23 μA 。(5V 供电)连接模式:100 ms 连接间隔电流34.68 μAStm32wb55rg 工作电压:2.2 V~3.8 V工作频段:2402 MHz ~2480 MHz1.25DMIPS/MHz睡眠模式46μA运行模式107μARF-B-SRI 信标 供电电压1.71V~3.8V平均功耗:15.46μA广播间隔500ms ## 1.5 主要创新点 1.优化的三角定位算法: 使用多种优化算法,提升系统的定位精度和稳定性。 适应不同环境中的复杂情况,保证定位结果的可靠性。 2.实时数据传输与处理: 高速通信接口,实现数据的实时传输和处理。 快速的坐标更新机制,满足动态环境中的定位需求。 ### 3.模块化设计: 硬件和软件的模块化设计,便于系统的维护、升级和功能扩展。 硬件模块化便于不同应用场景的配置,软件模块化便于代码重用和扩展。 ### 4.低功耗设计: 采用低功耗硬件和节能算法,延长系统的电池寿命。 适合长时间运行的应用场景,降低功耗成本。 ## 2.2 硬件系统介绍 ### 2.2.1 硬件整体介绍; ![screenshot_undefined](undefined) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240918/267cb5b05733c38e114a28e544fdc398.png.webp) 首先是蓝牙信标组网,形成一个三角形范围,对周围不断辐射数据,对周围的空间进行发射数据,为了避免密集情况,我们特别选出教室作为模拟场所,便于收发。蓝牙模块连接从设备 STM32F4,开始接收周围辐射的数据,并选择是否收发给其他设备。之后主设备上电,根据蓝牙协议栈向从设备 STM32F4 发送请求,开始接收数据,由现场测出的可接收范围划出工作区域,设定指标。 0.96 寸 OLED OLED 采用有机材料涂层和玻璃基板,当有电流通过时有机材料就会发光,所以 OLED 具有自发光特性,不需要背光源。显示区域是 128X64 的点阵(分辨率 128*64),每个点都可以自己独立发光,所以不需要背光,可以显示汉字、ASIIC 码、图案等,支持多种接口方式,OLED 裸屏接口包括:6800/8080 两种并行接口方式、3 线或 4 线的方式,我们用 IIC 接口方式(只需要 2 根线就可以控制 OLED ) ![screenshot_undefined](undefined) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240918/8ca88bc0b98e8cdf52d3e6561f17608d.png.webp) STM32F4 开发板便宜,且在 F 系列中比赛能用。这是 USB 串口同 APM32F407ZGT6 的串口 1 进行连接的接口,标号 RX 和 TX 是 USB 转串口的 2 个数据口(对 CH340 来说),而 PA9(TXD)和 PA10(RXD)则是 APM32 的串口 1 的两个数据口(复用功能下)。他们通过跳线帽对接,就可以连接在一起了,从而实现 APM32 的程序下载以及串口通信。 ![screenshot_undefined](undefined) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240918/9d73c2c0689544d65b84401a10f413a3.png.webp) RF-BM-BG22A3: ![screenshot_undefined](undefined) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240918/21e5d2fcae2deb1bccf92999ce8283c9.png.webp) EFR32BG22低功耗蓝牙模组是采用 SILICON LABS 芯片 EFR32BG22C224F512GM32-C 设计的远距离低功耗蓝牙模块,输出功率 Max 为 6 dBm,接收灵敏度 -106.7 dBm (125kbps GFSK),该模块采用 SILICON LABS 稳定的参考设计而改进,支持 Bluetooth 5.2。模块采用 IPEX 1 代外接天线座模式。EFR32BG22低功耗蓝牙模组具有优秀的超低功耗性能,4.1 mA 发射电流@0dbm 输出功率,3.6 mA 接收电流(1Mbit/S GFSK)。使用购买的 RF-BM-BG22A3 模块串口与 mcu 相连接,主要引脚 A7 模块 TX 引脚,A8 模块 RX 引脚,A5 模块 reset 引脚。 ### 2.3.2 软件各模块介绍 蓝牙主机模块:采用 RF-BM-BG22A3 和 stm32f407 作为蓝牙信标(蓝牙主机)。RF-BM-BG22A3 串口和 stm32f407 串口相连接,stm32f407 通过发送 AT 指令让 RF-BM-BG22A3 模块完成:获取 rssi→打开自定义 UUID→连接从设备→发送坐标数据的功能。 蓝牙从机模块:采用 开发板当蓝牙从机接收蓝牙主机发送的数据,根据得到的数据,计算出蓝牙主机存在性定位,并作出判断。 模拟场景:当前工作人员不在工厂工位,工厂老板通过蓝牙定位发现摸鱼员工,于是空过蓝牙定位提醒不在工位的员工,于是员工从距离工位(3 个蓝牙信标)很远的地方,数值(70,75,80);跑到距离工位一半工厂大的地点,发现蓝牙定位仍不在工位范围内,数值(60,65,70);于是继续跑步,到工位很近的地方,但仍然不在工位范围内,数值(64,36,65);直到他跑到工位,数值(42,43,42),于是放弃摸鱼,只好继续工作。以下为检测到的数据。 ![screenshot_undefined](undefined) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240918/9750a3f4aa9f15f10093eeedafc6b62b.png.webp) ![screenshot_undefined](undefined) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240918/4a56a8cd119251e30dc115ab5b0fe777.png.webp) ![screenshot_undefined](undefined) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240918/4b66a16ab5fe7f1b3df2887ca0b0b101.png.webp) 特性成果(逐个展示功能、性能参数等量化指标)比较是否在工厂工位上的指标 ```c item1=(recv_data[0]-'0')*10+recv_data[1]-'0'; item2=(recv_data[2]-'0')*10+recv_data[3]-'0'; item3=(recv_data[4]-'0')*10+recv_data[5]-'0'; if(item1<45) sprintf(temp,"item1:%d in ",item1); else sprintf(temp,"item1:%d out",item1); OLED_ShowString(3,2,temp,16,0); if(item1<45) sprintf(temp,"item2:%d in ",item2); else sprintf(temp,"item2:%d out",item2); OLED_ShowString(3,4,temp,16,0); if(item1<45) sprintf(temp,"item3:%d in ",item3); else sprintf(temp,"item3:%d out",item3); ``` 比较是否接收了蓝牙信号的指标 /使用方法;将接受到的 RSSI 值计算成半径后存入 ref_d[3]中,设置三角定位三个信标的 X,Y 坐标 ps[3] //不用去管 RSSI_Point()的内容,使用一个结构体指针接收 RSSI_Point()的返回值, 解引用即可; //步骤一;设置三个信标坐标,对应结构体数组值 ps[3] //步骤二;使用蓝牙传入 RSSI 值到 double RSSItrans_distance(double rssi, double rssi0, double n)函数,返回值为距离,用 ref_d[3]接收 //步骤三; //换算公式 RSSI=RSSI0??10×n×log10?(distance) //RSSI0 是距离一米时 RSSI 值 //n 为信号衰减指数,常取值为 2~4(可调) // RSSItrans_distance((double)RSSI1, 48.0, 3.0); // 计算出的三组 (d[i]方-d[j]方-x[i]方+y[j]方+x[j]方-y[i]方)/(2*(x[j]-x[i])) double dxyx[3]; // 计算出的三组 (d[i]方-d[j]方-x[i]方+y[j]方+x[j]方-y[i]方)/(2*(y[j]-y[i])) double dxyy[3]; // 计算出的三组 (x[i]-x[j])/(y[i]-y[j]) double x_divide_y[3]; // 计算出的三组 (y[i]-y[j])/(x[i]-x[j]) double y_divide_x[3]; // 计算出的三组 x y 坐标 ```c double temp_x[3], temp_y[3]; // 平均 x y 坐标 /*double x = 0, y = 0;*/ // 移除最大值和最小值 removeMaxMin(arr1, 10, newArr1); removeMaxMin(arr2, 10, newArr2); removeMaxMin(arr3, 10, newArr3); // 计算剩余三个数的平均值 rssi_average1 = calculateAverage(newArr1, 8); rssi_average2 = calculateAverage(newArr2, 8); rssi_average3 = calculateAverage(newArr3, 8); RSSItrans_distance(rssi_average1, 48.0, 3.0); RSSItrans_distance(rssi_average2, 48.0, 3.0); RSSItrans_distance(rssi_average3, 48.0, 3.0); ``` ## 第四部分 总结 ### 4.1 可扩展之处 (1) 硬件扩展增加蓝牙信标数量:可以增加更多的蓝牙信标,以提高定位精度和覆盖范围。 电源管理模块:替换其他类型的电池模块,提高系统的续航能力。 增加更高性能处理器利用 AI 分析其位置和偏好,提高奖惩机制。 (2) 软件扩展 多算法支持:可集成多种定位算法(如质心算法、粒子滤波算法等),以适应不同的应用场景。 多平台设计:开发安卓平台,使用手机参与定位环节
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
黎彦成
这家伙很懒,什么也没写!
文章
1
回答
0
被采纳
0
关注TA
发私信
相关文章
1
BSP_USING_I2C1 这个函数去哪里找啊 ,摁F3找不到...
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
线程
RT-Thread Nano
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1443
个答案
289
次被采纳
张世争
807
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部