- Gebruikte materialen
- NEO6M GPS-module
- 1,3 inch I2C OLED-scherm
- Schakelschema
- Programmering Arduino voor Arduino OLED snelheidsmeter
Snelheidsmeters worden gebruikt om de rijsnelheid van een voertuig te meten. We hebben eerder de IR-sensor en de Hall-sensor gebruikt om respectievelijk een analoge snelheidsmeter en een digitale snelheidsmeter te bouwen. Vandaag gaan we gps gebruiken om de snelheid van een bewegend voertuig te meten. GPS-snelheidsmeters zijn nauwkeuriger dan standaard snelheidsmeters omdat deze het voertuig continu kunnen lokaliseren en de snelheid kunnen berekenen. GPS-technologie wordt veel gebruikt in smartphones en voertuigen voor navigatie- en verkeerswaarschuwingen.
In dit project zullen we een Arduino GPS-snelheidsmeter bouwen met behulp van een NEO6M GPS-module met een OLED-display.
Gebruikte materialen
- Arduino Nano
- NEO6M GPS-module
- 1,3 inch I2C OLED-scherm
- Breadboard
- Jumpers aansluiten
NEO6M GPS-module
Hier gebruiken we de NEO6M GPS-module. De NEO-6M GPS-module is een populaire GPS-ontvanger met een ingebouwde keramische antenne, die een sterke satellietzoekfunctie biedt. Deze ontvanger kan locaties detecteren en tot 22 satellieten volgen en locaties overal ter wereld identificeren. Met de ingebouwde signaalindicator kunnen we de netwerkstatus van de module bewaken. Het heeft een gegevensback-upbatterij, zodat de module de gegevens kan opslaan wanneer de hoofdstroom per ongeluk wordt uitgeschakeld.
Het hart van de GPS-ontvangermodule is de NEO-6M GPS-chip van u-blox. Het kan tot 22 satellieten volgen op 50 kanalen en heeft een zeer indrukwekkend gevoeligheidsniveau van -161 dBm. Deze u-blox 6-positioneringsengine met 50 kanalen beschikt over een Time-To-First-Fix (TTFF) van minder dan 1 seconde. Deze module ondersteunt de baudrate van 4800-230400 bps en heeft de standaard baud van 9600.
Kenmerken:
- Bedrijfsspanning: (2,7-3,6) V DC
- Bedrijfsstroom: 67 mA
- Baudrate: 4800-230400 bps (9600 standaard)
- Communicatieprotocol: NEMA
- Interface: UART
- Externe antenne en ingebouwde EEPROM.
Pinout van GPS-module:
- VCC: ingangsspanning pin van module
- GND: aardpen
- RX, TX: UART-communicatiepennen met microcontroller
We hebben GPS eerder gekoppeld aan Arduino en hebben veel projecten gebouwd met behulp van GPS-modules, waaronder voertuigvolgsystemen.
1,3 inch I2C OLED-scherm
De term OLED staat voor " Organic Light Emitting diode", het gebruikt dezelfde technologie die in de meeste van onze televisies wordt gebruikt, maar heeft minder pixels dan die. Het is echt leuk om deze cool uitziende displaymodules te laten aansluiten op de Arduino, omdat het onze projecten er cool uit zal laten zien. We hebben hier een volledig artikel over OLED-schermen en de typen ervan behandeld. Hier gebruiken we een monochroom 4-pins SH1106 OLED 1,28-inch OLED-scherm. Dit display kan alleen werken met de I2C-modus.
Technische specificaties:
- Stuurprogramma IC: SH1106
- Ingangsspanning: 3.3V-5V DC
- Resolutie: 128x64
- Interface: I2C
- Stroomverbruik: 8 mA
- Pixelkleur: blauw
- Kijkhoek:> 160 graden
Pin Beschrijving:
VCC: ingangsvoeding 3.3-5V DC
GND: aardingsreferentiepin
SCL: klokpin van de I2C-interface
SDA: Serial Data-pin van de I2C-interface
De Arduino-community heeft ons al veel bibliotheken gegeven die direct kunnen worden gebruikt om dit een stuk eenvoudiger te maken. Ik heb een paar bibliotheken uitgeprobeerd en ontdekte dat de Adafruit_SH1106.h- bibliotheek erg gemakkelijk te gebruiken was en een handvol grafische opties had, daarom zullen we hetzelfde gebruiken in deze tutorial.
OLED ziet er erg gaaf uit en kan gemakkelijk worden gekoppeld aan andere microcontrollers om een aantal interessante projecten te bouwen:
- Koppeling SSD1306 OLED-scherm met Raspberry Pi
- Koppeling SSD1306 OLED-scherm met Arduino
- Internetklok met ESP32 en OLED-display
- Automatische AC-temperatuurregelaar met Arduino, DHT11 en IR Blaster
Schakelschema
Het schakelschema voor deze Arduino GPS-snelheidsmeter met OLED wordt hieronder weergegeven.
De volledige installatie ziet er als volgt uit:
Programmering Arduino voor Arduino OLED snelheidsmeter
De volledige code van het project staat onderaan de tutorial. Hier leggen we de volledige code regel voor regel uit.
Neem allereerst alle bibliotheken op. Hier wordt de TinyGPS ++. H-bibliotheek gebruikt om de GPS-coördinaten te krijgen met behulp van de GPS-ontvangermodule en wordt Adafruit_SH1106.h gebruikt voor OLED.
# omvatten
Vervolgens wordt het OLED I2C-adres gedefinieerd, dat OX3C of OX3D kan zijn, hier is het in mijn geval OX3C. Ook moet de reset-pin van het display worden gedefinieerd. In mijn geval is het gedefinieerd als -1, omdat het display de reset-pin van Arduino deelt.
#define OLED_ADDRESS 0x3C #define OLED_RESET -1 Adafruit_SH1106 display (OLED_RESET);
Vervolgens worden de objecten voor de TinyGPSPlus- en Softwareserial- klasse gedefinieerd zoals hieronder weergegeven. Software seriële klasse heeft de Arduino pin nr. voor seriële communicatie, die hier wordt gedefinieerd als 2 en 3.
int RX = 2, TX = 3; TinyGPSPlus gps; SoftwareSerial gpssoft (RX, TX);
Binnen setup () wordt de initialisatie uitgevoerd voor seriële communicatie en OLED. De standaard baud rate Software voor seriële communicatie wordt gedefinieerd als 9600. Hier SH1106_SWITCHCAPVCC volgende worden weergegeven spanning genereren van 3.3V intern display.begin functie wordt gebruikt om de weergave te initialiseren.
ongeldige setup () { Serial.begin (9600); gpssoft.begin (9600); display.begin (SH1106_SWITCHCAPVCC, OLED_ADDRESS); display.clearDisplay (); }
Binnen while true loop worden de ontvangen seriële gegevens gevalideerd, als geldige GPS-signalen worden ontvangen, wordt displayspeed () aangeroepen om de snelheidswaarde op OLED weer te geven.
while (gpssoft.available ()> 0) if (gps.encode (gpssoft.read ())) displayspeed ();
Binnen de functie displayspeed () worden de snelheidsgegevens van de GPS-module gecontroleerd met de functie gps.speed.isValid () en als het een echte waarde retourneert, wordt de snelheidswaarde weergegeven op het OLED-scherm. Hier wordt de tekstgrootte op OLED gedefinieerd met de functie display.setTextSize en wordt de cursorpositie gedefinieerd met de functie display.setCursor . De snelheidsgegevens van de GPS-module worden gedecodeerd met de functie gps.speed.kmph () en tenslotte worden ze weergegeven met behulp van display.display () .
if (gps.speed.isValid ()) { display.setTextSize (2); display.setCursor (40, 40); display.print (gps.speed.kmph ()); display.display (); }
Upload ten slotte de code in Arduino Uno en plaats het systeem in een bewegend voertuig, en je kunt de snelheid zien op het OLED-display zoals weergegeven in de onderstaande afbeelding.
De volledige code met een demovideo wordt hieronder gegeven.