This shows you the differences between two versions of the page.
pm:prj2025:avaduva:alexandra.bulgaru [2025/05/25 10:55] alexandra.bulgaru [Hardware Design] |
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 OUT+ modul 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 67: | Line 69: | ||
- Pinul GND de pe Arduino Nano la rândul GND 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 | ||
+ | - while (gpsSer.available()) gps.encode(gpsSer.read()); | ||
+ | - TinyGPSPlus gps stochează ultima locație validă și numărul de sateliți | ||
+ | * Construire mesaj SMS | ||
+ | - Dacă fix GPS: String link = "https://maps.google.com/?q=" + String(lat, 6) + "," + String(lon, 6) | ||
+ | - Altfel: String link = "GPS NO FIX" | ||
+ | * AT-commands pentru SMS | ||
+ | - AT("AT+CMGF=1"); - modul text | ||
+ | - AT+CMGS="<număr>" -> așteaptă prompt ‘>’ -> conținut -> 0x1A | ||
+ | - Citire răspuns +CMGS pentru confirmare | ||
+ | * Control OLED | ||
+ | - showOLED() -> afișează mesaj fix | ||
+ | - 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 ===== | ===== Rezultate obținute ===== | ||
- | **Hardware:** \\ | + | {{:pm:prj2025:avaduva:gps_tracker_1.jpeg?500x500|1}} |
- | {{:pm:prj2025:avaduva:hardware_gps_tracker.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 ===== | ||
+ | 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 ===== | ||
+ | {{:pm:prj2025:avaduva: gps_tracker_alexandra_bulgaru.zip}} | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
Line 78: | Line 168: | ||
* [[https://docs.rs-online.com/2cbd/0900766b80db99cb.pdf|Arduino Nano v30 ATMega328p Datasheet]] \\ | * [[https://docs.rs-online.com/2cbd/0900766b80db99cb.pdf|Arduino Nano v30 ATMega328p Datasheet]] \\ | ||
* [[https://components101.com/wireless/sim800l-gsm-module-pinout-datasheet-equivalent-circuit-specs|Modul GSM GPRS SIM800L 101]] \\ | * [[https://components101.com/wireless/sim800l-gsm-module-pinout-datasheet-equivalent-circuit-specs|Modul GSM GPRS SIM800L 101]] \\ | ||
+ | |||
+ | **Resurse Software:** | ||
+ | * [[https://www.arduino.cc/en/Reference/SoftwareSerial|SoftwareSerial Library]] \\ | ||
+ | * [[https://github.com/mikalhart/TinyGPSPlus|TinyGPS-Plus]] \\ | ||
+ | * [[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]] \\ | ||
<html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||