Differences

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

Link to this comparison view

pm:prj2025:avaduva:alexandra.bulgaru [2025/05/29 21:20]
alexandra.bulgaru [Download]
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 =====
  
Line 74: 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 92: 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 =====
 {{:​pm:​prj2025:​avaduva:​gps_tracker_1.jpeg?​500x500|1}} {{:​pm:​prj2025:​avaduva:​gps_tracker_1.jpeg?​500x500|1}}
Line 149: 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.1748542806.txt.gz · Last modified: 2025/05/29 21:20 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