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