Përmbajtje:

Arduino GPS Logger: 3 hapa
Arduino GPS Logger: 3 hapa

Video: Arduino GPS Logger: 3 hapa

Video: Arduino GPS Logger: 3 hapa
Video: Модуль спутниковой навигации GPS, ГЛОНАСС и Galileo для Arduino. Железки Амперки 2024, Korrik
Anonim
Arduino GPS Logger
Arduino GPS Logger
Arduino GPS Logger
Arduino GPS Logger

Pershendetje djema, Po tërhiqem shumë për projekte të vogla që u lejojnë njerëzve të kuptojnë më shumë nga teknologjia që kemi përditë.

Ky projekt ka të bëjë me prishjen e GPS dhe regjistrimin e SD. Kam mësuar shumë vetëm duke ndërtuar këto gjëra.

Ka shumë nocione që do të fitoni duke ndjekur këtë tutorial, dhe shumë më tepër duke ndjekur lidhjen që ofroj për t'u thelluar në tema.

Pra, çfarë është ajo? E thjeshtë: ashtë një gjurmues GPS që regjistron pozicionet (me lartësinë gjithashtu), shpejtësinë dhe datën/kohën në një microSD.

Çfarë do t'ju duhet:

- Arduino Nano (Unë në të vërtetë kam përdorur një UNO për të ndërtuar skicën, por ato janë të njëjta!)- Përzgjedhja përfundimtare e GPS e Adafruit- Ndarja e kartës MicroSD- Mjetet e saldimit (gjithçka që ju nevojitet për bashkim)- Stripboard Universal (kam përdorur a 5x7cm)- Tela

Të gjithë ata përbërës janë mjaft të lirë, përveç modulit GPS. Kjo është rreth 30-40 dollarë dhe është pjesa më e shtrenjtë. Edhe një grup i ri hekuri bashkues mund të kushtojë më pak.

Ekziston gjithashtu një mburojë Adafruit me module GPS dhe karta SD së bashku. Nëse dëshironi ta përdorni, mbani në mend se është bërë për Arduino UNO, prandaj do t'ju duhet një UNO dhe jo një Nano. Sidoqoftë, nuk ka asnjë ndryshim në skicë.

Le të shkojmë më tej…

Hapi 1: Lidhja e përbërësve

Komponentët lidhës
Komponentët lidhës
Komponentët lidhës
Komponentët lidhës
Komponentët lidhës
Komponentët lidhës
Komponentët lidhës
Komponentët lidhës

Epo, pasi të keni marrë përbërësit, do t'ju duhet t'i lidhni ato. Këtu mund të gjeni skemat marramendëse që janë mjaft të qarta. Sidoqoftë, këtu është edhe përfundimi:

Shpërthimi i MicroSD

5V -> 5VGND -> GnnCLK -> D13DO -> D12DI -> D11CS -> D4 (Nëse jeni duke përdorur mburojën kjo është ndërtuar në D10)

Zbërthimi i GPS

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

Shënime të vogla rreth atyre moduleve: Ata dy djemtë e vegjël po komunikojnë përmes rrugëve të ndryshme me Arduino. GPS përdor një Serial TTL, të njëjtin lloj që ne përdorim kur komunikojmë me Arduino përmes Serial Monitor, prandaj duhet të deklarojmë përmes një biblioteke një serial të ri (Tx dhe Rx) sepse GPS dëshiron të përdorë 9600 si parazgjedhje, dhe ne dëshironi ta përdorni ose. Moduli GPS transmeton gjithnjë dhe vazhdimisht të dhëna, nëse lidhet. Kjo është pjesa e ndërlikuar për tu trajtuar, sepse nëse lexojmë një fjali dhe e shtypim atë, mund të humbasim fjalën tjetër, që është gjithashtu e nevojshme. Duhet ta kemi parasysh kur kodojmë!

MicroSD komunikon përmes SPI (Serial Periferike Ndërfaqe), një mënyrë tjetër për të komunikuar me tabelën. Ato lloj modulesh përdorin gjithmonë CLK në D13, Bëj në D12 dhe DI në D11. Ndonjëherë ato lidhje kanë emra të ndryshëm si CLK = SCK ose SCLK (Ora Seriale), DO = DOUT, SIMO, SDO, SO, MTSR (të gjitha ato tregojnë Master Output) dhe DI = SOMI, SDI, MISO, MRST (Master Input). Më në fund kemi CS ose SS që tregon pin ku dërgojmë atë që duam të shkruajmë në MicroSD. Nëse dëshironi të përdorni dy module të ndryshme SPI, thjesht duhet ta dalloni këtë kunj në mënyrë që t'i përdorni të dyja. Për shembull, ekrani LCD DHE një MicroSd si ai që ne po përdorim. Duhet të funksionojë gjithashtu duke përdorur dy LCD të ndryshëm të lidhur me CS të ndryshme.

Ngjitini këto pjesë së bashku në tabelë dhe jeni gati të ngarkoni skicën!

Siç mund ta shihni në skicë, unë bashkoj disa lidhës femra dupont në vend të komponentit të drejtpërdrejtë, sepse në të ardhmen mund të dëshiroj të ripërdori përbërësin ose të ndryshoj një.

Unë gjithashtu bashkova modulin GPS me lidhësit në drejtimin e gabuar, ky ishte faji im dhe nuk doja, por funksionon dhe nuk dua të rrezikoj ta prish atë duke u përpjekur të shkrij ato bastardët e vegjël! Thjesht bashkojeni në mënyrën e duhur dhe gjithçka do të jetë mirë!

Këtu keni disa video të dobishme për saldim: Udhëzues për saldimin për fillestarët Një video rreth desolder

Kanali Adafruit Youtube, shumë gjëra interesante atje!

Kur lidhni, përpiquni të përdorni vetëm sasinë e metalit që ju nevojitet, përndryshe do të bëni një rrëmujë. Mos kini frikë ta bëni atë, mbase filloni me diçka jo aq të shtrenjtë, dhe sesa mbani gjëra të ndryshme. Materiali i duhur bën gjithashtu ndryshimin!

Hapi 2: Skica

Së pari, natyrisht, ne importojmë bibliotekën dhe ndërtojmë objektet e tyre për të punuar: SPI.h është për komunikim me modulet SPI, SD është biblioteka MicroSD dhe Adafruit_GPS është biblioteka e modulit GPS. SoftwareSerial.h është për krijimin e një porti serik përmes softuerit. Sintaksa është "mySerial (TxPin, RxPin);". Objekti GPS duhet të tregohet në një serial (në kllapa). Këtu janë lidhjet e bibliotekave për Adafruit GPS breakout, prishja e MicroSD (për të bërë një punë të pastër ju gjithashtu duhet të formatoni SD me këtë softuer nga shoqata SD) dhe Biblioteka serike e softuerit (duhet të përfshihet në IDE).

SH NOTNIM: Unë u përballa me një problem kur përpiqesha të shtoja shumë informacion në një skedar ose duke përdorur më shumë se dy skedarë në skicë. Unë nuk e formatova SD -në me atë softuer, mbase kjo mund të zgjidhte problemin. Gjithashtu, u përpoqa të shtoj një sensor tjetër në pajisje, një BMP280 (modul I2C), pa ndonjë sukses. Duket sikur përdorimi i modulit I2C e bën skicën të çmendet! Unë tashmë kam folur për të në forumin Adafruit, por ende nuk kam marrë përgjigje.

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

Tani na duhen të gjitha variablat tona: Dy vargjet janë për leximin e dy fjalive që na duhen për të llogaritur një mori informacionesh të dobishme nga GPS. Karakteri është për ruajtjen e fjalive para se t'i analizoni ato, notat janë për llogaritjen e koordinatave në gradë (GPS dërgoni përdorim të koordinatave në gradë dhe minuta, ne kemi nevojë për to për t'i lexuar në google earth). ChipSelect është kunja ku lidhim CS -në e kartës MicroSD. Në këtë rast është D4, por nëse përdorni një mburojë SD, do t'ju duhet të vendosni D10 këtu. Ndryshorja e skedarit është ai që do të ruajë informacionin e skedarit që ne përdorim gjatë skicës.

Vargu NMEA1;

Vargu NMEA2; char c; noton deg; noton degWhole; noton degDec; int chipSelect = 4; Dosja mySensorData;

Tani ne po deklarojmë disa funksione për ta bërë skicën pak më elegante dhe më pak të çrregullt:

Ata po bëjnë në thelb të njëjtën gjë: duke lexuar fjali NMEA. clearGPS () po injoron tre fjali dhe readGPS () po ruan dy prej tyre në variabla.

Le të shohim se si: Një lak ndërkohë kontrollon nëse ka fjali të reja NMEA në modul dhe lexon rrjedhën GPS derisa të ketë një të tillë. Kur një fjali e re është atje, ne jemi jashtë lakut while, ku fjalia lexohet, analizohet dhe ruhet në variablat e parë NMEA. Ne po bëjmë menjëherë të njëjtën gjë për tjetrën, sepse GPS po transmeton vazhdimisht, nuk na pret të jemi gati, nuk kemi kohë për ta printuar menjëherë

Kjo eshte shume e rendesishme! Mos bëni asgjë para se të rezervoni të dy fjalitë, përndryshe e dyta përfundimisht do të ishte e korruptuar ose thjesht e gabuar.

Pasi morëm dy fjali, i shtypim në serial për të kontrolluar që po shkon mirë.

leximi i pavlefshëm GPS () {

clearGPS (); ndërsa (! GPS.newNMEApranuar ()) {c = GPS.read (); } GPS.parse (GPS.lastNMEA ()); NMEA1 = GPS.lastNMEA (); ndërsa (! GPS.newNMEApranuar ()) {c = GPS.read (); } GPS.parse (GPS.lastNMEA ()); NMEA2 = GPS.lastNMEA (); Serial.println (NMEA1); Serial.println (NMEA2); } void clearGPS () {ndërsa (! GPS.newNMEAreceptuar ()) {c = GPS.read (); } GPS.parse (GPS.lastNMEA ()); ndërsa (! GPS.newNMEApranuar ()) {c = GPS.read (); } GPS.parse (GPS.lastNMEA ()); w ndërsa (! GPS.newNMEApranuar ()) {c = GPS.read (); } GPS.parse (GPS.lastNMEA ()); }

Epo, tani që jemi gati, mund ta kalojmë konfigurimin ():

Së pari: ne hapim komunikimin në Serial 115200 për Arduino PC dhe në 9600 për modulin GPS Arduino. Së dyti: ne i dërgojmë tre komanda modulit GPS: e para është të mbyllim përditësimin e antenës, e dyta është të kërkojmë vetëm vargun RMC dhe GGA (ne do të përdorim vetëm ato, të cilat kanë të gjithë informacionin që do të kishit nevojë ndonjëherë një GPS), komanda e tretë dhe e fundit është të vendosni normën e përditësimit në 1HZ, të sugjeruar nga Adafruit.

Pas kësaj ne vendosim pinin D10 në OUTPUT, nëse, dhe vetëm nëse, kunja CS e modelit tuaj SD është e ndryshme nga D10. Menjëherë më pas, vendosni CS në modulin SD në chipSelect pin.

Ne drejtojmë funksionet readGPS () që përfshijnë cleanGPS ().

Tani është koha për të shkruar diçka në skedarë! Nëse skedari është tashmë në kartën Sd, shtoni një etiketë kohore mbi to. Në këtë mënyrë ne nuk duhet të mbajmë gjurmët e seancave ose të fshijmë skedarët çdo herë. Me një vulë kohore të shkruar brenda funksionit të konfigurimit, ne jemi të sigurtë që do të shtojmë një ndarje në skedarë vetëm një herë në seancë.

SH NOTNIM: Biblioteka SD është mjaft serioze për hapjen dhe mbylljen e skedarit çdo herë! Mbani në mend dhe mbylleni çdo herë! Për të mësuar rreth bibliotekës ndiqni këtë lidhje.

Ok, ne jemi vërtet të gatshëm të marrim thelbin e pjesës së skemës të transmetimit dhe regjistrimit.

void setup () {

Serial.fillo (115200); GPS.filloj (9600); // Dërgoni komanda në modulin GPS GPS.sendCommand ("$ PGCMD, 33, 0*6D"); GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA); GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); vonesa (1000); // vetëm nëse kunja CS e modulit tuaj SD nuk është në pin D10

pinMode (10, OUTPUT);

SD.fillo (përzgjedhja e çipit); lexo GPS (); nëse (SD.ekziston ("NMEA.txt")) {mySensorData = SD.open ("NMEA.txt", FILE_WRITE); mySensorData.println (""); mySensorData.print ("***"); mySensorData.print (GPS.day); mySensorData.print ("."); mySensorData.print (GPS.muaj); mySensorData.print ("."); mySensorData.print (GPS.year); mySensorData.print (" -"); mySensorData.print (GPS.hour); mySensorData.print (":"); mySensorData.print (GPS.minute); mySensorData.print (":"); mySensorData.print (GPS.sekonda); mySensorData.println ("***"); mySensorData.close (); } nëse (SD.ekziston ("GPSData.txt")) {mySensorData = SD.open ("GPSData.txt", FILE_WRITE); mySensorData.println (""); mySensorData.println (""); mySensorData.print ("***"); mySensorData.print (GPS.day); mySensorData.print ("."); mySensorData.print (GPS.muaj); mySensorData.print ("."); mySensorData.print (GPS.year); mySensorData.print (" -"); mySensorData.print (GPS.hour); mySensorData.print (":"); mySensorData.print (GPS.minute); mySensorData.print (":"); mySensorData.print (GPS.sekonda); mySensorData.println ("***"); mySensorData.close (); }}

Tani po marrim thelbin e skicës.

Supershtë super e thjeshtë, me të vërtetë.

Ne do të lexojmë rrymën GPS me funksionin readGPS (), sesa kontrollojmë nëse kemi një rregullim të barabartë me 1, që do të thotë se jemi të lidhur me një satelit e. Nëse e kemi marrë, ne do të shkruajmë informacionin tonë në skedarë. Në skedarin e parë "NMEA.txt", ne shkruajmë vetëm fjalitë e papërpunuara. Në skedarin e dytë, "GPDData.txt", ne shtojmë koordinatat (të konvertuara me funksionet që kemi parë më parë) dhe lartësinë. Ato informacione janë të mjaftueshme për të përpiluar një skedar.kml për të krijuar një rrugë në Google Earth. Vini re se ne i mbyllim skedarët sa herë që i hapim për të shkruar diçka!

lak void () {

lexo GPS (); // Condizione if che controlla se l'antenna ha segnale. Se si, procede con la scrittura dei dati. if (GPS.fix == 1) {// Ruani të dhënat vetëm nëse kemi një rregullim mySensorData = SD.open ("NMEA.txt", FILE_WRITE); // Apre il file per le frasi NMEA grezze mySensorData.println (NMEA1); // Shkruaj skedarin prima NMEA sul mySensorData.println (NMEA2); // Shkruaj sekondën NMEA sul file mySensorData.close (); // Skedar Chiude !!

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

// Converte e scrive la longitudine convLong (); mySensorData.print (deg, 4); // Shkruani koordinatën në skedarin gradi sul mySensorData.print (","); // Shkruani una virgola për ndarjen e të dhënave Serial.print (deg); Serial.print (","); // Converte e scrive la latitudine convLati (); mySensorData.print (deg, 4); // Shkruani koordinatën në skedarin gradi sul mySensorData.print (","); // Shkruani una virgola për ndarjen e të dhënave Serial.print (deg); Serial.print (","); // Shkruani l'altitudine mySensorData.print (GPS.altitude); mySensorData.print (""); Serial.println (GPS.altitude); mySensorData.close (); }}

Tani që të gjithë kemi mbaruar, ju mund të ngarkoni skicën, të ndërtoni pajisjen dhe ta shijoni!

Vini re se ju duhet ta përdorni atë me borad GPS drejtuar qiellit në mënyrë që të merrni një rregullim = 1, ose mund të lidhni një antenë të jashtme në të.

Gjithashtu, mbani në mend se nëse keni një rregullim, drita e kuqe po ndizet çdo 15 sekonda, nëse jo, shumë më shpejt (një herë në 2-3 sekonda).

Nëse doni të mësoni diçka më shumë rreth fjalive NMEA, thjesht ndiqni hapin tjetër të këtij udhëzuesi.

Hapi 3: Fjalitë NMEA dhe skedari.kml

Pajisja dhe skica janë të plota, ata punojnë mirë. Mbani në mend se për të marrë një rregullim (për të pasur një lidhje me satelitët) shpërthimi duhet të përballet me qiellin.

Drita e vogël e kuqe pulson çdo 15 sekonda kur të merrni një rregullim

Nëse doni të kuptoni më mirë fjalitë NMEA, mund të lexoni më tej.

Në skicë ne përdorim vetëm dy fjali, GGA dhe RMC. Ato janë vetëm disa fjali që moduli GPS po transmeton.

Le të shohim se çfarë ka në atë varg:

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

RMC = Fjalia minimale e rekomanduar C 123519 = Rregullimi i marrë në 12:35:19 UTC A = Statusi A = aktiv ose V = Void 4807.038, N = Gjerësia gjeografike 48 grad 07.038 'N 01131.000, E = Gjatësia gjeografike 11 deg 31.000' E 022.4 = Shpejtësia mbi tokë në nyje 084.4 = Këndi i gjurmës në gradë E vërtetë 230394 = Data - 23 Mars 1994 003.1, W = Variacioni magnetik *6A = Të dhënat e grumbullimit të kontrollit, gjithmonë fillojnë me *

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

Sistemi i Pozicionimit Global i GGA Të Dhënave Fikse 123519 Fiks i marrë në 12:35:19 UTC 4807.038, N Gjerësi Gjeografike 48 grad 07.038 'N 01131.000, E Gjatësi Gjeografike 11 deg 31.000' E 1 Cilësi fiksimi: 0 = e pavlefshme; 1 = Rregullim GPS (SPS); 2 = Rregullim DGPS; 3 = rregullim PPS; 4 = Kinematikë në kohë reale; 5 = Float RTK; 6 = vlerësuar (llogaritja e vdekur) (2.3 tipar); 7 = Mënyra e hyrjes manuale; 8 = Mënyra e simulimit; 08 Numri i satelitëve që gjurmohen 0.9 Hollimi horizontal i pozicionit 545.4, M Lartësia, Metra, mbi nivelin mesatar të detit 46.9, M Lartësia e gjeoidit (niveli mesatar i detit) mbi elipsoidin WGS84 (fushë bosh) koha në sekonda që nga përditësimi i fundit i DGPS (fushë bosh) Numri ID i stacionit DGPS *47 të dhënat e kontrollit, gjithmonë fillojnë me *

Siç mund ta shihni, ka shumë më tepër informacion se çfarë ju nevojitet atje. Duke përdorur bibliotekën e Adafruit, ju mund të telefononi disa prej tyre, si GPS.latitude ose GPS.lat (gjerësia gjeografike dhe lat hemisfera), ose GPS.day/month/year/hour/minute/seconds/milliseconds… Hidhini një sy Adafruit faqe interneti për të ditur diçka më shumë. Nuk është aq e qartë, por duke ndjekur disa sugjerime në udhëzuesin e moduleve GPS, mund të gjeni atë që ju nevojitet.

Çfarë mund të bëjmë me skedarët që kemi? Lehtë: përpiloni një skedar kml për të treguar një rrugë në Google Earth. Për ta bërë këtë, thjesht kopjoni/kaloni kodin që do të gjeni duke ndjekur këtë lidhje (nën paragrafin Rruga), vendosni koordinatat tuaja nga skedari GPDData.txt midis etiketave, ruani skedarin me shtesën.kml dhe ngarkojeni atë Google Earth.

SHENIM: Gjuha e shënimit.kml është e thjeshtë, nëse tashmë e dini se çfarë është një gjuhë shënimi, mbani kohën tuaj për të lexuar lidhjen dhe dokumentacionin e mëparshëm brenda, është në të vërtetë interesante!

Përdorimi i kml ka të bëjë me njohjen e etiketave dhe argumenteve të tij. Kam gjetur vetëm udhëzuesin nga Google, atë që kam lidhur më parë dhe pjesa thelbësore është të përcaktosh stilin midis etiketave dhe ta quash me shenjën # kur është koha për të shkruar koordinatat.

Skedari që shtova në këtë seksion është një.kml në të cilin thjesht mund të ngjitni koordinatat tuaja. mbani në mend të ngjisni me këtë sintaksë: gjatësi, gjerësi, lartësi

Recommended: