В предишни уроци научихме как да свързваме 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); }
Пълният код и демо видео е даден по-долу, можете да проверите всички функции в кода.