Taula de continguts:

Registrador GPS Arduino: 3 passos
Registrador GPS Arduino: 3 passos

Vídeo: Registrador GPS Arduino: 3 passos

Vídeo: Registrador GPS Arduino: 3 passos
Vídeo: NEO 6M GPS Module with Arduino : Introduction Video 2024, Juliol
Anonim
Registrador GPS Arduino
Registrador GPS Arduino
Registrador GPS Arduino
Registrador GPS Arduino

Hola nois, Estic superat per a petits projectes que permeten a la gent entendre molt més de la tecnologia que tenim cada dia.

Aquest projecte tracta sobre el funcionament del GPS i el registre SD. Vaig aprendre moltes coses només construint aquestes coses.

Hi ha moltes idees que obtindreu seguint aquest tutorial i molt més seguint l’enllaç que us proporciono per aprofundir en els temes.

Llavors, què és això? Simple: és un rastrejador GPS que registra posicions (amb altitud també), velocitat i data / hora en una microSD.

Què necessiteu:

- Arduino Nano (en realitat vaig fer servir un UNO per construir l’esbós, però són iguals!) - Adafruit GPS definitiu - Breakout de targeta MicroSD - Eines de soldadura (tot el que necessiteu per soldar) - Universal Stripboard (he utilitzat a 5x7cm) - Filferros

Tots aquests components són bastant econòmics, excepte el mòdul GPS. És a dir, entre 30 i 40 dòlars i és la part més cara. Fins i tot un nou joc de soldadors podria costar menys.

També existeix un escut Adafruit amb mòduls GPS i targeta SD junts. Si el voleu utilitzar, tingueu present que està fet per Arduino UNO, per tant, necessitareu un UNO i no un Nano. Tanmateix, no hi ha diferències en l'esbós.

Anem més enllà …

Pas 1: Connexió de components

Components de connexió
Components de connexió
Components de connexió
Components de connexió
Components de connexió
Components de connexió
Components de connexió
Components de connexió

Bé, després d’aconseguir els components, els haureu de connectar. Aquí podeu trobar els esquemes que són força clars. No obstant això, aquí també es mostra el pinout:

Breakout MicroSD

5V -> 5VGND -> GnnCLK -> D13DO -> D12DI -> D11CS -> D4 (Si utilitzeu l'escut, aquest està integrat a D10)

Desglossament GPS

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

Petites notes sobre aquest mòdul: Aquests dos nens petits es comuniquen a través de diferents camins amb l'Arduino. El GPS utilitza un serial TTL, del mateix tipus que fem servir quan ens comuniquem amb Arduino mitjançant el monitor serial, per això hem de declarar a través d’una biblioteca una nova sèrie (Tx i Rx) perquè el GPS vol utilitzar el 9600 per defecte i vull utilitzar-lo tampoc. El mòdul GPS transmet dades sempre i constantment, si està connectat. Aquesta és la part complicada que cal tractar, perquè si llegim una frase i la imprimim, podríem perdre la següent, també cal. Hem de tenir-ho en compte a l’hora de codificar!

La MicroSD es comunica mitjançant SPI (Serial Peripheral Interface), una altra forma de comunicar-se amb la placa. Aquest tipus de mòduls sempre fan servir CLK al D13, DO al D12 i DI al D11. De vegades, aquestes connexions tenen un nom diferent com CLK = SCK o SCLK (rellotge de sèrie), DO = DOUT, SIMO, SDO, SO, MTSR (tots els que indiquen sortida principal) i DI = SOMI, SDI, MISO, MRST (entrada principal). Finalment tenim el CS o SS que indica el pin a on enviem allò que volem escriure a la MicroSD. Si voleu utilitzar dos mòduls SPI diferents, només heu de diferenciar aquest pin per utilitzar-los tots dos. Per exemple, pantalla LCD I un MicroSd com el que estem utilitzant. També hauria de funcionar amb dos LCD diferents connectats a CS diferents.

Soldeu aquestes parts juntes al tauler i ja esteu a punt per penjar l’esbós.

Com podeu veure a l’esbós, he soldat alguns connectors femella dupont en lloc del component directe, és a dir, perquè en el futur potser voldria reutilitzar el component o canviar-ne un.

També he soldat el mòdul GPS amb els connectors en la direcció equivocada. Va ser culpa meva i no volia, però funciona i no vull arriscar-me a trencar-lo intentant dessoldar aquells bastards! Només cal soldar de la manera correcta i tot anirà bé.

Aquí hi ha un vídeo útil de soldadura: Guia de soldadura per a principiants Un vídeo sobre la dessoldació

Canal d’Adafruit Youtube, hi ha moltes coses interessants.

Quan soldeu, proveu d’utilitzar només la quantitat de metall que necessiteu, en cas contrari, faríeu un embolic. No tingueu por de fer-ho, potser comenceu per quelcom que no sigui tan car i que seguiu soldant coses diferents. El material adequat també marca la diferència.

Pas 2: el croquis

Primer, és clar, importem la biblioteca i construïm els seus objectes per treballar: SPI.h serveix per comunicar-se amb mòduls SPI, SD és la biblioteca MicroSD i Adafruit_GPS és la biblioteca del mòdul GPS. SoftwareSerial.h és per crear un port sèrie mitjançant programari. La sintaxi és "mySerial (TxPin, RxPin);". Cal indicar l’objecte GPS cap a una sèrie (entre claudàtors). A continuació, es mostren els enllaços de les biblioteques per a l’Adafruit GPS breakout, el microSD breakout (per fer un treball net també heu de formatar la SD amb aquest programari de l’associació SD). Biblioteca de programari de sèrie (hauria d'incloure's a l'IDE).

NOTA: He tingut algun problema en intentar afegir molta informació en un fitxer o en utilitzar més de dos en l'esbós. No he formatat la SD amb aquest programari, potser això podria resoldre el problema. També he intentat afegir un altre sensor al dispositiu, un BMP280 (mòdul I2C), sense cap èxit. Sembla que l’ús del mòdul I2C fa que l’esbós sigui boig. Ja em vaig assabentar al fòrum Adafruit, però encara no vaig obtenir resposta.

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

Ara necessitem totes les nostres variables: les dues cadenes serveixen per llegir les dues frases que necessitem per calcular un munt d'informació útil del GPS. El caràcter correspon a les frases abans d’analitzar-les, les flotacions són per calcular les coordenades en graus (el GPS envia les coordenades d’ús en graus i minuts, les necessitem en graus per deixar la lectura a google earth). El chipSelect és el pin on connectem el CS de la targeta MicroSD. En aquest cas és D4, però si utilitzeu un escut SD, haureu de posar D10 aquí. La variable de fitxer és la que emmagatzemarà la informació del fitxer que estem utilitzant durant l'esbós.

Cadena NMEA1;

Cadena NMEA2; char c; flotador deg; flotador degWhole; flotador degDec; int chipSelect = 4; Arxiva mySensorData;

Ara declarem un parell de funcions per fer l'esbós una mica més elegant i menys desordenat:

Bàsicament fan el mateix: llegir frases NMEA. clearGPS () ignora tres frases i readGPS () en desa dues a les variables.

Vegem com: Un bucle while controla si hi ha noves frases NMEA al mòdul i llegeix el flux GPS fins que n'hi hagi. Quan hi ha una frase nova, sortim al bucle while, on la frase es llegeix, analitza i emmagatzema a les primeres variables NMEA. Immediatament fem el mateix per al següent, perquè el GPS es transmet constantment, no espera que estiguem a punt, no tenim temps per imprimir-lo immediatament

Això és molt important. No feu res abans d’emmagatzemar les dues frases, en cas contrari la segona s’acabaria corrompent o simplement s’equivocaria.

Després d’obtenir dues frases, les imprimim a la sèrie per controlar que va bé.

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 ()); }

Bé, ara que ja estem preparats, podem aconseguir la configuració ():

Primer: obrim la comunicació al Serial 115200 per a PC Arduino i al 9600 per al mòdul GPS Arduino. Segon: enviem tres ordres al mòdul GPS: el primer és tancar l’actualització de l’antena, el segon és sol·licitar només cadenes RMC i GGA (utilitzarem només aquelles que tinguin tota la informació de la qual necessitareu a GPS), la tercera i última ordre és establir la velocitat d’actualització a 1 HZ, suggerida per Adafruit.

Després, establim el pin D10 a OUTPUT, si i només si el pin CS del vostre model SD és diferent de D10. Immediatament després, configureu el CS al mòdul SD del pin chipSelect.

Executem les funcions readGPS () que inclouen cleanGPS ().

Ara és hora d’escriure alguna cosa als fitxers. Si el fitxer ja és a la targeta Sd, afegiu-hi una marca de temps. D’aquesta manera no hem de fer un seguiment de les sessions ni esborrar els fitxers cada vegada. Amb una marca de temps escrita dins de la funció de configuració, segur que només afegirem una separació als fitxers només una vegada per sessió.

NOTA: La biblioteca SD és força seriosa quant a obrir i tancar el fitxer cada vegada. Tingueu-ho present i tanqueu-lo cada vegada. Per obtenir més informació sobre la biblioteca, seguiu aquest enllaç.

D’acord, estem realment preparats per obtenir el nucli de la part de l’esbós de transmissió i registre.

configuració nul·la () {

Serial.begin (115200); GPS.begin (9600); // Envia ordres al mòdul GPS GPS.sendCommand ("$ PGCMD, 33, 0 * 6D"); GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA); GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); retard (1000); // només si el pin CS del vostre mòdul SD no està al pin 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.day); mySensorData.print ("."); mySensorData.print (GPS.month); mySensorData.print ("."); mySensorData.print (GPS.year); mySensorData.print ("-"); mySensorData.print (GPS.hour); mySensorData.print (":"); mySensorData.print (GPS.minute); mySensorData.print (":"); mySensorData.print (GPS.seconds); 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.day); mySensorData.print ("."); mySensorData.print (GPS.month); mySensorData.print ("."); mySensorData.print (GPS.year); mySensorData.print ("-"); mySensorData.print (GPS.hour); mySensorData.print (":"); mySensorData.print (GPS.minute); mySensorData.print (":"); mySensorData.print (GPS.seconds); mySensorData.println ("***"); mySensorData.close (); }}

Ara estem aconseguint el nucli de l’esbós.

De fet, és súper senzill.

Llegirem el flux GPS amb la funció readGPS (), ja que controlem si tenim una correcció igual a 1, vol dir que estem connectats amb un satèl·lit e. Si ho aconseguim, escriurem les nostres dades als fitxers. Al primer fitxer "NMEA.txt", només escrivim les frases en brut. Al segon fitxer, "GPDData.txt", afegim les coordenades (convertides amb les funcions que vam veure abans) i l'altitud. Aquesta informació és suficient per compilar un fitxer.kml per crear un camí a Google Earth. Tingueu en compte que tanquem els fitxers cada vegada que els obrim per escriure alguna cosa.

bucle buit () {

readGPS (); // Condizione if che controla se l'antenna ha segnale. Se si, procede amb la scrittura dei dati. if (GPS.fix == 1) {// Desa dades només si tenim una solució mySensorData = SD.open ("NMEA.txt", FILE_WRITE); // Apre il file per le frasi NMEA grezze mySensorData.println (NMEA1); // Scrive prima NMEA sul fitxer mySensorData.println (NMEA2); // Scrive seconda NMEA sul file mySensorData.close (); // Arxiu Chiude !!

mySensorData = SD.open ("GPSData.txt", FILE_WRITE);

// Converte e scrive la longitudine convLong (); mySensorData.print (deg, 4); // Escriviu la coordenada al fitxer gradi sul mySensorData.print (","); // Scrive una virgola per separare i dati Serial.print (deg); Serial.print (","); // Converte e scrive la latitudine convLati (); mySensorData.print (deg, 4); // Escriviu la coordenada al fitxer gradi sul mySensorData.print (","); // Scrive una virgola per separare i dati Serial.print (deg); Serial.print (","); // Scrive l'altitudine mySensorData.print (GPS.altitude); mySensorData.print (""); Serial.println (GPS.altitude); mySensorData.close (); }}

Ara que ja hem acabat, podeu penjar l’esbós, construir el dispositiu i gaudir-ne.

Tingueu en compte que cal utilitzar-lo amb el borad GPS cap al cel per obtenir una solució = 1 o bé hi podeu connectar una antena externa.

A més, tingueu en compte que, si teniu una solució, el llum vermell parpelleja cada 15 segons, si no, molt més ràpid (un cop cada 2-3 segons).

Si voleu aprendre alguna cosa més sobre les frases NMEA, seguiu el següent pas d'aquesta guia.

Pas 3: les frases NMEA i el fitxer.kml

El dispositiu i l’esbós estan complets, funcionen bé. Tingueu en compte que, per obtenir una solució (per tenir una connexió amb satèl·lits), la ruptura hauria de mirar cap al cel.

La petita llum vermella parpelleja cada 15 segons quan teniu una solució

Si voleu entendre millor les frases NMEA, podeu llegir més.

A l’esbós només fem servir dues frases, la GGA i la RMC. Són només un parell de les frases que transmet el mòdul GPS.

Vegem què hi ha en aquesta cadena:

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

RMC = Frase mínima recomanada C 123519 = Solució presa a les 12:35:19 UTC A = Estat A = actiu o V = Buit 4807.038, N = Latitud 48 graus 07.038 'N 01131.000, E = Longitud 11 graus 31.000' E 022.4 = Velocitat sobre el terra en nusos 084.4 = Angle de traçat en graus Cert 230394 = Data - 23 de març de 1994 003.1, W = Variació magnètica * 6A = Les dades de suma de control, sempre comencen per *

$ GPGGA, 123519, 4807.038, N, 01131.000, E, 1, 08, 0,9, 545,4, M, 46,9, M,, * 47

Dades de correcció del sistema de posicionament global GGA 123519 Correcció presa a les 12:35:19 UTC 4807.038, N Latitud 48 graus 07.038 'N 01131.000, E Longitud 11 graus 31.000' E 1 Qualitat de correcció: 0 = no vàlida; 1 = correcció GPS (SPS); 2 = correcció DGPS; 3 = Solució PPS; 4 = Cinemàtica en temps real; 5 = Float RTK; 6 = estimat (recompte) (funció 2.3); 7 = Mode d'entrada manual; 8 = Mode de simulació; 08 Nombre de satèl·lits seguits 0,9 Dilució horitzontal de la posició 545,4, Altitud M, Metres, per sobre del nivell mitjà del mar 46,9, M Altura del geoide (nivell mitjà del mar) per sobre de l’el·lipsoide WGS84 (camp buit) en segons des de l’última actualització del DGPS (camp buit)) Número d'identificació de l'estació DGPS * 47 les dades de suma de comprovació, sempre comencen per *

Com podeu veure, hi ha molta més informació que la que necessiteu allà. Mitjançant la biblioteca d'Adafruit, podeu trucar a algunes d'elles, com GPS.latitude o GPS.lat (latitud i lat hemisferi), o GPS.day/month/year/hour/minute/seconds/milliseconds… Feu un cop d'ull a Adafruit web per saber alguna cosa més. No és tan clar, però, seguint alguns consells de la guia dels mòduls GPS, podríeu trobar allò que necessiteu.

Què podem fer amb els fitxers que tenim? Fàcil: compileu un fitxer kml per mostrar un camí a Google Earth. Per fer-ho, només cal que copieu / passeu el codi que trobareu a continuació d’aquest enllaç (sota el paràgraf Camí), poseu les coordenades del fitxer GPDData.txt entre les etiquetes, deseu el fitxer amb l’extensió.kml i carregueu-lo a Google Earth.

NOTA: El llenguatge de marcatge.kml és senzill, si ja sabeu què és un llenguatge de marques, guardeu-vos el temps per llegir l’enllaç i la documentació anteriors, és realment interessant.

L’ús del kml consisteix a conèixer les seves etiquetes i arguments. Només he trobat la guia de Google, la que he enllaçat abans i la part essencial és definir l’estil entre les etiquetes i anomenar-la amb el signe # quan sigui el moment d’escriure les coordenades.

El fitxer que he afegit en aquesta secció és un.kml en què només podeu enganxar les vostres coordenades. tingueu en compte enganxar amb aquesta sintaxi: longitud, latitud, altitud

Recomanat: