- Použité materiály
- Modul GPS NEO6M
- 1,3palcový I2C OLED displej
- Kruhový diagram
- Programování Arduino pro Arduino OLED rychloměr
Rychloměry se používají k měření rychlosti jízdy vozidla. Dříve jsme použili IR senzor a Hallovo čidlo k vytvoření analogového rychloměru a digitálního rychloměru. Dnes budeme k měření rychlosti jedoucího vozidla používat GPS. Rychloměry GPS jsou přesnější než standardní rychloměry, protože dokážou nepřetržitě lokalizovat vozidlo a mohou vypočítat rychlost. Technologie GPS je široce používána v chytrých telefonech a vozidlech pro navigaci a dopravní upozornění.
V tomto projektu postavíme GPS rychloměr Arduino pomocí GPS modulu NEO6M s OLED displejem.
Použité materiály
- Arduino Nano
- Modul GPS NEO6M
- 1,3palcový I2C OLED displej
- Nepájivá deska
- Připojení propojek
Modul GPS NEO6M
Zde používáme modul GPS NEO6M. Modul GPS NEO-6M je oblíbený přijímač GPS s vestavěnou keramickou anténou, který poskytuje silné možnosti satelitního vyhledávání. Tento přijímač má schopnost snímat polohy a sledovat až 22 satelitů a identifikovat místa kdekoli na světě. Pomocí palubního indikátoru signálu můžeme sledovat stav sítě modulu. Má záložní baterii dat, takže modul může ukládat data při náhodném vypnutí hlavního napájení.
Srdcem uvnitř modulu GPS přijímače je NEO-6M GPS čip od u-blox. Může sledovat až 22 satelitů na 50 kanálech a má velmi působivou úroveň citlivosti, která je -161 dBm. Tento 50kanálový poziční modul u-blox 6 se může pochlubit Time-To-First-Fix (TTFF) pod 1 sekundu. Tento modul podporuje přenosovou rychlost od 4800 do 230 400 b / s a má výchozí přenosovou rychlost 9600.
Funkce:
- Provozní napětí: (2,7-3,6) V DC
- Provozní proud: 67 mA
- Přenosová rychlost: 4800-230400 b / s (výchozí 9600)
- Komunikační protokol: NEMA
- Rozhraní: UART
- Externí anténa a vestavěná EEPROM.
Pinout modulu GPS:
- VCC: Pin vstupního napětí modulu
- GND: Zemnicí kolík
- RX, TX: Komunikační piny UART s mikrokontrolérem
Dříve jsme propojili GPS s Arduinem a stavěli jsme mnoho projektů pomocí GPS modulů včetně sledování vozidel.
1,3palcový I2C OLED displej
Termín OLED znamená „ Organic Light emitting diode“, používá stejnou technologii, která se používá ve většině našich televizorů, ale ve srovnání s nimi má méně pixelů. Je opravdu zábavné mít tyto skvěle vypadající zobrazovací moduly propojené s Arduino, protože díky nim budou naše projekty vypadat skvěle. Zde jsme se zabývali celým článkem o OLED displejích a jejich typech. Zde používáme černobílý 4kolíkový OLED displej SH1106 OLED 1,28 ”. Tento displej může pracovat pouze v režimu I2C.
Technické specifikace:
- Driver IC: SH1106
- Vstupní napětí: 3,3 V - 5 V DC
- Rozlišení: 128x64
- Rozhraní: I2C
- Odběr proudu: 8 mA
- Barva pixelu: modrá
- Pozorovací úhel:> 160 stupňů
Popis kolíku:
VCC: Vstupní napájecí zdroj 3,3-5V DC
GND: Zemnící referenční kolík
SCL: Pin hodin rozhraní I2C
SDA: Pin sériových dat rozhraní I2C
Komunita Arduino nám již poskytla mnoho knihoven, které lze přímo použít, aby to bylo mnohem jednodušší. Vyzkoušel jsem několik knihoven a zjistil jsem, že knihovna Adafruit_SH1106.h se velmi snadno používá a má několik grafických možností, proto v tomto tutoriálu použijeme totéž.
OLED vypadá velmi skvěle a lze jej snadno propojit s jinými mikrokontroléry a vytvořit tak několik zajímavých projektů:
- Propojení OLED displeje SSD1306 s Raspberry Pi
- Propojení OLED displeje SSD1306 s Arduino
- Internetové hodiny využívající ESP32 a OLED displej
- Automatický regulátor teploty střídavého proudu využívající Arduino, DHT11 a IR Blaster
Kruhový diagram
Schéma zapojení tohoto rychloměru Arduino GPS využívající OLED je uvedeno níže.
Kompletní nastavení bude vypadat níže:
Programování Arduino pro Arduino OLED rychloměr
Celý kód projektu je uveden ve spodní části tutoriálu. Zde vysvětlujeme celý kód po řádku.
Nejprve zahrňte všechny knihovny. Zde se používá knihovna TinyGPS ++. H k získání souřadnic GPS pomocí modulu přijímače GPS a Adafruit_SH1106.h se používá pro OLED.
#zahrnout
Poté je definována adresa OLED I2C, která může být buď OX3C nebo OX3D, zde je to v mém případě OX3C. Musí být také definován resetovací kolík displeje. V mém případě je definována jako -1, protože displej sdílí Arduino resetovací pin.
#define OLED_ADDRESS 0x3C #define OLED_RESET -1 displej Adafruit_SH1106 (OLED_RESET);
Dále jsou definovány objekty pro třídu TinyGPSPlus a Softwareserial, jak je znázorněno níže. Softwarová sériová třída potřebuje pin Arduino č. pro sériovou komunikaci, která je zde definována jako 2 a 3.
int RX = 2, TX = 3; TinyGPSPlus gps; SoftwareSerial gpssoft (RX, TX);
Uvnitř setup () se inicializuje sériová komunikace a OLED. Výchozí přenosová rychlost pro softwarovou sériovou komunikaci je definována jako 9600. Zde se SH1106_SWITCHCAPVCC používá k internímu generování zobrazovacího napětí z 3,3 V a k inicializaci displeje se používá funkce display.begin .
void setup () { Serial.begin (9600); gpssoft.begin (9600); display.begin (SH1106_SWITCHCAPVCC, OLED_ADDRESS); display.clearDisplay (); }
Uvnitř zatímco pravda loop, sériová přijatá data jsou potvrzeny, jsou-li přijat platný signál GPS, pak displayspeed () je volána pro zobrazení hodnoty rychlosti na OLED.
while (gpssoft.available ()> 0) if (gps.encode (gpssoft.read ())) displayspeed ();
Uvnitř displayspeed () funkce, údaje o rychlosti z GPS modulu je poté ověřena pomocí funkce gps.speed.isValid () a pokud se vrátí skutečnou hodnotu, pak se zobrazí hodnota rychlosti na OLED displeji. Zde je velikost textu na OLED definována pomocí funkce display.setTextSize a poloha kurzoru je definována pomocí funkce display.setCursor . Údaje o rychlosti z modulu GPS jsou dekódovány pomocí funkce gps.speed.kmph () a nakonec jsou zobrazeny pomocí display.display () .
if (gps.speed.isValid ()) { display.setTextSize (2); display.setCursor (40, 40); display.print (gps.speed.kmph ()); display.display (); }
Nakonec nahrajte kód do Arduino Uno a umístěte systém do jedoucího vozidla a na OLED displeji uvidíte rychlost, jak je znázorněno na následujícím obrázku.
Kompletní kód s ukázkovým videem je uveden níže.