Arduino 制作gps轨迹记录仪 最详细的制作过程、代码

发布时间:2026/7/24 19:57:03
Arduino 制作gps轨迹记录仪 最详细的制作过程、代码 为什么要自己做现售的专业记录轨迹的设备有很多从几百元到几千元不等智能手机也可以记录轨迹既然可以这么方便的记录轨迹那自己做轨迹记录仪的好处在哪里呢1、智能手机的待机时间是痛点如果设置不当自动管理后台应用的程序会让地图软件休眠导致熄屏的时候没有记录数据。自制设备开机即记录。2、现售的设备存储空间不是很理想且操作需要主机菜单点击存储路点不方便。自制设备一键记录路点。3、买来的东西没有自己做的东西好玩。设想的功能1、没有屏幕不显示时间等信息调试的时候可以使用屏幕最后成品打包的时候拿掉屏幕。2、tf卡读卡器取数据的时候把卡拔出来。3、物理按钮拨动开关0控制电源、微动开关1控制记录路点、微动开关2控制停止操作tf卡4、用几个led显示当前状态led0显示电源接通、led1显示gps信号、led2显示tf卡5、gps数据纯粹记录log文件不做任何解析使用谷歌地球导入文件。需要的模块1、Arduino uno2、gps模块天线3、tf卡模块4、电池目前设想是一节18650到时候还是要看看待机时间。5、led、按钮等。逐步实现的代码思路1. gps是否解析gps数据这是两个思路如果解析那么就只需要写入$GPRMC和 GPGGA按日期为文件名写入tf卡并节省tf卡的空间然而tf卡有32GB完全不需要考虑容量不解析就拿不到日期写入数据的文件就只能按序列编号递增不便于日后查询。根据从易到难的顺序我还是先不解析待调试完毕第二版增加解析的功能。初级目标就是把原始的gps 数据写入。这步的问题在于如何设置适当的缓冲区把串口信息写入tf卡。中间加一个定时器设定写卡的间隔2. tf卡这步没有什么难度按照官方的例程把线插好测试一下读写即可。尽量把串口信息缓冲到内存减少tf卡的频繁操作。卡里放个配置文件配置记录航点的频率。3. 按钮要学一下端口中断保证系统响应到按钮。这步还是设想。初级版本的代码1、gps部分String s1;//缓存串口字符//读取指定长度的串口字符存入s1如果不解析直接把s1写入卡中charst;while(s1.length()maxLength){if(Serial.available()){stSerial.read();s1String(st);}}用习惯了c#回头再用c来编程处理字符串的时候特别吃力指针和字符数组看的头大如果有支持c#的开发板该有多好。还好后来发现arduino支持String类简化了很多。这里不得不说arduino只有2kB内存缓存600B的串口数据就占掉了三分之一。如果减少缓存就要更加频繁的读写tf卡现在看看其他的开发板零知开发板的内存是20kB是uno的10倍操作一下gps肯定是够了nodeMcu的内存是50kB更是让人激动。不知道这两个板子的上手难度如何淘宝都已下单过几天把玩一下。2、tf卡部分File fSD.open(fileWrite,FILE_WRITE);f.print(s1);f.close();if(s1.length()maxLength){s1;}fileWrite是待写入的文件名由下面的函数判读StringtoWriteFile(){//如果默认文件不存在直接返回默认值if(!SD.exists(gps1001.log)){returnString(gps1001.log);}for(inti1001;i9999;i){//根据递增判断目录中的最大号码的文件名String nString(gps)String(i)String(.log);String n2String(gps)String(i1)String(.log);//Serial.println(check...);if(SD.exists(n)(!SD.exists(n2))){//判断当前的最大号码文件的大小如果过大就递增一个号码longmaxSize900000;File fSD.open(n);if(f.size()maxSize){f.close();returnn2;}else{f.close();returnn;}}}}以上代码已调试完毕可以完美的记录gps轨迹啦等新的开发板到货准备把gps信号解析出来只记录有效信息。