În tutoriale anterioare, am aflat despre cum să interfațați modulul GPS cu computerul și cum să urmăriți vehiculul utilizând GSM și GPS. De asemenea, am construit un sistem de alertă la accidentul vehiculului folosind Arduino și accelerometru. Aici construim din nou același proiect, dar de data aceasta va fi utilizat un launchpad MSP430 și un senzor de vibrații pentru a detecta accidentele vehiculului. Așadar, acest proiect va spune și despre interfața unui senzor de vibrații cu lansatorul MSP430. Puteți găsi mai multe proiecte MSP430 aici.
Aici modulul senzorului de vibrații detectează vibrațiile vehiculului și trimite un semnal către MSP430 Launchpad. Apoi MSP430 preia date din modulul GPS și le trimite utilizatorului Telefon mobil prin SMS folosind modulul GSM. Un LED va aprinde, de asemenea, ca semnal de alertă de accident, acest LED poate fi înlocuit cu o alarmă. Locația accidentului este trimisă sub forma unui link Google Map, derivat din latitudine și longitudine din modulul GPS. Vedeți videoclipul demonstrativ la final.
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
Comenzi 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 oprit
AT + CNMI = 2,2,0,0,0
ATD
AT + CMGF = 1
AT + CMGS = „Număr mobil”
>> Acum putem scrie mesajul nostru
>> După ce ați scris un mesaj
Ctrl + Z trimite comanda mesajului (26 în zecimal).
ENTER = 0x0d în HEX
(Pentru a afla mai multe despre modulul GSM, verificați aici diferitele noastre proiecte GSM cu diverse microcontrolere)
Modulul senzorului de vibrații
În acest proiect MSP430 Accident Alert System, am folosit un modul senzor de vibrații care detectează vibrațiile sau modulațiile bruște. Modulul senzorului de vibrații oferă o ieșire digitală logică HIGH / LOW în funcție de modul. În cazul nostru, am folosit un modul activ cu senzor de vibrație logică HIGH. Înseamnă că ori de câte ori senzorul de vibrații va detecta vibrațiile, acesta va oferi logică HIGH microcontrolerului.
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 P1_1 al MSP430 Launchpad (hardware Serial) și 5v este utilizat pentru alimentarea modulului GPS. Folosind Software Serial Library aici, am permis comunicarea serială pe pinul P_6 și P1_7 și le-am făcut Rx și respectiv Tx și conectate la modulul GSM. Alimentarea cu 12 volți este utilizată pentru alimentarea modulului GSM. Vibrație Senzorul este conectat la P1_3. Un LED este, de asemenea, utilizat pentru a indica detectarea accidentului. Restul conexiunilor sunt prezentate în schema circuitului.
Explicație de programare
Programarea pentru acest proiect este ușoară, cu excepția părții GPS. Codul complet este dat la sfârșitul proiectului. Pentru a scrie sau compila codul în MSP430, am folosit Energia IDE, care este compatibil Arduino. Majoritatea funcției Arduino IDE poate fi utilizată direct în acest Energia IDE.
Așadar, în primul rând am inclus bibliotecile necesare și am declarat pinul și variabilele.
#include
Funcția dată este utilizată pentru citirea semnalului senzorului de vibrații. Această funcție va filtra și vibrațiile mici sau false.
#define count_max 25 char SensorRead (int pin) // citește sw cu debounce { char count_low = 0, count_high = 0; face { întârziere (1); if (digitalRead (pin) == HIGH) { count_high ++; count_low = 0; } else { count_high = 0; count_low ++; } } while (count_low <count_max && count_high <count_max); if (count_low> = count_max) returnează LOW; altfel reveniți la HIGH; }
Funcția de mai jos detectează vibrațiile și apelează funcția gpsEvent () pentru a obține coordonatele GPS și, în final, apelați funcția Send () pentru a trimite SMS.
bucla void () { if (SensorRead (vibrationSensor) == HIGH) { digitalWrite (led, HIGH); gpsEvent (); Trimite(); digitalWrite (led, LOW); întârziere (2000); } }
Funcția dată este responsabilă pentru obținerea șirurilor GPS din modulul GPS, extrageți coordonatele din acestea și le convertiți în format grad-zecimal.
void gpsEvent () { char gpsString; test char = "RMC"; i = 0; while (1) { while (Serial.available ()) // Date de intrare seriale de pe GPS { char inChar = (char) Serial.read (); gpsString = inChar; // stochează datele primite de pe GPS în șirul temporar str i ++; if (i <4) { if (gpsString! = test) // verificați dacă șirul drept i = 0; }
grad int = 0; grade = gpsString-48; grad * = 10; grade + = gpsString-48; int minut_int = 0; minut_int = gpsString-48; minut_int * = 10; minut_int + = gpsString-48; int minut_dec = 0; minut_dec + = (gpsString-48) * 10000; minut_dec + = (gpsString-48) * 1000; minut_dec + = (gpsString-48) * 100; minut_dec + = (gpsString-48) * 10; minut_dec + = (gpsString-48); float minut = ((float) minut_int + ((float) minut_dec / 100000.0)) / 60.0; latitudine = ((float) grad + minut);
Și, în cele din urmă, funcția Send () este utilizată pentru a trimite SMS-ul către numărul de utilizator care este inserat în această parte a codului.
void Send () { GSM.print ("AT + CMGS ="); GSM.print ('"'); GSM.print (" 961 **** 059 "); // introduceți numărul dvs. mobil GSM.println ('"'); întârziere (500); // GSM.print ("Latitude:"); // GSM.println (latitudine); GSM.println („Accidentul s-a întâmplat”); întârziere (500); // GSM.print ("longitudine:"); // GSM.println (logitudine); GSM.println („Faceți clic pe linkul pentru a vedea locația”); GSM.print („http://maps.google.com/maps?&z=15&mrt=yp&t=k&q=”); GSM.print (latitudine, 6); GSM.print ("+"); GSM.print (logitudine, 6); GSM.write (26); întârziere (4000); }
Codul complet și videoclipul demonstrativ sunt prezentate mai jos, puteți verifica toate funcțiile din cod.