极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 40060|回复: 14

关于Arduino读取蓝牙RSSI定位

[复制链接]
发表于 2013-10-21 21:05:52 | 显示全部楼层 |阅读模式
如题,本人有一块蓝牙4.0 HM-10的模块
如何通过Arduino获取蓝牙的RSSI并计算距离呢?
网上搜索过资料,计算公式倒是有,但完全弄不懂啊
有那位大侠弄过这部分的,求指教,感激不尽~{:soso__1039173773029404865_2:}
回复

使用道具 举报

 楼主| 发表于 2013-10-22 09:44:54 | 显示全部楼层
都不知道吗?怎么就没人回复了呢~~{:soso__3669389859068460655_3:}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-23 13:26:16 | 显示全部楼层
败了{:soso__3669389859068460655_3:}
回复 支持 反对

使用道具 举报

发表于 2013-10-24 09:01:26 | 显示全部楼层
本帖最后由 迷你强 于 2013-10-24 09:03 编辑

玩的太高端了。。。。去国外查查资料什么的。。话说我感觉定位要有距离和方向。。。两个量
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-24 13:06:18 | 显示全部楼层
迷你强 发表于 2013-10-24 09:01
玩的太高端了。。。。去国外查查资料什么的。。话说我感觉定位要有距离和方向。。。两个量

{:3_60:}是的,也看过些国外的资料,基本上都是根据RSSI计算出来的,就是因为公式过于复杂,所以都不知道哪个是哪个。。起初可以不用判断方位,哪怕能算出距离也行。。。
回复 支持 反对

使用道具 举报

发表于 2013-10-25 14:49:39 | 显示全部楼层
本帖最后由 questfish 于 2013-10-25 14:51 编辑

这个很高端啊 我在网上看那些个说明看的我一头雾水  楼主能翻译成白话文不?
回复 支持 反对

使用道具 举报

发表于 2013-10-29 22:12:35 | 显示全部楼层
我知道怎麼做
如果有需要
把代碼貼上來我幫你檢查吧
回复 支持 反对

使用道具 举报

发表于 2014-3-25 23:52:03 | 显示全部楼层
六個月了.....

LZ放棄了???
回复 支持 反对

使用道具 举报

发表于 2014-3-29 14:05:46 | 显示全部楼层
太高端了,想都不敢想
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-23 17:42:57 | 显示全部楼层
{:soso_e130:}没放弃,一直在研究,只不过现在在忙工作上的项目,没太多精力去折腾
如果有最新成果的话,一定拿出来分享
回复 支持 反对

使用道具 举报

发表于 2014-4-25 16:50:53 | 显示全部楼层
最近在研究蓝牙,感觉楼主的问题应该分两步,即如何用蓝牙获取RSSI;如何根据RSSI数据计算距离
针对第一个问题,HC-05指令集里有一条命令INQM,可以设置带RSSI信号强度指示。但是这条命令我没有尝试过,感觉应该可行。
针对第二个问题,需要明确用于室内还是室外环境。如果是室外空旷环境,可以用Friis自由空间传输模型;如果是室内,可以考虑使用正态对数分布模型。要注意的是,不论采用哪种模型,信号在传输过程中都会受到包括多路径,反射,散射等的影响,得到的结果有可能与实际相差甚远,需要加以修正。
回复 支持 反对

使用道具 举报

发表于 2014-11-24 22:04:51 | 显示全部楼层
ibeacon的一段定位的代码:
protected static double calculateAccuracy(int txPower, double rssi) {
  if (rssi == 0) {
    return -1.0; // if we cannot determine accuracy, return -1.
  }

  double ratio = rssi*1.0/txPower;
  if (ratio < 1.0) {
    return Math.pow(ratio,10);
  }
  else {
    double accuracy =  (0.89976)*Math.pow(ratio,7.7095) + 0.111;   
    return accuracy;
  }
}   
回复 支持 反对

使用道具 举报

发表于 2015-4-24 22:33:09 | 显示全部楼层
kenlittle 发表于 2014-4-23 17:42
没放弃,一直在研究,只不过现在在忙工作上的项目,没太多精力去折腾
如果有最新成果的话,一 ...

你好不知道你有什么进展吗?最近也在弄这个
回复 支持 反对

使用道具 举报

发表于 2015-4-24 22:53:38 | 显示全部楼层
楼主怎么样
回复 支持 反对

使用道具 举报

发表于 2015-4-25 22:01:41 | 显示全部楼层
距离计算公式:以目前最流行的蓝牙信标标准(苹果主推的iBeacon)官方公式为例  
                  d = 10^((abs(RSSI) - A) / (10 * n))
              其中
                    d - 计算所得距离;RSSI - 接收信号强度(负值)
                    A - 发射端和接收端相隔1米时的信号强度
                    n - 环境衰减因子   
计算公式的伪代码如下:
                 float getDist(){
                    int iRssi = abs(rssi);
                              float power = (iRssi-59)/(10*2.0);
                              return pow(10, power);
                         }
传入RSSI值,返回距离(单位:米)其中,A参数赋了59,n赋了2.0。
当不知道周围蓝牙设备准确位置时,只能给A和n赋经验值.

将HM-10模块和Arduino连接,Arduino端代码先通过Uart口实现对HM-10做如下预设值指令:
AT+BAUD4        -->设置蓝牙波特率115200
AT+MODE2        -->设置蓝牙为透传+遥控模式
AT+ROLE1        -->设置蓝牙为主模式
AT+SAVE         -->保存设置  

然后Arduino端代码要通过Uart对HM-10发送读取RSSI指令
AT+RSSI?
并监听Uart口返回数据,使用String函数处理并提取周边扫描到的蓝牙设备RSSI值

最后Arduino代码根据以上公式计算并显示距离到屏幕
     
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-17 13:02 , Processed in 0.042216 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表