由于一个项目中需要采集GPS坐标信息,就想利用已有材料做一个简易的坐标采集装置。手头又正好有太阳能电池板,就索性加上了太阳能充电的功能。

【选型】

由于Arduino比较简单,所以就选择Arduino平台作为主控。20mA/5v。

需要显示的信息也比较少,主要是GPS坐标和时间、航速信息。所以用LCD1602即可,为了编码方便,用的是转成串口输入的LCD模块。20~80mA/5v。

GPS模块先找的最普遍的ublox m6n,定位精度水平5m以内吧,不是太高,所以后续换成了M8N,输出解析上略有区别(下文中均是按照ublox m6n进行解析),但是都是Uart接口,160mA/5v。

TF卡模块,用来存储坐标信息,20mA/5v。

算了下,上面的所有装置电流200mA/5v,户外连续工作十小时计算,需要5V,2000mAh的电能一节3.7V,2600mAh的锂电池差不多满足需求。

这里只是做验证,就把闲置3.6V,380mAh的Li-Ge电池拿来用了,后续只需要调一下电压就可以换别的锂电池了。

太阳能模块是200mA/1.5v的模块,其实阳光好直晒的时候电压更高(测量太阳能电池板输出必须带负载测量,不能空载),带负载能力更强。采用两块串联,提高整体输出电压。

因为太阳能模块输出随光照情况变化大,所以需要能自动升降压的稳压模块,LM2596S模块可以满足,效率在90%以上,于是采用。

另外增加两个按键,主要用于LCD显示内容切换以及记录坐标按钮。

【列下材料】:

太阳能电池板 3v/200mA *2

充电电池 3.7V 380mv

LM2596s可调升降压稳压模块

Arduino

Ublox M6N模块(GPS信号接收),3.3V/5V,70mA,uart接口。

LCD1602液晶屏,5V,背光开启20mA,无背光时uA级别耗电可忽略,uart接口。

TF卡模块,SPI接口,5V/0.2~200mA,典型工作80mA。

5V升压稳压模块

其他电子耗材

由于不是专业电子出生,电路方面知识欠缺,在设计充放电功能时纠结了很久,主要是电压转换方式的选取,太阳能电池板的输出随光照条件变化,而且不能逆流,所以在太阳能电池无光不工作的时候保证电池不能反向输出至太阳能板,于是在电池的充电端加了整流二极管,副作用是压降0.7v(其实LM2596S模块也带有防逆流功能)。

【电路设计】:

略。。。比较简单就不画电路图了,说下模块连线。

1602LCD为I2C总线:

1602模块的SDA连接arduino的A4

SCL连接arduino的A5

ublox模块为uart总线,因为我们不需要控制ublox模块,只需从ublox模块读取信息,因而只用连接ublox的Tx:

ublox的Tx连接到arduino的Rx(引脚D0)

TF卡模块为SPI总线:

TF卡模块的SS连接Arduino的引脚D10

MOSI------>D11

MISO------>D12

SCLK------->D13

另外用到的两个按键:

记录键----->D8

翻页键----->D9

【程序】:

【1602LCD】:

这里引用了1602LCD的库LiquidCrystal_I2C的库,但是网上的很多库不能直接用,可能是版本问题,需要多试试,不行可以换IDE试试(本程序1.6.6通过)。从库名可以看出,1602是用I2C总线,所以接线就是A4、A5。

初始化LCD:

#include <Wire.h>
#include "LiquidCrystal_I2C.h"
LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display
const int chipSelect = 4;  //设定CS接口

注意因为是I2C接口,所以要引用Wire.h文件。输出欢迎信息:

lcd.init();   // initialize the lcd
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Welcome  to GPS");
lcd.setCursor(0,1);
lcd.print("Recorder   --atp");
delay(1000);

后续使用输出其他信息也是同样方法,lcd.setCursor(x,y)调整光标

然后lcd.print(str)从指定光标起输出内容。

【sd】:

Arduino官方IDE自带SD卡读写函数库,引用头文件后可以直接调用,初始化:

#include <SD.h>
File dataFile = SD.open("GPScord.txt", FILE_WRITE);

剩下的读写和其他IO方式类似,print函数搞定。

if (dataFile) {dataFile.print(latitude);……
}

【GPS】:

GPS模块数据解析需要对照模块手册,主要涉及字符串操作,宏定义如下:

#define GPRMC_TERM "$GPRMC,"

该宏定义要解析的指令的指令头,选择该指令是因为这条指令包含定位和时间信息。

初始化:

Serial.begin(9600);

UBLOX模块使用uart总线,默认波特率9600,因而直接串口初始化即可。

while (Serial.available())    //串口获取到数据开始解析
{char c = Serial.read();    //读取一个字节获取的数据switch(c)                    //判断该字节的值{case '$':                    //若是$,则说明是一帧数据的开始……}
}

主循环不断检测按键状态与GPS模块的输入,并将GPS模块获取到的信息输出到LCD,当检测到按键按下,切换显示状态或者将GPS信息记录到TF卡上。

GPS模块输出包括很多数据,如$GPGGA( GPS定位信息, Global Positioning System Fix Data),$GPGSA(当前卫星信息),$GPGSV(可见卫星数, GPS Satellites in View),$GPRMC(推荐定位信息, Recommended Minimum Specific GPS/Transit Data),$GPVTG(地面速度信息, Track Made Good and Ground Speed),$GPGLL(定位地理信息, Geographic Position),$GPZDA(当前时间信息)等等,均是按照NMEA-0813协议的命令帧格式。而我们取用的数据就是GPRMC的推荐定位。

$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

以获取其中纬度信息为例:

String parseGprmcLat(String s)
{int pLoc = 0; //paramater location pointerint lEndLoc = 0; //lat parameter end locationint dEndLoc = 0; //direction parameter end locationString lat;if(s.substring(0,4) == "GPRM"){for(int i = 0; i < 5; i++){if(i < 3) {pLoc = s.indexOf(',', pLoc+1);}if(i == 3){lEndLoc = s.indexOf(',', pLoc+1);lat = s.substring(pLoc+1, lEndLoc);}else{dEndLoc = s.indexOf(',', lEndLoc+1);lat = lat + "-" + s.substring(lEndLoc+1, dEndLoc);}}return lat; }
}

因为都是字符串截取操作,所以其余字段获取方法这里不再重复。

如下成品效果图:

图1 成品图

图2 经纬度显示

图3 速度、时间显示

代码见【http://download.csdn.net/download/atp1992/10209010】

原文链接【http://www.straka.cn/blog/solar_gps_recorder/】

太阳能GPS坐标记录器相关推荐

  1. HOLUX M1200-E 蓝牙GPS轨迹记录器的历史轨迹数据读取

    HOLUX M1200-E 蓝牙GPS轨迹记录器的历史轨迹数据读取 图片太烂上传了   原Word文件下载地址 点击打开链接http://download.csdn.net/download/cp45 ...

  2. gps两点距离 php,PHP应用:PHP计算百度地图两个GPS坐标之间距离的方法

    <PHP应用:PHP计算百度地图两个GPS坐标之间距离的方法>要点: 本文介绍了PHP应用:PHP计算百度地图两个GPS坐标之间距离的方法,希望对您有用.如果有疑问,可以联系我们. 本文实 ...

  3. [python] 从GPS坐标获取国家名

    目标比较明确,就是从GPS坐标得到它所在的国家. 网上可以找的比较典型的解决方案是利用一些网站(例如Google)的webservice来完成这个任务,但是这些解决方案有一个比较大的弱点,就是这些we ...

  4. PHP+百度地图API+JAVASCRIPT实现GPS坐标与百度坐标转换的实例

    PHP+百度地图API+JAVASCRIPT实现GPS坐标与百度坐标转换的实例 原文:PHP+百度地图API+JAVASCRIPT实现GPS坐标与百度坐标转换的实例 <!--小幅的坐标转换点位程 ...

  5. php 地图 距离,PHP计算百度地图两个GPS坐标之间距离的方法

    这篇文章主要介绍了PHP计算百度地图两个GPS坐标之间距离的方法,是针对百度地图接口开发的典型应用,需要的朋友可以参考下 本文实例讲述了PHP计算百度地图两个GPS坐标之间距离的方法.分享给大家供大家 ...

  6. 百度地图批量转换 GPS坐标转百度地图坐标 问题

    百度地图的官方网址 官方批量转换的demo 花了几天时间了解了一下百度地图,之前是后端的一个小伙伴在负责,他跟我吐槽这是前端的东西,让我来写(之前他们老大交给他了,我也以为是后端的任务(๑′ᴗ‵๑). ...

  7. 计算坐标点的距离计算机公式,计算两个GPS坐标点的距离

    原标题:计算两个GPS坐标点的距离 在日常开发中,我们难免要计算两个左边之间的距离,但是地图软件api的接口普遍要求我们必须要先将坐标点传递到他们服务器,然后计算出一个距离返还给我们,使用起来太不方便 ...

  8. java gps 距离计算_Java教程之地图中计算两个GPS坐标点的距离

    原标题:Java教程之地图中计算两个GPS坐标点的距离 在日常开发中,我们难免要计算两个左边之间的距离,但是地图软件api的接口普遍要求我们必须要先将坐标点传递到他们服务器,然后计算出一个距离返还给我 ...

  9. GPS坐标对应地图坐标偏移问题

    各个地图的坐标和GPS坐标计算方式是不同的,因此有时候需要进行坐标转化再进行定位,坐标转化算法如下: //定义一些常量 var x_PI = 3.14159265358979324 * 3000.0 ...

最新文章

  1. linux alias命令查看和设定别名
  2. Linux配置Java,kafka,Hadoop等环境变量
  3. 平时学习中的拙作,希望交更多的朋友,希望得到更多的指导和交流
  4. 【机器学习】一文解决样本不均衡(全)
  5. 【机器学习】机器学习处理不均衡分类
  6. 【VBS】网页脚本的放置位置与载入时机
  7. 九、XML和Json的特点
  8. 培养你的“翁格玛丽”
  9. node.js 初体验(转载)
  10. xenserver 突破VID 2T限制
  11. 关于document对象
  12. 【图像配准】基于matlab GUI光流场模型图像配准【含Matlab源码 831期】
  13. erp管理软件是什么
  14. 角度和弧度之间的转换
  15. 什么是存储过程,存储过程的作用及优点
  16. myBattery电池应用正式登陆WP8
  17. 流量卡之家:AI、无人机、物联网、自动驾驶 未来取决于5G
  18. python绘制三角函数图像
  19. 极路由1S升级系统之后再刷机学习记录
  20. sdcard/DCIM/.thumbnails文件夹里的庞然大物 是这样来的

热门文章

  1. 2022-2027年中国电焊机行业市场全景评估及发展战略规划报告
  2. C++_Leetcode刷题之路——简单(持续更新)
  3. 【超详细安全圈微信公众号】速度马!
  4. 少儿学编程系列---使用python turtle画汽车
  5. 使用AD绘制PCB板(快速入门)
  6. 生活中的那些琐事、与感性
  7. 20X14 Fcpx插件50个模拟相机取景器效果动画模板CineFlareViewfinder
  8. tv端h5_安卓市场tv版
  9. Dell台式机装内存卡,开机遇到error
  10. tcl电视原生android,TCL电视免ROOT精简内置应用教程分享,亲测可换当贝桌面