Sadržaj:

Arduino GPS zapisnik: 3 koraka
Arduino GPS zapisnik: 3 koraka

Video: Arduino GPS zapisnik: 3 koraka

Video: Arduino GPS zapisnik: 3 koraka
Video: Текстовые LCD дисплей на контроллере HD44780, Уроки Arduino 2024, Srpanj
Anonim
Arduino GPS zapisivač
Arduino GPS zapisivač
Arduino GPS zapisivač
Arduino GPS zapisivač

Bok ljudi, Iznimno sam uzbuđen zbog malih projekata koji omogućuju ljudima da zapravo razumiju mnogo više tehnologije koju svakodnevno imamo.

Ovaj projekt govori o probijanju GPS -a i SD bilježenju. Puno sam naučio samo gradeći ove stvari.

Mnogo je predodžbi koje ćete steći nakon ovog vodiča, a mnogo više slijedeći vezu koju dajem da biste dublje ušli u teme.

Pa, što je to? Jednostavno: GPS tragač koji bilježi pozicije (s visinom), brzinu i datum/vrijeme na microSD -u.

Što će vam trebati:

- Arduino Nano (zapravo sam koristio UNO za izradu skice, ali oni su isti!)- Adafruit ultimativni proboj GPS-a- Probijanje MicroSD kartice- Alati za lemljenje (sve što vam je potrebno za lemljenje)- Univerzalna traka (koristio sam 5x7 cm)- Žice

Sve te komponente su prilično jeftine, osim GPS modula. To je oko 30-40 dolara i najskuplji je dio. Čak bi i novi set lemilica mogao koštati manje.

Postoji i Adafruit štit s modulima GPS -a i SD kartice zajedno. Ako ga želite koristiti, imajte na umu da je napravljen za Arduino UNO, stoga će vam trebati UNO, a ne Nano. Ipak, nema razlike u skici.

Idemo dalje…

Korak 1: Povezivanje komponenti

Povezivanje komponenti
Povezivanje komponenti
Povezivanje komponenti
Povezivanje komponenti
Povezivanje komponenti
Povezivanje komponenti
Povezivanje komponenti
Povezivanje komponenti

Pa, nakon što nabavite komponente, morat ćete ih spojiti. Ovdje možete pronaći prilično jasne sheme prevrtanja. Međutim, evo i pinouta:

Izbijanje MicroSD kartice

5V -> 5VGND -> GnnCLK -> D13DO -> D12DI -> D11CS -> D4 (Ako koristite štitnik, ovo je ugrađeno u D10)

GPS proboj

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

Male napomene o tim modulima: Ta dva dječaka komuniciraju različitim putevima s Arduinom. GPS koristi TTL Serial, istu vrstu koju koristimo kada komuniciramo s Arduinom putem Serial Monitor -a, zato moramo putem knjižnice deklarirati novu seriju (Tx i Rx) jer GPS želi koristiti 9600 prema zadanim postavkama, a mi želite ga koristiti i. GPS modul uvijek i stalno struji podatke, ako je priključen. Ovo je lukav dio za rješavanje, jer ako pročitamo rečenicu i nakon toga je ispišemo, mogli bismo izgubiti sljedeću, koja je također potrebna. Moramo to imati na umu pri kodiranju!

MicroSD komunicira putem SPI (serijsko periferno sučelje), još jedan način komunikacije s pločom. Takvi moduli uvijek koriste CLK na D13, DO na D12 i DI na D11. Ponekad te veze imaju različit naziv, poput CLK = SCK ili SCLK (serijski sat), DO = DOUT, SIMO, SDO, SO, MTSR (sve one označavaju glavni izlaz) i DI = SOMI, SDI, MISO, MRST (glavni ulaz). Konačno imamo CS ili SS koji označava pin na koji šaljemo ono što želimo napisati u MicroSD. Ako želite koristiti dva različita SPI modula, samo morate razlikovati ovaj pin da biste ih koristili oba. Na primjer, LCD zaslon I MicroSd poput ovog koji koristimo. Također bi trebao raditi pomoću dva različita LCD -a povezana na različite CS -ove.

Lepite ove dijelove zajedno na ploču i spremni ste za postavljanje skice!

Kao što možete vidjeti na skici, lemio sam neke dupont ženske konektore umjesto izravne komponente, to je zato što ću u budućnosti možda htjeti ponovno upotrijebiti komponentu ili je promijeniti.

Također sam lemio GPS modul s konektorima u pogrešnom smjeru, to je bila moja greška i nisam htio, ali radi i ne želim riskirati da ga slomim pokušavajući odlepiti ta mala kopilad! Samo lemite na pravi način i sve će biti u redu!

Evo nekoliko korisnih video zapisa o lemljenju: Vodič za lemljenje za početnikeVideo o odmrzavanju

Adafruit Youtube kanal, ima puno zanimljivih stvari!

Kada lemite, pokušajte upotrijebiti samo količinu metala koja vam je potrebna, inače ćete napraviti nered. Ne bojte se toga, možda počnite s nečim što nije tako skupo, a zatim nastavite lemiti različite stvari. Pravi materijal također čini razliku!

Korak 2: Skica

Naravno, prvo uvozimo knjižnicu i izrađujemo njihove objekte za rad: SPI.h služi za komunikaciju sa SPI modulima, SD je knjižnica MicroSD i Adafruit_GPS je knjižnica GPS modula. SoftwareSerial.h služi za stvaranje serijskog porta putem softvera. Sintaksa je "mySerial (TxPin, RxPin);". GPS objekt mora biti usmjeren na serijski broj (u zagradama). Ovdje su veze knjižnica za Adafruit GPS proboj, MicroSD prekid (da biste obavili čist posao, također biste trebali formatirati SD pomoću ovog softvera iz SD asocijacije) i Softverska serijska knjižnica (trebala bi biti uključena u IDE).

NAPOMENA: Suočio sam se s nekim problemom kada sam pokušao dodati mnogo podataka u jednu datoteku ili koristiti više od dvije datoteke u skici. Nisam formatirao SD s tim softverom, možda bi to moglo riješiti problem. Također, pokušao sam dodati još jedan senzor u uređaj, BMP280 (I2C modul), ali bez uspjeha. Čini se da upotreba I2C modula čini skicu ludom! Već sam se pitao o tome na forumu Adafruit, ali još uvijek nisam dobio odgovor.

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

Sada su nam potrebne sve naše varijable: Dva niza služe za čitanje dviju rečenica koje su nam potrebne za izračunavanje hrpe korisnih informacija iz GPS -a. Znak služi za skladištenje rečenica prije njihove raščlanjivanja, plutači su za izračunavanje koordinata u stupnjevima (GPS šalje koordinate korištenja u stupnjevima i minutama, trebaju nam u stupnjevima za čitanje na Google Earthu). ChipSelect je pin na koji priključujemo CS kartice MicroSD. U ovom slučaju to je D4, ali ako koristite SD štit, ovdje ćete morati staviti D10. Varijabla datoteke je ona koja će pohraniti podatke o datoteci koju koristimo tijekom skice.

Niz NMEA1;

Niz NMEA2; char c; float deg; plovak degWhole; float degDec; int chipSelect = 4; Datoteka mySensorData;

Sada deklariramo nekoliko fo funkcija kako bismo skicu učinili elegantnijom i manje neurednom:

Oni u osnovi rade isto: čitaju rečenice NMEA -e. clearGPS () zanemaruje tri rečenice, a readGPS () sprema dvije od njih u varijable.

Pogledajmo kako: Dok petlja kontrolira postoje li nove NMEA rečenice na modulu i čita GPS tok dok ga nema. Kad postoji nova rečenica, nemamo petlje while, gdje se rečenica zapravo čita, raščlanjuje i skladišti u prvim NMEA varijablama. Odmah radimo isto za sljedeći, jer GPS neprestano struji, ne čeka nas da budemo spremni, nemamo vremena za ispis odmah

Ovo je veoma važno! Ne činite ništa prije nego što sastavite obje rečenice, inače bi druga na kraju bila oštećena ili jednostavno pogrešna.

Nakon što smo dobili dvije rečenice, ispisujemo ih u seriji kako bismo provjerili ide li 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 (); Serijski.println (NMEA1); Serijski.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 ()); }

Pa, sad kad smo spremni, možemo proći kroz setup ():

Prvo: otvaramo komunikaciju na Serial 115200 za Arduino PC i na 9600 za GPS modul Arduino. Drugo: šaljemo tri naredbe GPS modulu: prva je da se isključi ažuriranje antene, druga je za traženje samo RMC i GGA niza (koristit ćemo samo one koje imaju sve informacije koje bi vam ikada trebale GPS), treća i posljednja naredba je postaviti brzinu ažuriranja na 1 HZ, koju je predložio Adafruit.

Nakon toga smo pin D10 postavili na OUTPUT, ako, i samo ako, CS pin vašeg SD modela nije D10. Odmah nakon toga postavite CS na SD modulu na čipu Odaberite pin.

Pokrećemo funkcije readGPS () koje uključuju cleanGPS ().

Sada je vrijeme da nešto napišete u datoteke! Ako je datoteka već na SD kartici, dodajte im vremensku oznaku. Na taj način ne moramo svaki put pratiti sesije niti brisati datoteke. S vremenskom oznakom ispisanom u funkciji postavljanja, sigurno ćemo dodati razdvajanje u datoteke samo jednom po sesiji.

NAPOMENA: SD biblioteka je prilično ozbiljna u pogledu otvaranja i zatvaranja datoteke svaki put! Imajte to na umu i svaki put ga zatvorite! Za više informacija o knjižnici slijedite ovu vezu.

U redu, stvarno smo spremni za dobivanje jezgre stream-and-log dijela skice.

void setup () {

Serial.begin (115200); GPS.početi (9600); // Slanje naredbi GPS modulu GPS.sendCommand ("$ PGCMD, 33, 0*6D"); GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA); GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); kašnjenje (1000); // samo ako CS pin vašeg SD modula nije na pin D10

pinMode (10, OUTPUT);

SD.početi (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.mjesec); mySensorData.print ("."); mySensorData.print (GPS.godina); mySensorData.print (" -"); mySensorData.print (GPS.sat); 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.mjesec); mySensorData.print ("."); mySensorData.print (GPS.godina); mySensorData.print (" -"); mySensorData.print (GPS.sat); mySensorData.print (":"); mySensorData.print (GPS.minuta); mySensorData.print (":"); mySensorData.print (GPS.sekunde); mySensorData.println ("***"); mySensorData.close (); }}

Sada dobivamo jezgru skice.

Super je jednostavno, doista.

Čitat ćemo GPS stream s funkcijom readGPS (), a zatim kontroliramo ako imamo popravak jednak 1, što znači da smo povezani sa satelitom e. Ako ga dobijemo, upisat ćemo naše podatke u datoteke. U prvu datoteku "NMEA.txt" upisujemo samo sirove rečenice. U drugu datoteku, "GPDData.txt", dodajemo koordinate (konvertirane s funkcijama koje smo ranije vidjeli) i nadmorsku visinu. Ti su podaci dovoljni za sastavljanje.kml datoteke za stvaranje puta na Google Earthu. Imajte na umu da datoteke zatvaramo svaki put kad smo ih otvorili da bismo napisali nešto!

void loop () {{100} {101}

readGPS (); // Condizione if che controlla se l'antenna ha segnale. Se si, procede con la scrittura dei dati. if (GPS.fix == 1) {// Spremajmo podatke samo ako imamo popravak 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 (stupnjevi, 4); // Skriviraj koordinate u datoteci gradila mySensorData.print (","); // Scrive una virgola per separare i dati Serial.print (deg); Serial.print (","); // Pretvori e scrive la latitudine convLati (); mySensorData.print (stupnjevi, 4); // Skriviraj koordinate u datoteci gradila mySensorData.print (","); // Scrive una virgola per separare i dati Serial.print (deg); Serial.print (","); // Scrive l'altitudine mySensorData.print (GPS.visina); mySensorData.print (""); Serial.println (GPS.visina); mySensorData.close (); }}

Sada kada smo završili, možete prenijeti skicu, sastaviti uređaj i uživati!

Imajte na umu da ga morate koristiti s GPS boradom okrenutim prema nebu kako biste dobili fix = 1, ili možete na njega priključiti vanjsku antenu.

Također imajte na umu da ako popravite, crveno svjetlo trepće svakih 15 sekundi, ako nemate, mnogo brže (jednom u 2-3 sekunde).

Ako želite saznati nešto više o rečenicama NMEA -e, samo slijedite sljedeći korak ovog vodiča.

Korak 3: NMEA rečenice i.kml datoteka

Uređaj i skica su potpuni, rade dobro. Imajte na umu da bi se za rješavanje problema (za uspostavu veze sa satelitima) proboj trebao okrenuti prema nebu.

Crveno svjetlo treperi svakih 15 sekundi kad popravite problem

Ako želite bolje razumjeti rečenice NMEA -e, mogli biste pročitati dalje.

U skici koristimo samo dvije rečenice, GGA i RMC. To su samo nekoliko rečenica koje GPS modul emitira.

Pogledajmo što je u tim nizovima:

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

RMC = Preporučena minimalna rečenica C 123519 = Popravak snimljen u 12:35:19 UTC A = Status A = aktivan ili V = Praznina 4807.038, N = Geografska širina 48 stupnjeva 07.038 'N 01131.000, E = Dužina 11 stupnja 31.000' E 022.4 = Brzina nad tlom u čvorovima 084.4 = Kut kolosijeka u stupnjevima Tačno 230394 = Datum - 23. ožujka 1994. 003.1, W = Magnetska varijacija *6A = Podaci o kontrolnom iznosu uvijek počinju sa *

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

GGA Globalni podaci o sustavu za pozicioniranje Podaci o popravcima 123519 Popravak snimljen u 12:35:19 UTC 4807.038, N Geografska širina 48 stupnjeva 07.038 'N 01131.000, E Dužina 11 stupnja 31.000' E 1 Kvaliteta popravka: 0 = neispravno; 1 = GPS popravak (SPS); 2 = DGPS popravak; 3 = PPS popravak; 4 = Kinematika u stvarnom vremenu; 5 = plovak RTK; 6 = procijenjeno (mrtva računica) (2.3 značajka); 7 = Način ručnog unosa; 8 = Način simulacije; 08 Broj satelita koji se prate 0,9 Horizontalno razrjeđivanje položaja 545,4, M nadmorska visina, metri, iznad srednje razine mora 46,9, M Visina geoida (srednja razina mora) iznad elipsoida WGS84 (prazno polje) vrijeme u sekundama od zadnjeg ažuriranja DGPS -a (prazno polje) DGPS ID broj stanice *47 podaci o kontrolnom iznosu, uvijek počinju s *

Kao što vidite, tamo postoji mnogo više informacija nego što vam je potrebno. Pomoću Adafruit biblioteke možete nazvati neke od njih, poput GPS.latitude ili GPS.lat (zemljopisna širina i širina polutke) ili GPS.day/month/year/hour/minute/seconds/milliseconds… Pogledajte Adafruit web stranice kako biste saznali nešto više. Nije tako jasno, ali slijedeći neke savjete u vodiču za GPS module, mogli biste pronaći ono što vam treba.

Što možemo učiniti s datotekama koje imamo? Jednostavno: sastavite kml datoteku da biste prikazali put na Google Earthu. Da biste to učinili, samo kopirajte/prođite kôd koji ćete pronaći na ovoj vezi (ispod odlomka Put), postavite svoje koordinate iz datoteke GPDData.txt između oznaka, spremite datoteku s.kml ekstenzijom i učitajte je na Google zemlja.

NAPOMENA:.kml jezik za označavanje je jednostavan, ako već znate što je jezik označavanja, odvojite vrijeme za čitanje prethodne veze i dokumentacije iznutra, zapravo je zanimljivo!

Korištenje kml znači znati njegove oznake i argumente. Pronašao sam samo Googleov vodič, onaj koji sam već povezao i bitan dio je definirati stil između oznaka i nazvati ga znakom # kad dođe vrijeme za upisivanje koordinata.

Datoteka koju sam dodao u ovom odjeljku je.kml u koju možete jednostavno zalijepiti svoje koordinate. imajte na umu da zalijepite ovu sintaksu: zemljopisna dužina, širina, nadmorska visina

Preporučeni: