GPS چطور کار میکند؟ از ماهواره تا مختصات
سیستم GPS از شبکهای از ۳۱ ماهواره در مدار زمین استفاده میکند. گیرنده شما زمان رسیدن سیگنال از هر ماهواره را اندازه میگیرد و از روی اختلاف زمانها موقعیت را محاسبه میکند — این روش Trilateration نام دارد. با حداقل ۴ ماهواره دقت ~۲.۵m برای NEO-6M قابل دستیابی است.
خروجی GPS به فرمت NMEA 0183 است — رشتههای متنی که با کاما جدا میشوند. رایجترین جمله است که lat، lng، سرعت و زمان دارد. کتابخانه TinyGPS++ این رشتهها را برای شما parse میکند.
🛠️ کارت پروژه
| دقت | ~۲.۵m CEP (Circular Error Probable) |
| زمان اولین Fix | Cold: ~۳۰s — Warm: ~۵s |
| قیمت | ~۱۵۰K تومان (با آنتن خارجی) |
اتصال NEO-6M به Arduino
| NEO-6M | Arduino Uno |
|---|---|
| VCC | 3.3V |
| GND | GND |
| TX (GPS خروجی) | D4 (SoftwareSerial RX) |
| RX (GPS ورودی) | D3 (SoftwareSerial TX) |
کد کامل با TinyGPS++
#include <SoftwareSerial.h>
#include <TinyGPS++.h>
SoftwareSerial gpsSerial(4, 3); // RX=D4, TX=D3
TinyGPSPlus gps;
void setup(){
Serial.begin(115200);
gpsSerial.begin(9600);
Serial.println("انتظار برای Fix GPS...");
}
void loop(){
while(gpsSerial.available() > 0){
gps.encode(gpsSerial.read());
}
if(gps.location.isUpdated()){
Serial.print("Lat: "); Serial.print(gps.location.lat(), 6);
Serial.print(" Lng: "); Serial.print(gps.location.lng(), 6);
Serial.print(" Alt: "); Serial.print(gps.altitude.meters(), 1); Serial.print("m");
Serial.print(" Spd: "); Serial.print(gps.speed.kmph(), 1); Serial.print("km/h");
Serial.print(" Hdg: "); Serial.print(gps.course.deg(), 1); Serial.print("°");
Serial.print(" Sats: "); Serial.println(gps.satellites.value());
}
// بررسی اگر GPS اصلاً پاسخ نمیدهد
if(millis() > 10000 && gps.charsProcessed() < 10){
Serial.println("⚠️ هیچ دادهای از GPS نمیرسد — سیم TX/RX را چک کن!");
}
}
افزایش نرخ بهروزرسانی به ۵Hz
// ارسال دستور u-blox UBX برای تغییر به ۵Hz:
void setup(){
gpsSerial.begin(9600);
// دستور تغییر به ۵Hz (200ms interval):
uint8_t rate5hz[] = {
0xB5,0x62,0x06,0x08,0x06,0x00,
0xC8,0x00,0x01,0x00,0x01,0x00,
0xDE,0x6A
};
gpsSerial.write(rate5hz, sizeof(rate5hz));
delay(500);
}