В предишни уроци научихме как да свързваме GPS модул с компютър и как да проследяваме превозно средство с помощта на GSM и GPS. Също така изградихме система за предупреждение за злополука с превозни средства, използвайки Arduino и акселерометър. Тук отново изграждаме същия проект, но този път стартовата площадка MSP430 и сензор за вибрации ще бъдат използвани за откриване на катастрофа на превозното средство. Така че този проект ще разкаже и за взаимодействието на вибрационен сензор с MSP430 стартовата площадка. Можете да намерите повече проекти MSP430 тук.
Тук модулът на сензора за вибрации открива вибрациите на автомобила и изпраща сигнал към стартовата площадка MSP430. След това MSP430 извлича данни от GPS модула и ги изпраща на потребителя Мобилен телефон чрез SMS чрез GSM модул. Светодиодът също ще свети като сигнал за авария, този светодиод може да бъде заменен с някаква аларма. Местоположението на произшествието се изпраща под формата на връзка Google Map, получена от географската ширина и дължина от GPS модула. Вижте демонстрационния видеоклип в края.
![]()
GPS модулът изпраща данните, свързани с проследяващата позиция, в реално време и изпраща толкова много данни във формат NMEA (вижте екранната снимка по-долу). Форматът NMEA се състои от няколко изречения, в които се нуждаем само от едно изречение. Това изречение започва от $ GPGGA и съдържа координатите, времето и друга полезна информация. Този GPGGA се отнася до данните за корекция на системата за глобално позициониране. Научете повече за NMEA изречения и четене на GPS данни тук.
Можем да извлечем координати от низ $ GPGGA, като преброим запетаите в низа. Да предположим, че намерите $ GPGGA низ и го съхранявате в масив, тогава Latitude може да бъде намерен след две запетаи и Longitude може да бъде намерен след четири запетаи. Сега тази географска ширина и дължина могат да бъдат поставени в други масиви.

По-долу е $ GPGGA String, заедно с неговото описание:
$ GPGGA, 104534.000,7791.0381, N, 06727.4434, E, 1,08,0.9,510.4, M, 43.9, M,, * 47 $ GPGGA, HHMMSS.SSS, географска ширина, N, дължина, E, FQ, NOS, HDP, надморска височина, M, височина, M,, данни за контролна сума
|
Идентификатор |
Описание |
|
$ GPGGA |
Данни за корекция на системата за глобално позициониране |
|
HHMMSS.SSS |
Време в час минута секунди и милисекунди формат. |
|
Географска ширина |
Географска ширина (координата) |
|
н |
Посока N = север, S = юг |
|
Географска дължина |
Географска дължина (координати) |
|
Е. |
Посока E = Изток, W = Запад |
|
FQ |
Коригирайте данните за качеството |
|
NOS |
Брой използвани сателити |
|
HDP |
Хоризонтално разреждане на прецизността |
|
Надморска височина |
Надморска височина (метри над морското равнище) |
|
М |
Метър |
|
Височина |
Височина |
|
Контролна сума |
Данни за контролна сума |
GSM модул
SIM900 е пълен четирибандов GSM / GPRS модул, който може да бъде вграден лесно за използване от клиент или любител. Модулът SIM900 GSM осигурява индустриален стандартен интерфейс. SIM900 предоставя GSM / GPRS 850/900/1800 / 1900MHz производителност за глас, SMS, данни с ниска консумация на енергия. Той е лесно достъпен на пазара.
- SIM900, проектиран с помощта на едночипов процесор, интегриращ ядрото AMR926EJ-S
- Четирилентов GSM / GPRS модул в малък размер.
- GPRS активиран
![]()
AT команди
AT означава ВНИМАНИЕ. Тази команда се използва за управление на GSM модула. Има някои команди за обаждания и съобщения, които сме използвали в много от предишните ни GSM проекти с Arduino. За тестване на GSM модул използвахме AT команда. След получаване на AT Command GSM модул отговорете с OK. Това означава, че GSM модулът работи добре. По-долу има някои AT команди, които използвахме тук в този проект:
ATE0 За изключване на ехото
AT + CNMI = 2,2,0,0,0
ATD
AT + CMGF = 1
AT + CMGS = "Мобилен номер"
>> Сега можем да напишем нашето съобщение
>> След писане на съобщение
Ctrl + Z изпраща команда за съобщение (26 в десетични знаци).
ENTER = 0x0d в HEX
(За да научите повече за GSM модула, проверете нашите различни GSM проекти с различни микроконтролери тук)
Модул за вибрационен сензор
В този проект за система за предупреждение за аварии на MSP430 използвахме модул за вибрационен сензор, който открива вибрации или внезапни модулации. Модулът на сензора за вибрации дава цифров изход HIGH / LOW логика в зависимост от модула. В нашия случай сме използвали активен модул HIGH логически сензор за вибрации. Това означава, че когато сензорът за вибрации засича вибрации, той ще даде ВИСОКА логика на микроконтролера.
![]()
Обяснение на веригата
Верижните връзки на този проект за система за предупреждение за аварии в автомобила са прости. Тук Tx щифтът на GPS модула е директно свързан с цифров пинов номер P1_1 на MSP430 Launchpad (хардуерен сериен) и 5v се използва за захранване на GPS модула. Използвайки тук серийна библиотека на софтуера, ние разрешихме последователна комуникация на пин P_6 и P1_7 и ги направихме съответно Rx и Tx и свързани към GSM модула. 12-волтово захранване се използва за захранване на GSM модула. На вибрации сензор е свързан към P1_3. Светодиодът също се използва за индикация на откриването на произшествие. Останалите връзки са показани на електрическата схема.
![]()
![]()
Обяснение на програмирането
Програмирането за този проект е лесно, с изключение на GPS частта. Пълният код е даден в края на проекта. За да напишем или компилираме кода в MSP430, използвахме Energia IDE, който е съвместим с Arduino. Повечето функции на Arduino IDE могат да се използват директно в тази IDE на Energia.
Така че на първо място включихме необходимите библиотеки и декларирахме ПИН и променливи.
#include
Дадената функция се използва за отчитане на сигнала на вибрационния сензор. Тази функция ще филтрира и малки или фалшиви вибрации.
#define count_max 25 char SensorRead (int pin) // чете sw с debounce { char count_low = 0, count_high = 0; do { delay (1); if (digitalRead (pin) == HIGH) { count_high ++; count_low = 0; } друго { count_high = 0; count_low ++; } } докато (count_low <count_max && count_high <count_max); ако (count_low> = count_max) връща LOW; иначе връща HIGH; }
Функцията по-долу открива вибрация и извиква функцията gpsEvent (), за да получи GPS координата и накрая да извика функцията Send (), за да изпрати SMS.
празен цикъл () { if (SensorRead (vibrationSensor) == HIGH) { digitalWrite (led, HIGH); gpsEvent (); Изпращане (); digitalWrite (led, LOW); забавяне (2000); } }
Дадена функция отговаря за получаването на GPS низове от GPS модула, извлича координатите от тях и ги преобразува в десетичен градусов формат.
void gpsEvent () { char gpsString; char тест = "RMC"; i = 0; while (1) { while (Serial.available ()) // Серийни входящи данни от GPS { char inChar = (char) Serial.read (); gpsString = inChar; // съхраняваме входящи данни от GPS до временен низ str i ++; if (i <4) { if (gpsString! = test) // проверяваме за десен низ i = 0; }
int степен = 0; степен = gpsString-48; степен * = 10; степен + = 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; географска ширина = ((плаващ) градус + минута);
И накрая, функцията Send () се използва за изпращане на SMS до потребителския номер, който е вмъкнат в тази част на кода.
void Send () { GSM.print ("AT + CMGS ="); GSM.print ('"'); GSM.print (" 961 **** 059 "); // въведете вашия мобилен номер GSM.println ('"'); забавяне (500); // GSM.print ("Latitude:"); // GSM.println (географска ширина); GSM.println („Случило се произшествие“); забавяне (500); // GSM.print ("дължина:"); // GSM.println (logitude); GSM.println ("Щракнете върху връзката, за да видите местоположението"); GSM.print ("http://maps.google.com/maps?&z=15&mrt=yp&t=k&q="); GSM.print (географска ширина, 6); GSM.print ("+"); GSM.print (logitude, 6); GSM.write (26); забавяне (4000); }
Пълният код и демо видео е даден по-долу, можете да проверите всички функции в кода.
