Sisukord:

Arduino GPS -i logija: 3 sammu
Arduino GPS -i logija: 3 sammu

Video: Arduino GPS -i logija: 3 sammu

Video: Arduino GPS -i logija: 3 sammu
Video: 5 Bahasa pemrograman tersulit didunia 😱😱 2024, September
Anonim
Arduino GPS -i logija
Arduino GPS -i logija
Arduino GPS -i logija
Arduino GPS -i logija

Tere kutid, Ma olen väga põnevil väikeste projektide puhul, mis võimaldavad inimestel tegelikult mõista palju rohkem tehnoloogiat, mis meil iga päev on.

See projekt käsitleb GPS -i purunemist ja SD -logimist. Ma õppisin selle materjali ehitamisel palju.

Selle õpetuse järgimisel saate palju arusaamu ja palju muud, kui järgite minu esitatud linki, et teemadesse süveneda.

Niisiis, mis see on? Lihtne: Kas GPS -jälgija, mis registreerib microSD -kaardil asukohad (ka kõrgusega), kiiruse ja kuupäeva/kellaaja.

Mida vajate:

- Arduino Nano (ma kasutasin eskiisi koostamiseks tegelikult UNO-d, kuid need on täpselt samad!)- Adafruit ülim GPS-i purunemine- MicroSD-kaardi purunemine- jootetööriistad (kõik, mida vajate jootmiseks)- universaalne ribalaud (kasutasin a 5x7cm)- juhtmed

Kõik need komponendid on üsna odavad, välja arvatud GPS -moodul. See on umbes 30-40 dollarit ja see on kõige kallim osa. Isegi uus jootekolb võib olla odavam.

Olemas on ka Adafruit'i kilp koos GPS- ja SD -kaardi moodulitega. Kui soovite seda kasutada, pidage meeles, et see on loodud Arduino UNO jaoks, seega vajate UNO -d, mitte nanot. Eskiisil pole siiski vahet.

Läheme kaugemale…

Samm: komponentide ühendamine

Komponentide ühendamine
Komponentide ühendamine
Komponentide ühendamine
Komponentide ühendamine
Komponentide ühendamine
Komponentide ühendamine
Komponentide ühendamine
Komponentide ühendamine

Pärast komponentide hankimist peate need ühendama. Siit leiate fritzeerimise skeemid, mis on üsna selged. Siin on ka näpunäide:

MicroSD väljalülitamine

5V -> 5VGND -> GnnCLK -> D13DO -> D12DI -> D11CS -> D4 (kui kasutate kilpi, on see sisseehitatud D10)

GPS -i purunemine

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

Väikesed märkmed nende moodulite kohta: Need kaks väikest poissi suhtlevad Arduinoga erinevaid teid pidi. GPS kasutab sama tüüpi TTL -seeriat, mida kasutame Arduinoga jadamonitori kaudu suhtlemisel, mistõttu peame raamatukogu kaudu kuulutama välja uue seeria (Tx ja Rx), kuna GPS soovib vaikimisi kasutada 9600 -d ja me tahaks ka seda kasutada. GPS -moodul voolab alati ja pidevalt andmeid, kui see on ühendatud. See on keeruline osa, millega tegeleda, sest kui me loeme lause ja trükime selle välja, võime järgmise kaotada. Peame seda kodeerimisel meeles pidama!

MicroSD suhtleb SPI (Serial Peripheral Interface) kaudu, mis on veel üks viis plaadiga suhtlemiseks. Sellised moodulid kasutavad D13 -l alati CLK -d, D12 -l DO -d ja D11 -l DI -d. Mõnikord on neil ühendustel erinev nimi, näiteks CLK = SCK või SCLK (jadakell), DO = DOUT, SIMO, SDO, SO, MTSR (kõik need tähistavad põhiväljundit) ja DI = SOMI, SDI, MISO, MRST (põhisisend). Lõpuks on meil CS või SS, mis näitab tihvti, kuhu me MicroSD -sse kirjutatava saadame. Kui soovite kasutada kahte erinevat SPI -moodulit, peate nende kahe kasutamiseks lihtsalt seda tihvti eristama. Näiteks LCD -ekraan JA selline MicroSd, nagu me kasutame. See peaks töötama ka kasutades kahte erinevat LCD -d, mis on ühendatud erinevate CS -dega.

Jootke need osad tahvlile kokku ja oletegi valmis visand üles laadima!

Nagu visandilt näete, jootan otsese komponendi asemel mõned dupont -naissoost pistikud, sest tulevikus võin soovida komponenti uuesti kasutada või seda muuta.

Ma jootsin ka GPS -mooduli pistikutega vales suunas, see oli minu süü ja ma ei tahtnud, aga see töötab ja ma ei taha riskida selle purustamisega, üritades neid väikseid värdjaid lahustada! Lihtsalt jootke õigel viisil ja kõik saab korda!

Siin on mõned kasulikud jootmisvideod: Jootmisjuhend algajateleVideo eemaldamise video

Adafruit Youtube kanal, seal on palju huvitavat!

Kui joote, proovige kasutada just seda metalli kogust, mida vajate, muidu lähete jamaks. Ärge kartke seda teha, võib -olla alustage millestki mitte nii kallist ja jätkake erinevate asjade jootmist. Õige materjal muudab ka!

2. samm: visand

Kõigepealt muidugi impordime raamatukogu ja ehitame nende objektid töötamiseks: SPI.h on mõeldud SPI moodulitega suhtlemiseks, SD on MicroSD raamatukogu ja Adafruit_GPS on GPS -mooduli teek. SoftwareSerial.h on mõeldud tarkvara kaudu jadapordi loomiseks. Süntaks on "mySerial (TxPin, RxPin);". GPS -objekt tuleb osutada seeriale (sulgudes). Siin on raamatukogude lingid Adafruit'i GPS -i ja MicroSD -jaotuse kohta (puhta töö tegemiseks peaksite SD -i selle tarkvara abil SD -vormingus vormindama) ja Tarkvara jadateek (see peaks olema IDE -s).

MÄRKUS. Mul tekkis mõningane probleem, kui üritasin lisada ühte faili palju teavet või kasutada visandil rohkem kui kahte faili. Ma ei vormindanud selle tarkvaraga SD -d, võib -olla see võib probleemi lahendada. Samuti proovisin seadmesse lisada teise anduri, BMP280 (I2C moodul), edutult. Tundub, et I2C mooduli kasutamine muudab visandi hulluks! Ma tegin sellest juba Adafruit foorumis, kuid ma ei saanud ikkagi vastust.

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

Nüüd vajame kõiki meie muutujaid. Kaks stringi on mõeldud kahe lause lugemiseks, mida peame GPS -ist hulga kasuliku teabe arvutamiseks. Sümbol on lause jaoks enne nende sõelumist, ujukid on koordinaatide arvutamiseks kraadides (GPS saadab kasutuskoordinaadid kraadides ja minutites, meil on neid vaja kraadides, et neid lugeda Google Earthis). ChipSelect on tihvt, kuhu ühendame MicroSD -kaardi CS -i. Sel juhul on D4, kuid kui kasutate SD -kilpi, peate siia panema D10. Faili muutuja on see, kes salvestab eskiisi ajal kasutatava faili teabe.

String NMEA1;

String NMEA2; sümbol c; float deg; ujuk degWhole; ujuk degDec; int chipSelect = 4; Fail mySensorData;

Nüüd kuulutame välja paar funktsiooni, et muuta visand pisut elegantsemaks ja vähem segaseks:

Nad teevad põhimõtteliselt sama: loevad NMEA lauseid. clearGPS () ignoreerib kolme lauset ja readGPS () salvestab neist kaks muutujatesse.

Vaatame, kuidas: A -tsükkel kontrollib, kas moodulil on uusi NMEA lauseid ja loeb GPS -voogu, kuni see on olemas. Kui uus lause on olemas, oleme väljaspool loopi, kus lause tegelikult loetakse, sõelutakse ja salvestatakse esimestesse NMEA muutujatesse. Teeme kohe sama ka järgmisega, sest GPS voogesitab pidevalt, see ei oota, et oleksime valmis, meil pole aega seda kohe printida

See on väga oluline! Ärge tehke midagi enne, kui olete mõlemad laused varunud, vastasel juhul oleks teine lõpuks rikutud või lihtsalt vale.

Kui oleme saanud kaks lauset, prindime need jadasse, et kontrollida, kas läheb hästi.

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

Nüüd, kui oleme kõik valmis, saame seadistuse () läbi teha:

Esiteks: me avame side Serial 115200 Arduino PC jaoks ja 9600 GPS -mooduli Arduino jaoks. Teiseks: saadame GPS -moodulile kolm käsku: esimene on antennivärskenduse sulgemine, teine ainult RMC ja GGA stringide küsimine (kasutame ainult neid, millel on kogu teave, mida te kunagi vajate) GPS), kolmas ja viimane käsk on seadistada Adafruit'i soovitatud värskendussageduseks 1 Hz.

Pärast seda seadisime tihvti D10 olekuks VÄLJUND, kui ja ainult siis, kui teie SD -mudeli CS -pin on muu kui D10. Kohe pärast seda seadistage kiibi SD -mooduli CS.

Käivitame funktsioonid readGPS (), mis sisaldavad cleanGPS ().

Nüüd on aeg midagi failidesse kirjutada! Kui fail on juba Sd -kaardil, lisage neile ajatempel. Sel viisil ei pea me iga kord seansse jälgima ega faile kustutama. Seadistusfunktsioonis kirjutatud ajatempli korral lisame kindlasti failidesse eraldamise ainult üks kord seansi kohta.

MÄRKUS. SD -raamatukogu suhtub faili avamisse ja sulgemisse iga kord tõsiselt! Pidage seda meeles ja sulgege see iga kord! Raamatukogu kohta lisateabe saamiseks järgige seda linki.

Ok, oleme tõesti valmis visandi voo ja logi osa tuuma saamiseks.

tühine seadistus () {

Seriaalne algus (115200); GPS.algus (9600); // Käskude saatmine GPS -moodulile GPS.sendCommand ("$ PGCMD, 33, 0*6D"); GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA); GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); viivitus (1000); // ainult siis, kui teie SD -mooduli CS -tihvt pole tihvti D10 peal

pinMode (10, VÄLJUND);

SD.begin (chipSelect); readGPS (); if (SD.exists ("NMEA.txt")) {mySensorData = SD.open ("NMEA.txt", FILE_WRITE); mySensorData.println (""); mySensorData.print ("***"); mySensorData.print (GPS.päev); mySensorData.print ("."); mySensorData.print (GPS.kuu); mySensorData.print ("."); mySensorData.print (GPS.aasta); mySensorData.print (" -"); mySensorData.print (GPS.tund); mySensorData.print (":"); mySensorData.print (GPS.minute); mySensorData.print (":"); mySensorData.print (GPS.sekundit); 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.päev); mySensorData.print ("."); mySensorData.print (GPS.kuu); mySensorData.print ("."); mySensorData.print (GPS.aasta); mySensorData.print (" -"); mySensorData.print (GPS.tund); mySensorData.print (":"); mySensorData.print (GPS.minute); mySensorData.print (":"); mySensorData.print (GPS.sekundit); mySensorData.println ("***"); mySensorData.close (); }}

Nüüd saame visandi tuuma.

See on ülilihtne, tõesti.

Me hakkame lugema GPS -voogu funktsiooni readGPS () abil, kui me kontrollime, kas meil on parandus 1, mis tähendab, et oleme ühendatud satelliidiga. Kui saame selle, kirjutame oma teabe failidesse. Esimesesse faili "NMEA.txt" kirjutame ainult toorlauseid. Teises failis "GPDData.txt" lisame koordinaadid (teisendatud funktsioonidega, mida nägime varem) ja kõrgus. Sellest teabest piisab.kml -faili koostamiseks, et luua tee Google Earthis. Pange tähele, et sulgeme failid iga kord, kui selle avasime, et midagi kirjutada!

void loop () {

readGPS (); // Tingimus, kui che controlla se l'antenna ha segnale. Se si, menetluse con la scrittura dei dati. if (GPS.fix == 1) {// Salvesta andmeid ainult siis, kui meil on parandus mySensorData = SD.open ("NMEA.txt", FILE_WRITE); // Apre il file for a frasi NMEA grezze mySensorData.println (NMEA1); // Scrive prima NMEA sul fail mySensorData.println (NMEA2); // Scrive seconda NMEA sul fail mySensorData.close (); // Chiude fail !!

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

// Teisenda e scrive la longitudine convLong (); mySensorData.print (aste, 4); // Otsige koordinaate gradi sul failis mySensorData.print (","); // Scrive una virgola per separare i data Serial.print (deg); Serial.print (","); // Converte e scrive la latitudine convLati (); mySensorData.print (aste, 4); // Otsige koordinaate gradi sul failis mySensorData.print (","); // Scrive una virgola per separare i data Serial.print (deg); Serial.print (","); // Scrive l'altitudine mySensorData.print (GPS.altitude); mySensorData.print (""); Serial.println (GPS.altitude); mySensorData.close (); }}

Nüüd, kui oleme kõik valmis, saate visandi üles laadida, seadme üles ehitada ja seda nautida!

Pange tähele, et paranduse = 1 saamiseks peate seda kasutama, kui GPS -borad on taeva poole, või võite selle külge ühendada välise antenni.

Samuti pidage meeles, et kui see on parandatud, vilgub punane tuli iga 15 sekundi järel, kui mitte, siis palju kiiremini (üks kord iga 2-3 sekundi järel).

Kui soovite NMEA lausete kohta midagi rohkem teada saada, järgige lihtsalt selle juhendi järgmist sammu.

3. samm: NMEA laused ja.kml -fail

Seade ja visand on valmis, nad töötavad hästi. Pidage meeles, et paranduse saamiseks (satelliitidega ühenduse loomiseks) peaks purunemine olema taeva poole.

Väike punane tuli vilgub iga 15 sekundi järel, kui olete paranduse saanud

Kui soovite NMEA lauseid paremini mõista, võite lugeda edasi.

Visandis kasutame ainult kahte lauset - GGA ja RMC. Need on vaid paar lauset, mida GPS -moodul voogesitab.

Vaatame, mis nendes stringides on:

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

RMC = soovitatav minimaalne lause C 123519 = parandus tehtud kell 12:35:19 UTC A = olek A = aktiivne või V = tühine 4807.038, N = laiuskraad 48 kraadi 07.038 'N 01131.000, E = pikkuskraad 11 kraadi 31.000' E 022.4 = kiirus üle maapinna sõlmedes 084.4 = rööbastee nurk kraadides True 230394 = kuupäev - 23. märts 1994 003.1, W = magnetiline variatsioon *6A = kontrollsumma andmed algavad alati tähega *

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

GGA globaalse positsioneerimissüsteemi parandusandmed 123519 Parandus tehtud kell 12:35:19 UTC 4807.038, N Laiuskraadid 48 kraadi 07.038 'N 01131.000, E Pikkuskraadid 11 kraadi 31.000' E 1 Paranduse kvaliteet: 0 = kehtetu; 1 = GPS -i parandus (SPS); 2 = DGPS -i parandus; 3 = PPS -i parandus; 4 = reaalajas kinemaatiline; 5 = Float RTK; 6 = hinnanguline (surnud arvestus) (2.3 omadus); 7 = käsitsi sisestamise režiim; 8 = Simulatsioonirežiim; 08 Jälgitavate satelliitide arv 0,9 Horisontaalne lahjendus positsioonis 545,4, M Kõrgus, meetrit, üle keskmise merepinna 46,9, M Geoidi kõrgus (keskmine merepind) WGS84 ellipsoidi (tühi väli) kohal pärast sekundit pärast viimast DGPS -i värskendust (tühi väli)) DGPS jaama ID number *47 kontrollsumma andmed, algavad alati tähega *

Nagu näete, on seal palju rohkem teavet selle kohta, mida vajate. Kasutades Adafruit'i raamatukogu, saate helistada mõnele neist, näiteks GPS.latitude või GPS.lat (laius- ja laiapoolkera) või GPS.day/month/year/hour/minute/seconds/milliseconds… Vaadake Adafruit'i veebisaidilt, et midagi rohkem teada saada. Ei ole nii selge, kuid järgides GPS -moodulite juhendis toodud näpunäiteid, leiate vajaliku.

Mida me saame teha failidega, mis meil on? Lihtne: koostage kml -fail, et näidata teed Google Earthis. Selleks kopeerige/möödage seda koodi, mille leiate selle lingi järel (lõigu Tee all), asetage oma koordinaadid failist GPDData.txt siltide vahele, salvestage fail laiendiga.kml ja laadige see Google Earth.

MÄRKUS.. Kml -märgistuskeel on lihtne. Kui teate juba, mis on märgistuskeel, jätke aega, et lugeda eelmist linki ja dokumentatsiooni, see on tegelikult huvitav!

KML -i kasutamine seisneb selle siltide ja argumentide tundmises. Leidsin ainult juhendi Google'ist, selle, mille varem linkisin, ja oluline osa on määratleda siltide vahel stiil ja helistada sellele # -märgiga, kui on aeg koordinaadid kirjutada.

Sellesse sektsiooni lisatud fail on.kml, kuhu saate oma koordinaadid lihtsalt kleepida. pidage meeles, et kleepida selle süntaksiga: pikkus, laius, kõrgus

Soovitan: