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, Novembar
Anonim
Arduino GPS zapisnik
Arduino GPS zapisnik
Arduino GPS zapisnik
Arduino GPS zapisnik

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

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