Prosty projekt rejestrujący dane z modułu GPS (NEO 6M) na kartę SD. Lokalizacje są przechowywane są w pliku dane.csv, a plik będzie zawierał w jednym wierszu takie dane jak (długość;szerokość;data;godzina). Oczywiście każda nowa lokalizacja to nowa linijka, dzięki czemu bez problemu wykorzystasz te dane dalej. Sam interwał pobierania pozycji GPS jak i czasu ustalamy w linijce
#define reload,
oczywiście czas podajemy w milisekundach.
Połączenie Arduino -> GPS NEO-6M:
Arduino | GPS NEO-6M |
5V | VCC |
GND | GND |
D2 | Rx |
D3 | Tx |
Połączenie Arduino -> moduł czytnika microSD
Arduino | Moduł czytnika microSD |
D4 | CS |
D13 | SCK |
D11 | MOSI |
D12 | MISO |
5V/3,3V | Vcc |
GND | GND |
Kod programu:
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
#include <SPI.h>
#include <SD.h>
#define reload 5000 // co ile ma pobierać pozycję oczywiście mili sekundach
static const int RXPin = 2, TXPin = 3;
static const uint32_t GPSBaud = 9600;
TinyGPSPlus gps;
SoftwareSerial tt(RXPin, TXPin);
unsigned long czas;
void setup()
{
tt.begin(GPSBaud);
SD.begin(4);
}
void loop()
{
while (tt.available() > 0)
if (gps.encode(tt.read()))
{
if(gps.location.isValid() && gps.date.isValid() && gps.time.isValid() && czas < millis())
{
File dta = SD.open("dane.csv", FILE_WRITE);
if(dta)
{
dta.print(gps.location.lat(), 6);
dta.print(";");
dta.print(gps.location.lng(), 6);
dta.print(";");
if (gps.date.day() < 10) dta.print("0");
dta.print(gps.date.day());
dta.print(".");
if (gps.date.month() < 10) dta.print("0");
dta.print(gps.date.month());
dta.print(".");
dta.print(gps.date.year());
dta.print(";");
if (gps.time.hour() < 10) dta.print("0");
dta.print(gps.time.hour());
dta.print(":");
if (gps.time.minute() < 10) dta.print("0");
dta.print(gps.time.minute());
dta.print(":");
if (gps.time.second() < 10) dta.print("0");
dta.print(gps.time.second());
dta.println();
dta.close();
czas = millis() + reload;
}
}
}
}
Dodaj jeszcze cykliczne wysyłanie pozycji po GSM via sms i będzie komplecik.
Coś może będzie niebawem 😉