Introducere
Dacă ți-ai dorit vreodată să îți construiești propriul tracker GPS portabil, ceva ce poți purta mereu cu tine ca să îți vezi direcția, viteza și locația curentă, atunci proiectul acesta e pentru tine. Fie că îți plac drumețiile, mersul pe bicicletă sau pur și simplu îți place să creezi gadgeturi care pot fi folosite în situații reale, un tracker GPS DIY este un proiect distractiv și un mod bun de a explora lumea tehnologiei de navigație.
Cu un modul GNSS, un afișaj OLED mic și o baterie reîncărcabilă, poți crea un dispozitiv compact care îți arată date de deplasare în timp real, oriunde te-ai afla. Sistemul este construit cu un microcontroler ESP32, iar totul este conectat pe un breadboard. Scopul acestui articol este să îți dea o idee și inspirație ca să creezi ceva și mai flexibil și mai compact, potrivit nevoilor tale. Îți arătăm cum funcționează sistemele și cum le poți folosi împreună ca să îți construiești propriul tracker GPS portabil.
GNSS GPS L86-M33
GNSS GPS L86-M33 este un modul compact și performant, proiectat pentru aplicații de poziționare și navigație precise. Datorită suportului GNSS (Global Navigation Satellite System), receptorul poate urmări mai multe sisteme de sateliți, ceea ce asigură date de localizare fiabile chiar și în medii mai dificile.
Caracteristici principale:
- Precizie de poziționare de +/- 2,5 metri
- Suport pentru mai multe sisteme GNSS (GPS, GLONASS, GALILEO)
- Sensibilitate ridicată
- Consum redus de energie
În plus, modulul suportă funcții avansate precum EASY (Embedded Assist System), AlwaysLocate și un data logger LOCUS integrat. Aceste funcții permit o poziționare mai rapidă și mai bună și mențin un semnal stabil chiar și în medii mai extreme, cu un consum eficient de energie și o precizie bună.
Cum funcționează?
Modulul L86-M33 își determină poziția ascultând semnalele radio transmise de mai mulți sateliți de navigație care orbitează Pământul. Fiecare satelit trimite continuu informații de timp precise, împreună cu poziția lui exactă în spațiu. Modulul GNSS are un receptor radio foarte sensibil, care captează aceste semnale.
În interiorul modulului, un procesor minuscul măsoară cât a durat până a ajuns fiecare semnal. Comparând măsurătorile de distanță de la cel puțin patru sateliți, modulul poate calcula latitudinea și longitudinea, altitudinea, viteza și direcția ta de deplasare.
Modulul comunică cu microcontrolerele și cu alte dispozitive prin interfața UART.
Exemplu de cod de bază
Procesul de a începe să folosești placa noastră breakout L86-M33 este foarte simplu și direct. Placa vine în două variante:
- Versiunea UART: folosește liniile TX (transmisie) și RX (recepție) ca să comunice cu alte dispozitive
- Versiunea I2C: folosește conectorul Qwiic/easyC pentru funcționare plug-and-play
De asemenea, există o bibliotecă Arduino dedicată, care asigură dezvoltarea ușoară și rapidă a proiectelor tale. O găsești la acest link.
Inițializare (versiunea UART și versiunea Qwiic):
Mai întâi incluzi biblioteca potrivită. Dacă folosești versiunea UART a plăcii, trebuie să definești pinii de comunicație, apoi creezi o instanță a obiectului GNSS și o inițializezi în setup:
// Include the GNSS L86-M33 library
#include "GNSS-L86-M33-SOLDERED.h"
// Define pins for the GNSS module
#define GNSS_RX 3
#define GNSS_TX 4
// Create an object for the GNSS library
GNSS gps(GNSS_TX, GNSS_RX);
void setup()
{
Serial.begin(9600); // Initialize serial communication with the PC
gps.begin(); // Initialize the GNSS module
}
// ...
După inițializare, funcția loop verifică permanent dacă sunt date noi disponibile și le afișează corespunzător în funcția displayInfo().
void loop()
{
while (gps.gnssSerial->available() > 0)
{
// If something is successfully decoded, display new data.
if (gps.encode(gps.gnssSerial->read()))
{
// Check if 500 milliseconds have passed since the last data display.
if ((unsigned long)(millis() - lastGnssDisplay) > 500UL)
{
// Capture new timestamp.
lastGnssDisplay = millis();
// Display new data.
displayInfo();
}
}
}
// If 5 seconds passed after startup - error
if (millis() > 5000 && gps.charsProcessed() < 10)
{
Serial.println(F("No GPS detected: check wiring."));
while (true)
{
// Delay is needed for the ESP8266.
delay(10);
}
}
}
// Function that displays decoded data from the GNSS library.
void displayInfo()
{
// Print out GPS latitude and longitude. If there is no valid data, show an error message.
Serial.print(F("Location: "));
if (gps.location.isValid())
{
Serial.print(gps.location.lat(), 6);
Serial.print(F(","));
Serial.print(gps.location.lng(), 6);
}
else
{
Serial.print(F("INVALID"));
}
// Print out time and date. If there is no valid data, show an error message.
Serial.print(F(" Date/Time: "));
if (gps.date.isValid())
{
Serial.print(gps.date.month());
Serial.print(F("/"));
Serial.print(gps.date.day());
Serial.print(F("/"));
Serial.print(gps.date.year());
}
else
{
Serial.print(F("INVALID"));
}
Serial.print(F(" "));
if (gps.time.isValid())
{
if (gps.time.hour() < 10)
Serial.print(F("0"));
Serial.print(gps.time.hour());
Serial.print(F(":"));
if (gps.time.minute() < 10)
Serial.print(F("0"));
Serial.print(gps.time.minute());
Serial.print(F(":"));
if (gps.time.second() < 10)
Serial.print(F("0"));
Serial.print(gps.time.second());
Serial.print(F("."));
if (gps.time.centisecond() < 10)
Serial.print(F("0"));
Serial.print(gps.time.centisecond());
}
else
{
Serial.print(F("INVALID"));
}
// Move to a new line, ready to print new data.
Serial.println();
}
Proiectul Tracker GPS portabil
Un proiect simplu, care folosește modulul GNSS GPS L86-M33 ca să măsoare precis poziția, viteza și direcția. Afișajul OLED de 0,96'' prezintă datele în două moduri: un ecran afișează poziția, data și ora și viteza, iar celălalt ecran desenează o busolă care arată direcția în care te deplasezi. Ecranele se alternează la fiecare 5 secunde.
Componente folosite:
- ESP32
- Modul GNSS GPS L86-M33
- Afișaj OLED 0,96''
- Acumulator Li-ion 3,7 V
![]()
![]()
void loop()
{
// If there is any data on the UART of the GNSS, read it and send every char to the library
while (gps.gnssSerial->available() > 0)
{
// Is something is successfully decoded, display new data.
if (gps.encode(gps.gnssSerial->read()))
{
if (millis() - lastScreenFlip >= SCREEN_PERIOD) {
lastScreenFlip += SCREEN_PERIOD;
info_screen = !info_screen;
}
// Check if the 500 milliseconds passed from the last data display.
if ((unsigned long)(millis() - lastGnssDisplay) > 500UL)
{
// Capture new timestap.
lastGnssDisplay = millis();
display.clearDisplay();
display.setCursor(0, 0);
if (info_screen) {
// Update the display with new info
displayInfo();
}
else {
displayCompass();
}
display.display();
}
}
}
// No data in the first 5 seconds from the startup? Something is wrong... Check wires!
if (millis() > 5000 && gps.charsProcessed() < 10)
{
Serial.println(F("No GPS detected: check wiring."));
while (true)
{
// Delay is needed for the ESP8266.
delay(10);
}
}
}
Articol tradus și publicat pe BazaIoT cu acordul Soldered Electronics. Versiunea originală în limba engleză: Portable GPS tracker: GNSS + OLED + Battery.
0 comments