本帖最后由 平行电 于 2014-5-8 20:38 编辑
以上是原形机,因为都是买的模块,所以就没画板子什么的,难看点大家见谅
在操场上测试
附一张风景
这两张是测试的结果
最后是数据发送到手机上的结果
本来毕设是做智能定位小车,但是既然GSM模块都有了,自然可以做出一些手机的功能。
硬件清单:MSP430F5438A最小系统板、SSD1289液晶屏、SIM900A模块(GSM/GPRS 双频900/1800MHz)、GPS模块、CC1101模块、lauchpad、电机驱动板、小车底盘轮子等
功能描述:launchpad+cc1101=遥控器
主要说一下小车的功能,定时读取缓冲区的GPS数据,处理并显示,每隔一定时间向目标号码发送含有位置信息的短信(由于上位机不是我做,所以GPRS功能暂时就没有加),由于CC1101有接收提醒的引脚,所以用中断读取数据,并驱动电机。
1、GPS的读取
GPS需要用到的数据也就是GPGGA和GPRMC。
$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*xx
$GPGGA:起始引导符及语句格式说明(本句为GPS定位数据);
<1> UTC时间,格式为hhmmss.sss;
<2> 纬度,格式为ddmm.mmmm(第一位是零也将传送);
<3> 纬度半球,N或S(北纬或南纬)
<4> 经度,格式为dddmm.mmmm(第一位零也将传送);
<5> 经度半球,E或W(东经或西经)
<6> GPS状态, 0初始化, 1单点定位, 2码差分, 3无效PPS, 4固定解, 5浮点解, 6正在估算 7,人工输入固定值, 8模拟模式, 9WAAS查分
<7> 使用卫星数量,从00到12(第一个零也将传送)
<8> 水平精度因子,0.5到99.9
<9> 天线离海平面的高度,-9999.9到9999.9米
M 指单位米
<10> 大地水准面高度,-9999.9到9999.9米
M 指单位米
<11> 差分GPS数据期限(RTCM SC-104),最后设立RTCM传送的秒数量,如不是差分定位则为空
<12> 差分参考基站标号,从0000到1023(首位0也将传送)。
* 语句结束标志符
xx 从$开始到*之间的所有ASCII码的异或校验和
回车
换行
读取的时候同样是在缓冲区提取数据,当找到帧头的时候,开始计数1,每读取的一个逗号,也开始计数2,计数1的作用是用来复制数据,这个想必做过单片机的朋友都知道。计数2的作用是用来识别这个数据应该复制到什么地方(例如:我建立了一个日期的存储单元time[11],当计数2为1的时候,把接下来的10个字符复制到time[11]存储区里,再说一点,为什么10个字符要设立11个,这是数组和字符串的区别,字符串的末尾会自动补0,也就是'/0',但是数组不行,所以多设置一位,但是不向里面输入数值的话,默认为'/0')
数据提取出来之后,显示出来原始数据,这样方便查错。需要说的几点是,GPS模块的原始数据都是格林威治时间,也就是英国时间,要得到北京时间只要加上8,因为北京是东8区。日期这个则是需要在GPRMC中去提取。
最后,使用GPS还要注意的最重要的一点!下文转载:
我们平时用到的地球坐标系统,叫做WGS84坐标,国家保密插件,也叫做加密插件或者加偏或者SM模组,其实就是对真实坐标系统进行人为的加偏处理,按照几行代码的算法,将真实的坐标加密成虚假的坐标,而这个加偏并不是线性的加偏,所以各地的偏移情况都会有所不同。而加密后的坐标也常被人称为火星坐标系统,这是我们的国家又一个伟大的发明,让国外的go-vern-ment和企业等,都看不懂我们的坐标系统。
其实很少有人知道国家保密插件问题,但作为导航电子地图产业或者汽车导航产业中的人,多多少少都会了解到这个问题。国家是出于国家安全考虑,将我们看到的真实的坐标变成假的虚拟的坐标,这样,我们的国家就安全了,不会被恐怖分子破坏了。最简单的举例来说,比如鸟巢吧,你真实的坐标是这个,加密后就成了那个,导航电子地图上看到的就是那个,那么人家导弹要是攻击那个的时候,那么导弹就打不中我们的鸟巢啦,我们的鸟巢就安全了。不过,个人担心这样加密后没有打中鸟巢,会不会打中水立方呢,可能是无心插柳柳成荫了。
现在,所有的电子地图所有的导航设备,都需要加入国家保密插件。第一步,地图公司测绘地图,测绘完成后,送到国家测绘局,将真实坐标的电子地图,加密成“火星坐标”,这样的地图才是可以出版和发布的,然后才可以让GPS公司处理。第二步,所有的GPS公司,只要需要汽车导航的,需要用到导航电子地图的,统统需要在软件中加入国家保密算法,将COM口读出来的真实的坐标信号,加密转换成国家要求的保密的坐标,这样,GPS导航仪和导航电子地图就可以完全匹配啦,GPS也就可以正常工作啦。
名词总结:
地球坐标:指WGS84坐标系统
火星坐标:指使用国家保密插件人为偏移后的坐标
地球地图:指与地球坐标对应的客观真实的地图
火星地图:指经过加密偏移后的,与火星坐标对应的地图
以上内容浏览后,背景知识大概就明白了。
首先,我们手上所有的GPS设备,根据渠道和接口软件的不同,分为火星坐标设备与WGS84坐标设备两种,另外所有GPS设备中的地图以及网上的地图,分为火星地图(即人为偏移)和真实地图两种。
比如国内“正规渠道的车载GPS”,采用的是火星坐标配火星地图,完美结合,能够准确的在地球上使用,缺点就是记录的点和轨迹都是火星的,与其他地球人无法交流分享。
多数水货GPS设备,使用的都是地球坐标配火星地图,这样轨迹和航点都是真实坐标的,只不过在火星地图上偏移了
有些玩家,会将火星地图加入偏移算法(无论准确或不准确),人为纠偏,形成地球坐标配纠偏地图(自制地图),不考虑误差可以正常使用
2、GSM
GSM模块的调试都大同小异,串口发送AT指令。
初始化: AT
打电话:ATD+电话号码
短信:两种模式
AT+CMGF=(0为PUD模式,1为TEXT模式)
我选择了TEXT模式,因为这种方式较为简单,发送顺序如下
AT+CMGF=1(延时0.5s)
“电话号码”(延时0.5s,引号一定要带)
text内容(跟液晶显示的要求一样,ASCII字符)
0x1a(结束)
短信的读取则是出现了一些小问题
读取过程:
AT+CMGR=N(这里的N指的是SIM卡里的第几条短信)
串口读取到的信息里会包含电话号码,短信内容、时间等信息
以上信息在英文模式下可以直接提取,字符串形式
但是中文短信却是以PUD模式显示,故而不可以直观,需要解读。
GPRS:由于没有上位机,只是测试了好坏,测试的方法我放到附件里。
心得:做到现在,要想真正实现手机功能,不足还有很多,考虑到毕设不是这个,所以打算止步到此,并把自己的心得共享
首先最大的问题,输入法,要实现中文的输入,一个汉字库及一个汉字的输入法是必须的,这个也是我的最大遗憾,字库好解决,但是输入法的算法在没有系统的前提下,显得太困难了。我的一种设想是类似于查字典的方式,建立一个字典数组,以拼音作为参考对象,建立多维数组(例:jiang,可以看作hz[j]
[a][n][g][x]),将所有的拼音都建立一个多维空间,最后的x表示的是这个空间里有多少个同音字(拼音的四声我就不多说了),存储的是对应拼音的汉字的两位数据,输入了拼音之后,每次显示9个汉字,来查找正确的汉字,这样的话,应该能实现较快的输入一个汉字,可惜没有时间和精力去做了。
其次,电池,刚开始时,怎么也无法正常启动GSM模块,问了店家是电流不够,要求瞬间输出电流最大2A,买一个5V2A的电源又太不方便,所以买了个手机电池的弹簧片,把旧电池装上去了。
最后,那些我没有做的功能:通讯录,上网。通讯录和短信存储显示什么的其实都是存储和查询,解决的办法:慢一点,但是存储量大的用内存卡,快的就上存储器吧。至于上网,由于没做过网页相关的,只能猜测需要大一点的RAM并且上系统(即使是单片机)。