- Componente necesare:
- Modulul GPS și funcționarea sa:
- Modul GSM:
- Accelerometru:
- Explicația circuitului:
- Explicație de lucru:
- Explicație de programare:
În tutorialele noastre anterioare, am aflat despre cum să interfațați modulul GPS cu computerul, cum să construiți un ceas Arduino GPS și cum să urmăriți vehiculul folosind GSM și GPS. Aici, în acest proiect, vom construi un sistem de avertizare a accidentelor de vehicule bazat pe Arduino, folosind GPS, GSM și accelerometru. Accelerometrul detectează schimbarea bruscă a axelor vehiculului și modulul GSM trimite mesajul de alertă pe telefonul mobil cu locația accidentului. Locația accidentului este trimisă sub forma unui link Google Map, derivat din latitudine și longitudine din modulul GPS. Mesajul conține, de asemenea, viteza vehiculului în noduri. Vezi Video Demola sfarsit. Acest proiect de alertă la accidentul vehiculului poate fi utilizat și ca sistem de urmărire și multe altele, prin simpla modificare a hardware-ului și software-ului.
Componente necesare:
- Arduino Uno
- Modul GSM (SIM900A)
- Modul GPS (SIM28ML)
- Accelerometru (ADXL335)
- 16x2 LCD
- Alimentare electrică
- Conectarea firelor
- 10 K-POT
- Panou sau PCB
- Alimentare 12v 1amp
Înainte de a intra în Proiect, vom discuta despre GPS, GSM și Accelerometer.
Modulul GPS și funcționarea sa:
GPS înseamnă Sistem de poziționare globală și este utilizat pentru a detecta latitudinea și longitudinea oricărei locații de pe Pământ, cu ora UTC exactă (timpul universal coordonat). Modulul GPS este utilizat pentru a urmări locația accidentului în proiectul nostru. Acest dispozitiv primește coordonatele de la satelit pentru fiecare secundă, cu ora și data. Am extras anterior șirul GPGGA $ în sistemul de urmărire a vehiculelor pentru a găsi coordonatele de latitudine și longitudine.
Modulul GPS trimite datele legate de poziția de urmărire în timp real și trimite atât de multe date în format NMEA (vezi captura de ecran de mai jos). Formatul NMEA constă în mai multe propoziții, în care avem nevoie doar de o propoziție. Această propoziție începe de la $ GPGGA și conține coordonatele, timpul și alte informații utile. Acest GPGGA este menționat la datele de corecție ale sistemului de poziționare globală. Aflați mai multe despre propozițiile NMEA și despre citirea datelor GPS aici.
Putem extrage coordonatele din șirul $ GPGGA numărând virgulele din șir. Să presupunem că găsiți șirul $ GPGGA și îl stocați într-o matrice, atunci Latitude poate fi găsită după două virgule, iar Longitudina poate fi găsită după patru virgule. Acum, această latitudine și longitudine pot fi plasate în alte matrice.
Mai jos este șirul $ GPGGA, împreună cu descrierea sa:
$ GPGGA, 104534.000,7791.0381, N, 06727.4434, E, 1,08,0.9,510.4, M, 43.9, M,, * 47 $ GPGGA, HHMMSS.SSS, latitudine, N, longitudine, E, FQ, NOS, HDP, altitudine, M, înălțime, M,, date sumă de control
Identificator |
Descriere |
$ GPGGA |
Date de remediere a sistemului de poziționare globală |
HHMMSS.SSS |
Timp în oră minut secunde și format de milisecunde. |
Latitudine |
Latitudine (coordonată) |
N |
Direcția N = Nord, S = Sud |
Longitudine |
Longitudine (coordonată) |
E |
Direcția E = Est, W = Vest |
FQ |
Remediați datele de calitate |
NOS |
Numărul de sateliți utilizați |
HDP |
Diluarea orizontală a preciziei |
Altitudine |
Altitudine (metri deasupra nivelului mării) |
M |
Metru |
Înălţime |
Înălţime |
Suma de control |
Date privind suma de verificare |
Modul GSM:
SIM900 este un modul GSM / GPRS complet cu patru benzi, care poate fi încorporat ușor de utilizat de către client sau pasionat. Modulul SIM900 GSM oferă o interfață standard industrială. SIM900 oferă performanțe GSM / GPRS 850/900/1800 / 1900MHz pentru voce, SMS, date cu consum redus de energie. Este ușor disponibil pe piață.
- SIM900 proiectat utilizând un procesor cu un singur cip care integrează nucleul AMR926EJ-S
- Modul GSM / GPRS cu patru benzi în dimensiuni mici.
- GPRS activat
Comandă AT:
AT înseamnă ATENȚIE. Această comandă este utilizată pentru a controla modulul GSM. Există câteva comenzi pentru apelare și mesagerie pe care le-am folosit în multe dintre proiectele noastre GSM anterioare cu Arduino. Pentru testarea modulului GSM am folosit comanda AT. După primirea AT Command Modul GSM răspundeți cu OK. Înseamnă că modulul GSM funcționează bine. Mai jos sunt câteva comenzi AT pe care le-am folosit aici în acest proiect:
ATE0 Pentru ecou AT + CNMI = 2,2,0,0,0
(Pentru a afla mai multe despre modulul GSM, verificați aici diferitele noastre proiecte GSM cu diverse microcontrolere)
Accelerometru:
Pin Descrierea accelerometrului:
- Alimentarea Vcc de 5 volți ar trebui să se conecteze la acest pin.
- X-OUT Acest pin oferă o ieșire analogică în direcția x
- Y-OUT Acest pin oferă o ieșire analogică în direcția y
- Z-OUT Acest pin oferă o ieșire analogică în direcția z
- GND Ground
- ST Acest pin utilizat pentru setarea sensibilității senzorului
Verificați și celelalte proiecte ale noastre folosind Accelerometer: Ping Pong Game folosind Arduino și Accelerometer based Hand Hand Controlled Robot.
Explicația circuitului:
Conexiunile la circuit ale acestui proiect de sistem de alertă a accidentelor vehiculului sunt simple. Aici pinul Tx al modulului GPS este conectat direct la pinul digital numărul 10 al Arduino. Folosind Software Serial Library aici, am permis comunicarea în serie pe pinii 10 și 11, le-am făcut Rx și respectiv Tx și am lăsat pinul Rx al modulului GPS deschis. În mod implicit, pinul 0 și 1 din Arduino sunt utilizați pentru comunicații seriale, dar prin utilizarea bibliotecii SoftwareSerial, putem permite comunicarea serială pe alți pini digitali ai Arduino. Alimentarea cu 12 volți este utilizată pentru alimentarea modulului GPS.
Pinii Tx și Rx ai modulului GSM sunt conectați direct la pinii D2 și D3 din Arduino. Pentru interfața GSM, aici am folosit, de asemenea, biblioteca serială de software. Modulul GSM este alimentat și de sursa de 12V. Pinii de date D4, D5, D6 și D7 ai unui LCD opțional sunt conectați la pinul 6, 7, 8 și 9 din Arduino. Pinul de comandă RS și EN al ecranului LCD sunt conectați cu pinul nr. 4 și 5 al Arduino, iar pinul RW este conectat direct la masă. Un potențiometru este, de asemenea, utilizat pentru setarea contrastului sau luminozității ecranului LCD.
Un accelerometru este adăugat în acest sistem pentru detectarea unui accident și pinii de ieșire ADC ai axei x, y și z ai acestuia sunt conectați direct la pinul Arduino ADC A1, A2 și A3.
Explicație de lucru:
În acest proiect, Arduino este utilizat pentru controlul întregului proces cu un receptor GPS și un modul GSM. Receptorul GPS este utilizat pentru detectarea coordonatelor vehiculului, modulul GSM este utilizat pentru trimiterea mesajului SMS de alertă cu coordonatele și linkul către Google Map. Accelerometrul și anume ADXL335 este utilizat pentru detectarea accidentelor sau a schimbării bruște a oricărei axe. Și un LCD opțional de 16x2 este utilizat și pentru afișarea mesajelor de stare sau a coordonatelor. Am folosit modulul GPS SIM28ML și modulul GSM SIM900A.
Când suntem gata cu hardware-ul nostru după programare, îl putem instala în vehiculul nostru și îl putem alimenta. Acum, ori de câte ori există un accident, mașina se înclină și accelerometrul își schimbă valorile axelor. Aceste valori citite de Arduino și verifică dacă are loc o modificare în orice axă. Dacă apare orice modificare, Arduino citește coordonatele extragând șirul $ GPGGA din datele modulului GPS (funcționarea GPS explicată mai sus) și trimite SMS la numărul predefinit către poliție sau ambulanță sau membru al familiei cu coordonatele de locație ale locului accidentului. Mesajul conține, de asemenea, un link Google Map către locația accidentului, astfel încât locația să poată fi urmărită cu ușurință. Când primim mesajul, trebuie doar să facem clic pe link și vom redirecționa către harta Google și apoi vom putea vedea locația exactă a vehiculului. Viteza vehiculului, în noduri(1.852 KPH), este, de asemenea, trimis în SMS și afișat pe panoul LCD. Verificați videoclipul complet Demo de sub proiect.
Aici, în acest proiect, putem seta sensibilitatea accelerometrului prin introducerea valorii min și max în cod.
Aici, în demonstrație, am folosit valori date:
#define minVal -50 #define MaxVal 50
Dar pentru rezultate mai bune puteți utiliza 200 în loc de 50 sau puteți seta în funcție de cerința dvs.
Explicație de programare:
Programul complet a fost prezentat mai jos în secțiunea Cod; aici explicăm pe scurt diversele sale funcții.
Mai întâi am inclus toate bibliotecile sau fișierele antet necesare și am declarat diferite variabile pentru calcule și stocarea datelor temporar.
După aceasta, am creat o funcție initModule void (String cmd, char * res, int t) pentru a inițializa modulul GSM și a verifica răspunsul acestuia folosind comenzile AT.
void initModule (String cmd, char * res, int t) {while (1) {Serial.println (cmd); Serial1.println (cmd); întârziere (100); while (Serial1.available ()> 0) {if (Serial1.find (res)) {Serial.println (res); întârziere (t); întoarcere; } else {Serial.println ("Eroare"); }} întârziere (t); }}
După aceasta, în funcția de configurare nulă () , am inițializat comunicații seriale hardware și software, LCD, GPS, modul GSM și accelerometru.
setare nulă () {Serial1.begin (9600); Serial.begin (9600); lcd.inceput (16,2); lcd.print („Alertă de accident”); lcd.setCursor (0,1); lcd.print („Sistem”); întârziere (2000); lcd.clear ();…………………
Procesul de calibrare a accelerometrului se face și în bucla de configurare . În aceasta, am luat câteva eșantioane și apoi am găsit valorile medii pentru axa x, axa y și axa z. Și păstrați-le într-o variabilă. Apoi am folosit aceste valori de probă pentru a citi modificările axei accelerometrului atunci când vehiculul se înclină (accident).
lcd.print („Callibrating”); lcd.setCursor (0,1); lcd.print ("Acceleromiter"); pentru (int i = 0; i
După aceasta, în funcția void loop () , am citit valorile axei accelerometrului și am făcut un calcul pentru a extrage modificările cu ajutorul probelor prelevate în calibrare. Acum, dacă orice schimbare este mai mult sau mai mică decât nivelul definit, atunci Arduino trimite un mesaj către numărul predefinit.
bucla void () {int valoare1 = analogRead (x); valoarea int2 = analogRead (y); valoarea int3 = analogRead (z); int xValue = xsample-value1; int yValue = ysample-value2; int zValue = zsample-value3; Serial.print ("x ="); Serial.println (xValue); Serial.print ("y ="); Serial.println (yValue); Serial.print ("z ="); Serial.println (zValue);…………………
Aici am creat și alte funcții pentru diferite pupose, cum ar fi void gpsEvent () pentru a obține coordonate GPS, void coordinate2dec () pentru extragerea coordonatelor din șirul GPS și convertirea lor în valori zecimale, void show_coordinate () pentru afișarea valorilor pe monitorul serial și LCD și, în cele din urmă, trimiterea nulă () pentru trimiterea de SMS de alertă la numărul predefinit.
Codul complet și videoclipul demonstrativ sunt prezentate mai jos, puteți verifica toate funcțiile din cod.