Iepriekšējās apmācībās mēs esam iemācījušies par to, kā GPS moduli savienot ar datoru un kā izsekot transportlīdzeklim, izmantojot GSM un GPS. Izmantojot Arduino un akselerometru, mēs uzbūvējām arī transportlīdzekļu negadījumu brīdināšanas sistēmu. Šeit mēs atkal veidojam to pašu projektu, bet šoreiz transportlīdzekļa negadījumu noteikšanai tiks izmantota MSP430 palaišanas paliktnis un vibrācijas sensors. Tātad šis projekts arī pastāstīs par vibrācijas sensora saskarni ar MSP430 starta paliktni. Vairāk MSP430 projektu varat atrast šeit.
Šeit vibrācijas sensora modulis nosaka transportlīdzekļa vibrāciju un nosūta signālu uz MSP430 Launchpad. Pēc tam MSP430 ienes datus no GPS moduļa un nosūta tos lietotāja mobilajam tālrunim, izmantojot SMS, izmantojot GSM moduli. Gaismas diode mirgos arī kā avārijas brīdinājuma signāls, šo gaismas diode var aizstāt ar kādu trauksmi. Negadījuma atrašanās vieta tiek nosūtīta Google Map saites veidā, kas iegūta no GPS moduļa platuma un garuma. Skatiet demonstrācijas video beigās.
GPS modulis reāllaikā nosūta datus, kas saistīti ar izsekošanas pozīciju, un tik daudz datu NMEA formātā (skat. Ekrānuzņēmumu zemāk). NMEA formāts sastāv no vairākiem teikumiem, kuros mums vajadzīgs tikai viens teikums. Šis teikums sākas ar $ GPGGA un satur koordinātas, laiku un citu noderīgu informāciju. Šis GPGGA attiecas uz globālās pozicionēšanas sistēmas labošanas datiem. Uzziniet vairāk par NMEA teikumiem un GPS datu lasīšanu šeit.
Saskaitot virknes komatus, mēs varam iegūt koordinātas no $ GPGGA virknes. Pieņemsim, ka atrodat virkni $ GPGGA un glabājat to masīvā, tad Latitude var atrast pēc diviem komatiem un Longitude - pēc četriem komatiem. Tagad šo platumu un garumu var ievietot citos masīvos.
Zemāk ir $ GPGGA virkne kopā ar aprakstu:
$ GPGGA, 104534.000,7791.0381, N, 06727.4434, E, 1,08,0,9,510,4, M, 43,9, M,, * 47 $ GPGGA, HHMMSS.SSS, platums, N, garums, E, FQ, NOS, HDP, augstums, M, augstums, M,, kontrolsummas dati
Identifikators |
Apraksts |
$ GPGGA |
Globālās pozicionēšanas sistēmas fiksēšanas dati |
HHMMSS.SSS |
Laiks stundas minūtēs sekundēs un milisekundes formātā. |
Platums |
Platums (koordinātas) |
N |
Virziens N = ziemeļi, S = dienvidi |
Garums |
Garums (koordinātas) |
E |
Virziens E = Austrumi, W = Rietumi |
FQ |
Labot kvalitātes datus |
NOS |
Izmantoto satelītu skaits |
HDP |
Horizontāls precizitātes atšķaidījums |
Augstums |
Augstums (metrus virs jūras līmeņa) |
M |
Skaitītājs |
Augstums |
Augstums |
Kontrolsumma |
Kontrolsummas dati |
GSM modulis
SIM900 ir pilnīgs četrjoslu GSM / GPRS modulis, kuru var viegli ievietot klients vai hobijs. SIM900 GSM modulis nodrošina nozares standarta saskarni. SIM900 nodrošina GSM / GPRS 850/900/1800 / 1900MHz veiktspēju balss, SMS un datiem ar mazu enerģijas patēriņu. Tas ir viegli pieejams tirgū.
- SIM900 izstrādāts, izmantojot vienas mikroshēmas procesoru, integrējot AMR926EJ-S kodolu
- Neliela izmēra četrjoslu GSM / GPRS modulis.
- GPRS iespējots
AT komandas
AT nozīmē UZMANĪBU. Šo komandu izmanto, lai kontrolētu GSM moduli. Zvanīšanai un ziņojumapmaiņai ir dažas komandas, kuras esam izmantojuši daudzos mūsu iepriekšējos GSM projektos ar Arduino. Lai pārbaudītu GSM moduli, mēs izmantojām AT komandu. Pēc AT komandas GSM moduļa saņemšanas atbildiet ar OK. Tas nozīmē, ka GSM modulis darbojas labi. Zemāk ir dažas AT komandas, kuras mēs šeit izmantojām šajā projektā:
ATE0 Atbalss izslēgšanai
AT + CNMI = 2,2,0,0,0
ATD
AT + CMGF = 1
AT + CMGS = “Mobilais numurs”
>> Tagad mēs varam uzrakstīt savu ziņojumu
>> Pēc ziņojuma uzrakstīšanas
Ctrl + Z nosūta ziņojuma komandu (26 cipari aiz komata).
ENTER = 0x0d HEX
(Lai uzzinātu vairāk par GSM moduli, šeit pārbaudiet mūsu dažādos GSM projektus ar dažādiem mikrokontrolleriem)
Vibrācijas sensora modulis
Šajā MSP430 avārijas trauksmes sistēmas projektā mēs izmantojām vibrācijas sensoru moduli, kas uztver vibrācijas vai pēkšņas modulācijas. Vibrācijas sensora modulis nodrošina digitālu izvadi HIGH / LOW loģiku atkarībā no moduļa. Mūsu gadījumā mēs esam izmantojuši aktīvo HIGH loģisko vibrāciju sensoru moduli. Tas nozīmē, ka vienmēr, kad vibrācijas sensors uztver vibrāciju, tas mikrokontrollerim piešķirs AUGSTU loģiku.
Ķēdes skaidrojums
Šī transportlīdzekļa avārijas trauksmes sistēmas projekta ķēdes savienojumi ir vienkārši. Šeit GPS moduļa Tx tapa ir tieši savienota ar MSP430 Launchpad (aparatūras sērijas) digitālo tapas numuru P1_1 un 5v tiek izmantota GPS moduļa darbināšanai. Šeit izmantojot programmatūras sērijas bibliotēku, mēs esam atļāvuši sērijveida saziņu ar tapām P_6 un P1_7, padarot tās attiecīgi Rx un Tx un savienotas ar GSM moduli. GSM moduļa darbināšanai tiek izmantota 12 voltu barošana. Vibrāciju sensors ir savienots pie P1_3. Gaismas diodi izmanto arī, lai norādītu uz negadījuma atklāšanu. Pārējie savienojumi ir parādīti shēmā.
Programmēšanas skaidrojums
Programmēšana šim projektam ir vienkārša, izņemot GPS daļu. Pilns kods ir norādīts projekta beigās. Lai rakstītu vai apkopotu kodu MSP430, mēs izmantojām Energia IDE, kas ir saderīgs ar Arduino. Lielāko daļu Arduino IDE funkciju var izmantot tieši šajā Energia IDE.
Tāpēc vispirms mēs esam iekļāvuši nepieciešamās bibliotēkas un deklarējuši PIN un mainīgos.
# iekļaut
Dotā funkcija tiek izmantota vibrācijas sensora signāla nolasīšanai. Šī funkcija filtrēs arī mazas vai nepatiesas vibrācijas.
#define count_max 25 char SensorRead (int pin) // lasīt sw ar debounce { char count_low = 0, count_high = 0; darīt { aizkavēt (1); if (digitalRead (piespraude) == AUGSTS) { count_high ++; skaits_low = 0; } cits { count_high = 0; skaits_low ++; } } while (skaits_low <skaits_max && skaits_augsts <skaits_max); ja (count_low> = count_max) atgriež LOW; vēl atgriezties AUGSTI; }
Zemāk esošā funkcija nosaka vibrāciju un zvana funkciju gpsEvent (), lai iegūtu GPS koordinātas un, visbeidzot, izsauktu funkciju Send (), lai nosūtītu īsziņas.
void loop () { if (SensorRead (vibrationSensor) == HIGH) { digitalWrite (vadīts, AUGSTS); gpsEvent (); Sūtīt (); digitalWrite (vadīts, LOW); kavēšanās (2000); } }
Konkrētā funkcija ir atbildīga par GPS virkņu iegūšanu no GPS moduļa, izvelciet no tām koordinātas un konvertējiet tās grādu decimālā formātā.
void gpsEvent () { char gpsString; char tests = "RMC"; i = 0; while (1) { while (Serial.available ()) // Seriālie ienākošie dati no GPS { char inChar = (char) Serial.read (); gpsString = inChar; // uzglabāt ienākošos datus no GPS uz pagaidu virkni str i ++; if (i <4) { if (gpsString! = tests) // pārbaudiet pareizo virkni i = 0; }
int grāds = 0; grāds = gpsString-48; grāds * = 10; grāds + = 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; platums = ((pludiņš) grāds + minūtes);
Visbeidzot, funkcija Send () tiek izmantota, lai nosūtītu īsziņu uz lietotāja numuru, kas ievietots šajā koda daļā.
void Send () { GSM.print ("AT + CMGS ="); GSM.print ('"'); GSM.print (" 961 **** 059 "); // ievadiet savu mobilā tālruņa numuru GSM.println ('"'); kavēšanās (500); // GSM.print ("Platums:"); // GSM.println (platums); GSM.println ("Notikusi nelaime"); kavēšanās (500); // GSM.print ("garums:"); // GSM.println (logitude); GSM.println ("Lai redzētu atrašanās vietu, noklikšķiniet uz saites"); GSM.print ("http://maps.google.com/maps?&z=15&mrt=yp&t=k&q="); GSM.print (platums, 6); GSM.print ("+"); GSM.print (logaritms, 6); GSM.write (26); kavēšanās (4000); }
Pilns kods un demonstrācijas video ir norādīts zemāk, jūs varat pārbaudīt visas koda funkcijas.