Kazalo:
Video: Arduino GPS zapisovalnik: 3 koraki
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:07
Zdravo družba, Postajam zelo navdušen nad majhnimi projekti, ki ljudem omogočajo, da dejansko razumejo veliko več tehnologije, ki jo imamo vsak dan.
Ta projekt govori o preboju GPS in beleženju SD. Veliko sem se naučil samo pri sestavljanju teh stvari.
Po tej vadnici boste pridobili veliko pojmov in veliko več po povezavi, ki jo posredujem, da se poglobite v teme.
Torej, kaj je to? Enostavno: Je sledilnik GPS, ki beleži položaje (tudi z nadmorsko višino), hitrost in datum/čas na kartici microSD.
Kaj boste potrebovali:
- Arduino Nano (dejansko sem uporabil UNO za izdelavo skice, vendar so enaki!)- Adafruit ultimativni preboj GPS- prelom kartice MicroSD- orodja za spajkanje (vse, kar potrebujete za spajkanje)- univerzalna tračna plošča (uporabil sem 5x7 cm)- Žice
Vse te komponente so precej poceni, razen modula GPS. To je približno 30-40 dolarjev in je najdražji del. Tudi nov komplet spajkalnika bi lahko stal manj.
Obstaja tudi ščit Adafruit z moduli GPS in SD kartico skupaj. Če ga želite uporabiti, ne pozabite, da je izdelan za Arduino UNO, zato potrebujete UNO in ne Nano. V skici pa ni razlike.
Gremo dalje…
1. korak: Povezovanje komponent
No, potem ko dobite komponente, jih morate povezati. Tu lahko vidite precej jasne sheme zmrzovanja. Tu pa je tudi pinout:
Zlom MicroSD kartice
5V -> 5VGND -> GnnCLK -> D13DO -> D12DI -> D11CS -> D4 (če uporabljate ščit, je ta vgrajen v D10)
Prelom GPS
Vin -> 5VGnn -> GnnRx -> D2Tx -> D3
Majhne opombe o tem modulu: Ta dva dečka z Arduinom komunicirata na različne poti. GPS uporablja serijo TTL, ki jo uporabljamo pri komunikaciji z Arduinom prek serijskega monitorja, zato moramo v knjižnici razglasiti novo serijo (Tx in Rx), ker želi GPS privzeto uporabljati 9600. ga tudi želite uporabiti. Modul GPS vedno in stalno pretaka podatke, če je priključen. To je težaven del, ki ga je treba obravnavati, ker če preberemo stavek in ga nato natisnemo, lahko izgubimo naslednjega, kar je tudi potrebno. Pri kodiranju moramo to upoštevati!
MicroSD komunicira prek SPI (serijski periferni vmesnik), ki je še en način komunikacije s ploščo. Takšni moduli vedno uporabljajo CLK na D13, DO na D12 in DI na D11. Včasih imajo te povezave različna imena, na primer CLK = SCK ali SCLK (zaporedna ura), DO = DOUT, SIMO, SDO, SO, MTSR (vse označujejo glavni izhod) in DI = SOMI, SDI, MISO, MRST (glavni vhod). Končno imamo CS ali SS, ki označuje pin, kamor pošljemo tisto, kar želimo zapisati v MicroSD. Če želite uporabiti dva različna modula SPI, morate le ločiti ta pin, da jih uporabite oba. Na primer LCD zaslon IN MicroSd, kakršen uporabljamo. Delovati mora tudi z uporabo dveh različnih LCD -jev, povezanih z različnimi CS -ji.
Spajate te dele skupaj na ploščo in pripravljeni ste za nalaganje skice!
Kot lahko vidite na skici, sem namesto neposredne komponente spajkal nekaj dupont ženskih konektorjev, ker bom v prihodnosti morda želel ponovno uporabiti komponento ali jo spremeniti.
Prav tako sem spajkal modul GPS s priključki v napačno smer, to je bila moja krivda in nisem hotel, vendar deluje in ne želim tvegati, da bi ga zlomil, ko bi odlepil te male barabe! Samo spajkajte na pravi način in vse bo v redu!
Tukaj je nekaj uporabnih videoposnetkov za spajkanje: Priročnik za spajkanje za začetnike Videoposnetek o spajkanju
Youtube kanal Adafruit, tam je veliko zanimivih stvari!
Ko spajkate, poskusite uporabiti samo količino kovine, ki jo potrebujete, sicer boste naredili nered. Ne bojte se tega, morda začnite z ne tako dragim in nato spajkajte različne stvari. Pravi material naredi razliko!
2. korak: Skica
Najprej seveda uvozimo knjižnico in zgradimo njihove objekte za delo: SPI.h je za komunikacijo z moduli SPI, SD je knjižnica MicroSD in Adafruit_GPS je knjižnica modula GPS. SoftwareSerial.h je namenjen ustvarjanju serijskih vrat prek programske opreme. Sintaksa je "mySerial (TxPin, RxPin);". Objekt GPS je treba kazati na serijsko številko (v oklepajih). Tukaj so povezave knjižnic za preboj Adafruit GPS, prekinitev MicroSD (za čisto delo morate tudi formatirati SD s to programsko opremo iz združenja SD) in Serijska knjižnica programske opreme (vključena mora biti v IDE).
OPOMBA: Ko sem poskušal dodati veliko informacij v eno datoteko ali uporabiti več kot dve datoteki v skici, sem naletel na nekaj težav. SD nisem formatiral s to programsko opremo, morda bi to lahko rešilo težavo. Prav tako sem poskušal v napravo dodati še en senzor, BMP280 (modul I2C), vendar brez uspeha. Zdi se, da uporaba modula I2C naredi skico noro! O tem sem se že vprašal na forumu Adafruit, vendar še vedno nisem dobil odgovora.
#include "SPI.h" #include "SD.h" #include "Adafruit_GPS.h" #include "SoftwareSerial.h" SoftwareSerial mySerial (3, 2); Adafruit_GPS GPS (& mySerial);
Zdaj potrebujemo vse naše spremenljivke: Dva niza sta namenjena branju dveh stavkov, ki ju potrebujemo za izračun kopice uporabnih informacij iz GPS -a. Znak je za zalogo stavkov pred njihovo razčlenjevanjem, plavajoči so za izračun koordinat v stopinjah (GPS pošilja koordinate uporabe v stopinjah in minutah, potrebujemo jih v stopinjah, da se bere v google Earth). ChipSelect je pin, kamor priključimo CS kartice MicroSD. V tem primeru je D4, če pa uporabljate ščit SD, morate tukaj postaviti D10. Spremenljivka datoteke je tista, ki bo shranjevala podatke o datoteki, ki jo uporabljamo med skico.
Niz NMEA1;
Niz NMEA2; char c; plavajoča stopinja; float degWhole; float degDec; int chipSelect = 4; Datoteka mySensorData;
Zdaj razglašamo nekaj fo funkcij, da naredimo skico nekoliko bolj elegantno in manj grdo:
V bistvu delajo enako: berejo stavke NMEA. clearGPS () ignorira tri stavke in readGPS () dva od njih shrani v spremenljivke.
Poglejmo, kako: zanka while nadzoruje, ali so v modulu novi stavki NMEA, in bere tok GPS, dokler ni. Ko je nov stavek, smo zunaj zanke while, kjer se stavek dejansko prebere, razčleni in založi v prvih spremenljivkah NMEA. Takoj naredimo enako za naslednjega, ker GPS neprestano pretaka, ne čaka, da bomo pripravljeni, nimamo časa, da ga takoj natisnemo
To je zelo pomembno! Ne naredite ničesar, preden založite oba stavka, sicer bi bil drugi sčasoma pokvarjen ali pa samo napačen.
Ko dobimo dva stavka, jih natisnemo v serijo, da preverimo, ali gre dobro.
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 ()); }
No, zdaj, ko smo vsi pripravljeni, lahko preidemo skozi setup ():
Najprej: odpremo komunikacijo na Serial 115200 za Arduino PC in na 9600 za GPS modul Arduino. Drugič: v modul GPS pošljemo tri ukaze: prvi je, da ustavimo posodobitev antene, drugi pa zahteva samo niz RMC in GGA (uporabili bomo le tiste, ki imajo vse informacije, ki bi jih kdaj potrebovali a GPS), tretji in zadnji ukaz je nastaviti hitrost posodabljanja na 1 HZ, kar predlaga Adafruit.
Po tem nastavimo zatič D10 na IZHOD, če in samo, če je CS pin vašega modela SD drugačen od D10. Takoj zatem nastavite CS na modulu SD na čipu Izberite pin.
Zaženemo funkcije readGPS (), ki vključujejo cleanGPS ().
Zdaj je čas, da nekaj zapišete v datoteke! Če je datoteka že na kartici Sd, ji dodajte časovni žig. Na ta način nam ni treba vsakič spremljati sej ali izbrisati datotek. S časovnim žigom, zapisanim v nastavitveni funkciji, bomo zagotovo dodali ločitev v datotekah le enkrat na sejo.
OPOMBA: Knjižnica SD je resna pri vsaki odpiranju in zapiranju datoteke! Imejte to v mislih in ga vsakič zaprite! Če želite izvedeti več o knjižnici, sledite tej povezavi.
V redu, res smo pripravljeni, da dobimo jedro dela skice »tok in dnevnik«.
void setup () {
Serial.begin (115200); GPS.začetek (9600); // pošiljanje ukazov modulu GPS GPS.sendCommand ("$ PGCMD, 33, 0*6D"); GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA); GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); zamuda (1000); // samo, če CS pin vašega modula SD ni na pin D10
pinMode (10, OUTPUT);
SD.začetek (chipSelect); readGPS (); if (SD.exists ("NMEA.txt")) {mySensorData = SD.open ("NMEA.txt", FILE_WRITE); mySensorData.println (""); mySensorData.print ("***"); mySensorData.print (GPS.dan); mySensorData.print ("."); mySensorData.print (GPS.mesec); mySensorData.print ("."); mySensorData.print (GPS. leto); mySensorData.print (" -"); mySensorData.print (GPS.hour); mySensorData.print (":"); mySensorData.print (GPS.minuta); mySensorData.print (":"); mySensorData.print (GPS.sekunde); 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.dan); mySensorData.print ("."); mySensorData.print (GPS.mesec); mySensorData.print ("."); mySensorData.print (GPS. leto); mySensorData.print (" -"); mySensorData.print (GPS.hour); mySensorData.print (":"); mySensorData.print (GPS.minuta); mySensorData.print (":"); mySensorData.print (GPS.sekunde); mySensorData.println ("***"); mySensorData.close (); }}
Zdaj dobimo jedro skice.
Res je super preprosto.
Prebrali bomo tok GPS s funkcijo readGPS (), nato pa nadziramo, če imamo popravek enak 1, vendar to pomeni, da smo povezani s satelitom e. Če ga dobimo, bomo svoje podatke zapisali v datoteke. V prvo datoteko "NMEA.txt" pišemo samo surove stavke. V drugo datoteko "GPDData.txt" dodamo koordinate (pretvorjene s funkcijami, ki smo jih videli prej) in nadmorsko višino. Ti podatki zadostujejo za sestavo datoteke.kml za ustvarjanje poti v programu Google Zemlja. Upoštevajte, da datoteke zapremo vsakič, ko jih odpremo, da napišemo kaj!
void loop () {
readGPS (); // Condizione if che controlla se l'antenna ha segnale. Se si, postopde con la scrittura dei dati. if (GPS.fix == 1) {// Shranimo podatke samo, če imamo popravek mySensorData = SD.open ("NMEA.txt", FILE_WRITE); // Apre il file per frasi NMEA grezze mySensorData.println (NMEA1); // Scrive prima NMEA sul file mySensorData.println (NMEA2); // Scrive seconda NMEA sul file mySensorData.close (); // Chiude datoteka !!
mySensorData = SD.open ("GPSData.txt", FILE_WRITE);
// Pretvori e scrive la longitudine convLong (); mySensorData.print (stop, 4); // Skriviraj koordinato v datoteko gradiva mySensorData.print (","); // Scrive una virgola per separare in dati Serial.print (deg); Serial.print (","); // Pretvori e scrive la latitudine convLati (); mySensorData.print (stop, 4); // Skriviraj koordinato v datoteko gradiva mySensorData.print (","); // Scrive una virgola per separare in dati Serial.print (deg); Serial.print (","); // Scrive l'altitudine mySensorData.print (GPS.vzgor); mySensorData.print (""); Serial.println (GPS.višina); mySensorData.close (); }}
Zdaj, ko smo končali, lahko naložite skico, sestavite napravo in uživate!
Upoštevajte, da ga morate uporabiti z GPS -om, ki gleda proti nebu, da dobite fix = 1, ali pa vanj priključite zunanjo anteno.
Upoštevajte tudi, da če popravite, rdeča lučka utripa vsakih 15 sekund, če ne, veliko hitreje (enkrat na 2-3 sekunde).
Če želite izvedeti nekaj več o stavkih NMEA, sledite naslednjemu koraku tega priročnika.
3. korak: Stavki NMEA in datoteka.kml
Naprava in skica sta popolna, delujeta dobro. Upoštevajte, da bi moral biti odpravljen (da bi imeli povezavo s sateliti) zlom proti nebu.
Rdeča lučka utripa vsakih 15 sekund, ko odpravite napako
Če želite bolje razumeti stavke NMEA, lahko preberete več.
V skici uporabljamo le dva stavka, GGA in RMC. To je le nekaj stavkov, ki jih pretaka modul GPS.
Poglejmo, kaj je v tem nizu:
$ GPRMC, 123519, A, 4807.038, N, 01131.000, E, 022.4, 084.4, 230394, 003.1, W*6A
RMC = priporočeni najnižji stavek C 123519 = popravek sprejet ob 12:35:19 UTC A = stanje A = aktivno ali V = praznina 4807.038, N = zemljepisna širina 48 stopinj 07.038 'N 01131.000, E = zemljepisna dolžina 11 stopinj 31.000' E 022.4 = hitrost nad tlemi v vozlih 084.4 = Kot sledi v stopinjah True 230394 = Datum - 23. marec 1994 003.1, W = Magnetna variacija *6A = Podatki o kontrolni vsoti se vedno začnejo z *
$ GPGGA, 123519, 4807.038, N, 01131.000, E, 1, 08, 0.9, 545.4, M, 46.9, M,, *47
Podatki o popravkih globalnega sistema za določanje položaja GGA 123519 Popravek sprejet ob 12:35:19 UTC 4807.038, N zemljepisna širina 48 stopinj 07.038 'N 01131.000, E dolžina 11 stopinj 31.000' E 1 kakovost popravka: 0 = neveljavno; 1 = popravek GPS (SPS); 2 = popravek DGPS; 3 = popravek PPS; 4 = kinematika v realnem času; 5 = plavajoči RTK; 6 = ocenjeno (mrtvi obračun) (2.3 značilnost); 7 = način ročnega vnosa; 8 = simulacijski način; 08 Število spremljanih satelitov 0,9 Horizontalno redčenje položaja 545,4, M nadmorska višina, metri, nad povprečno gladino morja 46,9, M Višina geoida (povprečna gladina morja) nad elipsoidom WGS84 (prazno polje) čas v sekundah od zadnje posodobitve DGPS (prazno polje) ID številka postaje DGPS *47 podatki o kontrolni vsoti, vedno se začnejo z *
Kot lahko vidite, obstaja veliko več informacij, ki jih potrebujete. S pomočjo knjižnice Adafruit lahko pokličete nekatere od njih, na primer GPS.latitude ali GPS.lat (zemljepisna širina in širina poloble) ali GPS.day/month/year/hour/minute/seconds/milliseconds …… Oglejte si Adafruit spletno stran, če želite izvedeti kaj več. Ni tako jasno, toda po nekaterih namigih v priročniku za module GPS lahko najdete, kar potrebujete.
Kaj lahko naredimo z datotekami, ki jih imamo? Enostavno: sestavite datoteko kml, da prikažete pot v programu Google Zemlja. Če želite to narediti, samo kopirajte/mimo kode, ki jo najdete po tej povezavi (pod odstavkom Pot), vnesite svoje koordinate iz datoteke GPDData.txt med oznake, shranite datoteko z razširitvijo.kml in jo naložite na Google Zemlja.
OPOMBA: Označevalni jezik.kml je preprost, če že veste, kaj je označevalni jezik, si vzemite čas za branje prejšnje povezave in dokumentacije v njem, pravzaprav je zanimiv!
Uporaba kml pomeni, da poznate njegove oznake in argumente. Našel sem le Googlov vodnik, tistega, ki sem ga povezal prej, in bistveni del je določiti slog med oznakami in ga poklicati z znakom #, ko bo čas za zapis koordinat.
Datoteka, ki sem jo dodal v tem razdelku, je.kml, v katero lahko preprosto prilepite svoje koordinate. ne pozabite prilepiti s to skladnjo: zemljepisna dolžina, zemljepisna širina, nadmorska višina
Priporočena:
Para Parama GPS (zapisovalnik podatkov EEPROM): 5 korakov
GPS Para Norma (Datalogger EEPROM): Enostaven zapisovalnik podatkov za hišne ljubljenčke GPS, ki temelji na zapisih arduino in EEPROM ================================ ======================== Sencillo datalogger GPS za maskote basado en arduino y grabacion in memory EEPROM
Zapisovalnik podatkov GPS Cap: 7 korakov (s slikami)
GPS Cap Data Logger: Tukaj je odličen vikend projekt, če se ukvarjate s trekingom ali dolgimi vožnjami s kolesom in potrebujete zapisovalnik podatkov GPS za spremljanje vseh vaših poti/voženj … Ko končate gradnjo in podatke prenesli iz modula GPS tr
DIY GPS zapisovalnik podatkov za vašo naslednjo vožnjo/pohodniško pot: 11 korakov (s slikami)
DIY GPS zapisovalnik podatkov za vas Naslednja vožnja/pohodniška pot: To je zapisovalnik podatkov GPS, ki ga lahko uporabljate za več namenov, če želite prijaviti svojo dolgo vožnjo, ki ste jo vzeli konec tedna, da si ogledate jesenske barve. ali pa imate vsako leto jeseni najljubšo pot, ki jo obiščete
Arduino GPS zapisovalnik: 6 korakov
Arduino GPS Logger: Ste kdaj želeli zapisati svoje koordinate in preveriti pot na zemljevidu? Preveriti pot avtomobila ali tovornjaka? Vidite sledenje kolesu po dolgi poti? (Ali pa vohuni za tistim, ki uporablja vaš avto? :)) Vse to je mogoče s pomočjo tega littl
GPS zapisovalnik Arduino OLed SD: 6 korakov (s slikami)
Zapisnik GPS Arduino OLed SD: Zapisnik GPS za prikaz vaše trenutne in povprečne hitrosti ter za sledenje vašim potim. Povprečna hitrost je za območja z nadzorom hitrosti poti. Arduino ima nekaj lepih funkcij, ki jih lahko kopirate:- Koordinate so shranjene v dnevni datoteki, ime datoteke je osnovno