Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2025:avaduva:alexandra.bulgaru [2025/05/25 11:32]
alexandra.bulgaru
pm:prj2025:avaduva:alexandra.bulgaru [2025/05/29 21:58] (current)
alexandra.bulgaru [GPS Tracker]
Line 1: Line 1:
 ====== GPS Tracker ====== ====== GPS Tracker ======
 **Autor:** Alexandra Bulgaru \\ **Autor:** Alexandra Bulgaru \\
-**Grupa:** 331CD+**Grupa:** 331CD  \\ 
 +**Repo GitHub:** https://​github.com/​alexabulgaru/​GPS-Tracker
 ===== Introducere ===== ===== Introducere =====
  
-Proiectul constă în urmărirea în timp real a coordonatelor GPS, răspunzând la comenzi primite prin SMS. Când primește mesajul "get location"​, preia poziția curentă și trimite ​înapoi ​un SMS cu un link către Google Maps pentru vizualizarea locației, afișând ​aceste informații și pe un ecran OLED.+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). 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).
Line 12: Line 13:
  
 <​note>​ <​note>​
-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 primirea unui SMS cu textul „get location” ​de la modulul GSM SIM800L (tot prin UART), formatează un URL Google Maps și îl trimite înapoi prin SMS.+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 ​coordonatele curente și starea de funcționare. Întregul sistem este alimentat direct de la o baterie externă, fără circuite ​de reglare de tensiune adiționale.+Î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.
 </​note>​ </​note>​
 {{:​pm:​prj2025:​avaduva:​gpstracker.png|Schema bloc a proiectului}} {{:​pm:​prj2025:​avaduva:​gpstracker.png|Schema bloc a proiectului}}
Line 20: Line 21:
 ** Componente: ** \\ ** Componente: ** \\
  
-  * [[https://​sigmanortec.ro/​Display-OLED-IIC-I2C-0-91-128x32-p126091015|Display OLED IIC I2C 0.91'' ​128x32]] \\+  * [[https://​sigmanortec.ro/​Display-OLED-1-3-Alb-128x64-p136081872?​SubmitCurrency=1&​id_currency=2&​gad_source=1&​gad_campaignid=22174019478&​gbraid=0AAAAAC3W72MejqOtu_VDy8SXRmcEU2jTP&​gclid=CjwKCAjwi-DBBhA5EiwAXOHsGQBafRMQNgfRrYDR1namErEn7-DjnHPVm64cCM7UOX6fNP86XrNtexoCiXQQAvD_BwE|Display OLED I2C 1.3'' ​128x64]] \\
   * [[https://​www.optimusdigital.ro/​ro/​gps/​105-modul-gps-gy-neo6mv2.html?​search_query=modul+gps&​results=34|Modul GPS 6MV2]] \\   * [[https://​www.optimusdigital.ro/​ro/​gps/​105-modul-gps-gy-neo6mv2.html?​search_query=modul+gps&​results=34|Modul GPS 6MV2]] \\
   * [[https://​sigmanortec.ro/​placa-dezvoltare-compatibila-arduino-nano-v30-atmega328p-au-ft232|Arduino Nano v30 ATMega328p]] \\   * [[https://​sigmanortec.ro/​placa-dezvoltare-compatibila-arduino-nano-v30-atmega328p-au-ft232|Arduino Nano v30 ATMega328p]] \\
Line 29: Line 30:
   * [[https://​www.optimusdigital.ro/​ro/​componente-electronice-rezistoare/​855-rezistor-025w-33k.html?​search_query=3.3k&​results=3|Rezistență 3k3]] \\   * [[https://​www.optimusdigital.ro/​ro/​componente-electronice-rezistoare/​855-rezistor-025w-33k.html?​search_query=3.3k&​results=3|Rezistență 3k3]] \\
   * Cartela PrePay Orange   * Cartela PrePay Orange
 +  * Baterie 9V
  
 **Diagramă circuit** \\ **Diagramă circuit** \\
-{{:​pm:​prj2025:​avaduva:​circuit_gpstracker_final.png?​750x600|Diagrama circuitului}}+{{:​pm:​prj2025:​avaduva:​circuit_gpstracker_final_final.png?​750x600|Diagrama circuitului}}
  
   1. Conectare OLED I²C 0.91″:   1. Conectare OLED I²C 0.91″:
Line 47: Line 49:
  
   3. Conectare modul GSM-GPRS SIM800L   3. Conectare modul GSM-GPRS SIM800L
-     - GND la GND comun (Arduino Nano + USB+     - GND la GND comun (Arduino Nano + OUT- al modulului DC-DC LM2596
-     - VCC la +5V+     - VCC la OUTmodul DC-DC LM2596
      - TXD (ieșire SIM) la pinul digital D8 (RX SoftwareSerial) de pe Arduino Nano      - 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:      - RXD (intrare SIM) la pinul digital D9 (TX SoftwareSerial) de pe Arduino Nano, prin divizor de tensiune format din:
Line 57: Line 59:
  
   4. Conectare modul DC-DC LM2596    4. Conectare modul DC-DC LM2596
-     - IN+ la +5 V a breadboard-ului (de la pinul 5 V al Arduino Nano) +     - IN+ la + baterie 
-     - IN- la GND+     - IN- la - baterie
      - Reglat trimmer până la 4V      - Reglat trimmer până la 4V
      - OUT+ la un rând liber pe breadboard (desemnat “+4V rail”)      - OUT+ la un rând liber pe breadboard (desemnat “+4V rail”)
Line 73: Line 75:
  
 **Descrierea codului aplicației:​** \\ **Descrierea codului aplicației:​** \\
-Proiectul este un GPS-tracker care răspunde ​la SMS-uri ​de tip „GET LOCATION”. El folosește:+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)   * UART (SoftwareSerial) pentru comunicația cu modulul GPS (NMEA) și cu SIM800L (AT-commands)
-  * I2C pentru controlul OLED-ului ​SSD1306 +  * I2C pentru controlul OLED-ului 
-  * GPIO pentru ​LED-ul de stare (pinul onboard D13)+  * Timer pentru ​a trimite la un interval regulat de timp SMS-ul
  
 **Fluxul principal:​** **Fluxul principal:​**
-  1. Se așteaptă sosirea unui SMS+  1. La pornire (setup()):​ 
-  2. La SMS cu header +CMT: se extrage numărul expeditorului+    - Se iniţializează interfeţele seriale: 
-  3. Dacă textul conține GET LOCATION sau GETLOC, se apelează rutina de trimitere a SMS-ului cu locația+        - Serial (USB) la 9600 baud 
-  4. Între timp, datele NMEA de la GPS sunt colectate continuu în fundal.+        - 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:​** **Biblioteci utilizate:​**
Line 91: Line 111:
  
 **Algoritmi și structuri implementate:​** **Algoritmi și structuri implementate:​**
-  * Detectare SMS +  * Citire ​și parsare NMEA 
-    - simSerial.readStringUntil('​\n'​) + trim() +    - while (gpsSer.available()) gps.encode(gpsSer.read()); 
-    - Căutare line.startsWith("​+CMT:"​) - salvare incomingNumber +    - TinyGPSPlus gps stochează ultima ​locație validă ​și numărul de sateliți 
-  * Parser SMS +  * Construire mesaj SMS 
-    - Flag boolean waitingForSMSbody - următoarea linie e conținutul efectiv +    - Dacă fix GPS: String link = "​https://​maps.google.com/?​q="​ + String(lat, 6) + ","​ + String(lon, 6) 
-    - Convertire msg.toUpperCase() ​și msg.indexOf("​GET LOCATION"​) +    - Altfel: String link = "GPS NO FIX" 
-  * Colectare GPS +  * AT-commands ​pentru ​SMS 
-    - În loop(), buclă ​while (gpsSerial.available()) gps.encode(...+    - AT("​AT+CMGF=1"​);​ - modul text 
-    - TinyGPSPlus gps păstrează ultima ​poziție și numărul de sateliți +    - AT+CMGS="<​număr>" ​-> așteaptă prompt ‘>​’ ​-> conținut ​-> 0x1A 
-  * Trimitere ​SMS cu locația +    - Citire răspuns +CMGS pentru confirmare 
-    - Blink LED pe D13 pentru ​feedback vizual +  * Control ​OLED 
-    - Construire mesaj în char buf[160] cu snprintf +    - showOLED() -> afișează ​mesaj fix 
-    - AT+CMGS -> text -> CTRL-Z ​-> pauză 5s +    - clearOLED() ​-> golește display-ul
-  * Afișare pe OLED +
-    - După trimitere, ștergere ecran +
-    - Dacă gps.location.isValid() -> afișează ​„GPS FIX OK” + coordonate +
-    - Altfel ​-> „NO GPS FIX”+
  
 **Funcții implementate:​** \\ **Funcții implementate:​** \\
-setup() +bool AT(const char* cmd, const char* ok = "​OK",​ uint16_t tout = 800
-  ​configurează pinii, pornește interfețele seriale, inițializează SIM800L ​și OLED, și afișează mesajul de start+  ​trimite un AT-command ​și așteaptă un răspuns până la timeout.
   ​   ​
-loop(+bool sendSMS(const char* num, const String& ​msg
-  ascultă SMS-urile primite și datele de la GPSdeclanșează trimiterea răspunsului dacă mesajul conține comanda de locație +  ​configurează modul textinițiază AT+CMGStrimite textul ​și verifică confirmarea
- +
-sendLocationSMS(const String &to+
-  ​construiește și trimite SMS-ul cu coordonate (sau mesaj de eroare)dă un blink LED-uluiapoi afișează rezultatul pe OLED+
  
 +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 ===== ===== Rezultate obținute =====
-**Hardware:** \\ +{{:pm:​prj2025:​avaduva:​gps_tracker_1.jpeg?​500x500|1}} 
-{{:​pm:​prj2025:​avaduva:​hardware_gps_tracker_final.jpeg?​500x500|Hardware}}+{{:​pm:​prj2025:​avaduva:​gps_tracker_2.jpeg?​500x500|2}} 
 +{{:​pm:​prj2025:​avaduva:​gps_tracker_3.jpeg?​500x500|3}} 
 +{{:​pm:​prj2025:​avaduva:​gps_tracker_4.jpeg?​500x500|4}} 
 +{{:​pm:​prj2025:​avaduva:​gps_tracker_5.jpeg?​500x500|5}} 
 + 
 + 
 +**Link-uri către demo:** \\ 
 +https://​youtube.com/​shorts/​pvJuHuIw36w?​feature=share ​ \\ 
 +https://​youtube.com/​shorts/​cwfy8eEM16s
  
 ===== Concluzii ===== ===== Concluzii =====
Line 127: Line 159:
  
 ===== Download ===== ===== Download =====
-{{:​pm:​prj2025:​avaduva: ​gps_tracker.zip}}+{{:​pm:​prj2025:​avaduva: ​gps_tracker_alexandra_bulgaru.zip}}
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
Line 140: Line 172:
   * [[https://​www.arduino.cc/​en/​Reference/​SoftwareSerial|SoftwareSerial Library]] \\   * [[https://​www.arduino.cc/​en/​Reference/​SoftwareSerial|SoftwareSerial Library]] \\
   * [[https://​github.com/​mikalhart/​TinyGPSPlus|TinyGPS-Plus]] \\   * [[https://​github.com/​mikalhart/​TinyGPSPlus|TinyGPS-Plus]] \\
-  * [[https://​github.com/​adafruit/​Adafruit_SSD1306|Adafruit SSD1306]] \\ 
   * [[https://​www.elecrow.com/​download/​SIM800%20Series_AT%20Command%20Manual_V1.09.pdf?​srsltid=AfmBOooA5WKx2D4vn5wg5PogjJX52L57QaGQ3paOEnC3nPPb7ex7dt0T|SIM800L AT Command Manual]] \\   * [[https://​www.elecrow.com/​download/​SIM800%20Series_AT%20Command%20Manual_V1.09.pdf?​srsltid=AfmBOooA5WKx2D4vn5wg5PogjJX52L57QaGQ3paOEnC3nPPb7ex7dt0T|SIM800L AT Command Manual]] \\
   * [[https://​docs.arduino.cc/​language-reference/​en/​functions/​communication/​wire/​|Wire (I2C) Library]] \\   * [[https://​docs.arduino.cc/​language-reference/​en/​functions/​communication/​wire/​|Wire (I2C) Library]] \\
pm/prj2025/avaduva/alexandra.bulgaru.1748161967.txt.gz · Last modified: 2025/05/25 11:32 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