Bluno Beetle免费试用 - 交作业 - 便携GPS

2016-05-043.1万
精华项目
AI 快速预览详细 收起
该项目使用Bluno Beetle主控、GPS ublox NEO-6M模块和TF卡读写模块,实现了无手机信号时的GPS轨迹记录。通过蓝牙将数据传输到手机并上传至云服务器。适用于户外活动、科研等场景。硬件清单包括Bluno Beetle、NEO-6M模块、TF卡读写模块等。最终效果是能够实时记录和上传轨迹数据。难度等级适中,适合有一定基础的用户。

在此之前, 制作过GPRS+GPS实时获取卫星坐标上传服务器, 显示轨迹的例子, 但很不幸地, 因未考虑车辆输出电流过大的问题, 测试几天后GPRS因电流过大烧(炸)了...


停滞了一段时间后, 正巧碰上DFRobot开展Bluno beetle免费试用被我申请试用成功!(在此感谢@Ashley), 于是把剩下的GPS ublox模块利用上, 主控换成Bluno beetle, 再加上一个普通的TF读卡模块开工!(这货适合于无手机, 或无手机信号时, 又需要记录GPS轨迹的地方)
有了蓝牙, 一下子解决了数据联网上传的问题


使用场景介绍:

场景一: 室外,且无手机
    便携GPS插上电池(充电宝)在室外活动, 收集坐标数据,记录轨迹.​

场景二: 室外/室内, 有手机​​
    便携GPS发现有配对成功的手机在通信范围, 互相握手成功, 便携GPS把存在TF卡上的数据传输给手机, 手机接收完毕后自动上传到云服务器

最后通过WEB可以查看地图上的活动轨迹​.


所需材料:
Bluno Beetle主控
GPS ublox模块 NEO-6M
Risym Micro SD卡模块 TF卡读写卡器 SPI接口​
TF卡一枚
220欧姆电阻
蓝色LED
固定底座(3D打印)​​
Android手机一部​(注:需支持蓝牙4.0以上)

3D打印 - 设计

Bluno Beetle免费试用 - 交作业 - 便携GPS图1
最初设计多层


Bluno Beetle免费试用 - 交作业 - 便携GPS图2
第2版, 加高了底座


Bluno Beetle免费试用 - 交作业 - 便携GPS图5
正面, GPS/TF模块螺丝孔


Bluno Beetle免费试用 - 交作业 - 便携GPS图6
底面



​​

接线设计:
Bluno Beetle​      GPS
​​4                         RX
5                         TX
5V                       VCC
GND                    GND


Bluno Beetle​​​       TF模块(SPI)
5V                       VCC
​GND                    GND​
SCK                     SCK
MOSI                  MOSI
MISO                  MISO
3                         CS​

Bluno Beetle       LED
2​                         电阻-LED正极(长脚)
GND                   LED负极​


附上Bluno Beetle的SPI接线图

Bluno Beetle免费试用 - 交作业 - 便携GPS图9
此处焊点较小, 需小心处理


Bluno Beetle免费试用 - 交作业 - 便携GPS图10
上一张焊接细节


程序:

这里主要讲几个细节, 有兴趣的小伙伴想要完整程序请在文后下载​

1.​在Setup里, 对TF卡模块需要检测有效性:


  1.   if (!SD.begin(3)) {
  2.     while(!SD.begin(3)){ledFlicker(2);delay(1000);}
  3.   }  
复制代码



2.由于GPS接的是软串口, 考虑到串口监听的问题, 需要在调用GPS时先Listen一下:


  1. gps.listen();delay(2);
复制代码



​3.GPS数据抓去以及模块的一些简单知识
NMEA-0183 协议简介
NMEA 0183是美国国家海洋电子协会(National Marine Electronics Association)为海用电子设备 制定的标准格式。目前业已成了GPS导航设备统一的RTCM(Radio Technical Commission for Maritime services)标准协议。
NMEA-0183协议采用ASCII码来传递GPS定位信息,我们称之为帧。
帧格式形如:$aaccc,ddd,ddd,„,ddd*hh(CR)(LF)
GPS模块会返回多种不同的帧数据,我们在本例中重点关注$GPRMC:
$GPRMC(推荐定位信息,Recommended Minimum Specific GPS/Transit Data)
$GPRMC语句的基本格式如下:
$GPRMC,(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)*hh(CR)(LF)
(1) UTC时间,hhmmss(时分秒)
(2) 定位状态,A=有效定位,V=无效定位
(3) 纬度ddmm.mmmmm(度分)
(4) 纬度半球N(北半球)或S(南半球)
(5) 经度dddmm.mmmmm(度分)
(6) 经度半球E(东经)或W(西经)
(7) 地面速率(000.0~999.9节)
(8) 地面航向(000.0~359.9度,以真北方为参考基准)
(9) UTC日期,ddmmyy(日月年)
(10)磁偏角(000.0~180.0度,前导位数不足则补0)
(11) 磁偏角方向,E(东)或W(西)
(12) 模式指示(A=自主定位,D=差分,E=估算,N=数据无效)
举例如下: ​
$GPRMC,023543.00,A,2308.28715,N,11322.09875,E,0.195,,240213,,,A*78​

​从GPS模块中取数据代码如下(本例中只取$GPRMC数据):
(...................代码上传多次,排版全乱,只好删除, 要看代码的请在文后下载)



​4.蓝牙模块部分
此部分涉及到与手机App交互, 较为复杂​

4.1 手机App部分
     - App驻留后台自动运行, 并自动搜索便携GPS是否在附近, 如果在, 则发送握手指令, 如果握手成功, 则开始接收数据​存放在手机中
     - ​每天在固定时间,把存在手机中的数据上传到云服务器

4.2 便携GPS部分
     蓝牙通信由于直接连接在Atmega328的串口上的, 所以在透传模式下, 直接调用Serial.print和Serial.write就能把数据通过蓝牙传输出去, 相当方便.
     - ​监听蓝牙信号, 如果发现有握手请求, 则应答并完成握手过程


  1. <font color="rgb(51, 51, 51)">
  2. /**
  3. * try connect to app, shake hands
  4. * flow:  AA -> BB -> 1
  5. */
  6. void connectToApp(){
  7.     int wait_time = 0;
  8.     boolean isTry = 0;
  9.     while(wait_time<=2){
  10.       getBluetoothData();                   //listen app shake hands 'AA'
  11.       if(_comdata=="A"){isTry=1;break;}     //is not shake hands data
  12.       wait_time++;
  13.       delay(1000);
  14.     }
  15.     //Serial.print("isTry:");Serial.println(isTry);
  16.     if(isTry!=1)return;
  17.     wait_time=0;
  18.     delay(100);Serial.println("!B#");         //握手请求
  19.     while(wait_time<=5){
  20.       getBluetoothData();
  21.       if(_comdata.length()>2)_comdata=_comdata.substring(0,2);
  22.       if(_comdata=="1"){            //成功连接通信
  23.         _is_connect = 1;
  24.         Serial.print("Bluetooth build communication successfully.");
  25.         break;
  26.       }
  27.       wait_time++;delay(1000);
  28.     }
  29.     if(wait_time>5)Serial.println("time out");
  30. }</font>
复制代码


     - ​蓝牙连接成功时, 开始上传TF卡中的数据, 上传成功的话自动清除本地数据.​
         (...................代码上传多次,排版全乱,只好删除, 要看代码的请在文后下载)


5.完整流程图​

Bluno Beetle免费试用 - 交作业 - 便携GPS图3


实物效果图

Bluno Beetle免费试用 - 交作业 - 便携GPS图7
主控没螺丝孔, 暂时固定不了


Bluno Beetle免费试用 - 交作业 - 便携GPS图8
换个角度


​最后展示一下周末收集的数据效果图

Bluno Beetle免费试用 - 交作业 - 便携GPS图4

附上程序以及一些实用资料

Bluno Beetle免费试用 - 交作业 - 便携GPS图10

Bluno Beetle免费试用 - 交作业 - 便携GPS图10

Bluno Beetle免费试用 - 交作业 - 便携GPS图10




创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(20)
派大星ym
派大星ym
/////
派大星ym
派大星ym
学习了学习了
scudsure
scudsure
这个很实用呀!楼主666
昊子
昊子
太厉害了,学习中!
绊
楼主我想问下你最后的轨迹是怎么弄出来的啊?如何把GPS获取的坐标在百度地图上显示出来并且标记成轨迹啊?
visionsl
visionsl
作者
回复
你查一下百度地图的API, 官方有教程的, 不难
李旭东
李旭东
我想请教一下,我看楼主在上面说用的百度地图的API,GPS定位坐标和百度地图坐标之间不是要转换的吗,楼主是怎样转换的,那个转换公式能给我吗,或者当时的解决办法。谢谢了
visionsl
visionsl
作者
回复李旭东
是用了一个translateCallback的方法, 给你一个我用的样例代码
[mw_shl_code=applescript,true]
translateCallback = function (data) {
if (data.status === 0) {
bm.clearOverlays();
bm.setCenter(data.points[0], 15);
marker = new BMap.Marker(data.points[0]);
bm.addOverlay(marker);
marker.setAnimation(BMAP_ANIMATION_BOUNCE); //跳动的动画
var labelgg = new BMap.Label("i30现在的位置"+_center_time, {offset: new BMap.Size(20, -10)});
marker.setLabel(labelgg);
}
}
var _center_lat = 0;var _center_lng=0; var _center_time=0;
function loadGPS() {
$.getJSON("/nj/iot/gps/tracert_realgps", function (data) {
_center_lat = data.lat;
_center_lng = data.lng;
_center_time = data.record_time;
//转换坐标为百度系
ggPoint = new BMap.Point(_center_lng, _center_lat);
var arr = new Array();
var convertor = new BMap.Convertor();
arr.push(ggPoint);
convertor.translate(arr, 1, 5, translateCallback);
setTimeout("loadGPS()", 10000);
});
}
loadGPS();[/mw_shl_code]
xiaobudian
xiaobudian
值得研究
小芒果超人
小芒果超人
膜拜 还想请问一下楼主,传递数据的速度快吗? 你一共传了多少数据呢?
lxr825078803
lxr825078803
我想问一下,在地图上描点是怎么弄的,用了什么软件吗
kongmeng
kongmeng
请问 是那个版本的IDE?
alieqiulijun
alieqiulijun
看起来不是很难,感谢分享。
alieqiulijun
alieqiulijun
下载看看
dbc0301
dbc0301
厉害,厉害。。。
萝卜
萝卜
学习了~
gray6666
gray6666
我的手机4.0蓝牙需要密码连接,请问你遇到了吗?
visionsl
visionsl
作者
回复gray6666
默认密码是: 123456
gray6666
gray6666
大牛。。。
dsweiliang
dsweiliang
原来楼主住在天河区的啊
visionsl
visionsl
作者
回复dsweiliang
暴露了...:$
qq815076543322
qq815076543322
超级牛掰
virtualwiz
virtualwiz
外壳大赞~
visionsl
visionsl
作者
这个排版我也是醉了....修正中
- 没有更多了 -