影音先锋影av色资源网_国产一区内射最近更新_善良的妽妽8在线观看_亚洲色婷婷一区二区三区 久久久久人妻一区精品伊人_亚洲精品无码成人区久久_亚洲日本一区二区_亚洲啪精品视频网站免费

如何使用GPS模塊?,詳細(xì)講解GPS應(yīng)用原理

使用Arduino控制NEO-6M GPS模塊應(yīng)用

本應(yīng)用說明如何將NEO-6M GPS模塊與Arduino一起使用以獲取GPS數(shù)據(jù)。GPS代表全球定位系統(tǒng),可以在旅行時(shí)用于確定位置,時(shí)間和速度。

如何使用GPS模塊?從頭到尾,詳細(xì)講解和程序說明

您將學(xué)習(xí)到如何:將NEO-6M GPS模塊連接到Arduino UNO獲取原始GPS數(shù)據(jù)解析原始數(shù)據(jù)以獲得選定的可讀GPS信息取得位置

推出NEO-6M GPS模塊

NEO-6M GPS模塊如下圖所示。它帶有一個(gè)外部天線,并且不帶有插頭。因此,您需要獲取并焊接一些引腳。

如何使用GPS模塊?從頭到尾,詳細(xì)講解和程序說明

該模塊具有外部天線和內(nèi)置EEPROM。接口:RS232 TTL電源:3V至5V默認(rèn)波特率:9600 bps與標(biāo)準(zhǔn)NMEA語法一起使用

NEO-6M GPS模塊還與其他微控制器板兼容。

引腳接線

NEO-6M GPS模塊具有四個(gè)引腳:VCC,RX,TX和GND。該模塊使用TX和RX引腳通過串行通信與Arduino進(jìn)行通信,因此接線是多么簡單:

NEO-6M GPS模塊 接線到Arduino UNO

VCC 5伏

RX 軟件序列中定義的TX引腳

TX 軟件序列中定義的RX引腳

GND 地線

獲取GPS原始數(shù)據(jù)

要獲取原始GPS數(shù)據(jù),您只需使用”軟件串行口”開始與GPS模塊的串行口通信。繼續(xù)閱讀以了解具體的操作方法。

所需零件

為了測試此示例,您將需要以下部分:ArduinoNEO-6M GPS模塊跳線

原理圖

請按照以下示意圖將NEO-6M GPS模塊連接到Arduino。

如何使用GPS模塊?從頭到尾,詳細(xì)講解和程序說明

模塊GND引腳連接到Arduino GND引腳模塊RX引腳連接到Arduino 引腳3模塊TX引腳連接到Arduino 引腳4模塊VCC引腳連接到Arduino 5V引腳

代碼

將以下代碼復(fù)制到Arduino IDE,并將其上傳到Arduino開發(fā)板。

#include <SoftwareSerial.h>

SoftwareSerial ss(4, 3);

void setup(){

Serial.begin(9600);

ss.begin(9600);

}

void loop(){

while (ss.available() > 0){

byte gpsData = ss.read();

Serial.write(gpsData);

}

}

此電路圖假定您將引腳4和引腳3用作RX和TX串行引腳,以與GPS模塊建立串行通信。如果您使用其他引腳,則應(yīng)在以下行中對其進(jìn)行編輯:

SoftwareSerial ss(4, 3);

另外,如果您的模塊使用的默認(rèn)波特率不同于9600 bps,則應(yīng)在以下行中修改代碼:

ss.begin(9600);

該電路圖偵聽GPS串行端口,并在從模塊接收數(shù)據(jù)時(shí)將其發(fā)送到串行監(jiān)視器。

while (ss.available() > 0){

byte gpsData = ss.read();

Serial.write(gpsData);

}

以9600的波特率打開串行監(jiān)視器。

如何使用GPS模塊?從頭到尾,詳細(xì)講解和程序說明

您應(yīng)該以GPS標(biāo)準(zhǔn)語言NMEA獲得大量信息。您在串行監(jiān)視器中看到的每一行都是NMEA語句。

NMEA代表國家海洋電子協(xié)會(huì),在GPS領(lǐng)域中,它是GPS制造商支持的標(biāo)準(zhǔn)數(shù)據(jù)格式。

了解NMEA句子

NMEA句子以$字符開頭,并且每個(gè)數(shù)據(jù)字段都用逗號(hào)分隔。

$ GPGGA,110617.00,41XX.XXXXX,N,00831.54761,W,1,05,2.68,129.0,M,50.1,M ,, * 42

$ GPGSA,A,3,06,09,30,07,23 ,, ,,,,, 4.43,2.68,3.53 * 02

$ GPGSV,3,1,11,02,48,298,24,03,05,101,24,05,17,292,20,06,71,227,30 * 7C

$ GPGSV, 3,2,11,07,47,138,33,09,64,044,28,17,01,199,19,13,214,* 7C

$ GPGSV,3,3,11,23,29,054,29,29,01,335,,30 ,29,167,33 * 4E

$ GPGLL,41XX.XXXXX,N,00831.54761,W,110617.00,A,A * 70

$ GPRMC,110618.00,A,41XX.XXXXX,N,00831.54753,W,0.078,030118 ,,, A * 6A

$ GPVTG ,, T ,, M,0.043,N,0.080,K,A * 2C

NMEA句子有不同類型。消息的類型由第一個(gè)逗號(hào)之前的字符指示。

$之后的GP表示它是GPS位置。$ GPGGA是基本的GPS NMEA消息,提供3D位置和準(zhǔn)確性數(shù)據(jù)。在下面的句子中:

$ GPGGA,110617.00,41XX.XXXXX,N,00831.54761,W,1,05,2.68,129.0,M,50.1,M ,, * 42110617 –表示采取修復(fù)位置的時(shí)間,UTC時(shí)間11:06:1741XX.XXXXX,N –緯度41度XX.XXXXX’N00831.54761,W –經(jīng)度008度31.54761′W1 –修復(fù)質(zhì)量(0 =無效; 1 = GPS修復(fù); 2 = DGPS修復(fù); 3 = PPS修復(fù); 4 =實(shí)時(shí)運(yùn)動(dòng)學(xué); 5 =浮點(diǎn)RTK; 6 =估計(jì)(航位推算); 7 =手動(dòng)輸入模式; 8 =模擬模式)05 –被跟蹤的衛(wèi)星數(shù)2.68 –頭寸水平稀釋129.0,M –海拔,海拔高度50.1,M – WGS84橢球上方的大地水準(zhǔn)面的高度(平均海平面)空字段-自上次DGPS更新以來的時(shí)間(以秒為單位)空字段– DGPS站ID號(hào)* 42 –校驗(yàn)和數(shù)據(jù),始終以*開頭

NMEA的其他句子提供了其他信息:

  • $ GPGSA – GPS DOP和活動(dòng)衛(wèi)星
  • $ GPGSV –詳細(xì)的GPS衛(wèi)星信息
  • $ GPGLL –地理緯度和經(jīng)度
  • $ GPRMC –基本的GPS pvt(位置,速度,時(shí)間)數(shù)據(jù)
  • $ GPVTG –速度不錯(cuò)

使用TinyGPS ++庫解析NMEA句子

您可以處理來自GPS的原始數(shù)據(jù),也可以通過將字符序列保存到變量中來將這些NMEA消息轉(zhuǎn)換為可讀且有用的格式。為此,我們將使用TinyGPS ++庫 。

通過該庫,可以輕松獲取有用且易于理解的格式的位置信息。

安裝TinyGPS ++庫

請按照以下步驟在您的Arduino IDE中安裝TinyGPS ++庫:

1. 下載TinyGPSPlus庫。您的下載文件夾中應(yīng)該有一個(gè).zip文件夾

2. 解壓縮.zip文件夾,您應(yīng)該得到TinyGPSPlus-master文件夾

3. 重命名文件夾 到TinyGPSPlus

4. 將TinyGPSPlus文件夾移至Arduino IDE安裝庫文件夾

5. 最后,重新打開您的Arduino IDE

該庫提供了一些有關(guān)如何使用它的示例。在您的Arduino IDE中,您只需要轉(zhuǎn)到 File Examples > TinyGPS ++,然后從提供的示例中進(jìn)行選擇。

注意:庫中提供的示例假定GPS模塊的波特率為4800。如果您使用的是NEO-6M GPS模塊,則需要將其更改為9600。

使用NEO-6M GPS模塊和TinyGPS ++庫獲取位置

您可以使用TinyGPS ++庫以方便實(shí)用的格式獲取位置。下面,我們提供了一個(gè)代碼來從GPS獲取位置。這是其中一個(gè)庫示例的簡化版本。

#include <TinyGPS++.h>

#include <SoftwareSerial.h>

static const int RXPin = 4, TXPin = 3;

static const uint32_t GPSBaud = 9600;

TinyGPSPlus gps;

SoftwareSerial ss(RXPin, TXPin);

void setup(){

Serial.begin(9600);

ss.begin(GPSBaud);

}

void loop(){

while (ss.available() > 0){

gps.encode(ss.read());

if (gps.location.isUpdated()){

Serial.print(“Latitude= “);

Serial.print(gps.location.lat(), 6);

Serial.print(” Longitude= “);

Serial.println(gps.location.lng(), 6);

}

}

}

首先導(dǎo)入所需的庫:TinyGPSPlus和SoftwareSerial

#include <TinyGPS++.h>

#include <SoftwareSerial.h>

然后,您定義軟件串行RX和TX引腳,以及GPS波特率。如果將其他引腳用于軟件串行,則需要在此處進(jìn)行更改。另外,如果您的GPS模塊使用其他默認(rèn)波特率,則還應(yīng)該對其進(jìn)行修改。

static const int RXPin = 4, TXPin = 3;

static const uint32_t GPSBaud = 9600;

然后,創(chuàng)建一個(gè)TinyGPS ++對象:

TinyGPSPlus gps;

然后在您先前定義的引腳上開始串行連接

SoftwareSerial ss(RXPin, TXPin);

在setup()中,您可以初始化串行通信,以查看串行監(jiān)視器上的讀數(shù)并與GPS模塊通信。

void setup() {

Serial.begin(9600);

ss.begin(GPSBaud);

}

在循環(huán)中,您需要提供信息。為了使TinyGPS ++能夠正常工作,您必須使用encode()方法從GPS模塊中反復(fù)向其添加字符。

while (ss.available() > 0){

gps.encode(ss.read());

然后,您可以查詢gps對象以查看是否已更新任何數(shù)據(jù)字段:

if (gps.location.isUpdated()){

Serial.print(“Latitude=”); Serial.print(gps.location.lat(), 6);

Serial.print(“Longitude=”); Serial.println(gps.location.lng(), 6);

}

分別使用gps.location.lat()和gps.location.lng()即可輕松獲得緯度和經(jīng)度。

將代碼上傳到Arduino,您應(yīng)該會(huì)在串行監(jiān)視器上看到顯示的位置。上載代碼后,請等待幾分鐘,同時(shí)模塊將調(diào)整位置以獲取更準(zhǔn)確的數(shù)據(jù)。

如何使用GPS模塊?從頭到尾,詳細(xì)講解和程序說明

使用TinyGPS ++庫獲取更多GPS信息

TinyGPS ++庫使您不僅可以簡單地獲取位置信息,還可以獲取更多信息。除了位置,您還可以獲得:日期時(shí)間速度課程高度衛(wèi)星高清

下面的代碼示例了如何以一種簡單的方式獲取所有這些信息。

#include <TinyGPS++.h>

#include <SoftwareSerial.h>

static const int RXPin = 4, TXPin = 3;

static const uint32_t GPSBaud = 9600;

SoftwareSerial ss(RXPin, TXPin);

void setup(){

Serial.begin(9600);

ss.begin(GPSBaud);

}

void loop(){

while (ss.available() > 0){

gps.encode(ss.read());

if (gps.location.isUpdated()){

Serial.print(“Latitude= “);

Serial.print(gps.location.lat(), 6);

Serial.print(” Longitude= “);

Serial.println(gps.location.lng(), 6);

Serial.print(“Raw latitude = “);

Serial.print(gps.location.rawLat().negative ? “-” : “+”);

Serial.println(gps.location.rawLat().deg)

Serial.println(gps.location.rawLat().billionths);

Serial.print(“Raw longitude = “);

Serial.print(gps.location.rawLng().negative ? “-” : “+”);

Serial.println(gps.location.rawLng().deg);

Serial.println(gps.location.rawLng().billionths);

Serial.print(“Raw date DDMMYY = “);

Serial.println(gps.date.value());

Serial.print(“Year = “);

Serial.println(gps.date.year());

Serial.print(“Month = “);

Serial.println(gps.date.month());

Serial.print(“Day = “);

Serial.println(gps.date.day());

Serial.print(“Raw time in HHMMSSCC = “);

Serial.println(gps.time.value());

Serial.print(“Hour = “);

Serial.println(gps.time.hour());

Serial.print(“Minute = “);

Serial.println(gps.time.minute());

Serial.print(“Second = “);

Serial.println(gps.time.second());

Serial.print(“Centisecond = “);

Serial.println(gps.time.centisecond());

Serial.print(“Raw speed in 100ths/knot = “);

Serial.println(gps.speed.value());

Serial.print(“Speed in knots/h = “);

Serial.println(gps.speed.knots());

Serial.println(gps.speed.mph());

Serial.print(“Speed in m/s = “);

Serial.println(gps.speed.mps());

Serial.print(“Speed in km/h = “);

Serial.println(gps.speed.kmph());

Serial.print(“Raw course in degrees = “);

Serial.println(gps.course.value());

Serial.print(“Course in degrees = “);

Serial.println(gps.course.deg());

Serial.print(“Raw altitude in centimeters = “);

Serial.println(gps.altitude.value());

Serial.print(“Altitude in meters = “);

Serial.println(gps.altitude.meters());

Serial.print(“Altitude in miles = “);

Serial.println(gps.altitude.miles());

Serial.print(“Altitude in kilometers = “);

Serial.println(gps.altitude.kilometers());

Serial.print(“Altitude in feet = “);

Serial.println(gps.altitude.feet());

Serial.print(“Number os satellites in use = “);

Serial.println(gps.satellites.value());

Serial.print(“HDOP = “);

Serial.println(gps.hdop.value());

}

}

}

TinyGPS ++ 在如何使用其所有功能方面得到了很好的評價(jià)。

寫到最后

希望本指南對您有所幫助。喜歡就記得關(guān)注,后續(xù)會(huì)繼續(xù)分享更多項(xiàng)目示例,敬請期待。

版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至2161241530@qq.com 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。如若轉(zhuǎn)載,請注明出處:http://www.sdanke.com/uncategorized/32106/

(0)

相關(guān)推薦

發(fā)表評論

登錄后才能評論