# NEO-M8N GNSS模組  ## 基礎小知識 > ### NEO-M8N GNSS模組 > * 支援GPS/GLONASS/Galileo/QZSS/ONASS/BeiDou等衛星定位系統,但同時只支援接收3組信號 > * 燈號常亮表示正常運作,但尚未連接衛星信號;閃爍表示以連接到衛星信號 > * 自帶SMA天線接口,可自行外接其他天線 > * 自帶EEPROM記憶體,可儲存設定 > * 自帶電池,保持定位記錄存在 > * 自帶 Micro USB 接口,可直接連線電腦 > * 自帶信號擴大器 > * 支援SBAS > > 技術規格 > * 供電電壓:5 / 3.3 V > * 輸出頻率:1 - 10 Hz > * 信號頻道:1575.42 MHZ > * 通信鮑率:9600(可修改) > * 通信協議:NMEA0183(默認)/ UBX Binary > * 使用介面:UART/USB/I2C/SPI... > * 定位精度:2.5m CEP50 (有50%機率誤差在2.5m內) > * 導航靈敏度:-167 dBm > * 如須兼容RTK技術,以提升精度至毫米級,需擴充C94-M8P模組,或購入NEO-M8P > > 原理簡介 > > * GNSS是由衛星發射的信號,信號通常由三個主要部分組成:射頻信號、導航訊息和時間標記。射頻信號是由衛星發射的電磁波,其中包含了衛星的位置和時間信息。導航訊息則包含了衛星的軌道參數、衛星健康狀態等信息。時間標記則是用來同步GNSS接收器和衛星時鐘的。 > >* M8N GNSS模組通常由天線、接收器和處理器三個部分組成。天線用來接收衛星信號,接收器則負責將接收到的信號轉換成數字信號,並將其傳送到處理器進行處理和分析。處理器則通常由一個芯片和相關的軟件組成,可以解碼和處理來自多個衛星的信號,並通過特定的算法來計算接收器的位置、速度和時間等信息。 > >> M8N GNSS模組使用的定位和導航算法通常包括以下幾個步驟: > >* 衛星信號接收:M8N GNSS模組通過天線接收來自多個衛星的信號,並將其轉換成數字信號。 >> * 計算衛星位置:通過接收到的衛星信號,M8N GNSS模組可以計算每個衛星的位置和時間信息。 > >* 衛星幾何定位:在知道每個衛星的位置和時間信息後,M8N GNSS模組可以計算接收器的位置,使用的算法通常是三角測量或更高級的幾何定位算法。 >>* 精度提高:為了提高定位精度,M8N GNSS模組通常會使用不同的校正和過濾算法來處理和分析接收到的信號。例如,可以使用差分GPS技術、多路徑抑制算法、卡爾曼濾波等方法。 >>* 信息整合:M8N GNSS模組可以將接收到的GNSS信號與其他傳感器(例如加速度計、陀螺儀等)的信息進行整合,以提高定位和導航的精度和可靠性。 ## 簡單實作 ### 接腳說明 > GND -- GND > VCC -- 5V > TXD -- 10 > RXD -- 11 ### 程式碼 ``` c = #include <SoftwareSerial.h> #include <TinyGPS++.h> // 引入 "TinyGPS++" 函式庫 SoftwareSerial gpsSerial(10, 11); // 宣告軟體序列埠,用來和 GPS 模組通訊,RX 和 TX 分別設定為 10 和 11 腳位 // 註:RX需連接TX腳位;TX需連接RX腳位 TinyGPSPlus gps; // 宣告 "TinyGPS++" 物件,用來解析 GPS 資料 void setup() { Serial.begin(9600); // 初始化主要序列埠,並設定傳輸速率為 9600 gpsSerial.begin(9600); // 初始化 GPS 序列埠,並設定傳輸速率為 9600 } void loop() { while (gpsSerial.available() > 0) // 持續檢查 GPS 序列埠是否有資料可讀取 { if (gps.encode(gpsSerial.read())) // 如果有資料可讀取,則進行解析 { Serial.print("Location: "); // 印出定位資訊的標頭 Serial.print(gps.location.lat(), 6); // 印出緯度資訊,精確到小數點後 6 位 Serial.print(", "); // 印出分隔符號 Serial.println(gps.location.lng(), 6); // 印出經度資訊,精確到小數點後 6 位 Serial.print(", Altitude: "); // 印出海拔高度的標頭 Serial.print(gps.altitude.meters(), 1); // 印出海拔高度,精確到小數點後 1 位 Serial.print("m, Time: "); // 印出时间的標頭 Serial.print(gps.time.value()); // 印出时间,格式为 HHMMSS.SSS Serial.println(); } } } //註:如果顯示"Location: 0.000000, 0.000000"表示沒接收到GPS訊號,請移動天線 ``` ## 延伸實作 - [經緯座標顯示](/O0m2pPGyQdiLRevc9feegQ)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up