如何使用GPS與Arduino?
電子學(xué)的主要應(yīng)用之一是使用GPS(全球定位系統(tǒng))進(jìn)行地理定位。在本教程中,我們將探討GPS是如何工作的,如何使用Arduino的Neo6m GPS模塊以及如何修復(fù)此模塊的錯(cuò)誤。
GPS是怎么工作的?
GPS(全球定位系統(tǒng))的工作原理是利用環(huán)繞地球運(yùn)行的衛(wèi)星網(wǎng)絡(luò)來(lái)確定地球上任何地方GPS接收器的精確位置。下面是它的工作原理:
ComponentsofaGPS
1. 衛(wèi)星:至少有24顆GPS衛(wèi)星在大約20,200公里的高度繞地球運(yùn)行。這些衛(wèi)星以這樣一種方式排列,在任何給定的時(shí)間,從地球上的任何一點(diǎn)都可以看到至少四顆衛(wèi)星。
2. 地面控制站:這些站監(jiān)測(cè)和管理衛(wèi)星,確保它們保持在正確的軌道上,并保持信號(hào)的準(zhǔn)確性。
3. GPS接收器:從GPS衛(wèi)星接收信號(hào)以確定其在地球上位置的設(shè)備。這些可以在智能手機(jī)、汽車、健身追蹤器和各種其他設(shè)備中找到。
它是如何工作的
1. 信號(hào)的傳輸:每顆GPS衛(wèi)星都連續(xù)發(fā)送一個(gè)信號(hào),其中包含衛(wèi)星的位置和信號(hào)發(fā)送的確切時(shí)間。
2. 信號(hào)接收:GPS接收器接收來(lái)自多顆衛(wèi)星的信號(hào)。為了計(jì)算二維位置(緯度和經(jīng)度),接收器需要連接至少三顆衛(wèi)星。對(duì)于3D定位(緯度、經(jīng)度和高度),它需要來(lái)自至少四顆衛(wèi)星的信號(hào)。
3. 時(shí)間延遲計(jì)算:GPS接收器測(cè)量衛(wèi)星信號(hào)到達(dá)它所花費(fèi)的時(shí)間。由于信號(hào)以光速傳播,接收器可以根據(jù)這個(gè)時(shí)間延遲計(jì)算到每個(gè)衛(wèi)星的距離。
4. 三角測(cè)量:通過(guò)了解與多顆衛(wèi)星的距離,GPS接收器可以通過(guò)稱為三邊測(cè)量的過(guò)程確定其確切位置。這涉及到求解方程,使從每顆衛(wèi)星的距離得出的可能位置的球體相交,從而精確定位接收器的確切位置。
GPS技術(shù)被用于各種應(yīng)用,包括車輛和船舶導(dǎo)航、測(cè)繪、測(cè)量、跟蹤和各種系統(tǒng)(如蜂窩網(wǎng)絡(luò)和金融交易)的定時(shí)。要了解更詳細(xì)的信息,您可以參考NASA的GPS概述和美國(guó)政府的GPS網(wǎng)站
硬件
NEO-6M GPS模塊是一種流行的GPS接收器,用于各種電子產(chǎn)品和DIY項(xiàng)目,特別是其價(jià)格合理且易于使用。以下是一些關(guān)鍵功能和規(guī)格:
1. GPS芯片:NEO-6M模塊使用U-blox NEO-6M GPS芯片,具有高靈敏度(-161 dBm),可在50個(gè)通道中跟蹤多達(dá)22顆衛(wèi)星。
2. 定位:水平定位精度約2.5米,支持1hz的導(dǎo)航更新速率,最大5hz。
3. 功耗:模塊正常工作時(shí)功耗約45ma。它還包括一個(gè)省電模式(PSM),可將功耗降低至11毫安,使其適合電池供電的應(yīng)用,如GPS手表。
4. 接口:通過(guò)UART通信,波特率范圍為4800 ~ 230400bps,默認(rèn)為9600bps。該模塊兼容3.3V和5V邏輯電平,簡(jiǎn)化了與包括Arduino在內(nèi)的各種微控制器的集成。
5. 啟動(dòng)時(shí)間:NEO-6M提供約27-38秒的冷啟動(dòng)時(shí)間和約1秒的熱啟動(dòng)時(shí)間。
這些功能使NEO-6M GPS模塊成為需要精確位置跟蹤的項(xiàng)目的多功能和高效選擇。無(wú)論您是在無(wú)人機(jī),車輛跟蹤系統(tǒng)還是便攜式導(dǎo)航設(shè)備上工作,該模塊都可以以最小的功耗提供可靠的GPS數(shù)據(jù)。
在本教程中,我們將研究如何通過(guò)一個(gè)簡(jiǎn)單的腳本開始使用Neo6m GPS模塊,該腳本連接到衛(wèi)星并獲取用戶位置,時(shí)間和日期的信息。
代碼
讓我們一步一步地檢查代碼:
包括庫(kù)
該代碼首先包含GPS通信所需的庫(kù):
?包含TinyGPS++庫(kù),用于解析GPS模塊中的NMEA句子。
?包括SoftwareSerial庫(kù),它允許在Arduino的默認(rèn)RX和TX引腳以外的數(shù)字引腳上進(jìn)行串行通信。
?看看下面的圖庫(kù),看看如何安裝TinyGPS++庫(kù)
初始化變量
代碼聲明了GPS通信所需的常量和對(duì)象:
?TXPin和RXPin:定義用于從GPS模塊發(fā)送(TX)和接收(RX)數(shù)據(jù)的數(shù)字引腳。
?GPSBaud:設(shè)置與GPS模塊通信的波特率為9600。
?TinyGPSPlus gps:創(chuàng)建TinyGPSPlus類的對(duì)象來(lái)處理gps數(shù)據(jù)解析。
?SoftwareSerial GPS(RXPin, TXPin):創(chuàng)建一個(gè)SoftwareSerial對(duì)象,使用定義的RX和TX引腳處理與GPS模塊的通信。
設(shè)置函數(shù)
在setup函數(shù)中,初始化串行通信:
?系列。begin(9600):以9600波特率初始化串口通信,用于調(diào)試并輸出到串口監(jiān)視器。
?GPS。begin(GPSBaud):以指定的波特率(9600)初始化與GPS模塊的SoftwareSerial通信。
循環(huán)函數(shù)
loop函數(shù)連續(xù)讀取和處理GPS數(shù)據(jù):
?如果(GPS)。available() > 0):檢查是否有來(lái)自GPS模塊的可用數(shù)據(jù)。
?gps.encode (GPS。read()):從GPS模塊讀取一個(gè)字符,并將其傳遞給TinyGPS++庫(kù)進(jìn)行解析。
?如果(gps.location。isUpdated()):檢查是否解析了新的有效位置。
?系列。print("Latitude = ");并同時(shí)gps.location。緯度(),6);:將緯度以六位小數(shù)的形式打印到串行監(jiān)視器。
?系列。print(" Longitude = ");并同時(shí)gps.location。液化天然氣(),6);:將經(jīng)度以六位小數(shù)的形式打印到串行監(jiān)視器。
此代碼與GPS模塊建立連接,并不斷讀取和解析數(shù)據(jù),以提取緯度、經(jīng)度、高度和衛(wèi)星時(shí)間信息并將其打印到串行監(jiān)視器。
設(shè)置硬件
要正確設(shè)置GPS傳感器,請(qǐng)遵循以下步驟:
?上傳代碼后,啟動(dòng)Arduino nano。
?一些GPS傳感器有電源燈,如果你沒(méi)有,那么不要擔(dān)心,等待。
?一段時(shí)間后,傳感器上的機(jī)載藍(lán)色led將開始閃爍,表明它已連接到衛(wèi)星網(wǎng)絡(luò)。
?當(dāng)它開始閃爍時(shí),用板載按鈕重置Arduino并檢查串行監(jiān)視器。
注意:為了使這個(gè)過(guò)程更快更容易,坐在室外,陽(yáng)臺(tái)上或靠近窗戶。你也可以買一個(gè)更好的陶瓷天線。
注意:GPS傳感器接收數(shù)十個(gè)NMEA包中的數(shù)據(jù),這些包可能包含也可能不包含我們需要的位置數(shù)據(jù)。在這種情況下,如果沒(méi)有找到或沒(méi)有更新位置數(shù)據(jù),則不會(huì)向串行監(jiān)視器打印任何內(nèi)容,或者會(huì)出現(xiàn)中斷。放輕松,等幾分鐘就能得到好的數(shù)據(jù)。
本文編譯自hackster.io





