Arduino Mega GPS z rejestracją LCD i SD: 9 kroków

Arduino Mega GPS z rejestracją LCD i SD: 9 kroków

Spisu treści:

Anonim

Użyj Audino Mega jako rejestratora GPS z czytelnym wyświetlaczem LCD i 5 przyciskami funkcyjnymi. Dwukolorowa dioda LED służy do dostarczania informacji o stanie.

Kartę SD można pozostawić i odczytać za pomocą szkicu czytnika kart, z wyjściem do monitora szeregowego.

Ta instrukcja pokaże Ci, jak można skonfigurować kartę Adafruit Ultimate GPS, opartą na chipie MTK3339, aby zalogować się na kartę SD.

Ekran lcd jest skonfigurowany do wyświetlania:

  • Pozycja szerokości i długości geograficznej
  • Odniesienie do brytyjskiej oferty krajowej
  • Wysokość
  • Prędkość
  • Łożysko
  • Odległość przebyta od początku (początek można zresetować)
  • Zakres od pochodzenia (W linii prostej)
  • Czas
  • Liczba satelitów
  • Poziome rozcieńczenie pozycji (HDOP)
  • Stan rejestrowania

Wartości LCD mogą być wyświetlane w jednostkach metrycznych lub brytyjskich.

Pierwotna koncepcja rejestrowania została opracowana na podstawie:

Rejestrator Ladyady

z biblioteką SdFat Billa Greimana

przy użyciu chipsetu MTK3339

Kieszonkowe dzieci:

Krok 1: Wymagania

1) Arduino Mega 2560

Działa również mega Sainsmart.

2) LCD Keypad Shield http: //www.hobbytronics.co.uk/arduino-lcd-keypad-s …

Działa również tarcza klawiatury sainsmart.

3) Adafruit ostateczna tarcza rejestratora gps http: //proto-pic.co.uk/adafruit-ultimate-gps-logge …

4) Arduino Stackable (Shield) Header Kit - R3 http: //www.hobbytronics.co.uk/cables-connectors/p …

Wyciągnij sworznie z łączników jednorzędowych i użyj plastiku, aby utworzyć odcinki dystansowe dla łączników główek osłony stosu.

5) Czerwona / zielona dwukolorowa wspólna dioda LED o średnicy 3 / 5mm

6) Karta pamięci Micro SD http: //www.hobbytronics.co.uk/4gb-microsd? Keyword = …

7) Rezystor do sterowania prądem LED (w zależności od diody LED)

Jeśli dioda LED wymaga 10 ma @ 5 V, rezystorem będzie R = V / I = 5 / 0,010 = 500 omów

8) Plastikowe pudełko

Użyłem 15 cm * 10 cm * 5 cm i byłbym mniejszy, gdybym mógł go pozyskać.

9) Wtyczka prądu stałego 5,5 mm do Arduino http://www.hobbytronics.co.uk/cables-connectors/dc …

9) Gniazdo gramofonowe Mono 3,5 mm

10) Panel Switch (on / off oceniony odpowiednio dla 5V 500mA)

11) Uchwyt bezpiecznika panelu z bezpiecznikiem 500mA

12) Małe gumowe stopki samoprzylepne (potrzebne 8)

13) 10 mm przekładki nylonowe o średnicy wewnętrznej 3,3 mm http: //www.hobbytronics.co.uk/hardware/spacers-was …

Idealnie pasują do przycisków lcd, aby tworzyć rozszerzenia. Użyj suplementów modelarskich do mocowania. Nakładaj ostrożnie za pomocą mikro-dyszy!

14) Śruby 2–2,5 mm z nakrętkami i podkładkami (3 potrzebne), które służą jako słupki podporowe dla Arduino. Jedna wąska śruba o długości 2 cm.

15) Mała długość kołka 5 mm. Mała śruba do zamocowania. 3-4 małe plastikowe prania.

16) Płyta pilśniowa pasująca do dolnej części pudełka. Drewno na dwie podstawy wspiera szerokość pudełka.

17) Bateria - użyłem 2-komórkowej 500 mAH LIPO. Będziesz potrzebował Ładowarka LIPO dla tego.

18) Doprowadzić do zgodności z typem akumulatora.

19) Opcjonalny kabel adaptera UFA do SMA, jeśli planujesz dodać zewnętrzne urządzenie arial.

GPS jest bardzo wrażliwy - jeszcze nie kupiłem arialu.

Krok 2: Pierwsze kroki

Przeczytaj artykuł adafruit o ostatecznym gps

Inny przydatny artykuł http: //learn.adafruit.com/adafruit-shield-compat …

Dopasuj 4 małe gumowe nóżki do podstawy Arduino Mega:

Zapewni to stabilną powierzchnię montażową.

Unikaj otworów montażowych.

Dopasuj łączniki do stosu do płyty gps:

Upewnij się, że używasz najbardziej zewnętrznych otworów w płycie GPS. Sprawdź, jak wszystko idzie w parze!

Częściowo wsunąłem deskę do arduino, a następnie przylutowałem 2 końcowe bolce w każdej sekcji, płytą do góry.

Należy uważać, aby nie przegrzać deski. Resztę szpilek przylutowano z usuniętą deską.

Użyj długości prostych pojedynczych łączników hedera i wyciągnij szpilki, aby utworzyć paski przekładek. Dopasuj elementy dystansowe do każdej z 4 sekcji łączników do układania w stos, które masz teraz na płycie GPS.

Zakładając, że używasz Mega, przeciąć ścieżki na styki 7, 8 i 10 jak pokazano na szkicu. Użyj ostrego skalpela i ostrożnie krój. Sprawdź przed cięciem!

Zamontuj baterię GPS i kartę SD:

Włóż baterię, zwracając uwagę na biegunowość.

Ostrożnie wsuń wstępnie sformatowaną kartę SD do gniazda, aż zostanie przytrzymana. Zwróć uwagę na prawidłowe wyrównanie.

Podłącz 3 prowadzi do CCS, TX i RX :

Wygięłem przewody na wolnym 6-stykowym złączu do układania w stosy pod kątem 90 stopni i przylutowałem go do rzędu za pomocą CSS / TX / RX

Dzięki temu mogę łatwo usunąć przewody, jeśli jest to wymagane.

Alternatywnie przylutuj przewody bezpośrednio.

Dodaj dwukolorową diodę LED:

Sprawdź arkusz danych dwukolorowej diody LED i wybierz rezystor, aby zapewnić prawidłowy prąd. Ustal orientację odprowadzeń. Dioda LED powinna być typu wspólnego katody.

Tymczasowo zamontuj płytę LCD na płycie GPS - starannie dopasuj otwory!

Wygnij doprowadzone doprowadzenia za pomocą spiczastych pliarów nosa jako podparcia, aby uzyskać profil na szkicu.

Dioda LED powinna wyczyścić koniec ekranu lcd o 10-12 mm i osiągnąć 4-5 mm ponad nim, tak aby wyłonił się z obudowy.

Usuń wyświetlacz LCD po ustaleniu profilu i długości elektrody.

Przylutuj diodę LED, rezystor i 3 przewody do spodu płyty GPS.

Czerwony doprowadził do styku 2, zielony do styku 3, a katoda przez rezystor do 0 V.

Podłącz kartę GPS do Arduino Mega:

Jeśli używasz zasilacza Sainsmart, po obu stronach nie będą znajdowały się 2 przewody, a nie w otworach gniazdowych. Przed montażem zginam je lekko na zewnątrz i kładę rurki termokurczliwe na odsłoniętych kołkach.

Podłącz 3 przewody do Arduino-RX do TX1, TX do RX1 i SSC do pin 32 (może być inny, jeśli chcesz)

Ustaw przełącznik GPS na SOFT SERIAL.

Podłącz płytę LCD do karty GPS:

Znajdź otwór montażowy na płycie lcd obok przycisków. Ostrożnie wyciąć kawałek 5 mm drewnianego kołka, aby podeprzeć koniec przycisku LCD poniżej otworu montażowego. Powinien spoczywać na ławce. Spowoduje to zatrzymanie kołysania ekranu LCD po naciśnięciu przycisków.

Włóż wystarczająco dużo plastikowych podkładek do szczeliny, aby zapobiec jej zamknięciu. Wkręć drewniany pręt na miejsce - użyj dobrego otworu pilotującego. W razie potrzeby wyreguluj wysokość papierem ściernym / praniem. Wędka powinna po prostu oczyścić dostęp do gniazda Mega.

Krok 3: Tworzenie pudełka

1) Wytnij kawałek płyty pilśniowej, aby zmieścił się w podstawie pudełka - pozwolić na ruch co najmniej 2 mm dookoła.

2) Umieść Mega na podstawie - Ostrożnie ustaw, aby umożliwić 15 mm od lewej krawędzi ekranu lcd po lewej stronie pudełka i 35 mm od przedniej krawędzi wyświetlacza LCD do przodu pudełka. Zaznacz i wywierć jeden otwór montażowy. Pogłębiam spód podstawy. Zamontuj 2 mm nakrętkę i śrubę od dołu.

Zmień położenie Arduino i dopasuj drugi otwór - upewnij się, że lcd jest równoległy do ​​podstawy.

Dodaj trzecią nakrętkę i śrubę. Końcowe mocowanie będzie śrubą od góry do dolnego prawego otworu montażowego.

W razie potrzeby przyciąć i złożyć śruby montażowe na długość.

3) Umieść megę na jej wierzchowcach. Dokładnie zmierz wysokość między górną częścią pudełka a górną częścią wyświetlacza LCD. Sprawdź położenie spodu pokrywy względem górnej części wyświetlacza LCD.

Zrób dwa prostokątne prowadnice prawidłowa głębokość, aby umieścić górę LCD 1-2 mm poniżej dna pokrywy.

Biegacz prawej ręki musi być wyśrodkowany na otworze śruby dla dolnej prawej pozycji montażowej.

Przykręć górną część podstawy, aby zabezpieczyć prowadnice. Unikaj otworu montażowego.

Sprawdź ponownie wysokość lcd względem pokrywy - nie kładź pokrywki - dioda zgie się!

4) Wywierć otwór na śrubę w prawej prowadnicy. Lekko pogłębić otwór wokół otworu na śrubę. Wytnij 10 mm nylonową podkładkę, aby podeprzeć dolną prawą część płyty. Przytrzymaj element dystansowy za pomocą śruby i przyklej podkładkę.

5) Ustaw Mega z lcd równolegle do przodu pudełka. Zamontuj podstawę za pomocą wkrętu z łbem stożkowym w każdą prowadnicę od zewnątrz pudełka. Należy zachować ostrożność podczas pozycjonowania.

6) Zmierz położenie diody LED. Wywierć mały otwór pilota w pokrywie. Sprawdź, czy dioda LED jest wyrównana i otwórz otwór do rozmiaru prześwitu dla diody LED. Pokrywa będzie teraz włączona.

7) Zmierz i wytnij otwór na ekran LCD - 1-2 mm mniej niż zewnętrzny rozmiar mocowania ekranu LCD.

8) Zdejmij podstawę i wytnij dwa paski karty falistej, aby pasowały do ​​podstawy biegaczy. Przyklej je do biegaczy. Następnie umieść 2 otwory w karcie, aby pasowały do ​​otworów na śruby. Dopasuj podstawę. Wyreguluj ciśnienie śruby, aż pokrywa będzie dobrze pasować do górnej części wyświetlacza LCD (Ah the 1-2mm gap!)

9) Wywierć pięć otworów na guziki:

Ostrożnie pomaluj białe tippexy na wierzchołki guzików.

Zmierz pozycję dolnego lewego przycisku. Wywierć otwór pilotowy w pokrywie. Sprawdź, czy otwór jest wyrównany - załóż pokrywę, zaświeć latarkę z góry - powinien pojawić się biały przycisk na górze.

W razie potrzeby wyreguluj otwór pilotowy za pomocą okrągłego pilnika igłowego - sprawdź ponownie położenie i wywierć otwór do średnicy prześwitu dla nylonowej przekładki 10 mm.

Powtórz dla 4 kolejnych przycisków. Wyczyść tippex za pomocą benzyny lakowej.

10) Dodaj przycisk Rozszerzenia do płyty LCD:

Chroń swoją powierzchnię roboczą. Przygotuj papierową szmatkę. Usuń wszystkie rozpraszające dzieci.

Sprawdź, czy nylonowe podkładki dystansowe 10 mm spoczywają na przyciskach. W razie potrzeby powiększ otwory, aż do uzyskania ścisłego dopasowania. Potrzebne będą modele do sterowania radiowego klejem cyjanoakrylowym - lepkość średnia do cienkiej oraz niektóre dysze drobnego kleju, także od dostawcy modelu sterowania radiowego. Dopasuj pierwszą przekładkę pionowo. Następnie za pomocą najlepszej dyszy nałóż odrobinę kleju na dno tubki. Odwróć płytę lcd, aby zapobiec przenikaniu do przełącznika. Poczekaj chwilę, a następnie wykonaj pozostałe przyciski, wykonując tę ​​samą procedurę. Pozostaw LCD odwrócony na 30 minut, aby klej mógł się utwardzić. W międzyczasie usuń i wyrzuć drobną dyszę. Wyczyść butelkę kleju z chusteczką i wymień wierzch kleju.

Sprawdź, czy pokrywa pudełka pasuje!

11) Wywierć i dopasuj gniazdo ładowarki, bezpiecznik przełącznika i przewód Arial (Jeśli wymagane)

12) Usuń śrubę z plastikowej obudowy odciążającej z wtyczki zasilania prądem stałym 5,5 mm. Przylutuj parę przewodów do zacisków - czerwony dla końcówki. Użyj przewodów termokurczliwych, aby zaizolować i ułożyć przewody w krzywej przed ogrzewaniem. Usunięcie obudowy odciążającej umożliwia miejsce na drewnianą podporę.

13 Podłącz okablowanie, jak pokazano w wewnętrznym widoku skrzynki.

Końcówkę gniazda phono należy podłączyć do dodatniego akumulatora.

Przełączane połączenie na gnieździe phono zapewnia zasilanie pozostałej części obwodu.

14) Wytnij otwór na wtyczkę USB i ponownie zbierz Arduino.

Jeśli to konieczne, załączyć połączenie UFL do przewodu arialu - zachować ostrożność.

Delikatnie dokręć śrubę montażową płyty końcowej.

Sprawdź dokładnie okablowanie. Nie akceptuję odpowiedzialności za tę lub inną funkcję zawartą w!

15) Podłącz akumulator i zamocuj na miejscu za pomocą rzepu

Przyklej 4 małe gumowe nóżki do podstawy pudełka i gotowe.

Krok 4: Biblioteki i oprogramowanie

Musisz zainstalować dwie biblioteki:

1) Pobierz i zainstaluj bibliotekę gps adafruit

2) Zainstaluj bibliotekę sd adafruit:

Domyślna instalacja nie będzie działać, jeśli żadna istniejąca biblioteka sd nie zostanie usunięta z folderu bibliotek Arduino. Zrób to i zainstaluj bibliotekę ze strony

Lub utrzymaj istniejącą bibliotekę SD na miejscu i pobierz SDADA.zip które zmodyfikowałem, aby przyjmować połączenia do SDADA. Zainstaluj go Biblioteki Arduino SDADA W ten sposób możesz nadal korzystać z innej biblioteki SD

Jeśli używasz wersji SDADA, jest ona zawarta w szkicu gps2.ino z linią:

#include SDADA.h

Jeśli nie, skomentuj ten wiersz i użyj: #include SD.h

Obie biblioteki mają przykład, z którym można przetestować GPS.

Następujące biblioteki powinny być domyślnie zainstalowane:

LiquidCrystal.h

SoftwareSerial.h

SPI.h

avr / sleep.h

Pobierz gps2.zip

Zapisz gps2.ino i gps_card.ino do własnych folderów w katalogu szkicu Arduino.

Otwórz gps2.ino

Zmień następującą linię:

#include SDADA.h

do #include SD.h jeśli nie używasz mojej zmienionej biblioteki SD

Ta zmiana dotyczy również gps_card.ino

Sprawdź ustawienie dla marki LCD:

W sekcji config:

boolean sain = true; // Ustaw na true, jeśli używasz tarczy lcd sainsmart, false na innej, np. Tarczy DFROBOT.

Ustaw zmienną sain zgodnie z wyborem lcd.

Zauważ, że obie wymienione płyty lcd używają pin 10 do ustawienia podświetlenia. Przycisk „w górę” pozwala wyłączyć podświetlenie, oszczędzając energię akumulatora.

gps2.ino powinien teraz działać!

Przyciski:

za) Wybierz zmienia wyświetlaną funkcję w pierwszej linii wyświetlacza LCD:

Pozycja i wysokość (długość dziesiętna i szerokość geograficzna, na przemian z wysokością)

Pozycja (długość dziesiętna i szerokość geograficzna)

Pozycja w przeglądzie uzbrojenia współrzędnych wschodnich i północnych plus numer arkusza OS

Wysokość

Całkowity dystans od początku

Zakres od początku

Czas

b) Lewo przełącza metryczne / imperialne.

do) Dobrze przełącza rejestrowanie:

Podczas rejestrowania w prawym dolnym rogu wyświetlany jest symbol L.

An! znak w tej pozycji oznacza brak karty SD lub niedostępnej karty

re) W górę przełącza tylny wyświetlacz. (Przydatne oszczędzanie energii.)

mi) Na dół resetuje odległość do zera:

To ustawia bieżącą pozycję jako początek zakresu. (Wrona leci na odległość do miejsca pochodzenia)

Aby aktywować przycisk, przytrzymaj go, aż dioda przestanie migać. Następnie zwolnij.

Krok 5: Używanie karty SD w Gps2.ino

Konfigurowanie karty SD:

Domyślny pin wyboru chipa i rzeczywisty pin chipSelect muszą być ustawione na wyjście.

Dostęp do karty SD uzyskuje się za pomocą instrukcji rozpoczęcia, która zawiera szpilki używane przez kartę na karcie GPS.

Szybkość karty jest ustawiona na SPI_Full_SPEED.

W przypadku błędu dioda LED miga sygnał błędu - szczegóły w nagłówku szkicu.

Jeśli debugowanie jest ustawione na true w config, wysyłane są również komunikaty monitora szeregowego.

Jeśli karta inicjalizuje się, zmienna hascard jest ustawiona na true.

// upewnij się, że domyślny pin wyboru układu jest ustawiony na

// wyjście, nawet jeśli go nie używasz:

pinMode (SS, OUTPUT); // domyślny mega pin wyboru

pinMode (chipSelect, OUTPUT);

digitalWrite (chipSelect, LOW);

// sprawdź, czy karta jest obecna i czy można ją zainicjować:

if (! SD.begin (chipSelect, 11, 12, 13)) {

if (debug) Serial.println (F („Inicjowanie karty nie powiodło się!”));

błąd (1);

} else {

if (! card.init (SPI_FULL_SPEED, chipSelect, 11, 12, 13)) {

błąd (2);

if (debug) {

Serial.println (F ("inicjalizacja nie powiodła się. Co należy sprawdzić:"));

Serial.println (F („* to karta jest włożona?”));

Serial.println (F („* Czy twoje okablowanie jest poprawne?”));

Serial.println (F ("* czy zmieniłeś pin chipSelect, aby pasował do twojej tarczy lub modułu?)));

}

}jeszcze{

hascard = true;

if (debug) Serial.println (F („Inicjowanie karty powiodło się”));

}

}

Wybieranie pliku SD do rejestrowania:

Kiedy prawy przycisk jest wciśnięty wywoływany jest podprogram openfile.

Sprawdza folder gps szukając nieużywanej nazwy pliku w sekwencji GPSLOGnn.TXT, gdzie nn = 0 do 99.

Jeśli plik zostanie znaleziony, ustaw Foundit na true.

if (! hascard) {return;} // nie kontynuuj, jeśli karta nie istnieje lub jest niedostępna

bajt i;

char nazwa_pliku 18;

strcpy (nazwa_pliku, „/gps/GPSLOG00.TXT”);

nazwa_pliku 17 = znak (0);

boolean foundit = false;

dla (i = 0; i <100; i ++) {

nazwa_pliku 11 = '0' + i / 10;

nazwa_pliku 12 = '0' + i% 10;

if (! SD.exists (filename)) {

foundit = true; złamać;

}

}

Jeśli wszystkie nazwy plików są w użyciu, foundit będzie fałszywe i użytkownik zostanie zapytany, czy pierwsze 50 powinno zostać usunięte. Jeśli nie jest to poprawne, hascard ma wartość false, aby nie było dalszych prób logowania.

if (! foundit) {

int thisbutton = -1;

lcd.clear ();

lcd.print („Dir full-Erase?”);

lcd.setCursor (0,1);

lcd.print ("Sel: Ok Prawo: Nie");

robić{

ten przycisk = read_LCD_buttons ();

} while (ten przycisk == btnNONE);

lcd.clear ();

if (thisbutton == btnSELECT) {

lcd.print („Usuwanie”);

dla (i = 0; i <50; i ++) {

nazwa_pliku 11 = '0' + i / 10;

nazwa_pliku 12 = '0' + i% 10;

if (SD.exists (nazwa_pliku)) SD.remove (nazwa_pliku);

}

i = 0;

nazwa_pliku 11 = '0' + i / 10;

nazwa_pliku 12 = '0' + i% 10;

}jeszcze{

błąd (4);

hascard = false;

powrót;

}

}

Plik można otworzyć:

W przypadku błędu wysyłane są informacje szeregowe, a kod błędu jest sygnalizowany przez diodę statusu.

Jeśli się powiedzie, wyprowadzany jest pierwszy wiersz pliku. To są nagłówki kolumn.

Zwróć uwagę na użycie logfile.flush (). Zapewnia to, że całe wyjście zostanie wysłane do pliku SD przed kontynuowaniem.

logfile = SD.open (nazwa_pliku, FILE_WRITE);

if (! logfile) {

if (debug) {

Serial.print („Nie można utworzyć”);

Serial.println (nazwa pliku);

}

błąd (3);

hascard = false;

}jeszcze{

logging = true;

myfile = nazwa pliku;

logfile.println (pad („Time”, 13) + lpad („Date”, 9) + lpad („Longitude”, 10)

+ Lpad („Szerokość”, 10) + Lpad („Wysokość”, 9) + „m” + Lpad („Geoid”, 9) + „m” + Lpad („Prędkość”, 7) + „Łożysko mph”);

logfile.flush ();

if (debug) {Serial.print ("Writing to"); Serial.println (filename);}

}

lpad i Podkładka są funkcjami wypełniania tekstu:

String lpad (String temp, byte L) {

bajt mylen = temp.length ();

if (mylen> (L - 1)) zwraca łańcuch temp. (0, L-1);

for (bajt i = 0; i <(L-mylen); i ++) temp = "" + temp;

temp. powrotu;

}

String pad (String temp, byte L) {

bajt mylen = temp.length ();

jeśli (mylen> (L - 1)) wraca

temp.substring (0, L-1);

for (bajt i = 0; i <(L-mylen); i ++) temp = temp + "";

temp. powrotu;

}

Zapis do pliku:

Główna pętla odczytuje gps i wysyła wartości do pliku, jeśli odbywa się rejestrowanie. („L” jest wyświetlane w prawym dolnym rogu ekranu LCD).

Wartości są sformatowane w celu utworzenia kolumn o stałej szerokości.

Funkcja dtostrf (float, w, dp, buf) jest funkcją biblioteki Arduino, która pobiera zmienną zmiennoprzecinkową i konwertuje ją na łańcuch o szerokości w z punktami dziesiętnymi dp. buf jest buforem char, który musi być wystarczająco duży, aby obsłużyć konwersję.

Zdefiniowałem buf za pomocą „char buf 20;” w nagłówku szkicu.

Plik jest opróżniany przed kontynuowaniem.

ogfile.print (pad (czas, 13)); // zawiera milisekundy

logfile.print (pad (myyear, 9));

logfile.print (dtostrf (długość, 10,5, buf));

logfile.print (dtostrf (szerokość, 10,5, buf));

logfile.print (dtostrf (altitudem, 9,1, buf)); logfile.print ("m");

logfile.print (dtostrf (geoid, 9,1, buf)); logfile.print ("m");

logfile.print (dtostrf (speedmph, 7,2, buf)); logfile.print ("mph");

logfile.print (dtostrf (nagłówek, 6,1, buf)); logfile.println ("deg");

logfile.flush ();

Zamykanie pliku:

Jeśli karta nie jest dostępna, wróć, w przeciwnym razie spłucz wszystkie pozostałe dane wyjściowe na kartę przed zamknięciem pliku.

void closefile () {

jeśli (! hascard) wraca;

logfile.flush ();

logfile.close ();

logging = false;

if (debug) Serial.println („Plik” + mój plik + „zamknięty”);

}

Krok 6: Czytanie GPS

Skonfiguruj biblioteki w nagłówku skryptu:

#include Adafruit_GPS.h

#include SoftwareSerial.h

HardwareSerial mySerial = Serial1;

Adafruit_GPS GPS (i mySerial);

Wybierz gps podczas uruchamiania:

pinMode (chipSelect, OUTPUT);

digitalWrite (chipSelect, LOW);

GPS.begin (9600);

// Ustaw szybkość aktualizacji // 1 Hz działa dobrze i pozostawia czas na wykonanie rejestracji GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); // alternatywnie częstotliwość odświeżania 0,1 Hz, 5 Hz i 10 Hz

// RMC (zalecane minimum): GGA (dane naprawcze), w tym wysokość GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA);

// Wyłącz aktualizacje statusu anteny, jeśli pozwala na to oprogramowanie układowe

GPS.sendCommand (PGCMD_NOANTENNA);

Odczytaj GPS przez przerwanie w celu echa na monitorze szeregowym.

Zauważ, że dane są w rzeczywistości interpretowane w kodzie biblioteki Adafruit_GPS.h, a nie w tej procedurze przerwania.

// 1ms Przerwanie na timer0 w celu ułatwienia echa danych GPS

jeśli GPSECHO = true useInterrupt (true); // odczyt wejścia przez przerwanie, jeśli jest prawdziwe

To jest to! Zapętl i przeczytaj:

GPS.newNMEAreceived () jest ustawione na true, jeśli pojawiły się nowe informacje o GPS.

GPS.parse (stringptr) ma wartość true, jeśli wartości zostały pomyślnie oddzielone (przeanalizowane) od surowych ciągów tekstowych GPS.

GPS.fix jest ustawiony na true, jeśli raport GPS ma ustaloną pozycję.

Jeśli gps ma poprawkę, wyodrębnij wartości pozycji, wysokości, prędkości, namiaru, czasu, geoidheight, satelitów i hdop.

Pozycja jest zwracana w postaci dziesiętnej długości i szerokości geograficznej, prędkości w węzłach, odległości w metrach.

if (GPS.newNMEAreceived ()) {

char * stringptr = GPS.lastNMEA ();

if (! GPS.parse (stringptr)) return; // przejdź dookoła, jeśli fałsz

if (GPS.fix) {

digitalWrite (ledGreen, HIGH);

fixed = true; // zapamiętaj stan w przypadku zmiany procesu pośredniego

mymillis = GPS.milliseconds;

myseconds = GPS.seconds;

mytime = String (GPS.hour) + „:” + String (GPS.minute) + „:”;

logtime = czas;

logtime + = String (int (myseconds + mymillis / 1000 + 0.1)); // zaokrąglij w górę, jeśli w granicach 0,1 S

mytime + = String (moje sekundy + mymillis / 1000); // pełny czas przywołany

myyear = String (GPS.day) + "/" + String (GPS.month) + "/";

lcdyear = myyear; theyear = String (GPS.year);

myyear + = theyear;

mylen = theyear.length ();

lcdyear + = theyear.substring (mylen-1, mylen); // ostatnia cyfra tylko w celu dopasowania

szerokość geograficzna = GPS.latitudeDegrees;

longitude = GPS.longitudeDegrees;

altitudem = GPS.altitude;

altitudef = altitudem * fconvert;

speedknots = GPS.speed;

speedmph = speedknots * 1.15077945;

speedkph = speedknots * 1.85200;

header = GPS.angle;

satelity = GPS.satellites;

geoid = GPS.geoidheight;

hdop = 7-int (GPS.HDOP + 0,5);

Krok 7: UK National Grid Position i Distance Traveled

1) Przekształcanie pozycji w dziesiętnej długości geograficznej i szerokości geograficznej na jednostki miernika brytyjskiego obrotu jest wyszczególniony w pdf dostarczonym przez ankietę:

http: //www.ordnancesurvey.co.uk/docs/support/guide …

Strona 40 nie odczytuje światła, ale zapewnia niezbędną matematykę.

Moja podprogramowa pustka (float phi, float lamda) implementuje obliczenia.

Zwracane wartości są dokładne do + - 0,1 dla kierunku wschodniego i + - 0,02 dla kierunku północnego. Ten brak precyzji wynika z ograniczonej dokładności arytmetyki pływakowej Arduino. Arduino obsługuje tylko „6-7” znaczących miejsc po przecinku.

Numer arkusza badania amunicji można pobrać z najbardziej znaczącej cyfry wartości długości i szerokości geograficznej. String funkcji NE2NGR (float i east, float & north) wykonuje ekstrakcję i przypisuje się:

Alex http: //www.codeproject.com/Articles/13577/GPS-Der …

2) Przebyty dystans można obliczyć na podstawie różnicy dwóch wartości szerokości i długości geograficznej.

Dla małych różnic szacunek musi być podejrzany z powodu braku precyzji związanej z poprawką GPS. Ograniczenie obsługi zmiennoprzecinkowego miejsca Arduino również wpływa na ogólną dokładność. Mimo to szacunkowe skumulowane odległości są rozsądne. Zasięg do początku jest dość dokładny, ponieważ obejmuje tylko różnicę między 2 lokalizacjami.

Początek obliczania odległości można ponownie ustawić za pomocą dolnego przycisku.

Przy niskich prędkościach próbkuję pozycje przez okres trzech sekund, aby zwiększyć prawdopodobieństwo, że różnica pozycji jest większa niż odległość niepewności w ustaleniu GPS. Przy wyższych prędkościach skracam czas między próbkowanymi pozycjami. Ten czas jest kontrolowany przez zmienną dlimit.

Odległość float_procedury_pomiędzy (float lat1, float long1, float lat2, float long2) zwraca odległość.

Oryginalne dzieło przypisuje się Maartenowi Lamersowi.

Krok 8: Czytanie Sdcard przy użyciu Gps_card.ino

Ten szkic zakłada, że ​​masz podłączony monitor szeregowy, najlepiej taki z możliwością kopiowania tekstu.

Niestety domyślny monitor Arduino Serial wydaje się nie oferować tej funkcji. (Napisałem własną.)

CoolTerm autorstwa Rogera Meiera wykonuje pracę

Jeśli używasz domyślnej konfiguracji biblioteki SD, dokonaj zmiany:

#include SD.h zamiast #include SDADA.h

Ustaw monitor szeregowy na szybkość 115200.

Po uruchomieniu szkicu przetestuje kartę SD i wyświetlić rozmiar karty i szczegóły katalogu gps.

Wpisz nazwę pliku zostanie on otwarty i wyświetlony.

Poszczególne pliki można usuwać za pomocą #delete nazwa pliku

Dane są prezentowane w kolumnach o stałej szerokości z ogranicznikami przestrzeni.

Zakładając, że możesz skopiować tekst, użycie wartości w Excelu jest bardzo proste.

Krok 9: Specyfikacje

The Wyświetlacz LCD ma wybieralną górną linię i a dolna linia składający się z:

Liczba satelitów

Prędkość

HDOP - poziome rozcieńczenie pozycji

Łożysko

Stan rejestrowania:

  • „L” - rejestrowanie
  • „” - Nie rejestruje się
  • „!” - Karta SD nie występuje lub jest niedostępna

Górna linia:

Pozycja szerokości i długości geograficznej w stopniach, na przemian z wysokością

Szerokość i długość geograficzna w stopniach

Odniesienie do National Gid w Wielkiej Brytanii

Wysokość

Odległość przebyta od początku (początek można zresetować)

Zakres od początku

Czas

Uwagi:

Wartości LCD w systemie metrycznym lub brytyjskim.

Dla wyświetlacza LCD prędkość <= odcięcie (0,65) mph jest pokazana jako 0

Liczba satelitów jest wyświetlana jako pionowy pasek w lewym dolnym rogu. Największa liczba, którą można wyświetlić, to 8, po czym pasek jest pełny.

HDOP jest wskazywany w dolnym środkowym ruchomym pasku. HDOP wskazuje na rozprzestrzenianie się obserwowanych satelitów. Zwiększona rozpiętość zwiększa dokładność, a liczba HDOP maleje. Wartości HDOP 1 są bardzo dobre!

Precyzja HDOP <0,5 jest pokazywana przez pełny pasek.

Pokazano HDOP od 0,5 do 1,5 (1) z 7 słupkami.

HDOP 6 jest pokazany z 1 słupkiem.

HDOP> 6 nie wyświetla żadnych pasków.

Guziki:

a) Wybierz zmiany lcd pierwsza linia między

wysokość / pozycja (długość i szerokość geograficzna)

pozycja (Long & Lat)

pozycja w przeglądzie uzbrojenia x, y współrzędne

Wysokość

czas

b) Po lewej przełącza metryczne / imperialne

c) Prawo przełącza rejestrowanie

d) Przełącza wyświetlacz w górę (Przydatne oszczędzanie energii)

e) Dół resetuje odległość do zera i ustawia bieżącą pozycję jako początek zakresu (Wrona leci odległość do początku)

Aby aktywować przytrzymanie przycisku, aż dioda przestanie migać. Następnie zwolnij.

Wskaźnik ledowy:

Interwał 1 sekundowy Miga na czerwono - brak poprawki

Interwał 1 sekundowy Miga na zielono - Fix

Cztery krótkie zielone mignięcia - naciśnięto przycisk

1 czerwony błysk powtarzany 5 razy - Błąd 1: Błąd karty SD nie powiódł się

2 czerwone błyski powtórzone 5 razy - Błąd 2: Niepowodzenie pełnego uruchomienia karty SD

3 czerwone błyski powtarzane 5 razy - Błąd 3: Nie można utworzyć pliku dziennika

4 czerwone błyski powtarzane 5 razy - Błąd 4: 100 plików w folderze dziennika i nie usuwaj

Szacunkowa skumulowana odległość będzie miała skumulowane błędy zaokrąglania z wielu jednosekundowych pozycji interwału.

Zakres będzie bardziej dokładny, ponieważ jest określony tylko przez dwie lokalizacje.

Zwróć uwagę, że precyzja wartości pomiaru Ordnance jest ograniczona - wartości zmiennoprzecinkowe arduino zawierają 6-7 znaczących miejsc po przecinku. Formuła konwersji obejmuje wiele obliczeń, a błędy zaokrąglania mają skumulowane skutki. Ostatecznie precyzja jest ograniczona przez zwrócone wartości sin, cos i tan.

Wartość wschodnia wydaje się być dokładna do ± 0,1

Północ do + - 0,02

Dla porównania wartości długości / szerokości geograficznej wydają się dokładne z dokładnością + - 0,00001

Podłączenie przewodu ufl do SMA nie wpływa na wydajność. Tylko aktywny arial (1575,42 MHz) zostanie rozpoznany przez układ GPS.