Sadržaj:
Video: Arduino GPS zapisnik: 3 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:08
Zdravo momci, Postajem super uzbuđen zbog malih projekata koji omogućavaju ljudima da zapravo razumiju mnogo više tehnologije koju svakodnevno imamo.
Ovaj projekt govori o probijanju GPS -a i SD bilježenju. Naučio sam mnogo 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, šta je to? Jednostavno: Je li GPS praćenje koje bilježi pozicije (s visinom), brzinu i datum/vrijeme na microSD -u.
Šta će vam trebati:
- Arduino Nano (zapravo sam koristio UNO za izradu skice, ali oni su isti!)- Adafruit ultimativno probijanje GPS-a- Probijanje microSD kartice- Alati za lemljenje (sve što vam je potrebno za lemljenje)- Univerzalna traka (koristio sam 5x7cm)- Ž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 sa GPS i SD karticom 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
Pa, nakon što nabavite komponente, morat ćete ih spojiti. Ovdje možete pronaći prilično jasne sheme preklapanja. 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 sa Arduinom. GPS koristi TTL Serial, istu vrstu koju koristimo kada komuniciramo s Arduinom putem Serial Monitor -a, zato moramo preko biblioteke deklarirati novu serijsku verziju (Tx i Rx) jer GPS želi koristiti 9600 prema zadanim postavkama, a mi želite da ga koristite. GPS modul uvijek i stalno struji podatke, ako je priključen. Ovo je lukavi dio za rješavanje, jer ako pročitamo rečenicu i odštampamo je, 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 ekran 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 ponovo upotrijebiti komponentu ili je promijeniti.
Lemio sam i 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 odlemljivanju
Adafruit Youtube kanal, ima mnogo 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 čini razliku!
Korak 2: Skica
Naravno, prvo uvozimo biblioteku i gradimo njihove objekte za rad: SPI.h služi za komunikaciju sa SPI modulima, SD je biblioteka MicroSD i Adafruit_GPS je biblioteka GPS modula. SoftwareSerial.h služi za kreiranje serijskog porta putem softvera. Sintaksa je "mySerial (TxPin, RxPin);". GPS objekt mora biti usmjeren na serijski broj (u zagradama). Ovdje su veze biblioteka za Adafruit GPS probijanje, MicroSD prekid (da biste obavili čist posao, također biste trebali formatirati SD pomoću ovog softvera iz SD asocijacije) i Softverska serijska biblioteka (trebala bi biti uključena u IDE).
NAPOMENA: Suočio sam se s nekim problemom kada sam pokušao dodati mnogo informacija 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 sam pokušao 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 dvije rečenice koje su nam potrebne za izračunavanje gomile korisnih informacija iz GPS -a. Znak služi za skladištenje rečenica prije nego što ih raščlani, plovci su za izračunavanje koordinata u stupnjevima (GPS šalje koordinate korištenja u stupnjevima i minutama, trebaju nam u stupnjevima za čitanje u google Earthu). ChipSelect je pin na koji priključujemo CS MicroSD kartice. U ovom slučaju je D4, ali ako koristite SD štit, morat ćete ovdje staviti D10. Varijabla datoteke je ona koja će pohraniti podatke o datoteci koju koristimo tokom skice.
Niz NMEA1;
Niz NMEA2; char c; float deg; float 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 ne postoji. Kad je 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 je li sve u redu.
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 ()); }
Pa, sada kada 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 postavili pin D10 na OUTPUT, ako, i samo ako, CS pin vašeg SD modela je različit od 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 se datoteka već nalazi na SD kartici, dodajte im vremensku oznaku. Na ovaj način ne moramo svaki put pratiti sesije niti brisati datoteke. S vremenskom oznakom zapisanom u funkciji postavljanja, sigurni smo da ć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! Da biste saznali više o biblioteci, slijedite ovaj link.
U redu, stvarno smo spremni za dobivanje jezgre stream-and-log dijela skice.
void setup () {
Serial.begin (115200); GPS.početak (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 pinu D10
pinMode (10, OUTPUT);
SD.begin (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 dobijamo srž skice.
Zaista je super jednostavno.
Čitat ćemo GPS tok 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" pišemo samo sirove rečenice. U drugu datoteku, "GPDData.txt", dodajemo koordinate (konvertirane s funkcijama koje smo ranije vidjeli) i nadmorsku visinu. Te su informacije dovoljne za sastavljanje.kml datoteke za kreiranje putanje na Google Earthu. Imajte na umu da datoteke zatvaramo svaki put kada smo ih otvorili da bismo napisali nešto!
void loop () {{100} {101}
readGPS (); // Uslov ako se kontrola nalazi na anteni. Se si, procede con la scrittura dei dati. if (GPS.fix == 1) {// Spremamo podatke samo ako imamo popravak mySensorData = SD.open ("NMEA.txt", FILE_WRITE); // Spremi datoteku po frazi 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 longitudinski zapis u convLong (); mySensorData.print (stepeni, 4); // Skriviraj koordinate u datoteci gradila mySensorData.print (","); // Scrive una virgola per separare and date Serial.print (deg); Serial.print (","); // Pretvorite skriptu u latitudine convLati (); mySensorData.print (stepeni, 4); // Skriviraj koordinate u datoteci gradila mySensorData.print (","); // Scrive una virgola per separare and date Serial.print (deg); Serial.print (","); // Scrive l'altitudine mySensorData.print (GPS.altitude); mySensorData.print (""); Serial.println (GPS.visina); mySensorData.close (); }}
Sada kada smo završili, možete učitati 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 treperi svakih 15 sekundi, ako to ne učinite, 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 za rješavanje problema (za uspostavu veze sa satelitima) proboj trebao biti okrenut prema nebu.
Crveno svjetlo treperi svakih 15 sekundi kada popravite problem
Ako želite bolje razumjeti rečenice NMEA -e, možete pročitati dalje.
U skici koristimo samo dvije rečenice, GGA i RMC. To su samo nekoliko rečenica koje GPS modul emitira.
Pogledajmo šta je u tim nizovima:
$ GPRMC, 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 stepeni 07.038 'N 01131.000, E = Dužina 11 stepeni 31.000' E 022.4 = Brzina nad zemljom u čvorovima 084.4 = Ugao staze u stepenima Tačno 230394 = Datum - 23. mart 1994. 003.1, W = Magnetska varijacija *6A = Podaci o kontrolnom iznosu uvijek počinju sa *
$ GPGGA, 123519, 4807.038, N, 01131.000, E, 1, 08, 0.9, 545.4, M, 46.9, M,, *47
GGA podaci o fiksnom globalnom sistemu pozicioniranja 123519 Popravak snimljen u 12:35:19 UTC 4807.038, N Geografska širina 48 stepeni 07.038 'N 01131.000, E Dužina 11 stepeni 31.000' E 1 Kvalitet popravka: 0 = nevažeći; 1 = GPS popravak (SPS); 2 = DGPS popravak; 3 = PPS popravka; 4 = Kinematika u stvarnom vremenu; 5 = plovak RTK; 6 = procijenjeno (mrtva računica) (2.3 karakteristika); 7 = Ručni način unosa; 8 = Način simulacije; 08 Broj satelita koji se prate 0,9 Horizontalno razrjeđivanje pozicije 545,4, M Nadmorska visina, Metri, iznad srednjeg nivoa mora 46,9, M Visina geoida (srednji nivo 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 sa *
Kao što vidite, tamo postoji mnogo više informacija od onoga što vam treba. Pomoću Adafruit biblioteke možete pozvati neke od njih, poput GPS.latitude ili GPS.lat (zemljopisna širina i širina hemisfere) ili GPS.day/month/year/hour/minute/seconds/milliseconds… Pogledajte Adafruit web stranicu 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.
Šta možemo učiniti sa datotekama koje imamo? Jednostavno: sastavite kml datoteku kako biste prikazali putanju 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 šta je jezik označavanja, odvojite vrijeme da pročitate prethodnu vezu i dokumentaciju iznutra, to je zapravo 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 pozvati ga znakom # kada dođe vrijeme za pisanje 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čuje se:
DIY GPS zapisnik podataka za vašu sljedeću vožnju/pješačku stazu: 11 koraka (sa slikama)
DIY GPS zapisnik podataka za sljedeću vožnju/pješačku stazu: Ovo je GPS zapisnik podataka koji možete koristiti u više svrha, recimo ako želite prijaviti svoju dugu vožnju koju ste uzeli tokom vikenda kako biste provjerili boje jeseni. ili imate omiljenu stazu koju svake jeseni posjećujete i
Arduino GPS zapisnik: 6 koraka
Arduino GPS Logger: Jeste li ikada htjeli zapisati svoje koordinate i provjeriti svoju rutu na karti? Provjeriti rutu automobila ili kamiona? Vidite li praćenje bicikla nakon dugog putovanja? (Ili špijunirajte nekoga ko koristi vaš automobil? :)) Sve je to moguće uz pomoć ovog lita
Raspberry Pi GPS zapisnik: 10 koraka (sa slikama)
Raspberry Pi GPS Logger: Ova instrukcija vam objašnjava kako izgraditi kompaktni GPS logger sa malinom pi zero. Glavna prednost ovog sistema je što uključuje bateriju i stoga je vrlo kompaktan. Uređaj pohranjuje podatke u a.nmea datoteku. Sljedeći podaci o
GPS zapisnik Arduino OLed SD: 6 koraka (sa slikama)
GPS zapisnik Arduino OLed SD: GPS zapisnik za prikaz vaše trenutne i prosječne brzine te za praćenje vaših ruta. Prosječna brzina je za područja sa kontrolom brzine putanje. Arduino ima neke lijepe značajke koje možete kopirati:- Koordinate su pohranjene u dnevnoj datoteci, naziv datoteke je baza
Bežični GPS zapisnik podataka za divlje životinje: 9 koraka (sa slikama)
Bežični GPS zapisnik podataka za divlje životinje: U ovom uputstvu pokazat ćemo vam kako napraviti mali i jeftini GPS zapisnik na bazi Arduina, s bežičnom sposobnošću! Korištenje telemetrije za proučavanje kretanja divljih životinja može biti vrlo važno oruđe za biologe. Može vam reći gdje je