Obsah:

GPS záznamník Arduino: 3 kroky
GPS záznamník Arduino: 3 kroky

Video: GPS záznamník Arduino: 3 kroky

Video: GPS záznamník Arduino: 3 kroky
Video: LoRa Transmitter Power Measurement with AD8318 and Arduino DIY Tool (EP10) 2024, Júl
Anonim
GPS záznamník Arduino
GPS záznamník Arduino
GPS záznamník Arduino
GPS záznamník Arduino

Čaute ľudia, Začínam byť veľmi nadšený z malých projektov, ktoré umožňujú ľuďom porozumieť oveľa viac technológiám, ktoré máme každý deň k dispozícii.

Tento projekt je o GPS breakout a protokolovaní SD. Veľa som sa naučil len stavaním týchto vecí.

Po tomto návode získate mnoho myšlienok, a oveľa viac po kliknutí na odkaz, ktorý poskytnem, aby ste sa hlbšie dostali k témam.

Tak čo to je? Jednoduché: Je to GPS tracker, ktorý zaznamenáva polohy (aj s nadmorskou výškou), rýchlosť a dátum/čas na kartu microSD.

Čo budete potrebovať:

- Arduino Nano (Na zostavenie náčrtu som v skutočnosti použil UNO, ale sú rovnaké!)- Adafruit ultimate GPS breakout- breakout karty microSD- spájkovacie nástroje (všetko, čo potrebujete na spájkovanie)- univerzálny Stripboard (používal som 5x7 cm)- Drôty

Všetky tieto komponenty sú celkom lacné, okrem modulu GPS. To je asi 30-40 dolárov a je to najdrahšia časť. Aj nová súprava spájkovačky by mohla stáť menej.

Existuje tiež štít Adafruit s modulmi GPS a SD karty. Ak ho chcete použiť, majte na pamäti, že je vyrobený pre Arduino UNO, preto budete potrebovať UNO a nie Nano. V náčrte však nie je žiadny rozdiel.

Poďme ďalej…

Krok 1: Pripojenie komponentov

Pripojenie komponentov
Pripojenie komponentov
Pripojenie komponentov
Pripojenie komponentov
Pripojenie komponentov
Pripojenie komponentov
Pripojenie komponentov
Pripojenie komponentov

Potom, čo získate komponenty, ich budete musieť pripojiť. Tu nájdete celkom jasnú schematickú schému. Tu je však aj pinout:

Rozbitie microSD

5V -> 5VGND -> GnnCLK -> D13DO -> D12DI -> D11CS -> D4 (Ak používate štít, tento je zabudovaný v D10)

GPS breakout

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

Malé poznámky k tomuto modulu: Títo dvaja malí chlapci komunikujú s Arduinom rôznymi cestami. GPS používa sériový port TTL, rovnaký druh, aký používame pri komunikácii s Arduino prostredníctvom sériového monitora, a preto musíme prostredníctvom knižnice vyhlásiť nový sériový port (Tx a Rx), pretože systém GPS chce štandardne používať 9600 a my chcete ho tiež použiť. Ak je zapojený, modul GPS nepretržite streamuje údaje. Toto je zložitá časť, s ktorou sa musíme vyrovnať, pretože ak prečítame vetu a potom ju vytlačíme, môžeme prísť o ďalšiu, čo je tiež potrebné. Pri kódovaní na to musíme pamätať!

MicroSD komunikuje prostredníctvom SPI (Serial Peripheral Interface), čo je ďalší spôsob komunikácie s doskou. Tieto typy modulov vždy používajú CLK na D13, DO na D12 a DI na D11. Niekedy majú tieto pripojenia iný názov, napríklad CLK = SCK alebo SCLK (sériové hodiny), DO = DOUT, SIMO, SDO, SO, MTSR (všetky označujú hlavný výstup) a DI = SOMI, SDI, MISO, MRST (hlavný vstup). Nakoniec máme CS alebo SS, ktoré označujú pin, kam posielame to, čo chceme napísať na MicroSD. Ak chcete použiť dva rôzne moduly SPI, musíte tento pin rozlíšiť, aby ste ich mohli použiť oba. Napríklad obrazovka LCD A MicroSd, ako je tá, ktorú používame. Mal by fungovať aj pri použití dvoch rôznych displejov LCD pripojených k rôznym CS.

Spájkujte tieto časti dohromady v doske a môžete začať nahrávať skicu!

Ako môžete vidieť na náčrte, namiesto priameho komponentu spájkujem niekoľko dupontných konektorov, pretože v budúcnosti možno budem chcieť komponent znova použiť alebo zmeniť.

Tiež som spájkoval modul GPS s konektormi nesprávnym smerom, to bola moja chyba a nechcel som, ale funguje to a nechcem riskovať, že to zlomím pri pokuse o odpájanie tých malých bastardov! Stačí spájkovať správnym spôsobom a všetko bude v poriadku!

Tu je niekoľko užitočných spájkovacích videí: Sprievodca spájkovaním pre začiatočníkov Video o odpájkovači

Adafruit Youtube kanál, veľa zaujímavých vecí tam!

Pri spájkovaní sa snažte použiť len toľko kovu, koľko potrebujete, inak narobíte neporiadok. Nebojte sa to urobiť, možno začnite niečím, čo nie je také drahé, a potom spájajte rôzne veci. Rozdiel je aj v správnom materiáli!

Krok 2: Skica

Najprv samozrejme importujeme knižnicu a postavíme jej objekty, s ktorými bude pracovať: SPI.h slúži na komunikáciu s modulmi SPI, SD je knižnica MicroSD a Adafruit_GPS je knižnica modulu GPS. SoftwareSerial.h slúži na vytváranie sériového portu pomocou softvéru. Syntax je „mySerial (TxPin, RxPin);“. Objekt GPS je potrebné označiť sériovým číslom (v zátvorkách). Tu sú odkazy knižníc na Adafruit GPS breakout, MicroSD breakout (ak chcete urobiť čistú prácu, mali by ste tiež naformátovať SD pomocou tohto softvéru od asociácie SD) a Softvérová sériová knižnica (mala by byť zahrnutá v IDE).

POZNÁMKA: Pri pokuse o pripojenie veľkého množstva informácií do jedného súboru alebo pri použití viac ako dvoch súborov v náčrte som narazil na problém. Neformátoval som SD pomocou tohto softvéru, možno by to mohlo problém vyriešiť. Tiež som sa pokúsil pridať do zariadenia ďalší senzor, BMP280 (modul I2C), bez úspechu. Zdá sa, že pomocou modulu I2C sa skica zblázni! Už som o tom hovoril na fóre Adafruit, ale stále som nedostal odpoveď.

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

Teraz potrebujeme všetky naše premenné: Dva reťazce slúžia na čítanie dvoch viet, ktoré potrebujeme na vypočítanie množstva užitočných informácií z GPS. Znak slúži na doplnenie viet pred ich analýzou, plaváky slúžia na výpočet súradníc v stupňoch (odosielanie GPS používa súradnice v stupňoch a minútach, potrebujeme ich v stupňoch na čítanie v aplikácii Google Earth). ChipSelect je kolík, do ktorého zapojíme CS karty MicroSD. V tomto prípade je D4, ale ak používate štít SD, budete sem musieť vložiť D10. Premenná súboru je tá, ktorá počas náčrtu uloží informácie o súbore, ktorý používame.

Reťazec NMEA1;

Reťazec NMEA2; znak c; float deg; float degWhole; float degDec; int chipSelect = 4; Súbor mySensorData;

Teraz deklarujeme niekoľko funkcií, aby bola skica o niečo elegantnejšia a menej chaotická:

V zásade robia to isté: čítajú vety NMEA. clearGPS () ignoruje tri vety a readGPS () dve z nich ukladá do premenných.

Pozrime sa, ako: Slučka while kontroluje, či sú v module nové vety NMEA, a číta tok GPS, kým sa nenájde. Akonáhle je tam nová veta, sme mimo cyklu while, kde je veta skutočne prečítaná, analyzovaná a uložená v prvých premenných NMEA. Okamžite robíme to isté pre ďalší, pretože GPS neustále prúdi, nečaká, kým budeme pripravení, nemáme čas ho ihneď vytlačiť

Toto je veľmi dôležité! Nerobte nič skôr, ako si uložíte obe vety, inak by bola druhá poškodená alebo by bola nesprávne.

Potom, čo dostaneme dve vety, vytlačíme ich do seriálu, aby sme zistili, či to funguje dobre.

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

Teraz, keď sme všetci pripravení, môžeme prejsť cez setup ():

Po prvé: otvárame komunikáciu na Serial 115200 pre Arduino PC a na 9600 pre GPS modul Arduino. Za druhé: do modulu GPS pošleme tri príkazy: prvý je vypnúť aktualizáciu antény, druhý je žiadať iba reťazec RMC a GGA (použijeme iba tie, ktoré majú všetky informácie, od ktorých by ste kedy potrebovali GPS), tretím a posledným príkazom je nastaviť rýchlosť aktualizácie na 1HZ, ktorú navrhol Adafruit.

Potom sme nastavili pin D10 na VÝSTUP, ak a iba vtedy, ak je pin CS vášho modela SD iný ako D10. Ihneď potom nastavte CS na modul SD na kolíku chipSelect.

Spúšťame funkcie readGPS (), ktoré zahŕňajú cleanGPS ().

Teraz je čas napísať niečo do súborov! Ak je súbor už na karte Sd, pripojte k nemu časovú pečiatku. Vďaka tomu nebudeme musieť vždy sledovať relácie alebo mazať súbory. Vďaka časovej pečiatke zapísanej vo funkcii nastavenia sme si istí, že do súborov pridáme oddelenie iba raz za reláciu.

POZNÁMKA: Knižnica SD to s otvorením a zatvorením súboru myslí vážne! Majte to na pamäti a zakaždým zatvorte! Ak sa chcete dozvedieť viac o knižnici, kliknite na tento odkaz.

Ok, sme naozaj pripravení získať jadro časti protokolu a protokolu skice.

neplatné nastavenie () {

Serial.begin (115200); GPS.begin (9600); // Odosielanie príkazov do modulu GPS GPS.sendCommand ("$ PGCMD, 33, 0*6D"); GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA); GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); oneskorenie (1000); // iba vtedy, ak pin CS vášho modulu SD nie je na pine D10

pinMode (10, VÝSTUP);

SD.begin (chipSelect); readGPS (); if (SD.exists ("NMEA.txt")) {mySensorData = SD.open ("NMEA.txt", FILE_WRITE); mySensorData.println (""); mySensorData.print ("***"); mySensorData.print (GPS.day); mySensorData.print ("."); mySensorData.print (GPS.mesiac); mySensorData.print ("."); mySensorData.print (GPS.rok); mySensorData.print (" -"); mySensorData.print (GPS.hodina); mySensorData.print (":"); mySensorData.print (GPS.minúta); mySensorData.print (":"); mySensorData.print (GPS.sekundy); 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.day); mySensorData.print ("."); mySensorData.print (GPS.mesiac); mySensorData.print ("."); mySensorData.print (GPS.rok); mySensorData.print (" -"); mySensorData.print (GPS.hodina); mySensorData.print (":"); mySensorData.print (GPS.minúta); mySensorData.print (":"); mySensorData.print (GPS.sekundy); mySensorData.println ("***"); mySensorData.close (); }}

Teraz dostávame jadro náčrtu.

Je to super jednoduché, skutočne.

Budeme čítať tok GPS pomocou funkcie readGPS (), než ovládame, ak máme opravu rovnú 1, to znamená, že sme spojení so satelitom, napr. Ak sme to pochopili, napíšeme naše informácie do súborov. V prvom súbore "NMEA.txt" píšeme iba surové vety. V druhom súbore „GPDData.txt“pripojíme súradnice (prevedené pomocou funkcií, ktoré sme videli predtým) a nadmorskú výšku. Tieto informácie stačia na zostavenie súboru.kml na vytvorenie cesty v aplikácii Google Earth. Všimnite si toho, že súbory zavrieme vždy, keď sme ich otvorili, aby sme niečo napísali!

prázdna slučka () {

readGPS (); // Podmienky, ako sa ovládať. Se si, procede con la scrittura dei dati. if (GPS.fix == 1) {// Údaje ukladajte iba vtedy, ak máme opravu mySensorData = SD.open ("NMEA.txt", FILE_WRITE); // Súbor, ktorý bude obsahovať celú radu NMEA, mySensorData.println (NMEA1); // Vytvorte primárny súbor NMEA mySensorData.println (NMEA2); // Scrive seconda NMEA sul file mySensorData.close (); // súbor Chiude !!

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

// Prevod a pozdĺžna konverzia convLong (); mySensorData.print (deg, 4); // Vytvorte súradnicu v súbore mySensorData.print (","); // Scrive una virgola per separare i dati Serial.print (deg); Serial.print (","); // Prevod a súhrn latitude line convLati (); mySensorData.print (deg, 4); // Vytvorte súradnicu v súbore mySensorData.print (","); // Scrive una virgola per separare i dati Serial.print (deg); Serial.print (","); // Scrive l'altitudine mySensorData.print (GPS.altitude); mySensorData.print (""); Serial.println (GPS.altitude); mySensorData.close (); }}

Teraz, keď sme všetci hotoví, môžete nahrať skicu, zostaviť zariadenie a užívať si to!

Ak chcete dosiahnuť opravu = 1, musíte ho použiť tak, aby smerovač GPS smeroval k oblohe, alebo k nemu môžete pripojiť externú anténu.

Majte tiež na pamäti, že ak máte opravu, červené svetlo bliká každých 15 sekúnd, ak nie, oveľa rýchlejšie (raz za 2-3 sekundy).

Ak sa chcete dozvedieť niečo viac o vetách NMEA, postupujte podľa ďalšieho kroku tejto príručky.

Krok 3: Vety NMEA a súbor.kml

Zariadenie a náčrt sú kompletné, fungujú dobre. Majte na pamäti, že na to, aby ste dosiahli nápravu (aby ste mali spojenie so satelitmi), by útek mal smerovať k oblohe.

Keď dostanete opravu, malé červené svetlo bliká každých 15 sekúnd

Ak chcete lepšie porozumieť vetám NMEA, môžete čítať ďalej.

V náčrte používame iba dve vety, GGA a RMC. Je to len niekoľko viet, ktoré modul GPS vysiela.

Pozrime sa, čo je v týchto reťazcoch:

$ GPRMC, 123519, A, 4807,038, N, 01131.000, E, 022,4, 084,4, 230394, 003,1, W*6A

RMC = odporúčaná minimálna veta C 123519 = oprava vykonaná o 12:35:19 UTC A = stav A = aktívny alebo V = prázdny priestor 4807,038, N = zemepisná šírka 48 ° 07,038 'N 01131.000, E = zemepisná dĺžka 11 stupňov 31 000' E 022,4 = rýchlosť nad zemou v uzloch 084,4 = Uhol stopy v stupňoch Pravda 230394 = Dátum - 23. marca 1994 003,1, W = Magnetická odchýlka *6A = Údaje kontrolného súčtu začínajú vždy *

$ GPGGA, 123519, 4807,038, N, 01131.000, E, 1, 08, 0,9, 545,4, M, 46,9, M,, *47

Údaje o opravách globálneho polohovacieho systému GGA 123519 Oprava urobená o 12:35:19 UTC 4807.038, N Zemepisná šírka 48 stupňov 07,038 'N 01131.000, E Zemepisná dĺžka 11 stupňov 31 000' E 1 Kvalita opravy: 0 = neplatná; 1 = oprava GPS (SPS); 2 = oprava DGPS; 3 = oprava PPS; 4 = kinematika v reálnom čase; 5 = Float RTK; 6 = odhadovaný (mŕtve zúčtovanie) (funkcia 2,3); 7 = režim manuálneho zadávania; 8 = režim simulácie; 08 Počet sledovaných satelitov 0,9 Horizontálne riedenie polohy 545,4, M nadmorská výška, metre, nad strednou hladinou mora 46,9, M výška geoidu (priemerná hladina mora) nad elipsoidom WGS84 (prázdne pole) čas v sekundách od poslednej aktualizácie DGPS (prázdne pole) Identifikačné číslo stanice DGPS *47 údaje o kontrolnom súčte, vždy začína znakom *

Ako vidíte, existuje oveľa viac informácií, ako to, čo tam potrebujete. Pomocou knižnice Adafruit môžete zavolať na niektoré z nich, napríklad GPS.latitude alebo GPS.lat (zemepisná šírka a šírka pologule) alebo GPS.day/month/year/hour/minute/seconds/milliseconds… Pozrite sa na Adafruit aby ste sa dozvedeli niečo viac. Nie je to také jasné, ale podľa niekoľkých rád v sprievodcovi modulmi GPS môžete nájsť to, čo potrebujete.

Čo môžeme robiť so súbormi, ktoré máme? Jednoduché: zostavte súbor kml tak, aby zobrazoval cestu v aplikácii Google Earth. Ak to chcete urobiť, skopírujte/vložte kód, ktorý nájdete pod týmto odkazom (pod odsekom Cesta), vložte medzi značky svoje súradnice zo súboru GPDData.txt, uložte súbor s príponou.kml a načítajte ho Google Zem.

POZNÁMKA: Značkovací jazyk.kml je jednoduchý. Ak už viete, čo je značkovací jazyk, nájdite si čas na prečítanie predchádzajúceho odkazu a dokumentácie, je to skutočne zaujímavé!

Použitie kml znamená poznať jeho značky a argumenty. Našiel som iba sprievodcu od spoločnosti Google, ten, ktorý som predtým prepojil, a podstatnou súčasťou je definovať štýl medzi značkami a zavolať ho znakom #, keď je čas napísať súradnice.

Súbor, ktorý som pridal do tejto sekcie, je.kml, do ktorého môžete vložiť svoje súradnice. Nezabudnite prilepiť túto syntax: zemepisná dĺžka, šírka, nadmorská výška

Odporúča: