- Materiale utilizate
- Modul GPS NEO6M
- Afișaj OLED I2C de 1,3 inci
- Diagrama circuitului
- Programarea Arduino pentru vitezometrul OLED Arduino
Vitezometrele sunt utilizate pentru a măsura viteza de deplasare a unui vehicul. Am folosit anterior senzorul IR și senzorul de sală pentru a construi vitezometrul analog și respectiv vitezometrul digital. Astăzi vom folosi GPS pentru a măsura viteza unui vehicul în mișcare. Vitezometrele GPS sunt mai precise decât vitezometrele standard, deoarece pot localiza continuu vehiculul și pot calcula viteza. Tehnologia GPS este utilizată pe scară largă în smartphone-uri și vehicule pentru alerte de navigație și trafic.
În acest proiect, vom construi un vitezometru GPS Arduino utilizând un modul GPS NEO6M cu afișaj OLED.
Materiale utilizate
- Arduino Nano
- Modul GPS NEO6M
- Afișaj OLED I2C de 1,3 inci
- Breadboard
- Conectarea jumperilor
Modul GPS NEO6M
Aici folosim modulul GPS NEO6M. Modulul NEO-6M GPS este un popular receptor GPS cu antenă ceramică încorporată, care oferă o capacitate puternică de căutare prin satelit. Acest receptor are capacitatea de a detecta locații și de a urmări până la 22 de sateliți și identifică locații oriunde în lume. Cu indicatorul de semnal de la bord, putem monitoriza starea rețelei modulului. Are o baterie de rezervă a datelor, astfel încât modulul să poată salva datele atunci când alimentarea principală este oprită accidental.
Inima centrală din modulul receptor GPS este cipul GPS NEO-6M de la u-blox. Poate urmări până la 22 de sateliți pe 50 de canale și are un nivel de sensibilitate foarte impresionant, care este de -161 dBm. Acest motor de poziționare u-blox 6 cu 50 de canale are un Time-To-First-Fix (TTFF) de sub 1 secundă. Acest modul acceptă rata de transmisie de la 4800-230400 bps și are valoarea standard de 9600.
Caracteristici:
- Tensiune de funcționare: (2.7-3.6) V DC
- Curent de operare: 67 mA
- Rată de transmisie: 4800-230400 bps (9600 implicit)
- Protocol de comunicare: NEMA
- Interfață: UART
- Antena externă și EEPROM încorporată.
Afișarea modulului GPS:
- VCC: pinul de tensiune de intrare al modulului
- GND: știft de împământare
- RX, TX: pini de comunicare UART cu microcontroler
Am interfațat anterior GPS-ul cu Arduino și construim multe proiecte folosind module GPS, inclusiv urmărirea vehiculelor.
Afișaj OLED I2C de 1,3 inci
Termenul OLED înseamnă „ diodă cu lumină organică”, folosește aceeași tehnologie care este utilizată în majoritatea televizoarelor noastre, dar are mai puțini pixeli în comparație cu acestea. Este foarte distractiv să aveți aceste module de afișare interesante pentru a fi interfațate cu Arduino, deoarece va face proiectele noastre să arate cool. Am acoperit aici un articol complet despre afișajele OLED și tipurile sale. Aici, folosim un ecran monocrom cu 4 pini SH1106 OLED 1.28 ”OLED. Acest afișaj poate funcționa numai cu modul I2C.
Specificatii tehnice:
- Driver IC: SH1106
- Tensiune de intrare: 3.3V-5V DC
- Rezoluție: 128x64
- Interfață: I2C
- Consum curent: 8 mA
- Culoare pixel: albastru
- Unghi de vizualizare:> 160 grade
Descrierea pinului:
VCC: sursă de alimentare de intrare 3.3-5V DC
GND: Pin de referință la sol
SCL: Pinul de ceas al interfeței I2C
SDA: Serial Data pin al interfeței I2C
Comunitatea Arduino ne-a oferit deja o mulțime de biblioteci care pot fi utilizate direct pentru a simplifica mult acest lucru. Am încercat câteva biblioteci și am constatat că Biblioteca Adafruit_SH1106.h era foarte ușor de utilizat și avea o mână de opțiuni grafice, de aceea vom folosi același lucru în acest tutorial.
OLED arată foarte cool și poate fi ușor interfațat cu alte microcontrolere pentru a construi câteva proiecte interesante:
- Interfațarea afișajului OLED SSD1306 cu Raspberry Pi
- Interfațarea afișajului OLED SSD1306 cu Arduino
- Ceas Internet utilizând ESP32 și ecran OLED
- Controler automat de temperatură AC folosind Arduino, DHT11 și IR Blaster
Diagrama circuitului
Diagrama circuitului pentru acest vitezometru GPS Arduino folosind OLED este prezentată mai jos.
Configurarea completă va arăta ca mai jos:
Programarea Arduino pentru vitezometrul OLED Arduino
Codul complet al proiectului este dat în partea de jos a tutorialului. Aici explicăm codul complet rând cu rând.
În primul rând, includeți toate bibliotecile. Aici biblioteca TinyGPS ++. H este utilizată pentru a obține coordonatele GPS utilizând modulul receptor GPS și Adafruit_SH1106.h este utilizat pentru OLED.
#include
Apoi, este definită adresa OLED I2C, care poate fi OX3C sau OX3D, aici este OX3C în cazul meu. De asemenea, pinul Reset al afișajului trebuie definit. În cazul meu, este definit ca -1, deoarece afișajul partajează pinul Reset al Arduino.
#define OLED_ADDRESS 0x3C #define OLED_RESET -1 display Adafruit_SH1106 (OLED_RESET);
În continuare, obiectele pentru clasa TinyGPSPlus și Softwareserial sunt definite așa cum se arată mai jos. Clasa serială de software are nevoie de pinul Arduino nr. pentru comunicarea în serie, care este definită ca 2 și 3 aici.
int RX = 2, TX = 3; TinyGPSPlus gps; Software Serial gpssoft (RX, TX);
În interiorul configurării () , inițializarea se face pentru comunicarea serială și OLED. Rata de transmisie implicită pentru comunicația serială software este definită ca 9600. Aici SH1106_SWITCHCAPVCC este utilizat pentru a genera tensiune de afișare de la 3,3V intern și funcția display.begin este utilizată pentru a inițializa afișajul.
void setup () { Serial.begin (9600); gpssoft.begin (9600); display.begin (SH1106_SWITCHCAPVCC, OLED_ADDRESS); display.clearDisplay (); }
În timp ce bucla este adevărată, datele seriale primite sunt validate, dacă sunt recepționate semnale GPS valide, atunci afișează speed () pentru a afișa valoarea vitezei pe OLED.
while (gpssoft.available ()> 0) if (gps.encode (gpssoft.read ())) displayspeed ();
În interiorul funcției displayspeed () , datele despre viteză din modulul GPS sunt verificate folosind funcția gps.speed.isValid () și dacă returnează o valoare adevărată, atunci valoarea vitezei este afișată pe afișajul OLED. Aici dimensiunea textului pe OLED este definită utilizând funcția display.setTextSize și poziția cursorului este definită utilizând funcția display.setCursor . Datele de viteză de la modulul GPS sunt decodate folosind funcția gps.speed.kmph () și în cele din urmă sunt afișate folosind display.display () .
if (gps.speed.isValid ()) { display.setTextSize (2); display.setCursor (40, 40); display.print (gps.speed.kmph ()); display.display (); }
În cele din urmă, încărcați codul în Arduino Uno și puneți sistemul în vehicul în mișcare și puteți vedea viteza pe afișajul OLED așa cum se arată în imaginea de mai jos.
Codul complet cu un videoclip demonstrativ este prezentat mai jos.