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





