Kazalo:

Arduino GPS zapisovalnik: 3 koraki
Arduino GPS zapisovalnik: 3 koraki

Video: Arduino GPS zapisovalnik: 3 koraki

Video: Arduino GPS zapisovalnik: 3 koraki
Video: LDmicro 22: платы Arduino с AVRDUDESS (программирование микроконтроллеров с помощью LDmicro) 2024, November
Anonim
Arduino GPS sekalnik
Arduino GPS sekalnik
Arduino GPS sekalnik
Arduino GPS sekalnik

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

Povezovanje komponent
Povezovanje komponent
Povezovanje komponent
Povezovanje komponent
Povezovanje komponent
Povezovanje komponent
Povezovanje komponent
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: