- Użyte materiały
- Moduł GPS NEO6M
- 1,3-calowy wyświetlacz OLED I2C
- Schemat obwodu
- Programowanie Arduino dla prędkościomierza Arduino OLED
Prędkościomierze służą do pomiaru prędkości jazdy pojazdu. Wcześniej używaliśmy czujnika podczerwieni i czujnika Halla, aby zbudować odpowiednio analogowy prędkościomierz i cyfrowy prędkościomierz. Dziś wykorzystamy GPS do pomiaru prędkości poruszającego się pojazdu. Prędkościomierze GPS są dokładniejsze niż standardowe prędkościomierze, ponieważ mogą w sposób ciągły lokalizować pojazd i obliczać prędkość. Technologia GPS jest szeroko stosowana w smartfonach i pojazdach do nawigacji i alertów o ruchu drogowym.
W tym projekcie zbudujemy prędkościomierz Arduino GPS z wykorzystaniem modułu NEO6M GPS z wyświetlaczem OLED.
Użyte materiały
- Arduino Nano
- Moduł GPS NEO6M
- 1,3-calowy wyświetlacz OLED I2C
- Płytka prototypowa
- Podłączanie zworek
Moduł GPS NEO6M
Tutaj używamy modułu GPS NEO6M. Moduł GPS NEO-6M to popularny odbiornik GPS z wbudowaną ceramiczną anteną, która zapewnia silne możliwości wyszukiwania satelitarnego. Ten odbiornik ma możliwość wykrywania lokalizacji i śledzenia do 22 satelitów oraz identyfikuje lokalizacje w dowolnym miejscu na świecie. Dzięki wbudowanemu wskaźnikowi sygnału możemy monitorować stan sieci modułu. Posiada baterię podtrzymującą dane, dzięki czemu moduł może zapisać dane w przypadku przypadkowego wyłączenia głównego zasilania.
Sercem modułu odbiornika GPS jest układ GPS NEO-6M firmy u-blox. Może śledzić do 22 satelitów na 50 kanałach i ma bardzo imponujący poziom czułości, który wynosi -161 dBm. Ten 50-kanałowy silnik pozycjonujący u-blox 6 ma czas do pierwszej naprawy (TTFF) poniżej 1 sekundy. Ten moduł obsługuje prędkość transmisji w zakresie 4800-230400 bps i ma domyślną prędkość 9600 bodów.
Funkcje:
- Napięcie robocze: (2,7-3,6) V DC
- Prąd roboczy: 67 mA
- Szybkość transmisji: 4800-230400 bps (domyślnie 9600)
- Protokół komunikacyjny: NEMA
- Interfejs: UART
- Antena zewnętrzna i wbudowana pamięć EEPROM.
Pinout modułu GPS:
- VCC: pin napięcia wejściowego modułu
- GND: pin uziemienia
- RX, TX: piny komunikacyjne UART z mikrokontrolerem
Wcześniej połączyliśmy GPS z Arduino i zbudowaliśmy wiele projektów przy użyciu modułów GPS, w tym śledzenia pojazdów.
1,3-calowy wyświetlacz OLED I2C
Termin OLED oznacza „ organiczną diodę elektroluminescencyjną” . Wykorzystuje tę samą technologię, która jest używana w większości naszych telewizorów, ale ma mniej pikseli w porównaniu z nimi. Fajnie jest mieć te fajnie wyglądające moduły wyświetlaczy, które można połączyć z Arduino, ponieważ dzięki temu nasze projekty będą wyglądać fajnie. Omówiliśmy tutaj cały artykuł dotyczący wyświetlaczy OLED i ich typów. Tutaj używamy monochromatycznego 4-pinowego wyświetlacza SH1106 OLED 1,28 ”OLED. Ten wyświetlacz może działać tylko w trybie I2C.
Specyfikacja techniczna:
- Sterownik IC: SH1106
- Napięcie wejściowe: 3,3 V-5 V DC
- Rozdzielczość: 128x64
- Interfejs: I2C
- Pobór prądu: 8 mA
- Kolor piksela: niebieski
- Kąt widzenia:> 160 stopni
Opis pinów:
VCC: zasilanie wejściowe 3,3-5 V DC
GND: pin odniesienia uziemienia
SCL: Pin zegarowy interfejsu I2C
SDA: pin danych szeregowych interfejsu I2C
Społeczność Arduino dała nam już wiele bibliotek, które można bezpośrednio wykorzystać, aby to znacznie uprościć. Wypróbowałem kilka bibliotek i stwierdziłem, że biblioteka Adafruit_SH1106.h była bardzo łatwa w użyciu i miała kilka opcji graficznych, dlatego użyjemy tego samego w tym samouczku.
OLED wygląda bardzo fajnie i można go łatwo połączyć z innymi mikrokontrolerami, aby zbudować kilka ciekawych projektów:
- Połączenie wyświetlacza OLED SSD1306 z Raspberry Pi
- Interfejs wyświetlacza OLED SSD1306 z Arduino
- Zegar internetowy za pomocą ESP32 i wyświetlacza OLED
- Automatyczny regulator temperatury AC wykorzystujący Arduino, DHT11 i IR Blaster
Schemat obwodu
Schemat obwodu dla tego prędkościomierza GPS Arduino wykorzystującego OLED jest podany poniżej.
Kompletna konfiguracja będzie wyglądać jak poniżej:
Programowanie Arduino dla prędkościomierza Arduino OLED
Pełny kod projektu znajduje się na dole samouczka. Tutaj wyjaśniamy cały kod wiersz po wierszu.
Przede wszystkim uwzględnij wszystkie biblioteki. W tym przypadku biblioteka TinyGPS ++. H jest używana do uzyskania współrzędnych GPS za pomocą modułu odbiornika GPS, a Adafruit_SH1106.h jest używany do OLED.
#zawierać
Następnie definiowany jest adres OLED I2C, który może być OX3C lub OX3D, tutaj jest to OX3C w moim przypadku. Należy również zdefiniować pin resetowania wyświetlacza. W moim przypadku jest zdefiniowany jako -1, ponieważ wyświetlacz udostępnia pin resetowania Arduino.
# zdefiniować OLED_ADDRESS 0x3C # zdefiniować OLED_RESET -1 Wyświetlacz Adafruit_SH1106 (OLED_RESET);
Następnie obiekty klasy TinyGPSPlus i Softwareserial są zdefiniowane, jak pokazano poniżej. Klasa oprogramowania szeregowego wymaga pin nr. do komunikacji szeregowej, która jest tutaj zdefiniowana jako 2 i 3.
int RX = 2, TX = 3; TinyGPSPlus gps; OprogramowanieSerial gpssoft (RX, TX);
Wewnątrz setup () , inicjalizacja jest wykonywana dla komunikacji szeregowej i OLED. Domyślna prędkość transmisji dla komunikacji szeregowej oprogramowania jest zdefiniowana jako 9600. Tutaj SH1106_SWITCHCAPVCC służy do wewnętrznego generowania napięcia wyświetlacza z 3.3V, a funkcja display.begin jest używana do inicjalizacji wyświetlacza.
void setup () { Serial.begin (9600); gpssoft.begin (9600); display.begin (SH1106_SWITCHCAPVCC, OLED_ADDRESS); display.clearDisplay (); }
Wewnątrz, podczas prawdziwej pętli, odebrane dane szeregowe są sprawdzane, jeśli odebrane są prawidłowe sygnały GPS, a następnie wywoływana jest funkcja displayspeed (), aby pokazać wartość prędkości na OLED.
while (gpssoft.available ()> 0) if (gps.encode (gpssoft.read ())) displayspeed ();
W funkcji displayspeed () dane prędkości z modułu GPS są sprawdzane za pomocą funkcji gps.speed.isValid () i jeśli zwraca wartość true, to wartość prędkości jest wyświetlana na wyświetlaczu OLED. Tutaj rozmiar tekstu na OLED jest definiowany za pomocą funkcji display.setTextSize, a pozycja kursora jest definiowana za pomocą funkcji display.setCursor . Dane prędkości z modułu GPS są dekodowane za pomocą funkcji gps.speed.kmph (), a na końcu wyświetlane za pomocą display.display () .
if (gps.speed.isValid ()) { display.setTextSize (2); display.setCursor (40, 40); display.print (gps.speed.kmph ()); display.display (); }
Na koniec prześlij kod do Arduino Uno i umieść system w poruszającym się pojeździe, a prędkość możesz zobaczyć na wyświetlaczu OLED, jak pokazano na poniższym obrazku.
Pełny kod z filmem demonstracyjnym znajduje się poniżej.