Sisällysluettelo:

Arduino GPS Logger: 3 vaihetta
Arduino GPS Logger: 3 vaihetta

Video: Arduino GPS Logger: 3 vaihetta

Video: Arduino GPS Logger: 3 vaihetta
Video: 🛰 GPS TRACKER С ОТПРАВКОЙ ДАННЫХ НА СЕРВЕР. АВТОНОМНЫЙ GPS НА ARDUINO. СВОИМИ РУКАМИ. 2024, Heinäkuu
Anonim
Arduino GPS -loggeri
Arduino GPS -loggeri
Arduino GPS -loggeri
Arduino GPS -loggeri

Hei kaverit, Olen erittäin innoissani pienistä projekteista, joiden avulla ihmiset voivat todella ymmärtää paljon enemmän jokapäiväistä tekniikkaamme.

Tämä projekti koskee GPS -katkaisua ja SD -kirjaamista. Olen oppinut paljon rakentamaan näitä asioita.

On monia käsityksiä, jotka saat tämän opetusohjelman jälkeen, ja paljon enemmän seuraamalla antamaani linkkiä, jotta pääset syvemmälle aiheisiin.

Niin, mikä se on? Yksinkertainen: Onko GPS -paikannin, joka kirjaa sijainnit (myös korkeuden), nopeuden ja päivämäärän/ajan microSD -kortille.

Mitä tarvitset:

- Arduino Nano (itse asiassa käytin UNO: ta luonnoksen rakentamiseen, mutta ne ovat aivan samat!)- Adafruit-lopullinen GPS-katkaisu- MicroSD-kortin katkaisu- Juototyökalut (kaikki juottamiseen tarvittavat)- Universal Stripboard (käytin 5x7cm)- Johdot

Kaikki nämä komponentit ovat melko halpoja GPS -moduulia lukuun ottamatta. Se on noin 30-40 dollaria ja on kallein osa. Jopa uusi juotosraudasarja voi maksaa vähemmän.

Mukana on myös Adafruit -suoja, jossa on GPS- ja SD -korttimoduulit yhdessä. Jos haluat käyttää sitä, muista, että se on tehty Arduino UNO: lle, joten tarvitset UNO: n eikä nanon. Luonnoksessa ei kuitenkaan ole eroa.

Mennään pidemmälle…

Vaihe 1: Osien liittäminen

Osien liittäminen
Osien liittäminen
Osien liittäminen
Osien liittäminen
Osien liittäminen
Osien liittäminen
Osien liittäminen
Osien liittäminen

No, kun olet saanut komponentit, sinun on yhdistettävä ne. Täältä löydät melko selkeät kaaviot. Tässä kuitenkin myös pinout:

MicroSD -murtuma

5V -> 5VGND -> GnnCLK -> D13DO -> D12DI -> D11CS -> D4 (Jos käytät suojaa, tämä on sisäänrakennettu D10)

GPS -katkaisu

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

Pieniä muistiinpanoja näistä moduuleista: Nämä kaksi pientä poikaa kommunikoivat eri polkuja Arduinon kanssa. GPS käyttää samaa TTL -sarjaa, jota käytämme kommunikoidessamme Arduinon kanssa sarjamonitorin kautta, minkä vuoksi meidän on ilmoitettava kirjaston kautta uusi sarja (Tx ja Rx), koska GPS haluaa käyttää 9600: ta oletuksena, ja me halua käyttää sitäkään. GPS -moduuli suoratoistaa aina ja jatkuvasti dataa, jos se on kytketty. Tämä on hankala kohta käsitellä, koska jos luemme lauseen ja tulostamme sen, voimme menettää seuraavan lauseen. Meidän on pidettävä se mielessä koodauksen aikana!

MicroSD kommunikoi SPI: n (Serial Peripheral Interface) kautta, joka on toinen tapa kommunikoida kortin kanssa. Tällaiset moduulit käyttävät aina CLK D13: ssa, DO D12: ssä ja DI D11: ssä. Joskus näillä yhteyksillä on eri nimi, kuten CLK = SCK tai SCLK (sarjakello), DO = DOUT, SIMO, SDO, SO, MTSR (kaikki osoittavat Master Output) ja DI = SOMI, SDI, MISO, MRST (Master Input). Lopuksi meillä on CS tai SS, joka osoittaa PIN -koodin, johon lähetämme haluamamme kirjoittaa MicroSD -kortille. Jos haluat käyttää kahta eri SPI -moduulia, sinun on vain erotettava tämä nasta, jotta voit käyttää molempia. Esimerkiksi LCD -näyttö JA käyttämämme kaltainen MicroSd. Sen pitäisi toimia myös käyttämällä kahta eri LCD -näyttöä, jotka on kytketty eri CS -laitteisiin.

Juotos nämä osat yhteen taululle ja olet valmis lataamaan luonnoksen!

Kuten luonnoksesta näkyy, juotan joitain dupont -naarasliittimiä suoran komponentin sijaan, koska tulevaisuudessa saatan haluta käyttää komponenttia uudelleen tai vaihtaa sen.

Juotin myös GPS -moduulin liittimiin väärään suuntaan, se oli minun vikani, enkä halunnut, mutta se toimii, enkä halua ottaa riskiä rikkoa sitä yrittäessäsi juottaa niitä pieniä paskiaisia! Vain juottaa oikealla tavalla ja kaikki on hyvin!

Tässä on hyödyllinen juotosvideo: Juotosopas aloittelijalle Video juottamisesta

Adafruit Youtube -kanava, siellä on paljon mielenkiintoista!

Kun juot, yritä käyttää vain tarvitsemasi määrä metallia, muuten aiot tehdä sotkun. Älä pelkää tehdä sitä, aloita ehkä jostain kalliista ja pidä juotoksena erilaisia juttuja. Oikealla materiaalilla on myös ero!

Vaihe 2: Luonnos

Ensin tietysti tuomme kirjaston ja rakennamme niiden objektit toimimaan: SPI.h on tarkoitettu kommunikoimaan SPI -moduulien kanssa, SD on MicroSD -kirjasto ja Adafruit_GPS on GPS -moduulin kirjasto. SoftwareSerial.h on sarjaportin luominen ohjelmiston kautta. Syntaksi on "mySerial (TxPin, RxPin);". GPS -objekti on osoitettava sarjaan (suluissa). Tässä on kirjastojen linkit Adafruitin GPS -katkaisuun, MicroSD -katkaisuun (puhtaan työn tekemiseksi sinun on myös alustettava SD tällä ohjelmistolla SD -yhdistyksestä) ja Ohjelmistosarjakirjasto (sen tulisi olla IDE: ssä).

HUOMAUTUS: Minulla oli ongelma, kun yritin liittää paljon tietoja yhteen tiedostoon tai käyttää luonnoksessa enemmän kuin kahta tiedostoa. En alustanut SD: tä kyseisellä ohjelmistolla, ehkä se voisi ratkaista ongelman. Lisäksi yritin lisätä laitteeseen toisen anturin, BMP280 (I2C -moduuli), ilman menestystä. Näyttää siltä, että I2C -moduulin käyttäminen tekee luonnoksesta hullun! Olin samaa mieltä jo Adafruit -foorumilla, mutta en silti saanut vastausta.

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

Nyt tarvitsemme kaikki muuttujamme: Kaksi merkkijonoa on tarkoitettu kahden lauseen lukemiseen, jotka meidän on laskettava joukko hyödyllistä tietoa GPS: stä. Merkki on varastossa olevat lauseet ennen jäsentämistä, kellukkeet ovat koordinaattien laskemiseksi asteina (GPS lähettää käyttökoordinaatit asteina ja minuutteina, tarvitsemme ne asteina, jotta luemme Google Earthissa). ChipSelect on nasta, johon liitämme MicroSD -kortin CS: n. Tässä tapauksessa on D4, mutta jos käytät SD -suojaa, sinun on asetettava D10 tähän. Tiedostomuuttuja on se, joka tallentaa luonnoksen aikana käyttämämme tiedoston tiedot.

Jono NMEA1;

Jono NMEA2; char c; kellua deg; kellua degWhole; kellua degDec; int chipSelect = 4; Tiedosto mySensorData;

Ilmoitamme nyt pari toimintoa, jotta luonnoksesta tulisi hieman tyylikkäämpi ja vähemmän sotkuinen:

He tekevät pohjimmiltaan samaa: lukevat NMEA -lauseita. clearGPS () jättää huomiotta kolme virkettä ja readGPS () tallentaa kaksi niistä muuttujiin.

Katsotaanpa kuinka: A -silmukka ohjaa, onko moduulissa uusia NMEA -lauseita ja lukee GPS -virran, kunnes sellainen on. Kun uusi lause on olemassa, poistumme while -silmukasta, jossa lause todella luetaan, jäsennetään ja tallennetaan ensimmäisiin NMEA -muuttujiin. Teemme saman heti seuraavalle, koska GPS suoratoistaa jatkuvasti, se ei odota meidän olevan valmiita, meillä ei ole aikaa tulostaa sitä heti

Tämä on hyvin tärkeää! Älä tee mitään ennen kuin tallennat molemmat lauseet, muuten toinen lopulta vioittuisi tai olisi vain väärä.

Kun olemme saaneet kaksi virkettä, tulostamme ne sarjaan hallitaksemme, että menee hyvin.

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

No, nyt kun olemme kaikki valmiita, voimme päästä läpi asennuksen ():

Ensinnäkin: avaamme viestinnän Serial 115200: lla Arduino PC: lle ja 9600: lla GPS -moduulille Arduino. Toiseksi: lähetämme kolme komentoa GPS -moduuliin: ensimmäinen on sulkea antennin päivitys, toinen on vain RMC- ja GGA -merkkijonon pyytäminen (aiomme käyttää vain niitä, joilla on kaikki tarvitsemasi tiedot GPS), kolmas ja viimeinen komento on asettaa päivitysnopeudeksi 1 Hz, Adafruitin ehdottama.

Tämän jälkeen asetamme nastan D10 tilaan OUTPUT, jos ja vain jos SD -mallisi CS -nasta on muu kuin D10. Aseta välittömästi sen jälkeen sirunvalintanastan SD -moduulin CS.

Suoritamme funktiot readGPS (), jotka sisältävät cleanGPS ().

Nyt on aika kirjoittaa jotain tiedostoihin! Jos tiedosto on jo SD -kortilla, liitä niihin aikaleima. Tällä tavalla meidän ei tarvitse seurata istuntoja tai poistaa tiedostoja joka kerta. Kun asetustoimintoon on kirjoitettu aikaleima, lisäämme tiedostoihin vain eron vain kerran istuntoa kohden.

HUOMAUTUS: SD -kirjasto suhtautuu melko vakavasti tiedoston avaamiseen ja sulkemiseen joka kerta! Pidä se mielessä ja sulje se joka kerta! Saat lisätietoja kirjastosta tästä linkistä.

Ok, olemme todella valmiita saamaan luonnoksen virta- ja lokiosan ytimen.

void setup () {

Sarja.alku (115200); GPS.alku (9600); // Lähetä komentoja GPS -moduulille GPS.sendCommand ("$ PGCMD, 33, 0*6D"); GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA); GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); viive (1000); // vain jos SD -moduulin CS -nasta ei ole tapissa D10

pinMode (10, LÄHTÖ);

SD.begin (chipSelect); readGPS (); if (SD.exists ("NMEA.txt")) {mySensorData = SD.open ("NMEA.txt", FILE_WRITE); mySensorData.println (""); mySensorData.print ("***"); mySensorData.print (GPS.päivä); mySensorData.print ("."); mySensorData.print (GPS.kuukausi); mySensorData.print ("."); mySensorData.print (GPS -vuosi); mySensorData.print (" -"); mySensorData.print (GPS.tunti); mySensorData.print (":"); mySensorData.print (GPS.minute); mySensorData.print (":"); mySensorData.print (GPS.sekuntia); 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äivä); mySensorData.print ("."); mySensorData.print (GPS.kuukausi); mySensorData.print ("."); mySensorData.print (GPS -vuosi); mySensorData.print (" -"); mySensorData.print (GPS.tunti); mySensorData.print (":"); mySensorData.print (GPS.minute); mySensorData.print (":"); mySensorData.print (GPS.sekuntia); mySensorData.println ("***"); mySensorData.close (); }}

Nyt saamme luonnoksen ytimen.

Se on todella yksinkertaista.

Aiomme lukea GPS -virran readGPS () -toiminnolla, kuin hallitsemme, jos korjaus on 1, t tarkoittaa, että olemme yhteydessä satelliittiin. Jos saamme sen, kirjoitamme tiedot tiedostoihin. Ensimmäiseen tiedostoon "NMEA.txt" kirjoitamme vain raakalauseet. Toisessa tiedostossa, "GPDData.txt", liitämme koordinaatit (muunnettu aiemmin nähtyillä funktioilla) ja korkeuden. Nämä tiedot riittävät kääntämään.kml -tiedoston polun luomiseksi Google Earthiin. Huomaa, että suljemme tiedostot aina, kun avasimme sen kirjoittaaksemme jotain!

void loop () {

readGPS (); // Edellytys, jos che controlla se l'antenna ha segnale. Se on, prosessi con la scrittura dei dati. if (GPS.fix == 1) {// Tallenna tiedot vain, jos meillä on korjaus mySensorData = SD.open ("NMEA.txt", FILE_WRITE); // Tiedoston esittely NMEA grezze mySensorData.println (NMEA1); // Etsi ensisijainen NMEA -sul -tiedosto mySensorData.println (NMEA2); // Etsi toinen NMEA -sul -tiedosto mySensorData.close (); // Chiude -tiedosto !!

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

// Muunna e scrive la longitudine convLong (); mySensorData.print (aste, 4); // Etsi koordinaatit gradi sul -tiedostossa mySensorData.print (","); // Scrive una virgola per separare i data Serial.print (deg); Serial.print (","); // Muunna e scrive la latitudine convLati (); mySensorData.print (aste, 4); // Etsi koordinaatit gradi sul -tiedostossa 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 (); }}

Nyt kun olemme kaikki valmiita, voit ladata luonnoksen, rakentaa laitteen ja nauttia siitä!

Huomaa, että sinun on käytettävä sitä GPS -boradin ollessa taivasta kohti saadaksesi korjauksen = 1, tai voit liittää ulkoisen antennin siihen.

Muista myös, että jos sinulla on korjaus, punainen valo vilkkuu 15 sekunnin välein, jos et, paljon nopeammin (kerran 2-3 sekunnissa).

Jos haluat oppia lisää NMEA -lauseista, seuraa tämän oppaan seuraavaa vaihetta.

Vaihe 3: NMEA -lauseet ja.kml -tiedosto

Laite ja luonnos ovat valmiit, ne toimivat hyvin. Muista, että korjauksen saamiseksi (yhteyden muodostamiseksi satelliiteihin) purkauksen tulisi olla taivasta kohti.

Pieni punainen valo vilkkuu 15 sekunnin välein, kun saat korjauksen

Jos haluat ymmärtää paremmin NMEA -lauseita, voit lukea lisää.

Luonnoksessa käytämme vain kahta virkettä, GGA ja RMC. Ne ovat vain muutamia lauseita, joita GPS -moduuli suoratoistaa.

Katsotaanpa mitä niissä on:

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

RMC = Suositeltu vähimmäislause C 123519 = Korjaus tehty 12:35:19 UTC A = Tila A = aktiivinen tai V = mitätön 4807.038, N = Leveysaste 48 astetta 07.038 'N 01131.000, E = Pituusaste 11 astetta 31.000' E 022.4 = Nopeus maanpinnan yläpuolella solmuina 084.4 = Radan kulma asteina Tosi 230394 = Päivämäärä - 23. maaliskuuta 1994 003.1, W = Magneettinen vaihtelu *6A = Tarkistussummatiedot alkavat aina *: lla

$ 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 Korjaus otettu 12:35:19 UTC 4807.038, N Leveysaste 48 astetta 07.038 'N 01131.000, E Pituusaste 11 astetta 31.000' E 1 Korjauksen laatu: 0 = virheellinen; 1 = GPS -korjaus (SPS); 2 = DGPS -korjaus; 3 = PPS -korjaus; 4 = reaaliaikainen kinemaattinen; 5 = kelluva RTK; 6 = arvioitu (kuollut laskenta) (2.3 -ominaisuus); 7 = Manuaalinen syöttötila; 8 = Simulaatiotila; 08 Seurattujen satelliittien lukumäärä 0,9 Vaakasuora laimennus asemasta 545,4, M Korkeus, Metrit, merenpinnan yläpuolella 46,9, M Geoidin korkeus (merenpinnan keskiarvo) WGS84 -ellipsoidin (tyhjä kenttä) yläpuolella sekunteina viimeisestä DGPS -päivityksestä (tyhjä kenttä)) DGPS -aseman tunnusnumero *47 tarkistussummatiedot, aina alussa *

Kuten näette, siellä on paljon enemmän tietoa siitä, mitä tarvitset siellä. Adafruit -kirjaston avulla voit soittaa joillekin niistä, kuten GPS.latitude tai GPS.lat (leveys- ja leveyspuolisko) tai GPS.day/month/year/hour/minute/seconds/milliseconds… Katso Adafruit verkkosivustolla tietääkseen jotain enemmän. Ei ole niin selvää, mutta GPS -moduulien oppaan vihjeiden avulla voit löytää tarvitsemasi.

Mitä voimme tehdä tiedostoilla, jotka meillä on? Helppo: koota kml -tiedosto näyttääksesi polun Google Earthissa. Voit tehdä sen vain kopioimalla/ohittamalla tämän linkin takaa löytyvän koodin (kappaleen Polku alla), asettamalla koordinaatit GPDData.txt -tiedostosta tunnisteiden väliin, tallentamalla tiedoston.kml -laajennuksella ja lataamalla sen Google Earth.

HUOMAUTUS:.kml -merkintäkieli on yksinkertainen. Jos tiedät jo, mikä on merkintäkieli, pidä aikaa lukea edellinen linkki ja dokumentaatio, se on todella mielenkiintoista!

KML: n käyttäminen edellyttää sen tunnisteiden ja argumenttien tuntemista. Löysin vain Googlen oppaan, jonka linkitin aiemmin, ja olennainen osa on määritellä tyyli tunnisteiden välillä ja kutsua sitä # -merkillä, kun on aika kirjoittaa koordinaatit.

Tässä osiossa lisännyt tiedosto on.kml, johon voit liittää vain koordinaatit. Muista liittää tähän syntaksiin: pituusaste, leveysaste, korkeus

Suositeltava: