GPS و Data Logger یعنی چه؟ (برای مبتدی)
GPS (Global Positioning System) یک سیستم ناوبری ماهوارهای است که موقعیت دقیق شما را روی زمین با استفاده از سیگنالهای چند ماهواره محاسبه میکند. محبوبترین ماژول GPS برای پروژههای آردوینو، NEO-6M ساخت شرکت u-blox سوئیس است. این ماژول دادههای موقعیت را در قالب رشتههای متنی استاندارد به نام NMEA ارسال میکند — مثلاً عرض و طول جغرافیایی، سرعت، ارتفاع و زمان UTC.
Data Logger یعنی دستگاهی که دادهها را در طول زمان ضبط و ذخیره میکند. وقتی GPS Logger میسازید، مختصات موقعیتتان را هر چند ثانیه یکبار روی یک فایل CSV روی کارت حافظه ذخیره میکنید. بعد میتوانید این فایل را در Google Earth یا نرمافزار GPS Visualizer باز کنید و مسیر طیشده را روی نقشه ببینید — دقیقاً مثل ردیابهای حرفهای.
این پروژه یک ابزار واقعاً کاربردی است: میتوانید آن را روی UGV، دوچرخه، یا حتی اتومبیل قرار دهید و مسیر را ثبت کنید.
محصولی که میسازید
یک GPS Data Logger کوچک و مستقل که مختصات، سرعت، ارتفاع و زمان را روی کارت MicroSD ذخیره میکند. با یک باتری ۹V کار میکند و برای تست UGV/UAV ایدهآل است.
- زمان ساخت: ۲ تا ۳ ساعت
- هزینه: ۶۰۰ هزار تا ۱ میلیون تومان
- دقت GPS: ~۲.۵ متر (NEO-6M)
- فرمت ذخیره: CSV قابل باز شدن در Excel و Google Earth
قطعات لازم (BOM)
| قطعه | مدل | نقش |
|---|---|---|
| میکروکنترلر | Arduino Nano V3 | پردازش داده |
| ماژول GPS | NEO-6M با آنتن سرامیکی | موقعیت + زمان |
| ماژول SD Card | MicroSD SPI Module | ذخیره داده |
| کارت حافظه | MicroSD 4GB یا بیشتر FAT32 | رسانه ذخیره |
| LED | آبی یا سبز ۵mm | نشانگر Fix GPS |
| مقاومت | ۲۲۰ اهم | محدودکننده جریان LED |
| باتری + کلیپس | 9V + کانکتور PP3 | تغذیه مستقل |
اتصالات سیمکشی
| قطعه | پین قطعه | پین Arduino Nano |
|---|---|---|
| NEO-6M GPS | TX | D4 (SoftwareSerial RX) |
| NEO-6M GPS | RX | D3 (SoftwareSerial TX) |
| NEO-6M GPS | VCC / GND | 3.3V / GND |
| SD Module | MOSI | D11 |
| SD Module | MISO | D12 |
| SD Module | SCK | D13 |
| SD Module | CS | D10 |
| LED وضعیت | آند (+ مقاومت ۲۲۰) | D8 |
کد کامل GPS Data Logger
#include <SoftwareSerial.h>
#include <TinyGPS++.h>
#include <SD.h>
#include <SPI.h>
SoftwareSerial gpsSerial(4, 3); // RX=D4, TX=D3
TinyGPSPlus gps;
File logFile;
const int SD_CS = 10;
const int LED_PIN = 8;
void setup() {
Serial.begin(9600);
gpsSerial.begin(9600);
pinMode(LED_PIN, OUTPUT);
if (!SD.begin(SD_CS)) {
Serial.println("SD init failed!");
while (1) { digitalWrite(LED_PIN, HIGH); delay(100); digitalWrite(LED_PIN, LOW); delay(100); }
}
logFile = SD.open("gpslog.csv", FILE_WRITE);
if (logFile) {
logFile.println("Date,Time,Lat,Lon,Altitude_m,Speed_kmh,Satellites");
logFile.close();
Serial.println("Log file created.");
}
}
void loop() {
while (gpsSerial.available() > 0) gps.encode(gpsSerial.read());
if (gps.location.isUpdated() && gps.location.isValid()) {
digitalWrite(LED_PIN, HIGH);
String row = "";
row += String(gps.date.day()) + "/" + String(gps.date.month()) + "/" + String(gps.date.year()) + ",";
row += String(gps.time.hour()) + ":" + String(gps.time.minute()) + ":" + String(gps.time.second()) + ",";
row += String(gps.location.lat(), 6) + ",";
row += String(gps.location.lng(), 6) + ",";
row += String(gps.altitude.meters(), 1) + ",";
row += String(gps.speed.kmph(), 1) + ",";
row += String(gps.satellites.value());
logFile = SD.open("gpslog.csv", FILE_WRITE);
if (logFile) { logFile.println(row); logFile.close(); }
Serial.println(row);
delay(1000);
digitalWrite(LED_PIN, LOW);
}
if (millis() > 10000 && gps.charsProcessed() < 10) {
Serial.println("No GPS data — check wiring!");
}
}
کتابخانههای مورد نیاز
- TinyGPS++ — از Arduino Library Manager نصب کنید: جستجو «TinyGPSPlus» توسط Mikal Hart
- SD — از پیش نصب است در Arduino IDE
- SoftwareSerial — از پیش نصب است
چکلیست تست
| تست | نتیجه | مشکل احتمالی |
|---|---|---|
| Serial Monitor پیام «Log file created» نشان میدهد؟ | بله | SD فرمت FAT32 نیست یا CS پین اشتباه |
| بعد از ۲ دقیقه در فضای باز LED روشن شد؟ | بله — GPS Fix گرفت | آنتن سرامیکی رو به آسمان باشد |
| فایل gpslog.csv روی SD کارت دارای داده است؟ | بله | کارت را در Excel باز کنید |
| مختصات در Google Maps درست است؟ | دقت ~۲-۵ متر | بین ساختمانها دقت کمتر است |