Arduino GPS naplózó: 3 lépés
Arduino GPS naplózó: 3 lépés
Anonim

Sziasztok srácok, Nagyon izgatott vagyok az olyan kis projektek miatt, amelyek lehetővé teszik az emberek számára, hogy valójában sokkal többet megértsenek a mindennapi technológiánkból.

Ez a projekt GPS kitörésről és SD naplózásról szól. Sokat tanultam, csak építeni ezeket a dolgokat.

Sok olyan elképzelés fog felmerülni, amelyet ez az oktatóanyag követ, és még sok más követi az általam megadott linket, hogy elmélyüljön a témákban.

Szóval, mi ez? Egyszerű: GPS nyomkövető, amely naplózza a pozíciókat (magassággal együtt), a sebességet és a dátumot/időt egy microSD -n.

Amire szüksége lesz:

- Arduino Nano (valójában egy UNO-t használtam a vázlat elkészítéséhez, de ezek ugyanazok!)- Adafruit végső GPS-kitörés- MicroSD-kártya-kitörés- Forrasztóeszközök (minden, amire szüksége van a forrasztáshoz)- Univerzális Stripboard (én használtam a 5x7cm)- Vezetékek

Mindezek az alkatrészek nagyon olcsók, kivéve a GPS modult. Ez körülbelül 30-40 dollár, és ez a legdrágább rész. Még egy új forrasztópáka is kevesebbe kerülhet.

Adafruit pajzs is létezik, GPS és SD kártya modulokkal együtt. Ha használni szeretné, ne feledje, hogy az Arduino UNO -hoz készült, ezért UNO -ra lesz szüksége, nem pedig Nano -ra. A vázlatban azonban nincs különbség.

Menjünk tovább…

1. lépés: Alkatrészek csatlakoztatása

Nos, miután megszerezte az alkatrészeket, csatlakoztatnia kell őket. Itt megtalálja a frizurázási rajzokat, amelyek elég egyértelműek. Itt van azonban a tipp is:

MicroSD kitörés

5V -> 5VGND -> GnnCLK -> D13DO -> D12DI -> D11CS -> D4 (Ha a pajzsot használja, ez a D10 beépített)

GPS kitörés

Vin -> 5VGnn -> GnnRx -> D2Tx -> D3

Apró megjegyzések ezekről a modulokról: Ez a két kisfiú különböző utakon kommunikál az Arduino -val. A GPS egy TTL sorozatot használ, ugyanazt a módszert, amelyet akkor használunk, amikor az Arduino -val kommunikálunk a soros monitoron keresztül, ezért egy könyvtáron keresztül új sorozatot kell bejelentenünk (Tx és Rx), mert a GPS alapértelmezés szerint a 9600 -at akarja használni. használni is szeretné. A GPS modul mindig és folyamatosan adatfolyamot továbbít, ha csatlakoztatva van. Ez a trükkös rész, amellyel foglalkozni kell, mert ha elolvasunk egy mondatot és kinyomtatjuk, elveszíthetjük a következőt, erre is szükség van. Ezt kódoláskor szem előtt kell tartanunk!

A MicroSD az SPI -n (Serial Peripheral Interface) keresztül kommunikál, ami egy másik módja a táblával való kommunikációnak. Az ilyen típusú modulok mindig CLK -t használnak a D13 -on, DO -t a D12 -en és DI -t a D11 -en. Néha ezeknek a kapcsolatoknak más a neve, például CLK = SCK vagy SCLK (soros óra), DO = DOUT, SIMO, SDO, SO, MTSR (mindezek a Master kimenetet jelzik) és DI = SOMI, SDI, MISO, MRST (Master Input). Végül megvan a CS vagy az SS, amely jelzi a PIN -kódot, ahová elküldjük, amit írni szeretnénk a MicroSD -re. Ha két különböző SPI modult szeretne használni, akkor csak meg kell különböztetnie ezt a tűt, hogy mindkettőt használhassa. Például az LCD képernyő ÉS egy olyan MicroSd, mint amilyen nálunk van. Két különböző LCD -hez csatlakoztatva is működnie kell.

Forrasztja össze ezeket a részeket a táblán, és készen áll a vázlat feltöltésére!

Amint a vázlaton látható, néhány dupont hüvelyes csatlakozót forrasztok a közvetlen komponens helyett, mert a jövőben lehet, hogy újra akarom használni az elemet, vagy cserélni kell.

A GPS -modult is rossz irányba forrasztottam a csatlakozókkal, ez az én hibám volt, és nem akartam, de működik, és nem akarom kockáztatni, hogy megtörjem, és megpróbálom forrasztani azokat a kis köcsögöket! Csak forrasztani a megfelelő módon, és minden rendben lesz!

Íme néhány hasznos forrasztási videó: Forrasztási útmutató kezdőknek Videó a forrasztóról

Adafruit Youtube csatorna, sok érdekes dolog van ott!

Forrasztáskor próbálja meg használni a szükséges mennyiségű fémet, különben rendetlenséget okoz. Ne féljen megtenni, talán kezdjen valami nem túl drága dologgal, és tartsa forrasztva a különböző dolgokat. A megfelelő anyag is különbséget tesz!

2. lépés: A vázlat

Először természetesen importáljuk a könyvtárat, és építjük fel az objektumaikat, hogy működjenek együtt: Az SPI.h az SPI modulokkal való kommunikációhoz, az SD a MicroSD könyvtár és az Adafruit_GPS a GPS modul könyvtára. A SoftwareSerial.h egy soros port létrehozására szolgál szoftveren keresztül. A szintaxis "mySerial (TxPin, RxPin);". A GPS -objektumot egy sorozatra kell mutatni (zárójelben). Itt találhatók a könyvtárak linkjei az Adafruit GPS -kitöréshez, a MicroSD -kitöréshez (a tiszta munka elvégzéséhez formázni kell az SD -t ezzel a szoftverrel az SD -társításból) és Szoftver soros könyvtár (szerepelnie kell az IDE -ben).

MEGJEGYZÉS: Némi problémával szembesültem, amikor sok információt próbáltam hozzáfűzni egy fájlhoz, vagy kettőnél több fájlt használtam a vázlatban. Nem formattáltam az SD -t ezzel a szoftverrel, talán ez megoldhatja a problémát. Ezenkívül megpróbáltam hozzáadni egy másik érzékelőt a készülékhez, egy BMP280 -at (I2C modul), sikertelenül. Úgy tűnik, hogy az I2C modul használata megőrjíti a vázlatot! Már az Adafruit fórumán is érdeklődtem erről, de még mindig nem kaptam választ.

#include "SPI.h" #include "SD.h" #include "Adafruit_GPS.h" #include "SoftwareSerial.h" SoftwareSerial mySerial (3, 2); Adafruit_GPS GPS (& mySerial);

Most minden változónkra szükségünk van: A két karakterlánc arra a két mondatra vonatkozik, amelyekből ki kell számolnunk egy csomó hasznos információt a GPS -ből. A karakter a mondatok tárolására szolgál az elemzés előtt, az úszók a koordináták fokban történő kiszámítására szolgálnak (a GPS elküldi a használati koordinátákat fokban és percben, szükségünk van rájuk fokokban, hogy a Google Earth -ben olvassuk). A chipSelect az a tű, amelyhez csatlakoztatjuk a MicroSD kártya CS -jét. Ebben az esetben a D4, de ha SD pajzsot használ, akkor ide kell tennie a D10 -et. A fájlváltozó az, aki tárolja a vázlat során használt fájl adatait.

String NMEA1;

String NMEA2; char c; float deg; float degWhole; float degDec; int chipSelect = 4; Fájl mySensorData;

Most néhány funkciót jelentünk be, hogy a vázlat egy kicsit elegánsabb és kevésbé rendetlen legyen:

Alapvetően ugyanazt teszik: olvassák az NMEA mondatokat. A clearGPS () figyelmen kívül hagy három mondatot, és a readGPS () kettőt elment a változókba.

Lássuk, hogyan: Egy while ciklus vezérli, hogy vannak -e új NMEA mondatok a modulon, és addig olvassa a GPS adatfolyamot, amíg van. Ha új mondat van, akkor a while cikluson kívül vagyunk, ahol a mondatot ténylegesen olvassuk, elemezzük és tároljuk az első NMEA változókban. Azonnal ezt tesszük a következőre is, mert a GPS folyamatosan folyik, nem várja, hogy készen álljunk, nincs időnk azonnal kinyomtatni

Ez nagyon fontos! Ne tegyen semmit, mielőtt összegyűjti mindkét mondatot, különben a második végül megsérül, vagy csak rossz.

Miután két mondatot kaptunk, kinyomtatjuk őket a sorozatban, hogy ellenőrizzék, hogy jól megy -e.

void readGPS () {

clearGPS (); while (! GPS.newNMEAreceived ()) {c = GPS.read (); } GPS.parse (GPS.lastNMEA ()); NMEA1 = GPS.lastNMEA (); while (! GPS.newNMEAreceived ()) {c = GPS.read (); } GPS.parse (GPS.lastNMEA ()); NMEA2 = GPS.lastNMEA (); Serial.println (NMEA1); Serial.println (NMEA2); } void clearGPS () {while (! GPS.newNMEAreceived ()) {c = GPS.read (); } GPS.parse (GPS.lastNMEA ()); while (! GPS.newNMEAreceived ()) {c = GPS.read (); } GPS.parse (GPS.lastNMEA ()); w while (! GPS.newNMEAreceived ()) {c = GPS.read (); } GPS.parse (GPS.lastNMEA ()); }

Nos, most, hogy mindennel készen állunk, végezhetjük a beállítást ():

Először: megnyitjuk a kommunikációt a 115200 -as sorozaton az Arduino PC -n és a 9600 -on a Arduino GPS -modulon. Másodszor: három parancsot küldünk a GPS modulnak: az első az antenna frissítésének leállítása, a második az RMC és a GGA karakterlánc kérése (csak azokat fogjuk használni, amelyek minden szükséges információval rendelkeznek GPS), a harmadik és utolsó parancs az Adafruit által javasolt frissítési arány 1 Hz -re állítása.

Ezt követően a D10 tűt OUTPUT -ra állítjuk, ha és csak akkor, ha az SD -modell CS -tűje nem D10. Közvetlenül ezután állítsa be a CS -t a chipSelect csap SD -modulján.

Futtatjuk a readGPS () függvényeket, amelyek tartalmazzák a cleanGPS () funkciót.

Most itt az ideje, hogy írjon valamit a fájlokba! Ha a fájl már az Sd -kártyán van, csatoljon hozzájuk időbélyeget. Ily módon nem kell minden alkalommal nyomon követni a munkameneteket, vagy törölni a fájlokat. A beállítási funkcióba írt időbélyegzővel biztosak vagyunk abban, hogy munkamenetenként egyszer csak elválasztást adunk a fájlokhoz.

MEGJEGYZÉS: Az SD könyvtár komolyan gondolja, hogy minden alkalommal megnyitja és bezárja a fájlt! Tartsa észben, és zárja be minden alkalommal! A könyvtár megismeréséhez kövesse ezt a linket.

Rendben, valójában készen állunk arra, hogy megkapjuk a vázlat adatfolyam-napló részének magját.

void setup () {

Sorozat.kezdet (115200); GPS.begin (9600); // Parancsok küldése a GPS modulhoz GPS.sendCommand ("$ PGCMD, 33, 0*6D"); GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA); GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); késleltetés (1000); // csak akkor, ha az SD -modul CS -tűje nincs a D10 -es tűn

pinMode (10, KIMENET);

SD.begin (chipSelect); readGPS (); if (SD.exists ("NMEA.txt")) {mySensorData = SD.open ("NMEA.txt", FILE_WRITE); mySensorData.println (""); mySensorData.print ("***"); mySensorData.print (GPS.nap); mySensorData.print ("."); mySensorData.print (GPS.hónap); mySensorData.print ("."); mySensorData.print (GPS.év); mySensorData.print (" -"); mySensorData.print (GPS.óra); mySensorData.print (":"); mySensorData.print (GPS.perc); mySensorData.print (":"); mySensorData.print (GPS.seconds); mySensorData.println ("***"); mySensorData.close (); } if (SD.exists ("GPSData.txt")) {mySensorData = SD.open ("GPSData.txt", FILE_WRITE); mySensorData.println (""); mySensorData.println (""); mySensorData.print ("***"); mySensorData.print (GPS.nap); mySensorData.print ("."); mySensorData.print (GPS.hónap); mySensorData.print ("."); mySensorData.print (GPS.év); mySensorData.print (" -"); mySensorData.print (GPS.óra); mySensorData.print (":"); mySensorData.print (GPS.perc); mySensorData.print (":"); mySensorData.print (GPS.seconds); mySensorData.println ("***"); mySensorData.close (); }}

Most megkapjuk a vázlat magját.

Ez szuper egyszerű, valóban.

A GPS adatfolyamot a readGPS () függvénnyel fogjuk olvasni, mint amit mi irányítunk, ha a javítás értéke 1, t azt jelenti, hogy műholddal vagyunk összekapcsolva. Ha megkaptuk, akkor a fájlokba írjuk az infóinkat. Az első "NMEA.txt" fájlba csak a nyers mondatokat írjuk. A második, "GPDData.txt" fájlban hozzáfűzzük a koordinátákat (a korábban látott függvényekkel konvertálva) és a magasságot. Ezek az információk elegendőek egy.kml fájl összeállításához, hogy útvonalat hozzanak létre a Google Földön. Ne feledje, hogy minden alkalommal, amikor megnyitottuk, bezárjuk a fájlokat, hogy írjunk valamit!

void loop () {

readGPS (); // Feltétel, ha che controlla se l'antenna ha segnale. Lásd: adatok feldolgozása. if (GPS.fix == 1) {// Csak akkor mentse az adatokat, ha javítással rendelkezünk mySensorData = SD.open ("NMEA.txt", FILE_WRITE); // Fájl megjelenítése a frasi NMEA grezze mySensorData.println (NMEA1); // Scrive prima NMEA sul fájl mySensorData.println (NMEA2); // Scrive seconda NMEA sul fájl mySensorData.close (); // Chiude fájl !!

mySensorData = SD.open ("GPSData.txt", FILE_WRITE);

// Converte e scrive la longitudine convLong (); mySensorData.print (fok, 4); // Keresse meg a koordinátát a MySensorData.print gradi sul fájlban (","); // Scrive una virgola per separare i data Serial.print (deg); Serial.print (","); // Converte e scrive la latitudine convLati (); mySensorData.print (fok, 4); // Keresse meg a koordinátát a MySensorData.print gradi sul fájlban (","); // Scrive una virgola per separare i data Serial.print (deg); Serial.print (","); // Scrive l'altitudine mySensorData.print (GPS.altitude); mySensorData.print (""); Serial.println (GPS.altitude); mySensorData.close (); }}

Most, hogy készen vagyunk, feltöltheti a vázlatot, megépítheti a készüléket és élvezheti!

Ne feledje, hogy a javításhoz 1 -el kell használni, ha a GPS borad az ég felé néz, vagy külső antennát csatlakoztathat hozzá.

Emellett ne feledje, hogy ha van javítás, a piros fény 15 másodpercenként villog, ha nem, sokkal gyorsabban (2-3 másodpercenként).

Ha többet szeretne megtudni az NMEA mondatokról, kövesse az útmutató következő lépését.

3. lépés: Az NMEA mondatok és a.kml fájl

A készülék és a vázlat kész, jól működnek. Ne feledje, hogy a javításhoz (a műholdakkal való kapcsolathoz) a kitörésnek az ég felé kell néznie.

A kis piros lámpa 15 másodpercenként villog, ha javítást kapott

Ha jobban szeretné megérteni az NMEA mondatokat, olvasson tovább.

A vázlatban csak két mondatot használunk, a GGA -t és az RMC -t. Ez csak néhány mondat, amit a GPS modul közvetít.

Lássuk, mi van a karakterláncban:

$ GPRMC, 123519, A, 4807.038, N, 01131.000, E, 022.4, 084.4, 230394, 003.1, W*6A

RMC = ajánlott minimális mondat a talaj felett csomókban 084.4 = Vágásszög fokban Igaz 230394 = Dátum - 1994. március 23. 003.1, W = Mágneses eltérés *6A = Az ellenőrző összeg adatai mindig *-al kezdődnek

$ GPGGA, 123519, 4807.038, N, 01131.000, E, 1, 08, 0.9, 545.4, M, 46.9, M,, *47

GGA globális helymeghatározó rendszer javítási adatai 123519 Javítás 12:35:19 UTC 4807.038, N Szélesség 48 fok 07.038 'N 01131.000, E Hosszúság 11 fok 31.000' E 1 Javítási minőség: 0 = érvénytelen; 1 = GPS javítás (SPS); 2 = DGPS javítás; 3 = PPS javítás; 4 = Valós idejű kinematika; 5 = Úszó RTK; 6 = becsült (halott számítás) (2.3 jellemző); 7 = Kézi beviteli mód; 8 = Szimulációs mód; 08 A nyomon követett műholdak száma 0,9 Az 545,4 pozíció vízszintes hígítása, M magasság, méter, átlagos tengerszint feletti szint 46,9, M A geoid magassága (átlagos tengerszint) a WGS84 ellipszoid (üres mező) fölött eltelt idő másodpercben az utolsó DGPS frissítés óta (üres mező) DGPS állomás azonosító száma *47 az ellenőrző összeg adatai, mindig *-al kezdődnek

Amint látja, ott sokkal több információ található, amire szüksége van. Az Adafruit könyvtárával hívhat néhányat, például a GPS.latitude vagy GPS.lat (szélességi és szélességi félgömb) vagy a GPS.day/month/year/hour/minute/seconds/milliseconds… Nézze meg az Adafruitot honlapon, hogy többet tudjon. Nem olyan egyértelmű, de a GPS -modulok útmutatójának néhány tippje után megtalálhatja a szükségeset.

Mit tehetünk a meglévő fájlokkal? Egyszerű: fordítson le kml fájlt, hogy megjelenítse az útvonalat a Google Earth alkalmazásban. Ennek érdekében csak másolja/mentse el az ezen a linken található kódot (az Útvonal bekezdés alatt), helyezze a koordinátákat a GPDData.txt fájlból a címkék közé, mentse a fájlt.kml kiterjesztéssel és töltse fel Google Föld.

MEGJEGYZÉS: A.kml jelölőnyelv egyszerű, ha már tudja, mi a jelölőnyelv, szánjon időt arra, hogy elolvassa az előző linket és dokumentációt, ez valóban érdekes!

A kml használata a címkék és érvek ismerete. Csak a Google útmutatót találtam, amelyet korábban linkeltem, és a lényeg az, hogy határozzuk meg a stílust a címkék között, és hívjuk el # jellel, amikor el kell írni a koordinátákat.

Az ebben a részben hozzáadott fájl egy.kml, amelybe beillesztheti a koordinátákat. ne feledje, hogy illessze be ezt a szintaxist: hosszúság, szélesség, magasság

Ajánlott: