- Material som används
- NEO6M GPS-modul
- 1,3-tums I2C OLED-skärm
- Kretsschema
- Programmering Arduino för Arduino OLED-hastighetsmätare
Hastighetsmätare används för att mäta ett fordons körhastighet. Vi använde tidigare IR-sensorn och hallsensorn för att bygga Analog hastighetsmätare respektive digital hastighetsmätare. Idag kommer vi att använda GPS för att mäta hastigheten på ett fordon i rörelse. GPS-hastighetsmätare är mer exakta än vanliga hastighetsmätare eftersom de kontinuerligt kan lokalisera fordonet och kan beräkna hastigheten. GPS-teknik används ofta i smartphones och fordon för navigering och trafikvarningar.
I det här projektet kommer vi att bygga en Arduino GPS-hastighetsmätare med en NEO6M GPS-modul med en OLED-skärm.
Material som används
- Arduino Nano
- NEO6M GPS-modul
- 1,3-tums I2C OLED-skärm
- Bakbord
- Anslutande tröjor
NEO6M GPS-modul
Här använder vi GPS-modulen NEO6M. NEO-6M GPS-modulen är en populär GPS-mottagare med en inbyggd keramisk antenn, som ger en stark satellitsökningskapacitet. Denna mottagare har förmågan att känna av platser och spåra upp till 22 satelliter och identifierar platser var som helst i världen. Med den inbyggda signalindikatorn kan vi övervaka modulens nätverksstatus. Den har ett data backup-batteri så att modulen kan spara data när huvudströmmen stängs av av misstag.
Kärnhjärtat inuti GPS-mottagarmodulen är NEO-6M GPS-chip från u-blox. Den kan spåra upp till 22 satelliter på 50 kanaler och har en mycket imponerande känslighetsnivå som är -161 dBm. Denna 50-kanaliga u-blox 6-positioneringsmotor har en Time-To-First-Fix (TTFF) på under 1 sekund. Den här modulen stöder baudhastigheten från 4800-230400 bps och har standard baud på 9600.
Funktioner:
- Driftspänning: (2,7-3,6) V DC
- Driftström: 67 mA
- Överföringshastighet: 4800-230400 bps (9600 standard)
- Kommunikationsprotokoll: NEMA
- Gränssnitt: UART
- Extern antenn och inbyggd EEPROM.
Pinout av GPS-modul:
- VCC: Ingångsspänning för modul
- GND: Jordstift
- RX, TX: UART-kommunikationsstift med mikrokontroller
Vi har tidigare kopplat GPS med Arduino och bygger många projekt med GPS-moduler inklusive spårning av fordon.
1,3-tums I2C OLED-skärm
Termen OLED står för ” Organic Light emitting diode”, den använder samma teknik som används i de flesta av våra tv-apparater men har färre pixlar jämfört med dem. Det är jättekul att ha dessa snygga skärmmoduler som ska anslutas till Arduino eftersom det gör att våra projekt ser coola ut. Vi har täckt en fullständig artikel om OLED-skärmar och dess typer här. Här använder vi en monokrom 4-stift SH1106 OLED 1,28 ”OLED-skärm. Denna skärm fungerar bara i I2C-läge.
Tekniska specifikationer:
- Driver IC: SH1106
- Ingångsspänning: 3,3V-5V DC
- Upplösning: 128x64
- Gränssnitt: I2C
- Strömförbrukning: 8 mA
- Pixelfärg: Blå
- Betraktningsvinkel:> 160 grader
Stiftbeskrivning:
VCC: Ingångsströmförsörjning 3,3-5V DC
GND: Markreferensstift
SCL: Klockstift i I2C-gränssnittet
SDA: Seriell datapinne i I2C-gränssnittet
Arduino-communityn har redan gett oss många bibliotek som kan användas direkt för att göra detta mycket enklare. Jag testade några bibliotek och upptäckte att Adafruit_SH1106.h- biblioteket var väldigt enkelt att använda och hade en handfull grafiska alternativ, därför kommer vi att använda detsamma i denna handledning.
OLED ser väldigt cool ut och kan enkelt gränssnitt med andra mikrokontroller för att bygga några intressanta projekt:
- Gränssnitt SSD1306 OLED-skärm med Raspberry Pi
- Gränssnitt SSD1306 OLED-skärm med Arduino
- Internetklocka med ESP32 och OLED Display
- Automatisk AC-temperaturregulator med Arduino, DHT11 och IR Blaster
Kretsschema
Kretsschema för denna Arduino GPS-hastighetsmätare med OLED ges nedan.
Hela installationen kommer att se ut nedan:
Programmering Arduino för Arduino OLED-hastighetsmätare
Den fullständiga koden för projektet ges längst ner i handledningen. Här förklarar vi hela koden rad för rad.
Först och främst inkludera alla bibliotek. Här används TinyGPS ++. H-biblioteket för att få GPS-koordinaterna med hjälp av GPS-mottagarmodulen och Adafruit_SH1106.h används för OLED.
#omfatta
Sedan definieras OLED I2C-adressen, som kan vara antingen OX3C eller OX3D, här är det OX3C i mitt fall. Displayens återställningsstift måste också definieras. I mitt fall definieras det som -1, eftersom skärmen delar Arduinos återställningsstift.
#define OLED_ADDRESS 0x3C #define OLED_RESET -1 Adafruit_SH1106 display (OLED_RESET);
Därefter definieras objekten för TinyGPSPlus och Softwareserial- klassen enligt nedan. Programserieklass behöver Arduino-stift nr. för seriekommunikation, som definieras som 2 och 3 här.
int RX = 2, TX = 3; TinyGPSPlus GPS; SoftwareSerial gpssoft (RX, TX);
Inside setup () görs initialisering för seriell kommunikation och OLED. Standard baudhastighet för mjukvaruseriekommunikation definieras som 9600. Här används SH1106_SWITCHCAPVCC för att generera bildspänning från 3,3 V internt och display.begin- funktionen används för att initiera displayen.
ogiltig installation () { Serial.begin (9600); gpssoft.begin (9600); display.begin (SH1106_SWITCHCAPVCC, OLED_ADDRESS); display.clearDisplay (); }
Inuti medan sann slinga valideras den mottagna seriella data, om giltiga GPS-signaler tas emot, anropas displayhastighet () för att visa hastighetsvärdet på OLED.
medan (gpssoft.available ()> 0) om (gps.encode (gpssoft.read ())) visar hastighet ();
Inuti displayspeed () -funktionen kontrolleras hastighetsdata från GPS-modulen med funktionen gps.speed.isValid () och om den returnerar ett sant värde visas hastighetsvärdet på OLED-skärmen. Här definieras textstorleken på OLED med display.setTextSize- funktionen och markörens position definieras med display.setCursor- funktionen. Hastighetsdata från GPS-modulen avkodas med funktionen gps.speed.kmph () och slutligen visas den med display.display () .
om (gps.speed.isValid ()) { display.setTextSize (2); display.setCursor (40, 40); display.print (gps.speed.kmph ()); display.display (); }
Slutligen laddar du upp koden i Arduino Uno och placerar systemet i ett fordon i rörelse, så kan du se hastigheten på OLED-skärmen som visas i bilden nedan.
Komplett kod med en demo-video ges nedan.