Na Ziemi znajduje się wiele satelitów GPS, które zapewniają dokładną lokalizację dowolnego miejsca. Wraz ze współrzędnymi lokalizacji (szerokość i długość geograficzna) dostarcza również inne dane, takie jak czas, data, wysokość, kąt śledzenia kierunku itp. Nauczyliśmy się już czytać te dane GPS z satelity za pomocą Arduino. Więc zrobimy zegar GPS na podstawie danych „Czas i data” z satelity GPS. Zaktualizowany zegar GPS jest bardzo dokładny i dostarcza dane w czasie rzeczywistym z dokładnością do milisekund.
Składniki:
- Arduino Uno
- Moduł GPS
- Wyświetlacz LCD 16x2
- Przewody łączące
- Zasilacz
Objaśnienie robocze:
Moduł GPS wysyła dane w formacie NMEA, zobacz dane wyjściowe GPS na poniższym zrzucie ekranu. Format NMEA składa się z kilku zdań, w których potrzebujemy jednego zdania, aby wyodrębnić datę i godzinę. To zdanie zaczyna się od $ GPRMC i zawiera współrzędne, czas i inne przydatne informacje. To $ GPRMC odnosi się do zalecanych minimalnych danych GPS / tranzytu, a długość tego ciągu wynosi około 70 znaków. Wcześniej wyodrębniliśmy ciąg $ GPGGA w systemie śledzenia pojazdów, aby znaleźć współrzędne szerokości i długości geograficznej. Oto wyjście GPS:
A string $ GPRMC zawiera głównie prędkość, czas, datę i pozycję
$ GPRMC, 123519.000, A, 7791.0381, N, 06727.4434, E, 022.4.084.4,230394,003,1, W * 6 A $ GPRMC, HHMMSS.SSS, A, szerokość geograficzna, N, długość geograficzna, E, prędkość, kąt, data, MV, W, CMD
Identyfikator |
Opis |
RMC |
Zalecane zdanie minimalne C |
HHMMSS.SSS |
Czas w formacie godzina minuta sekundy i milisekundy. |
ZA |
Status // A = aktywny i V = nieważny |
Szerokość |
Szerokość geograficzna 49 st. 16,45 min. Północ |
N |
Kierunek N = północ, S = południe |
Długość geograficzna |
Długość geograficzna (współrzędna) |
mi |
Kierunek E = wschód, W = zachód |
Prędkość |
prędkość w węzłach |
Kąt |
Kąt śledzenia w stopniach |
Data |
DATA w UTC |
MV |
Odchylenie magnetyczne |
W. |
Kierunek zmienności E / W |
CMD (* 6A) |
Dane sumy kontrolnej |
Możemy wyodrębnić godzinę i datę z ciągu $ GPRMC, zliczając przecinki w ciągu. Za pomocą Arduino i programowania znajdujemy ciąg $ GPRMC i przechowujemy go w tablicy, następnie po jednym przecinku można znaleźć czas (format 24-godzinny), a po dziewięciu przecinkach datę. Czas i data są dalej zapisywane w ciągach.
Satelita GPS podaje godzinę i datę w uniwersalnym czasie koordynowanym (UTC), więc musimy odpowiednio je przekonwertować. Aby przeliczyć na czas indyjski, dodaliśmy 5:30 czasu UTC, ponieważ czas indyjski jest o 5 i pół godziny przed UTC / GMT.
Schemat obwodu:
Połączenia obwodów zegara Arduino GPS są proste. Arduino służy do sterowania całym procesem, odbiera dane GPS z satelity przez moduł GPS, wyodrębnia datę i czas z ciągu $ GPRMC i wyświetla je na wyświetlaczu LCD.
Piny danych D4, D5, D6, D7 wyświetlacza LCD 16x2 są podłączone do pinu nr. 5, 4, 3, 2 Arduino i styki poleceń RS i EN wyświetlacza LCD są podłączone odpowiednio do pinów 7 i 6 Arduino. Pin Tx modułu odbiornika GPS jest podłączony do pinu Rx 10 Arduino. Ground PIN Arduino i GPS są ze sobą połączone. Tutaj zastosowaliśmy moduł GPS SKG13BL, pracujący z prędkością 9800 bps. Arduino jest również skonfigurowane z szybkością transmisji 9800 bps za pomocą funkcji „Serial.begin (9800)”.
Objaśnienie programowania:
W części programistycznej najpierw włączamy biblioteki i definiujemy piny do komunikacji szeregowej LCD i oprogramowania. Zdefiniuj także jakąś zmienną z tablicami do przechowywania danych. Używając tutaj Software Serial Library, zezwoliliśmy na komunikację szeregową na pinach 10 i 11 i stworzyliśmy je odpowiednio Rx i Tx. Domyślnie pin 0 i 1 Arduino są używane do komunikacji szeregowej, ale korzystając z biblioteki SoftwareSerial możemy zezwolić na komunikację szeregową na innych pinach cyfrowych Arduino
#zawierać
Po tym zainicjowaliśmy komunikację szeregową i LCD w funkcji konfiguracji i pokazaliśmy wiadomość powitalną na LCD.
Następnie wyodrębniliśmy czas i datę z otrzymanego ciągu.
podczas gdy (x
A następnie przekonwertuj godzinę i datę na dziesiętne i zmień je na czas indyjski (UTC +5: 30)
int UTC_hourDec = UTC_hour.toInt (); int UTC_minutDec = UTC_minut.toInt (); int Second = UTC_second.toInt (); int Date = UTC_date.toInt (); int Month = UTC_month.toInt ();……………
I wreszcie czas i data zostały pokazane na wyświetlaczu LCD za pomocą funkcji lcd.print , sprawdź pełny kod poniżej.