×

关于Arduino Mega与NEO 6M GPS模块接口的教程

消耗积分:2 | 格式:zip | 大小:0.12 MB | 2022-11-09

杨勇

分享资料个

描述

我发现没有关于 Arduino Mega 与 NEO-6M GPS 模块接口的教程,所以我决定制作一个。希望你喜欢!

所需组件

硬件

  • Arduino 超级 ==> 30 美元
  • Neo-6M GPS 模块 ==> $30

软件

  • Arduino IDE

该项目的总成本为60美元。

全球定位系统信息

什么是全球定位系统?

全球定位系统 (GPS) 是一种基于卫星的导航系统,由至少 24 颗卫星组成。GPS 全天 24 小时在任何天气条件下工作,在世界任何地方工作,无需订阅费或设置费。

GPS的工作原理

GPS 卫星在精确的轨道上每天绕地球两次。每颗卫星都传输独特的信号和轨道参数,使 GPS 设备能够解码和计算卫星的精确位置。GPS 接收器使用此信息和三边测量来计算用户的确切位置。本质上,GPS 接收器通过接收发射信号所需的时间量来测量到每颗卫星的距离。通过更多卫星的距离测量,接收器可以确定用户的位置并显示它。

pYYBAGNoml6AGCWzAAAd66InE5A440.png
 

要计算您的二维位置(纬度和经度)并跟踪运动,GPS 接收器必须锁定至少 3 颗卫星的信号。通过 4 颗或更多卫星,接收器可以确定您的 3-D 位置(纬度、经度和高度)。通常,GPS 接收器将跟踪 8 颗或更多卫星,但这取决于一天中的时间和您在地球上的位置。确定您的位置后,GPS 单元可以计算其他信息,例如

  • 速度
  • 轴承
  • 追踪
  • 行程范围
  • 到目的地的距离

什么是信号

GPS 卫星至少传输 2 个低功率无线电信号。信号通过视线传播,这意味着它们将穿过云层、玻璃和塑料,但不会穿过大多数固体物体,例如建筑物和山脉。然而,现代接收器更敏感,通常可以跟踪房屋。GPS 信号包含 3 种不同类型的信息

  • 伪随机码

它是一个 ID 代码,用于识别正在传输信息的卫星。您可以在设备的卫星页面上查看从哪些卫星接收信号。

  • 星历数据

需要星历数据来确定卫星的位置,并提供有关卫星健康状况、当前日期和时间的重要信息。

  • 年历数据

年历数据告诉 GPS 接收器,每颗 GPS 卫星在一天中的任何时间都应该在哪里,并显示该卫星和系统中所有其他卫星的轨道信息。

Neo-6M GPS模块

NEO-6M GPS模块如下图所示。它带有一个外部天线,不带有插头引脚。所以你需要焊接它。

 

 
pYYBAGNommCAIykGAAAaVVTUQzc139.png
 

NEO-6M GPS模块概述

  • NEO-6M GPS芯片

该模块的核心是 u-blox 的 NEO-6M GPS 芯片。它可以在 50 个通道上跟踪多达 22 颗卫星,并达到业界最高水平的灵敏度,即 -161 dB 跟踪,同时仅消耗 45mA 电源电流。u-blox 6 定位引擎还拥有不到 1 秒的首次定位时间 (TTFF)。该芯片提供的最佳功能之一是省电模式 (PSM)。它可以通过选择性地打开和关闭接收器的某些部分来降低系统功耗。这将模块的功耗显着降低至仅 11mA,使其适用于 GPS 手表等对功率敏感的应用。NEO-6M GPS 芯片的必要数据引脚被拆分为“0.1” 间距接头。这包括通过 UART 与微控制器通信所需的引脚。

注意:- 模块支持波特率从 4800bps 到 230400bps,默认波特率为 9600。

 
pYYBAGNommKACtBNAAAWE-FKZi4280.png
 

位置固定 LED 指示灯

NEO-6M GPS 模块上有一个 LED,用于指示定位状态。它会根据它所处的状态以不同的速率闪烁

  • No Blinking ==> 表示正在搜索卫星
  • 每 1 秒闪烁一次- 表示已找到定位
 
pYYBAGNommSAcjwLAAAV3L9G96c071.png
 
  • 3.3V LDO 稳压器

NEO-6M 芯片的工作电压为 2.7 至 3.6V。但是,该模块配备了MICREL的MIC5205超低压差3V3稳压器。逻辑引脚也可以承受 5 伏电压,因此我们可以轻松地将其连接到 Arduino 或任何 5V 逻辑微控制器,而无需使用任何逻辑电平转换器。

 
pYYBAGNommiAQXLKAAAU892BCBs877.png
 

电池和 EEPROM

该模块配备一个 HK24C32 两线串行 EEPROM。它大小为4KB,通过I2C连接到NEO-6M芯片。模块还包含一个可充电纽扣电池,用作超级电容器。

EEPROM 与电池一起有助于保留电池支持的 RAM (BBR)。BBR 包含时钟数据、最新位置数据(GNSS 或位数据)和模块配置。但它并不意味着永久数据存储。

由于电池保留时钟和最后位置,首次定位时间 (TTFF) 显着减少到 1 秒。这允许更快的位置锁定。

如果没有电池,GPS 总是冷启动,因此初始 GPS 锁定需要更多时间。通电时电池会自动充电,并且可以在没有电源的情况下保持数据长达两周。

 

 
poYBAGNommuAUkj-AAAg1qcbDUk527.png
 

引脚排列

 
pYYBAGNomm2AFpCJAABEdADdEIM971.png
 
  • GND 是接地引脚,需要连接到 Arduino 上的 GND 引脚。
  • TxD(发送器)引脚用于串行通信。
  • RxD(接收器)引脚用于串行通信。
  • VCC 为模块供电。您可以直接将其连接到 Arduino 上的 5V 引脚。

阿杜诺兆

Arduino 是一个基于易于使用的硬件和软件的开源电子平台。Arduino 板能够读取输入——传感器上的光、按钮上的手指或 Twitter 消息——并将其转换为输出——激活电机、打开 LED、在线发布内容。您可以通过向板上的微控制器发送一组指令来告诉您的板该做什么。为此,您需要使用 Arduino 编程语言(基于 Wiring)和基于 Processing 的 Arduino 软件 (IDE)。

 
pYYBAGNomm-ABxYOAAC7wWoCg4c875.png
 

Arduino Mega 2560 是基于 Atmega2560 的微控制器板。

  • 板上集成了 54 个数字 I/O 引脚和 16 个模拟引脚,这使得该设备独一无二并与众不同。在 54 个数字 I/O 中,15 个用于 PWM(脉冲宽度调制)。
  • 16MHz频率的晶体振荡器。
  • 该板带有 USB 电缆端口,用于将代码从计算机连接和传输到板。
  • 直流电源插孔与用于为电路板供电的电路板耦合。
  • 该板带有两个电压调节器,即 5V 和 3.3V,可根据要求灵活调节电压。
  • 有一个复位按钮和 4 个称为 USART 的硬件串行端口,可产生最大的通信设置速度。
  • 有三种方式为电路板供电。您可以使用 USB 电缆为电路板供电并将代码传输到电路板,也可以使用电路板的 Vin 或通过电源插孔或电池为其供电。

规格

 
poYBAGNomnGANzpkAACI2etvbuI792.png
 

引脚排列

 
poYBAGNomnaAZV1kAACWmVZ3sxw966.png
 

引脚说明

  • 5V & 3.3V ==>此引脚用于提供 5V 左右的输出稳压。该稳压电源为板上的控制器和其他组件供电。它可以从电路板的 Vin 或 USB 电缆或其他稳压 5V 电压电源获得。而另一个电压调节由 3.3V 引脚提供。它可以消耗的最大功率为50mA。
  • GND ==>板上有 5 个接地引脚,这在项目需要多个接地引脚时非常有用。
  • 复位==> 此引脚用于复位电路板。将此引脚设置为低电平将重置电路板。
  • Vin ==> 它是提供给电路板的输入电压,范围从 7V 到 20V。电源插孔提供的电压可通过此引脚访问。但是,通过该引脚到电路板的输出电压将自动设置为 5V。
  • 串行通信==> RXD 和 TXD 是用于发送和接收串行数据的串行引脚,即 Rx 表示数据的传输,而 Tx 用于接收数据。使用这些串行引脚的四种组合,其中串行 0 包含 RX(0) 和 TX(1),串行 1 包含 TX(18) 和 RX(19),串行 2 包含 TX(16) 和 RX(17),串行 3 包含 TX(14) 和 RX(15)。
  • 外部中断==> 六个引脚用于创建外部中断,即中断 0(0)、中断 1(3)、中断 2(21)、中断 3(20)、中断 4(19)、中断 5(18)。这些引脚通过多种方式产生中断,即提供低值、上升沿或下降沿或改变中断引脚的值。
  • LED ==> 该板带有连接到数字引脚 13 的内置 LED。该引脚的高值将打开 LED,低值将其关闭。
  • AREF ==> AREF 代表模拟参考电压,它是模拟输入的参考电压。
  • 模拟引脚==> 板上有 16 个模拟引脚,标记为 A0 到 A15。需要注意的是,所有这些模拟引脚都可以用作数字 I/O 引脚。每个模拟引脚都有 10 位分辨率。这些引脚可以测量从地到 5V 的电压。但是,可以使用 AREF 和analogReference() 函数更改上限值。
  • I2C ==> 20 和 21 两个引脚支持 I2C 通信,其中 20 代表 SDA(串行数据线,主要用于保存数据),21 代表 SCL(串行时钟线,主要用于提供设备之间的数据同步)
  • SPI 通信==> SPI 代表串行外围接口,用于在控制器和其他外围组件之间传输数据。四个引脚即 50 (MISO)、51 (MOSI)、52 (SCK)、53 (SS) 用于 SPI 通信。

Arduino IDE

在这里,我假设您已经安装了 Arduino IDE。

1.下载下面给出的所需库

TinyGPS 库

2.下载后。解压缩并将其移动到文件夹 C:\Users\...\Documents\Arduino\libraries 确保没有 (-)。

 
pYYBAGNomnmAUUOfAAAghsl4M40274.png
 

3. 打开 Arduino IDE 并从程序部分复制代码。

4. 然后选择板子去工具 ==> 板子 ==> 在这里选择板子,我们使用的是 Arduino Mega 2560。

 
pYYBAGNomnuAJ-z8AACVvmiksNs488.png
 

5. 选择板选择端口后,转到工具 ==> 端口。

 
poYBAGNomn2AaxaoAAB3V6d4UFE472.png
 

 

6. 选择板子和端口后点击上传。

 
pYYBAGNomn-Ad266AAArxs78SO4260.png
 

连接

Arduino MEGA ==> NEO-6M GPS

  • 3.3V ==> VCC
  • 接地 ==> 接地
  • Tx1 (18) ==> 接收
  • Rx1 (19) ==> Tx

您也可以使用 Serial2 或 Serial3 代替 Serial1

串行 2 针

  • Tx2 (16) ==> 接收
  • Rx2 (17) ==> 发送

串行 3 针

  • Tx3 (14) ==> 接收
  • Rx3 (15) ==> Tx

 

 
poYBAGNomoOASjtBAAD7JDAwDZY152.png
 

结果

 
pYYBAGNomoWAU1y4AADGF5Ihqeo980.png
 

 

 

 

 


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.jibsdb.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'关于Arduino Mega与NEO 6M GPS模块接口的教程',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"https://www.elecfans.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);