Turinys:

„Arduino“GPS registratorius: 3 žingsniai
„Arduino“GPS registratorius: 3 žingsniai

Video: „Arduino“GPS registratorius: 3 žingsniai

Video: „Arduino“GPS registratorius: 3 žingsniai
Video: Arduino video įėjimo kontroleris 2024, Liepa
Anonim
„Arduino“GPS registratorius
„Arduino“GPS registratorius
„Arduino“GPS registratorius
„Arduino“GPS registratorius

Sveiki vaikinai, Aš labai jaudinuosi dėl mažų projektų, kurie leidžia žmonėms iš tikrųjų suprasti daug daugiau kasdien naudojamų technologijų.

Šis projektas yra apie GPS atskyrimą ir SD registravimą. Aš daug išmokau tik kurdamas šiuos dalykus.

Yra daug sąvokų, kurias įgysite po šios pamokos, ir daug daugiau, sekdami mano pateiktą nuorodą, kad įsigilintumėte į temas.

Taigi, kas tai? Paprasta: yra GPS sekimo priemonė, registruojanti „microSD“korteles (taip pat ir aukštį), greitį ir datą/laiką.

Ko jums reikės:

- „Arduino Nano“(aš iš tikrųjų naudoju UNO eskizui sukurti, bet jie yra vienodi!)- „Adafruit“galutinis GPS išsiveržimas- „MicroSD“kortelės pertrauka- litavimo įrankiai (viskas, ko jums reikia lituoti)- universali juostelė (aš naudoju 5x7 cm)- laidai

Visi šie komponentai yra gana pigūs, išskyrus GPS modulį. Tai yra apie 30-40 dolerių ir yra brangiausia dalis. Net naujas lituoklio rinkinys gali kainuoti mažiau.

Taip pat yra „Adafruit“skydas su GPS ir SD kortelės moduliais. Jei norite jį naudoti, atminkite, kad jis skirtas „Arduino UNO“, todėl jums reikės UNO, o ne „Nano“. Tačiau eskize nėra skirtumo.

Eikime toliau…

1 žingsnis: komponentų prijungimas

Jungiamieji komponentai
Jungiamieji komponentai
Jungiamieji komponentai
Jungiamieji komponentai
Jungiamieji komponentai
Jungiamieji komponentai
Jungiamieji komponentai
Jungiamieji komponentai

Na, kai gausite komponentus, turėsite juos prijungti. Čia galite rasti gana aiškią šlifavimo schemą. Tačiau čia taip pat yra taškas:

„MicroSD“išsiveržimas

5V -> 5VGND -> GnnCLK -> D13DO -> D12DI -> D11CS -> D4 (jei naudojate skydą, jis įmontuotas į D10)

GPS išsiveržimas

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

Mažos pastabos apie tą modulį: Šie du maži berniukai bendrauja skirtingais keliais su „Arduino“. GPS naudoja tą pačią TTL seriją, kurią naudojame bendraudami su „Arduino“per serijinį monitorių, todėl turime bibliotekoje paskelbti naują seriją („Tx“ir „Rx“), nes GPS pagal nutylėjimą nori naudoti „9600“. irgi nori ja naudotis. GPS modulis visada ir nuolat transliuoja duomenis, jei yra prijungtas. Tai sudėtinga dalis, su kuria reikia susidoroti, nes jei perskaitysime sakinį ir jį išspausdinsime, galime prarasti kitą, kurio taip pat reikia. Koduodami turime to nepamiršti!

„MicroSD“palaiko ryšį per SPI (serijinę periferinę sąsają), dar vieną būdą bendrauti su lenta. Tokie moduliai visada naudoja CLK ant D13, DO ant D12 ir DI ant D11. Kartais tie ryšiai turi skirtingą pavadinimą, pvz., CLK = SCK arba SCLK (serijinis laikrodis), DO = DOUT, SIMO, SDO, SO, MTSR (visi jie nurodo pagrindinį išėjimą) ir DI = SOMI, SDI, MISO, MRST (pagrindinis įėjimas). Galiausiai turime CS arba SS, kuris nurodo kaištį, į kurį siunčiame tai, ką norime parašyti „MicroSD“. Jei norite naudoti du skirtingus SPI modulius, jums tereikia atskirti šį kaištį, kad galėtumėte naudoti abu. Pavyzdžiui, skystųjų kristalų ekranas IR „MicroSd“, kaip ir mes. Jis taip pat turėtų veikti naudojant du skirtingus LCD, prijungtus prie skirtingų CS.

Lituokite šias dalis kartu lentoje ir esate pasiruošę įkelti eskizą!

Kaip matote eskize, aš lituoju kai kurias dvigubas moterų jungtis, o ne tiesioginį komponentą, nes ateityje galbūt norėsiu pakartotinai naudoti komponentą arba jį pakeisti.

Aš taip pat lituodavau GPS modulį su jungtimis netinkama kryptimi, tai buvo mano kaltė ir aš to nenorėjau, bet jis veikia ir nenoriu rizikuoti jį sulaužyti, bandydamas išlydyti tuos mažus niekšus! Tiesiog lituokite tinkamu būdu ir viskas bus gerai!

Čia yra keletas naudingų litavimo vaizdo įrašų: Litavimo vadovas pradedantiesiems Vaizdo įrašas apie litavimą

Adafruit Youtube kanalas, ten daug įdomių dalykų!

Lituodami stenkitės naudoti tik tokį metalo kiekį, kokio jums reikia, kitaip padarysite netvarką. Nebijokite to padaryti, galbūt pradėkite nuo kažko ne tokio brangaus, o ne lituokite įvairius daiktus. Tinkama medžiaga taip pat daro skirtumą!

2 žingsnis: eskizas

Pirmiausia, žinoma, importuojame biblioteką ir sukuriame jų objektus darbui: SPI.h skirtas bendravimui su SPI moduliais, SD yra „MicroSD“biblioteka, o „Adafruit_GPS“- GPS modulio biblioteka. „SoftwareSerial.h“skirtas nuosekliam prievadui sukurti naudojant programinę įrangą. Sintaksė yra „mySerial (TxPin, RxPin);“. GPS objektas turi būti nurodytas į seriją (skliausteliuose). Čia yra bibliotekų nuorodos, skirtos „Adafruit“GPS atskyrimui, „MicroSD“atskyrimui (kad atliktumėte švarų darbą, taip pat turėtumėte suformatuoti SD naudodami šią programinę įrangą iš SD asociacijos) ir Programinės įrangos serijos biblioteka (ji turėtų būti įtraukta į IDE).

PASTABA: Aš susidūriau su tam tikra problema, kai bandžiau pridėti daug informacijos į vieną failą arba eskize naudoti daugiau nei du failus. Aš nesuformatavau SD su šia programine įranga, galbūt tai galėtų išspręsti problemą. Be to, nesėkmingai bandžiau įrenginyje pridėti dar vieną jutiklį - BMP280 (I2C modulį). Panašu, kad naudojant I2C modulį eskizas išprotėja! Aš apie tai jau kalbėjau „Adafruit“forume, bet vis tiek negavau atsakymo.

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

Dabar mums reikia visų mūsų kintamųjų: dvi eilutės yra skirtos dviem sakiniams skaityti, kad mums reikia apskaičiuoti krūvą naudingos informacijos iš GPS. Ženklas skirtas sakiniams prieš juos išanalizuoti, plūdės - koordinačių apskaičiavimui laipsniais (GPS siunčia naudojimo koordinates laipsniais ir minutėmis, mums jų reikia laipsniais, kad būtų galima skaityti „Google“žemėje). „ChipSelect“yra kaištis, kuriame prijungiame „MicroSD“kortelės CS. Šiuo atveju yra D4, bet jei naudojate SD skydą, čia turėsite įdėti D10. Failo kintamasis yra tas, kuris saugo eskizo metu naudojamo failo informaciją.

Eilutė NMEA1;

Eilutė NMEA2; char c; plūdė deg; plūdė degWhole; plūdė degDec; int chipSelect = 4; Failas mySensorData;

Dabar paskelbiame keletą funkcijų, kad eskizas būtų šiek tiek elegantiškesnis ir mažiau netvarkingas:

Jie iš esmės daro tą patį: skaito NMEA sakinius. clearGPS () ignoruoja tris sakinius, o readGPS () išsaugo du iš jų kintamuosiuose.

Pažiūrėkime, kaip: kai ciklas kontroliuoja, ar modulyje yra naujų NMEA sakinių, ir skaito GPS srautą, kol jis bus. Kai yra naujas sakinys, mes išeiname iš ciklo, kai sakinys iš tikrųjų yra skaitomas, analizuojamas ir saugomas pirmaisiais NMEA kintamaisiais. Mes iš karto darome tą patį ir kitam, nes GPS nuolat transliuoja, nelaukia, kol būsime pasiruošę, neturėjome laiko jį iškart atspausdinti

Tai labai svarbu! Prieš darydami abu sakinius nieko nedarykite, kitaip antrasis galiausiai bus sugadintas arba tiesiog neteisingas.

Gavę du sakinius, mes juos spausdiname serijoje, kad galėtume kontroliuoti, ar viskas gerai.

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

Na, dabar, kai visi esame pasiruošę, galime atlikti sąranką ():

Pirma: mes atidarome ryšį „Serial 115200“, skirtą „Arduino“asmeniniam kompiuteriui, ir 9600, jei naudojate GPS modulį „Arduino“. Antra: mes siunčiame tris komandas į GPS modulį: pirmoji - uždaryti antenos atnaujinimą, antra - prašyti tik RMC ir GGA eilutės (naudosime tik tas, kuriose yra visa informacija, kurios jums kada nors prireiktų) GPS), trečioji ir paskutinė komanda yra nustatyti „Adafruit“siūlomą atnaujinimo dažnį iki 1 Hz.

Po to kaištį D10 nustatome į OUTPUT, jei ir tik tada, kai jūsų SD modelio CS kaištis yra kitoks nei D10. Iškart po to, nustatykite CS ant mikroschemos SD modulio pasirinkimo kaiščio.

Vykdome funkcijas readGPS (), kurios apima „cleanGPS“().

Dabar atėjo laikas ką nors įrašyti į failus! Jei failas jau yra SD kortelėje, pridėkite prie jų laiko žymę. Tokiu būdu mums nereikia kiekvieną kartą sekti seansų ar ištrinti failų. Kai sąrankos funkcijoje parašyta laiko žyma, mes tikrai tik vieną kartą per sesiją pridėsime failų atskyrimą.

PASTABA: SD biblioteka labai rimtai nori kiekvieną kartą atidaryti ir uždaryti failą! Turėkite tai omenyje ir kiekvieną kartą uždarykite! Norėdami sužinoti apie biblioteką, sekite šią nuorodą.

Gerai, mes tikrai pasiruošę gauti eskizo srauto ir žurnalo dalies esmę.

void setup () {

Serial.begin (115200); GPS.pradis (9600); // Siųsti komandas į GPS modulį GPS.sendCommand ("$ PGCMD, 33, 0*6D"); GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA); GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); vėlavimas (1000); // tik jei jūsų SD modulio CS kaištis nėra ant D10 kaiščio

pinMode (10, OUTPUT);

SD.begin (chipSelect); readGPS (); if (SD.egzistuoja ("NMEA.txt")) {mySensorData = SD.open ("NMEA.txt", FILE_WRITE); mySensorData.println (""); mySensorData.print ("***"); mySensorData.print (GPS diena); mySensorData.print ("."); mySensorData.print (GPS mėnuo); mySensorData.print ("."); mySensorData.print (GPS.metai); mySensorData.print (" -"); mySensorData.print (GPS.valanda); mySensorData.print (":"); mySensorData.print (GPS.minute); mySensorData.print (":"); mySensorData.print (GPS.sekundės); 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 diena); mySensorData.print ("."); mySensorData.print (GPS mėnuo); mySensorData.print ("."); mySensorData.print (GPS.metai); mySensorData.print (" -"); mySensorData.print (GPS.valanda); mySensorData.print (":"); mySensorData.print (GPS.minute); mySensorData.print (":"); mySensorData.print (GPS.sekundės); mySensorData.println ("***"); mySensorData.close (); }}

Dabar mes gauname eskizo esmę.

Tai super paprasta, tikrai.

Mes ketiname skaityti GPS srautą naudodami funkciją readGPS (), o ne kontroliuoti, jei nustatymas lygus 1, t reiškia, kad esame prisijungę prie palydovo. Jei gausime, savo informaciją įrašysime į failus. Pirmajame faile „NMEA.txt“rašome tik neapdorotus sakinius. Antrame faile „GPDData.txt“pridedame koordinates (konvertuotas pagal anksčiau matytas funkcijas) ir aukštį. Šios informacijos pakanka, norint surinkti.kml failą, kad būtų sukurtas kelias „Google“žemėje. Atminkite, kad kiekvieną kartą atidarę failus uždarome, kad kažką parašytume!

void loop () {

readGPS (); // Condisione if che controlla se l'antenna ha segnale. Žiūrėkite, procedūrinė informacija apie duomenis. if (GPS.fix == 1) {// Išsaugoti duomenis tik tuo atveju, jei turime pataisytą mySensorData = SD.open ("NMEA.txt", FILE_WRITE); // Apre il file for le frasi NMEA grezze mySensorData.println (NMEA1); // Išskirkite prima NMEA sul failą mySensorData.println (NMEA2); // Atraskite antrą NMEA sul failą mySensorData.close (); // Chiude failas !!

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

// Converte e scrive la longitudine convLong (); mySensorData.print (deg, 4); // Išsiaiškinkite koordinates laipsniškame faile mySensorData.print (","); // Scrive una virgola per separare i data Serial.print (deg); Serial.print (","); // Converte e scrive la latitudine convLati (); mySensorData.print (deg, 4); // Išsiaiškinkite koordinates laipsniškame faile 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 (); }}

Dabar, kai viskas baigta, galite įkelti eskizą, sukurti įrenginį ir mėgautis juo!

Atminkite, kad norėdami pataisyti = 1, turite jį naudoti su GPS imtuvu, nukreiptu į dangų, arba galite prie jo prijungti išorinę anteną.

Be to, atminkite, kad jei turite pataisą, raudona lemputė mirksi kas 15 sekundžių, jei ne, daug greičiau (kartą per 2-3 sekundes).

Jei norite sužinoti daugiau apie NMEA sakinius, tiesiog atlikite kitą šio vadovo veiksmą.

3 žingsnis: NMEA sakiniai ir.kml failas

Įrenginys ir eskizas baigti, jie veikia gerai. Atminkite, kad norint pataisyti (turėti ryšį su palydovais), išsiveržimas turėtų būti nukreiptas į dangų.

Raudona lemputė mirksi kas 15 sekundžių, kai pataisote

Jei norite geriau suprasti NMEA sakinius, galite perskaityti toliau.

Eskize naudojame tik du sakinius - GGA ir RMC. Tai tik keli sakiniai, kuriuos transliuoja GPS modulis.

Pažiūrėkime, kas yra toje eilutėje:

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

RMC = rekomenduojama minimali bausmė virš žemės mazgais 084.4 = Vikšro kampas laipsniais Tiesa 230394 = Data - 1994 m. kovo 23 d. 003.1, W = Magnetinė variacija *6A = Kontrolinės sumos duomenys visada prasideda *

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

GGA pasaulinės padėties nustatymo sistemos taisymo duomenys 123519 Pataisyta 12:35:19 UTC 4807.038, N Platuma 48 ° 07.038 'N 01131.000, E Ilguma 11 ° 31.000' E 1 Pataisymo kokybė: 0 = negaliojantis; 1 = GPS nustatymas (SPS); 2 = DGPS nustatymas; 3 = PPS pataisymas; 4 = realaus laiko kinematika; 5 = plūduriuojantis RTK; 6 = apskaičiuotas (mirusiųjų skaičiavimas) (2.3 požymis); 7 = rankinio įvesties režimas; 8 = modeliavimo režimas; 08 Stebimų palydovų skaičius 0,9 Horizontalus 545,4 padėties praskiedimas, M aukštis, metrai, virš vidutinio jūros lygio 46,9, M geoido aukštis (vidutinis jūros lygis) virš WGS84 elipsoido (tuščio lauko) laikas sekundėmis nuo paskutinio DGPS atnaujinimo (tuščias laukas)) DGPS stoties ID numeris *47 kontrolinės sumos duomenys, visada prasideda *

Kaip matote, ten yra daug daugiau informacijos apie tai, ko jums reikia. Naudodamiesi „Adafruit“biblioteka, galite paskambinti kai kuriems iš jų, pvz., GPS.latitude arba GPS.lat (platuma ir platumos pusrutulis) arba GPS.day/month/year/hour/minute/seconds/milliseconds…. svetainėje, kad sužinotumėte ką nors daugiau. Nėra taip aišku, tačiau, vadovaudamiesi kai kuriais GPS modulių vadovo patarimais, galite rasti tai, ko jums reikia.

Ką galime padaryti su turimais failais? Paprasta: sudarykite kml failą, kad būtų rodomas kelias „Google“žemėje. Norėdami tai padaryti, tiesiog nukopijuokite/praleiskite kodą, kurį rasite po šia nuoroda (pagal pastraipą Kelias), įdėkite savo koordinates iš failo GPDData.txt tarp žymų, išsaugokite failą su plėtiniu.kml ir įkelkite jį Google Žemė.

PASTABA:.kml žymėjimo kalba yra paprasta, jei jau žinote, kas yra žymėjimo kalba, skirkite laiko perskaityti ankstesnę nuorodą ir dokumentus, tai tikrai įdomu!

Naudojant kml reikia žinoti jo žymes ir argumentus. Radau tik „Google“vadovą, kurį anksčiau susiejau, ir esminė dalis yra apibrėžti žymų stilių ir paskambinti # ženklu, kai atėjo laikas parašyti koordinates.

Šiame skyriuje pridėtas failas yra.kml, kuriame galite tiesiog įklijuoti savo koordinates. nepamirškite įklijuoti naudodami šią sintaksę: ilguma, platuma, aukštis

Rekomenduojamas: