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, Červenec
Anonim
GPS záznamník Arduino
GPS záznamník Arduino
GPS záznamník Arduino
GPS záznamník Arduino

Ahoj kluci, Začínám být velmi nadšený z malých projektů, které lidem umožňují porozumět mnohem více technologii, kterou každý den máme.

Tento projekt je o GPS breakout a SD logování. Hodně jsem se naučil jen stavěním těchto věcí.

Po tomto tutoriálu získáte spoustu pojmů a mnohem více po odkazu, který poskytnu, abych se dostal hlouběji do témat.

Co to tedy je? Jednoduché: Je to GPS tracker, který zaznamenává pozice (také s nadmořskou výškou), rychlost a datum/čas na microSD.

Co budete potřebovat:

- Arduino Nano (ve skutečnosti jsem použil UNO k sestavení náčrtu, ale jsou úplně stejné!)- Adafruit ultimate GPS breakout- Breakout na microSD kartu- Pájecí nástroje (vše, co potřebujete k pájení)- Universal Stripboard (používal jsem 5x7 cm)- Dráty

Všechny tyto komponenty jsou docela levné, kromě modulu GPS. To je asi 30–40 dolarů a je to nejdražší část. I nová sada páječek by mohla stát méně.

Existuje také štít Adafruit s moduly GPS a SD karty dohromady. Pokud ho chcete použít, mějte na paměti, že je vyroben pro Arduino UNO, proto budete potřebovat UNO a ne Nano. V náčrtu však není žádný rozdíl.

Pojďme dál…

Krok 1: Připojení komponent

Připojení komponent
Připojení komponent
Připojení komponent
Připojení komponent
Připojení komponent
Připojení komponent
Připojení komponent
Připojení komponent

Poté, co získáte komponenty, je budete muset připojit. Zde najdete docela jasná schémata třepení. Zde je však také pinout:

MicroSD breakout

5V -> 5VGND -> GnnCLK -> D13DO -> D12DI -> D11CS -> D4 (Pokud používáte štít, je tento vestavěn v D10)

GPS breakout

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

Malé poznámky k tomuto modulu: Tito dva malí chlapci komunikují s Arduinem různými cestami. GPS používá TTL Serial, stejný druh, jaký používáme při komunikaci s Arduino přes Serial Monitor, proto musíme prostřednictvím knihovny deklarovat nový seriál (Tx a Rx), protože GPS chce standardně používat 9600 a my chcete také použít. Modul GPS vždy a neustále streamuje data, pokud je připojen. Toto je ošemetná část, se kterou se musíme vypořádat, protože kdybychom přečetli větu a poté ji vytiskli, mohli bychom přijít o další, což je také potřeba. Při kódování na to musíme pamatovat!

MicroSD komunikuje prostřednictvím SPI (Serial Peripheral Interface), což je další způsob komunikace s deskou. Tyto typy modulů používají vždy CLK na D13, DO na D12 a DI na D11. Někdy mají tato připojení jiný název, jako CLK = SCK nebo SCLK (sériové hodiny), DO = DOUT, SIMO, SDO, SO, MTSR (všechna označují hlavní výstup) a DI = SOMI, SDI, MISO, MRST (hlavní vstup). Nakonec máme CS nebo SS, který označuje pin, kam posíláme to, co chceme napsat do MicroSD. Pokud chcete použít dva různé moduly SPI, musíte tento pin odlišit, abyste je mohli použít oba. Například LCD obrazovka A MicroSd, jako je ten, který používáme. Mělo by fungovat také pomocí dvou různých LCD připojených k různým CS.

Pájejte tyto části dohromady v desce a jste připraveni nahrát skicu!

Jak můžete vidět na náčrtu, místo přímé komponenty pájím některé dupontní ženské konektory, protože v budoucnu možná budu chtít komponentu znovu použít nebo změnit.

GPS modul s konektory jsem také připájel špatným směrem, to byla moje chyba a nechtěl jsem, ale funguje to a nechci riskovat, že to rozbiju při pokusu o odpájení těch malých parchantů! Stačí pájet správným způsobem a vše bude v pořádku!

Zde několik užitečných pájkových videí: Průvodce pájením pro začátečníky Video o odpájkovači

Adafruit Youtube kanál, spousta zajímavých věcí!

Při pájení zkuste použít jen tolik kovu, kolik potřebujete, jinak uděláte nepořádek. Nebojte se to udělat, možná začněte s něčím, co není tak drahé, a než budete pájet různé věci. Rozdíl je také ve správném materiálu!

Krok 2: Skica

Nejprve samozřejmě importujeme knihovnu a sestavíme její objekty, se kterými bude pracovat: SPI.h slouží ke komunikaci s moduly SPI, SD je knihovna MicroSD a Adafruit_GPS je knihovna modulu GPS. SoftwareSerial.h slouží k vytvoření sériového portu pomocí softwaru. Syntaxe je „mySerial (TxPin, RxPin);“. Objekt GPS je třeba ukázat na seriál (v závorkách). Zde jsou odkazy knihoven na Adafruit GPS breakout, MicroSD breakout (pro čistou práci byste měli také naformátovat SD pomocí tohoto softwaru od asociace SD) a Softwarová sériová knihovna (měla by být součástí IDE).

POZNÁMKA: Při pokusu o připojení spousty informací v jednom souboru nebo při použití více než dvou souborů v náčrtu jsem narazil na problém. Neformátoval jsem SD pomocí tohoto softwaru, možná by to mohlo problém vyřešit. Také jsem se pokusil přidat další zařízení do zařízení, BMP280 (modul I2C), bez úspěchu. Vypadá to, že použití modulu I2C způsobí, že se skica zblázní! Už jsem o tom hovořil na fóru Adafruit, ale stále jsem nedostal žádnou odpověď.

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

Nyní potřebujeme všechny naše proměnné: Dva řetězce slouží ke čtení dvou vět, které potřebujeme k výpočtu spousty užitečných informací z GPS. Znak je pro zásobu vět před jejich rozebráním, plováky jsou pro výpočet souřadnic ve stupních (GPS odeslání používá souřadnice ve stupních a minutách, potřebujeme je ve stupních, abychom je mohli přečíst v Google Earth). ChipSelect je kolík, do kterého zapojíme CS karty MicroSD. V tomto případě je D4, ale pokud používáte štít SD, budete sem muset vložit D10. Proměnná souboru je ta, která během náčrtu uloží informace o souboru, který používáme.

Řetězec NMEA1;

Řetězec NMEA2; znak c; float deg; float degWhole; float degDec; int chipSelect = 4; Soubor mySensorData;

Nyní deklarujeme několik funkcí, aby byla skica o něco elegantnější a méně chaotická:

Dělají v podstatě totéž: čtou věty NMEA. clearGPS () ignoruje tři věty a readGPS () dvě z nich ukládá do proměnných.

Podívejme se, jak: Zatímco smyčka kontroluje, zda jsou v modulu nové věty NMEA, a čte proud GPS, dokud neexistuje. Když je tam nová věta, jsme mimo smyčku while, kde je věta skutečně přečtena, analyzována a uložena v prvních proměnných NMEA. Okamžitě děláme totéž pro další, protože GPS neustále proudí, nečeká, až budeme připraveni, nemáme čas to okamžitě vytisknout

Tohle je velmi důležité! Nedělejte nic, než si uložíte obě věty, jinak by ta druhá byla nakonec poškozená nebo prostě špatná.

Poté, co jsme dostali dvě věty, vytiskneme je do seriálu, abychom měli jistotu, že to jde dobře.

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

Nyní, když jsme všichni připraveni, můžeme projít nastavením ():

Nejprve: otevíráme komunikaci na Serial 115200 pro Arduino PC a na 9600 pro GPS modul Arduino. Za druhé: do modulu GPS odešleme tři příkazy: první je vypnout aktualizaci antény, druhý je požadovat pouze řetězec RMC a GGA (budeme používat pouze ty, které mají všechny informace, od kterých byste kdy potřebovali GPS), třetí a poslední příkaz je nastavit rychlost aktualizace na 1HZ, kterou navrhl Adafruit.

Poté nastavíme kolík D10 na VÝSTUP, pokud a pouze pokud je pin CS vašeho režimu SD jiný než D10. Ihned poté nastavte CS na modulu SD na pinu chipSelect.

Spouštíme funkce readGPS (), které zahrnují cleanGPS ().

Nyní je čas napsat něco do souborů! Pokud je soubor již na kartě Sd, připojte k nim časové razítko. Tímto způsobem nemusíme pokaždé sledovat relace nebo mazat soubory. S časovým razítkem zapsaným v rámci funkce nastavení jsme si jisti, že v každé relaci přidáme do souborů pouze oddělení.

POZNÁMKA: Knihovna SD to s otevřením a zavřením souboru pokaždé myslí vážně! Mějte to na paměti a pokaždé zavřete! Chcete -li se o knihovně dozvědět více, klikněte na tento odkaz.

Dobře, jsme opravdu připraveni získat jádro stream-and-log části skici.

neplatné nastavení () {

Serial.begin (115200); GPS.begin (9600); // Odesílání příkazů do modulu GPS GPS.sendCommand ("$ PGCMD, 33, 0*6D"); GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA); GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); zpoždění (1000); // pouze pokud není pin CS vašeho modulu SD na pinu 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.měsíc); mySensorData.print ("."); mySensorData.print (GPS.rok); mySensorData.print (" -"); mySensorData.print (GPS.hour); mySensorData.print (":"); mySensorData.print (GPS.minute); 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.měsíc); mySensorData.print ("."); mySensorData.print (GPS.rok); mySensorData.print (" -"); mySensorData.print (GPS.hour); mySensorData.print (":"); mySensorData.print (GPS.minute); mySensorData.print (":"); mySensorData.print (GPS.sekundy); mySensorData.println ("***"); mySensorData.close (); }}

Nyní získáváme jádro náčrtu.

Je to opravdu velmi jednoduché.

Budeme číst proud GPS pomocí funkce readGPS (), než ovládáme, pokud máme opravu rovnou 1, t znamená, že jsme spojeni se satelitem e. Pokud to pochopíme, napíšeme naše informace do souborů. V prvním souboru "NMEA.txt" píšeme pouze nezpracované věty. Ve druhém souboru „GPDData.txt“připojíme souřadnice (převedené pomocí funkcí, které jsme viděli dříve) a nadmořskou výšku. Tyto informace stačí ke kompilaci souboru.kml k vytvoření cesty v aplikaci Google Earth. Všimněte si toho, že zavíráme soubory pokaždé, když jsme je otevřeli, abychom něco napsali!

prázdná smyčka () {

readGPS (); // Condizione if che controlla se l'antenna ha segnale. Se si, procede con la scrittura dei dati. if (GPS.fix == 1) {// Data ukládejte pouze v případě, že máme opravu mySensorData = SD.open ("NMEA.txt", FILE_WRITE); // Další soubor pro více než NMEA grezze mySensorData.println (NMEA1); // Scrive prima NMEA sul file mySensorData.println (NMEA2); // Scrive seconda NMEA sul file mySensorData.close (); // Soubor Chiude !!

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

// Převod a podélné převádění convLong (); mySensorData.print (deg, 4); // Zápis souřadnic v souboru grad mySensorData.print (","); // Scrive una virgola per separare i dati Serial.print (deg); Serial.print (","); // Převod a šířka latitudeine convLati (); mySensorData.print (deg, 4); // Zápis souřadnic v souboru grad 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 (); }}

Nyní, když jsme všichni hotovi, můžete nahrát skicu, sestavit zařízení a užít si to!

Chcete -li získat opravu = 1, musíte ji použít s přijímačem GPS obráceným k obloze, nebo k němu můžete připojit externí anténu.

Mějte také na paměti, že pokud máte opravu, červené světlo bliká každých 15 sekund, pokud ne, mnohem rychleji (jednou za 2-3 sekundy).

Pokud se chcete dozvědět něco více o větách NMEA, postupujte podle dalšího kroku této příručky.

Krok 3: Věty NMEA a soubor.kml

Zařízení a skica jsou kompletní, fungují dobře. Mějte na paměti, že k získání opravy (spojení se satelity) by měl útěk směřovat k obloze.

Když dostanete opravu, malé červené světlo bliká každých 15 sekund

Pokud chcete lépe porozumět větám NMEA, můžete číst dále.

V náčrtu používáme pouze dvě věty, GGA a RMC. Je to jen pár vět, které modul GPS streamuje.

Podívejme se, co je v těchto řetězcích:

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

RMC = doporučená minimální věta C 123519 = oprava přijata v 12:35:19 UTC A = stav A = aktivní nebo V = prázdný 4807,038, N = zeměpisná šířka 48 stupňů 07,038 'N 01131.000, E = zeměpisná délka 11 stupňů 31 000' E 022,4 = rychlost nad zemí v uzlech 084,4 = úhel stopy ve stupních True 230394 = datum - 23. března 1994 003,1, W = magnetická variace *6A = data kontrolního součtu začínají vždy *

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

Data opravy globálního polohovacího systému GGA 123519 Oprava přijata v 12:35:19 UTC 4807.038, N zeměpisná šířka 48 stupňů 07,038 'N 01131.000, E délka 11 stupňů 31 000' E 1 Kvalita opravy: 0 = neplatná; 1 = oprava GPS (SPS); 2 = oprava DGPS; 3 = oprava PPS; 4 = Kinematika v reálném čase; 5 = Float RTK; 6 = odhad (mrtvé zúčtování) (funkce 2.3); 7 = režim ručního zadávání; 8 = režim simulace; 08 Počet sledovaných satelitů 0,9 Horizontální ředění polohy 545,4, M nadmořská výška, metry, nad střední hladinou moře 46,9, M výška geoidu (střední hladina moře) nad elipsoidem WGS84 (prázdné pole) čas v sekundách od poslední aktualizace DGPS (prázdné pole) ID stanice stanice DGPS *47 data kontrolního součtu, vždy začíná *

Jak vidíte, existuje mnohem více informací než to, co tam potřebujete. Pomocí knihovny Adafruit můžete některé z nich zavolat, například GPS.latitude nebo GPS.lat (zeměpisná šířka a šířka polokoule) nebo GPS.day/month/year/hour/minute/seconds/milliseconds… Podívejte se na Adafruit web, abyste věděli něco více. Není to tak jasné, ale podle některých rad v příručce modulů GPS můžete najít to, co potřebujete.

Co můžeme dělat se soubory, které máme? Snadné: kompilací souboru kml zobrazíte cestu v aplikaci Google Earth. Chcete -li to provést, zkopírujte/vložte kód, který najdete pod tímto odkazem (pod odstavcem Cesta), vložte mezi značky souřadnice ze souboru GPDData.txt, uložte soubor s příponou.kml a načtěte jej Google Earth.

POZNÁMKA: Značkovací jazyk.kml je jednoduchý, pokud již víte, co je značkovací jazyk, věnujte si čas na přečtení předchozího odkazu a dokumentace uvnitř, je to ve skutečnosti zajímavé!

Použití kml znamená znát jeho značky a argumenty. Našel jsem pouze průvodce od Googlu, ten, který jsem propojil předtím, a nezbytnou součástí je definovat styl mezi značkami a zavolat jej znakem #, když je čas napsat souřadnice.

Soubor, který jsem přidal do této sekce, je.kml, do kterého stačí vložit souřadnice. nezapomeňte vložit s touto syntaxí: zeměpisná délka, zeměpisná šířka, nadmořská výška

Doporučuje: