Tartalomjegyzék:

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

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

Videó: Arduino GPS naplózó: 3 lépés
Videó: GPS приемник GY-NEO6MV2, обзор и подключение 2024, Július
Anonim
Arduino GPS naplózó
Arduino GPS naplózó
Arduino GPS naplózó
Arduino GPS naplózó

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

Alkatrészek csatlakoztatása
Alkatrészek csatlakoztatása
Alkatrészek csatlakoztatása
Alkatrészek csatlakoztatása
Alkatrészek csatlakoztatása
Alkatrészek csatlakoztatása
Alkatrészek csatlakoztatása
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: