Indholdsfortegnelse:

Arduino GPS Logger: 3 trin
Arduino GPS Logger: 3 trin

Video: Arduino GPS Logger: 3 trin

Video: Arduino GPS Logger: 3 trin
Video: SIM800L GPS Tracker | Send GPS Data To Server Using Arduino and PHP 2024, November
Anonim
Arduino GPS -logger
Arduino GPS -logger
Arduino GPS -logger
Arduino GPS -logger

Hej fyre, Jeg bliver super begejstret for små projekter, der giver folk mulighed for faktisk at forstå meget mere af den teknologi, vi har omkring hverdagen.

Dette projekt handler om GPS -breakout og SD -logning. Jeg lærte meget bare at bygge disse ting.

Der er mange forestillinger, som du vil få ved at følge denne vejledning, og meget mere efter det link, jeg giver, for at komme dybere i emnerne.

Så hvad er det? Enkel: Er en GPS -tracker, der registrerer positioner (også med højde), hastighed og dato/tid på et microSD.

Det skal du bruge:

- Arduino Nano (jeg brugte faktisk en UNO til at bygge skitsen, men de er bare det samme!)- Adafruit ultimative GPS-breakout- MicroSD-kortbrud- Loddeværktøjer (alt hvad du skal bruge til lodning)- Universal Stripboard (jeg brugte a 5x7cm)- Tråde

Alle disse komponenter er ret billige bortset fra GPS -modulet. Det er omkring 30-40 dollars og er den dyreste del. Selv et nyt loddejern sæt kunne koste mindre.

Der findes også et Adafruit -skjold med GPS- og SD -kortmoduler sammen. Hvis du vil bruge den, skal du huske på, at den er lavet til Arduino UNO, derfor har du brug for en UNO og ikke en Nano. Der er dog ingen forskel på skitsen.

Lad os gå videre …

Trin 1: Tilslutning af komponenter

Tilslutningskomponenter
Tilslutningskomponenter
Tilslutningskomponenter
Tilslutningskomponenter
Tilslutningskomponenter
Tilslutningskomponenter
Tilslutningskomponenter
Tilslutningskomponenter

Når du har fået komponenterne, skal du forbinde dem. Her kan du finde de fritzende skemaer, der er ret klare. Men her er også pinout:

MicroSD -udbrud

5V -> 5VGND -> GnnCLK -> D13DO -> D12DI -> D11CS -> D4 (Hvis du bruger skjoldet, er dette indbygget i D10)

GPS -breakout

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

Små noter om dette modul: De to små drenge kommunikerer gennem forskellige stier med Arduino. GPS'en bruger en TTL Serial, den samme slags, vi bruger, når vi kommunikerer med Arduino via Serial Monitor, hvorfor vi via et bibliotek skal erklære en ny serie (Tx og Rx), fordi GPS som standard vil bruge 9600, og vi vil også bruge det. GPS -modulet streamer altid og konstant data, hvis det er tilsluttet. Dette er den vanskelige del at håndtere, for hvis vi læser en sætning og udskriver den, kan vi miste den næste, det er også nødvendigt. Vi skal huske det, når vi koder!

MicroSD kommunikerer via SPI (Serial Peripheral Interface), en anden måde at kommunikere med kortet. Den slags modul bruger altid CLK på D13, DO på D12 og DI på D11. Nogle gange har disse forbindelser et andet navn som CLK = SCK eller SCLK (Serial Clock), DO = DOUT, SIMO, SDO, SO, MTSR (alle dem angiver Master Output) og DI = SOMI, SDI, MISO, MRST (Master Input). Endelig har vi CS eller SS, der angiver stiften, hvor vi sender det, vi vil skrive i MicroSD. Hvis du vil bruge to forskellige SPI -moduler, skal du bare differentiere denne pin for at bruge dem begge. For eksempel LCD -skærm OG en MicroSd som den, vi bruger. Det bør også fungere ved hjælp af to forskellige LCD'er, der er forbundet til forskellige CS'er.

Lod denne del sammen i tavlen, og du er klar til at uploade skitsen!

Som du kan se på skitsen, lodder jeg nogle dupont -hunstik i stedet for den direkte komponent, det er fordi jeg i fremtiden måske vil genbruge komponenten eller ændre en.

Jeg lod også GPS -modulet med stikene i den forkerte retning, det var min skyld, og jeg ville ikke, men det virker, og jeg vil ikke risikere at ødelægge det i forsøget på at desolde de små bastarder! Bare loddet på den rigtige måde, og alt vil være fint!

Her nogle nyttige loddevideoer: Loddevejledning til begyndere En video om aflodning

Adafruit Youtube -kanal, mange interessante ting der!

Når du lodder, skal du prøve at bruge lige den mængde metal, du har brug for, ellers kommer du til at lave rod. Vær ikke bange for at gøre det, start måske med noget, der ikke er så dyrt, og lad være med at lodde forskellige ting. Det rigtige materiale gør også forskellen!

Trin 2: Skitsen

Først importerer vi selvfølgelig biblioteket og bygger deres objekter til at arbejde med: SPI.h er til kommunikation med SPI -moduler, SD er MicroSD -biblioteket og Adafruit_GPS er biblioteket i GPS -modulet. SoftwareSerial.h er til oprettelse af en seriel port via software. Syntaksen er "mySerial (TxPin, RxPin);". GPS -objektet skal peges på en føljeton (i parenteserne). Her er bibliotekernes links til Adafruit GPS -breakout, MicroSD -breakout (for at gøre et rent stykke arbejde skal du også formatere SD'en med denne software fra SD -forening) og Software Serielt bibliotek (det skal inkluderes i IDE).

BEMÆRK: Jeg stod over for et problem, da jeg forsøgte at tilføje mange oplysninger i en fil eller bruge mere end to filer i skitsen. Jeg formaterede ikke SD'en med den software, måske kunne det løse problemet. Jeg forsøgte også at tilføje en anden sensor i enheden, et BMP280 (I2C -modul), uden held. Det ser ud til at bruge I2C -modul gør skitsen til at gå amok! Jeg vidste allerede om det i Adafruit -forummet, men jeg fik stadig ikke noget svar.

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

Nu har vi brug for alle vores variabler: De to strenge er til læsning af de to sætninger, som vi skal bruge til at beregne en masse nyttige oplysninger fra GPS'en. Rødningen er til lager for sætningerne, før den analyseres, flyderne er til beregning af koordinaterne i grader (GPS sender brugskoordinater i grader og minutter, vi har brug for dem i grader for lad aflæsningen i google earth). ChipSelect er stiften, hvor vi tilslutter CS'en på MicroSD -kortet. I dette tilfælde er D4, men hvis du bruger et SD -skjold, skal du sætte D10 her. Filvariablen er den, der vil lagre informationen om den fil, vi bruger under skitsen.

Strenge NMEA1;

Strenge NMEA2; char c; float deg; flyde degHele; float degDec; int chipSelect = 4; Fil mySensorData;

Nu erklærer vi et par funktioner for at gøre skitsen lidt mere elegant og mindre rodet:

De gør stort set det samme: læser NMEA -sætninger. clearGPS () ignorerer tre sætninger, og readGPS () gemmer to af dem i variablerne.

Lad os se hvordan: Et stykke loop styrer, om der er nye NMEA -sætninger på modulet og læser GPS -strømmen, indtil der er en. Når en ny sætning er der, er vi ude af mens -loop, hvor sætningen faktisk læses, analyseres og lagres i de første NMEA -variabler. Vi gør straks det samme for den næste, fordi GPS’en konstant streamer, den venter ikke på, at vi skal være klar, vi har ikke tid til at udskrive den med det samme

Dette er meget vigtigt! Gør ikke noget, før du lager begge sætninger, ellers ville den anden i sidste ende blive ødelagt eller bare forkert.

Efter at vi fik to sætninger, udskriver vi dem i føljetonen for at kontrollere, at det går godt.

void readGPS () {

clearGPS (); mens (! GPS.newNMEAreceived ()) {c = GPS.read (); } GPS.parse (GPS.lastNMEA ()); NMEA1 = GPS.lastNMEA (); mens (! 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 ()); mens (! GPS.newNMEAreceived ()) {c = GPS.read (); } GPS.parse (GPS.lastNMEA ()); w mens (! GPS.newNMEA modtaget ()) {c = GPS.read (); } GPS.parse (GPS.lastNMEA ()); }

Nu hvor vi alle er klar, kan vi komme igennem opsætningen ():

For det første: Vi åbner kommunikation om Serial 115200 til Arduino PC og på 9600 til GPS -modul Arduino. For det andet: Vi sender tre kommandoer til GPS -modulet: den første er at lukke antenneopdateringen, den anden er kun til at spørge RMC- og GGA -streng (vi vil kun bruge dem, som har alle de oplysninger, du nogensinde har brug for fra a GPS), er den tredje og sidste kommando at indstille opdateringshastigheden til 1HZ, foreslået af Adafruit.

Derefter satte vi stiften D10 til OUTPUT, hvis og kun hvis din SD -models CS -pin er en anden end D10. Umiddelbart efter skal du indstille CS på SD -modulet på chippen Vælg pin.

Vi kører funktionerne readGPS (), der indeholder cleanGPS ().

Nu er det tid til at skrive noget i filerne! Hvis filen allerede er på Sd -kortet, skal du tilføje et tidsstempel på dem. På denne måde behøver vi ikke at holde styr på sessionerne eller slette filerne hver gang. Med et tidsstempel skrevet inden for opsætningsfunktionen, tilføjer vi helt sikkert bare en adskillelse i filerne bare én gang pr. Session.

BEMÆRK: SD -biblioteket er ret seriøst med at åbne og lukke filen hver gang! Husk det, og luk det hver gang! Følg dette link for at lære mere om biblioteket.

Ok, vi er virkelig klar til at få kernen i stream-and-log-delen af skitsen.

ugyldig opsætning () {

Serial.begin (115200); GPS.begyndt (9600); // Send kommandoer til GPS -modulet GPS.sendCommand ("$ PGCMD, 33, 0*6D"); GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA); GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); forsinkelse (1000); // kun hvis dit SD -moduls CS -pin ikke er på pin D10

pinMode (10, OUTPUT);

SD.begin (chipSelect); readGPS (); hvis (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.år); mySensorData.print (" -"); mySensorData.print (GPS.time); mySensorData.print (":"); mySensorData.print (GPS.minute); mySensorData.print (":"); mySensorData.print (GPS.sekunder); mySensorData.println ("***"); mySensorData.close (); } hvis (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.år); mySensorData.print (" -"); mySensorData.print (GPS.time); mySensorData.print (":"); mySensorData.print (GPS.minute); mySensorData.print (":"); mySensorData.print (GPS.sekunder); mySensorData.println ("***"); mySensorData.close (); }}

Nu får vi kernen i skitsen.

Det er virkelig simpelt.

Vi kommer til at læse GPS -strømmen med readGPS () -funktionen, end vi kontrollerer, om vi har en rettelse lig med 1, det betyder, at vi er forbundet med en satellit e. Hvis vi fik det, skriver vi vores informationer i filerne. I den første fil "NMEA.txt" skriver vi kun de rå sætninger. I den anden fil, "GPDData.txt", tilføjer vi koordinaterne (konverteret med de funktioner, vi så før) og højden. Disse oplysninger er nok til at kompilere en.kml -fil til at oprette en sti på Google Earth. Bemærk, at vi lukker filerne hver gang vi åbnede det for at skrive noget!

void loop () {

readGPS (); // Condizione if che controlla se l'antenna ha segnale. Se si, procede con la scrittura dei dati. hvis (GPS.fix == 1) {// Gem kun data, hvis vi har en rettelse mySensorData = SD.open ("NMEA.txt", FILE_WRITE); // Tilbage til filen NMEA grezze mySensorData.println (NMEA1); // Scrive prima NMEA sul file mySensorData.println (NMEA2); // Scrive seconda NMEA sul file mySensorData.close (); // Chiude -fil !!

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

// Converte e scrive la longitudine convLong (); mySensorData.print (grader, 4); // Skrive koordinaten i gradi sul -fil mySensorData.print (","); // Scrive una virgola per separare in data Serial.print (deg); Serial.print (","); // Converte e scrive la latitudine convLati (); mySensorData.print (grader, 4); // Skrive koordinaten i gradi sul -fil mySensorData.print (","); // Scrive una virgola per separare in data Serial.print (deg); Serial.print (","); // Scrive l'altitudine mySensorData.print (GPS.altitude); mySensorData.print (""); Serial.println (GPS.altitude); mySensorData.close (); }}

Nu hvor vi alle er færdige, kan du uploade skitsen, bygge enheden og nyde den!

Bemærk, at du skal bruge den med GPS -borad mod himlen for at få en løsning = 1, eller du kan tilslutte en ekstern antenne til den.

Husk også, at hvis der er en løsning, blinker det røde lys hvert 15. sekund, hvis du ikke gør det, meget hurtigere (en gang hvert 2-3 sekund).

Hvis du vil lære noget mere om NMEA -sætningerne, skal du bare følge det næste trin i denne vejledning.

Trin 3: NMEA -sætningerne og.kml -filen

Enheden og skitsen er komplet, de fungerer fint. Husk, at for at få en løsning (for at have forbindelse til satellitter) skal udbruddet vende mod himlen.

Det lille røde lys blinker hvert 15. sekund, når du fik en løsning

Hvis du vil forstå NMEA -sætningerne bedre, kan du læse mere.

I skitsen bruger vi kun to sætninger, GGA og RMC. De er blot et par af de sætninger, som GPS -modulet streamer.

Lad os se, hvad der er i denne streng:

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

RMC = Anbefalet Mindste sætning C 123519 = Rettelse taget kl. 12:35:19 UTC A = Status A = aktiv eller V = Ugyldig 4807.038, N = Breddegrad 48 grader 07.038 'N 01131.000, E = Længdegrad 11 grader 31.000' E 022.4 = Hastighed over jorden i knob 084.4 = Sporvinkel i grader Sand 230394 = Dato - 23. marts 1994 003.1, W = Magnetisk variation *6A = Checksumdata, begynder altid med *

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

GGA Global Positioning System Fix Data 123519 Fix taken at 12:35:19 UTC 4807.038, N Latitude 48 deg 07.038 'N 01131.000, E Longitude 11 deg 31.000' E 1 Fix quality: 0 = ugyldig; 1 = GPS fix (SPS); 2 = DGPS fix; 3 = PPS fix; 4 = Kinematisk i realtid; 5 = Float RTK; 6 = estimeret (død opgørelse) (2,3 funktion); 7 = Manuel indtastningstilstand; 8 = Simuleringstilstand; 08 Antal satellitter, der spores 0,9 Horisontal fortynding af position 545,4, M Højde, Meter, over middelhavsniveau 46,9, M Geoidhøjde (middelhavsniveau) over WGS84 ellipsoid (tomt felt) tid i sekunder siden sidste DGPS -opdatering (tomt felt) DGPS -stations -id -nummer *47 kontrolsumdata, begynder altid med *

Som du kan se, er der meget mere information om, hvad du har brug for der. Ved hjælp af Adafruit -biblioteket kan du ringe til nogle af dem, f.eks. GPS.latitude eller GPS.lat (latitude og lat hemisphere) eller GPS.day/month/year/hour/minute/seconds/milliseconds… Tag et kig til Adafruit hjemmeside for at vide noget mere. Er ikke så klar, men efter nogle tip i GPS -modulernes vejledning kan du finde det, du har brug for.

Hvad kan vi gøre med filer, vi har? Let: kompilér en kml -fil for at vise en sti på Google Earth. For at gøre det skal du bare kopiere/forbi koden, du finder ved at følge dette link (under afsnittet Sti), sætte dine koordinater fra GPDData.txt -filen mellem tags, gemme filen med.kml -udvidelse og indlæse den Google Earth.

BEMÆRK:.kml -markeringssproget er enkelt. Hvis du allerede ved, hvad et markeringssprog er, skal du holde din tid til at læse det tidligere link og dokumentation inde, det er faktisk interessant!

Brug af kml handler om at kende dens tags og argumenter. Jeg fandt kun guiden fra Google, den jeg linkede før, og den væsentlige del er at definere stilen mellem tags og kalde den med # -tegn, når det er tid til at skrive koordinaterne.

Filen, jeg tilføjede i dette afsnit, er en.kml, hvor du bare kan indsætte dine koordinater. husk at indsætte med denne syntaks: længdegrad, breddegrad, højde

Anbefalede: