GPS Tracker

Autor: Alexandra Bulgaru
Grupa: 331CD
Repo GitHub: https://github.com/alexabulgaru/GPS-Tracker

Introducere

Proiectul constă în urmărirea în timp real a coordonatelor GPS, răspunzând la comenzi primite prin SMS. La un interval de timp, de exemplu 4 h, preia poziția curentă și trimite un SMS cu un link către Google Maps pentru vizualizarea locației, afișând pe un ecran OLED un mesaj care arată că persoana care folosește GPS Tracker-ul îi află poziția acestuia.

Scopul său principal este de a oferi părinților posibilitatea de a monitoriza rapid și eficient locația copiilor lor, dar poate să fie folosit și pentru urmărirea unor obiecte (cum ar fi un bagaj într-un aeroport).

Ideea a pornit de la dorința de a oferi o soluție accesibilă și ușor de extins pentru orice aplicație de urmărire, oferind siguranță și control în timp real.

Descriere generală

Modulul GPS Neo‑6M primește semnalele GNSS în format NMEA și le transmite prin UART către Arduino Nano. Biblioteca TinyGPS++ parsează aceste sentințe NMEA și extrage latitudinea și longitudinea. Arduino păstrează ultimele coordonate și, la un interval de 4 h, formatează un URL Google Maps și îl trimite înapoi prin SMS.

În paralel, Arduino comunică cu un ecran OLED prin I²C pentru a afișa un mesaj care arată că locația curentă a fost trimisă. Întregul sistem este alimentat direct de la o baterie externă și de la laptop.

Schema bloc a proiectului

Hardware Design

Componente:

Diagramă circuit
Diagrama circuitului

1. Conectare OLED I²C 0.91″:
   - GND la GND de pe Arduino Nano
   - VCC la +5V de pe Arduino Nano
   - SDA la pinul A4 de pe Arduino Nano
   - SCL la pinul A5 de pe Arduino Nano
2. Conectare modul GPS GY-NEO6M:
   - GND la GND de pe Arduino Nano
   - VCC la +5V de pe Arduino Nano
   - TX (ieșire GPS) la pinul digital D10 (RX SoftwareSerial) de pe Arduino Nano
   - RX (intrare GPS) la pinul digital D11 (TX SoftwareSerial) de pe Arduino Nano
3. Conectare modul GSM-GPRS SIM800L
   - GND la GND comun (Arduino Nano + OUT- al modulului DC-DC LM2596)
   - VCC la OUT+ modul DC-DC LM2596
   - TXD (ieșire SIM) la pinul digital D8 (RX SoftwareSerial) de pe Arduino Nano
   - RXD (intrare SIM) la pinul digital D9 (TX SoftwareSerial) de pe Arduino Nano, prin divizor de tensiune format din:
     - R1 = 2k2 între D9 de pe Arduino Nano și nodul comun
     - R2 = 3k3 între nodul comun și GND
     - Nodul comun trimite apoi un semnal de aproximativ 3V la RXD SIM800L, protejându-l de nivelul de 5V, pe care nu îl acceptă.
   - Modulul SIM800L are intrarea RXD tolerantă la maxim 3.3V.
4. Conectare modul DC-DC LM2596	
   - IN+ la + baterie
   - IN- la - baterie
   - Reglat trimmer până la 4V
   - OUT+ la un rând liber pe breadboard (desemnat “+4V rail”)
   - OUT- la GND
5. Alimentare și conexiune la PC
   - Pinul 5V de pe Arduino Nano la rândul +5V al breadboard-ului
   - Pinul GND de pe Arduino Nano la rândul GND al breadboard-ului

Software Design

Mediu de dezvoltare: Arduino IDE 2.3.6
Microcontroller: Arduino Nano (ATmega328P, 5V)

Descrierea codului aplicației:
Proiectul este un GPS-tracker care trimite la un interval de timp un SMS cu locația actuală a acestuia. El folosește:

  • UART (SoftwareSerial) pentru comunicația cu modulul GPS (NMEA) și cu SIM800L (AT-commands)
  • I2C pentru controlul OLED-ului
  • Timer pentru a trimite la un interval regulat de timp SMS-ul

Fluxul principal:

1. La pornire (setup()):
  - Se iniţializează interfeţele seriale:
      - Serial (USB) la 9600 baud
      - sim (SoftwareSerial pe pini 8 și 9) la 9600 baud
      - gpsSer (SoftwareSerial pe pini 10 și 11) la 9600 baud
  - Se iniţializează I2C (Wire.begin()) și OLED-ul (oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)), apoi se golește ecranul.
  - Se configurează SIM800L:
      - AT (ping)
      - ATE0 (eco off)
      - AT+CFUN=1 (full functionality)
      - AT+CMGF=1 (SMS text mode)
2. Bucla principală (loop()):
  - În fundal, toate datele primite de la GPS sunt transmise către gps.encode().
  - La fiecare 15 000 ms (PERIOD) - ales pentru testare:
      - Se afișează pe OLED mesajul static „Te cauta la jefa”.
      - Se verifică gps.location.isValid():
          - DA: se extrag latitudinea și longitudinea și se construiește un link Google Maps cu 6 zecimale.
          - NU: se setează mesajul “GPS NO FIX”.
      - Se trimite SMS-ul către numărul definit în dest folosind rutina de AT-commands.
      - Se curăță ecranul OLED.

Biblioteci utilizate:

  • Wire.h – I2C pentru OLED
  • Adafruit_GFX.h + Adafruit_SSD1306.h – afișaj pe OLED
  • SoftwareSerial.h – două porturi seriale software pentru GPS și GSM
  • TinyGPS++.h – parsare NMEA și extragere coordonate GPS

Algoritmi și structuri implementate:

  • Citire și parsare NMEA
    1. while (gpsSer.available()) gps.encode(gpsSer.read());
    2. TinyGPSPlus gps stochează ultima locație validă și numărul de sateliți
  • Construire mesaj SMS
    1. Dacă fix GPS: String link = “https://maps.google.com/?q=” + String(lat, 6) + ”,” + String(lon, 6)
    2. Altfel: String link = “GPS NO FIX”
  • AT-commands pentru SMS
    1. AT(“AT+CMGF=1”); - modul text
    2. AT+CMGS=”<număr>” → așteaptă prompt ‘>’ → conținut → 0x1A
    3. Citire răspuns +CMGS pentru confirmare
  • Control OLED
    1. showOLED() → afișează mesaj fix
    2. clearOLED() → golește display-ul

Funcții implementate:
bool AT(const char* cmd, const char* ok = “OK”, uint16_t tout = 800)

trimite un AT-command și așteaptă un răspuns până la timeout.

bool sendSMS(const char* num, const String& msg)

configurează modul text, inițiază AT+CMGS, trimite textul și verifică confirmarea

void showOLED()

afişează pe OLED mesajul „Te cauta la jefa”

void clearOLED()

curăţă ecranul OLED

void setup()

iniţializează toate perifericele: seriale, I2C, OLED, GSM, și curăţă ecranul

void loop()

primește date GPS continuu și la interval, apelează showOLED(), construiește mesajul, apelează sendSMS(), apoi clearOLED()

Rezultate obținute

Concluzii

Proiectul m-a ajutat să îmi consolidez înțelegerea modului în care interfețele UART și I2C pot fi folosite simultan pe un singur microcontroller pentru a integra module GPS, GSM şi un display OLED. Totodată, am aprofundat utilizarea GPIO pentru feedback vizual şi controlul stărilor aplicaţiei, precum şi gestionarea fluxului de date în loop-ul principal al firmware-ului.

Download

Bibliografie/Resurse

pm/prj2025/avaduva/alexandra.bulgaru.txt · Last modified: 2025/05/29 21:58 by alexandra.bulgaru
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0