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

Ниже приведена строка $ GPGGA с ее описанием:
$ 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 |
Данные исправления глобальной системы позиционирования |
|
ЧЧММСС.ССС |
Время в формате часов, минут, секунд и миллисекунд. |
|
Широта |
Широта (координата) |
|
N |
Направление N = Север, S = Юг |
|
Долгота |
Долгота (координата) |
|
E |
Направление E = Восток, W = Запад |
|
FQ |
Исправить данные о качестве |
|
NOS |
Количество используемых спутников |
|
HDP |
Горизонтальное снижение точности |
|
Высота |
Высота (метры над уровнем моря) |
|
M |
Метр |
|
Высота |
Высота |
|
Контрольная сумма |
Данные контрольной суммы |
GSM модуль
SIM900 - это полный четырехдиапазонный модуль GSM / GPRS, который может быть легко встроен клиентом или любителем. GSM-модуль SIM900 предоставляет интерфейс промышленного стандарта. SIM900 обеспечивает производительность GSM / GPRS 850/900/1800/1900 МГц для голоса, SMS и данных с низким энергопотреблением. Он легко доступен на рынке.
- SIM900 разработан с использованием однокристального процессора с ядром AMR926EJ-S
- Четырехдиапазонный модуль GSM / GPRS небольшого размера.
- GPRS включен
![]()
AT-команды
AT означает ВНИМАНИЕ. Эта команда используется для управления модулем GSM. Есть несколько команд для звонков и обмена сообщениями, которые мы использовали во многих наших предыдущих проектах GSM с Arduino. Для тестирования GSM-модуля мы использовали AT-команду. После получения AT-команды 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 logic. Это означает, что всякий раз, когда датчик вибрации обнаруживает вибрацию, он передает ВЫСОКУЮ логику микроконтроллеру.
![]()
Описание схемы
Схема подключения этого проекта системы оповещения о дорожно-транспортных происшествиях проста. Здесь вывод Tx модуля GPS напрямую подключен к цифровому контакту P1_1 панели запуска MSP430 (аппаратный последовательный порт), а 5 В используется для питания модуля GPS. Используя здесь Software Serial Library, мы разрешили последовательную связь на выводах P_6 и P1_7, сделали их Rx и Tx соответственно и подключили к модулю GSM. Для питания модуля GSM используется источник 12 Вольт. Вибрации датчик соединен P1_3. Светодиод также используется для индикации обнаружения аварии. Остальные соединения показаны на принципиальной схеме.
![]()
![]()
Объяснение программирования
Программирование для этого проекта простое, за исключением части GPS. Полный код приведен в конце проекта. Чтобы написать или скомпилировать код в MSP430, мы использовали Energia IDE, совместимую с Arduino. Большинство функций Arduino IDE можно использовать непосредственно в этой среде Energia IDE.
Итак, прежде всего мы включили необходимые библиотеки и объявили контакт и переменные.
#включают
Данная функция используется для считывания сигнала датчика вибрации. Эта функция также будет фильтровать небольшие или ложные вибрации.
#define count_max 25 char SensorRead (int pin) // чтение SW с противодействием { char count_low = 0, count_high = 0; делать { задержка (1); если (digitalRead (pin) == HIGH) { count_high ++; count_low = 0; } еще { count_high = 0; count_low ++; } } while (count_low <count_max && count_high <count_max); если (count_low> = count_max) return LOW; иначе верните HIGH; }
Ниже функция обнаруживает вибрацию и вызывает функцию gpsEvent () для получения координаты GPS и, наконец, вызывает функцию Send () для отправки SMS.
пустая петля () { если (SensorRead (вибрационный датчик) == ВЫСОКИЙ) { digitalWrite (светодиод, ВЫСОКИЙ); gpsEvent (); Послать(); digitalWrite (светодиод, LOW); задержка (2000); } }
Данная функция отвечает за получение строк GPS из модуля GPS, извлечение из них координат и преобразование их в десятичный градусный формат.
void gpsEvent () { char gpsString; char test = "RMC"; я = 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 ("Широта:"); // 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 (логичность, 6); GSM.write (26); задержка (4000); }
Полный код и демонстрационное видео приведены ниже, вы можете проверить все функции в коде.
