- Необходимые компоненты:
- Модуль GPS и его работа:
- Модуль GSM:
- Акселерометр:
- Описание схемы:
- Рабочее объяснение:
- Объяснение программирования:
В наших предыдущих уроках мы узнали о том, как связать модуль GPS с компьютером, как построить часы Arduino GPS и как отслеживать автомобиль с помощью GSM и GPS. В этом проекте мы собираемся создать систему оповещения об авариях на базе Arduino, используя GPS, GSM и акселерометр. Акселерометр определяет резкое изменение осей автомобиля, а модуль GSM отправляет на ваш мобильный телефон предупреждающее сообщение с указанием места аварии. Местоположение аварии отправляется в виде ссылки на Google Map, полученной на основе широты и долготы от модуля GPS. Сообщение также содержит скорость автомобиля в узлах. Посмотреть демонстрационное видеов конце. Этот проект оповещения о дорожно-транспортных происшествиях также можно использовать в качестве системы слежения и многого другого, просто внеся несколько изменений в оборудование и программное обеспечение.
Необходимые компоненты:
- Ардуино Уно
- Модуль GSM (SIM900A)
- Модуль GPS (SIM28ML)
- Акселерометр (ADXL335)
- ЖК-дисплей 16x2
- Источник питания
- Подключение проводов
- 10 тыс.
- Макетная плата или печатная плата
- Блок питания 12v 1amp
Перед тем, как войти в Project, мы обсудим GPS, GSM и акселерометр.
Модуль GPS и его работа:
GPS расшифровывается как Global Positioning System и используется для определения широты и долготы любого места на Земле с точным временем UTC (всемирное координированное время). Модуль GPS используется для отслеживания места аварии в нашем проекте. Это устройство каждую секунду получает координаты со спутника с указанием времени и даты. Ранее мы извлекали строку $ GPGGA в системе слежения за транспортными средствами, чтобы найти координаты широты и долготы.
Модуль 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
(Чтобы узнать больше о модуле GSM, ознакомьтесь с нашими различными проектами GSM с различными микроконтроллерами здесь)
Акселерометр:
Описание контактов акселерометра:
- К этому выводу должно подключаться питание Vcc 5 Вольт.
- X-OUT Этот вывод дает аналоговый выход в направлении x
- Y-OUT Этот вывод дает аналоговый выход в направлении y
- Z-OUT Этот вывод дает аналоговый выход в направлении z.
- GND Земля
- ST Этот вывод используется для установки чувствительности датчика.
Также проверьте наши другие проекты с помощью Accelerometer: Ping Pong Game с использованием Arduino и робота, управляемого жестами рук на основе акселерометра.
Описание схемы:
Схема подключения этого проекта системы оповещения о дорожно-транспортных происшествиях проста. Здесь вывод Tx модуля GPS напрямую подключен к цифровому выводу номер 10 Arduino. Используя здесь Software Serial Library, мы разрешили последовательную связь на контактах 10 и 11, сделали их Rx и Tx соответственно и оставили контакт Rx модуля GPS открытым. По умолчанию выводы 0 и 1 Arduino используются для последовательной связи, но с помощью библиотеки SoftwareSerial мы можем разрешить последовательную связь на других цифровых выводах Arduino. Источник питания 12 В используется для питания модуля GPS.
Контакты Tx и Rx модуля GSM напрямую подключены к контактам D2 и D3 Arduino. Для интерфейса GSM здесь мы также использовали последовательную библиотеку программного обеспечения. Модуль GSM также питается от источника питания 12 В. An Опциональный ЖК в выводы данных D4, D5, D6, D7 и соединены с выводами номером 6, 7, 8, и 9 Arduino. Командные выводы RS и EN ЖК-дисплея подключены к контактам 4 и 5 Arduino, а контакт RW напрямую подключен к земле. Потенциометр также используется для настройки контрастности или яркости ЖК-дисплея.
В эту систему добавлен акселерометр для обнаружения аварии, а его выходные контакты АЦП по осям x, y и z напрямую подключены к контактам A1, A2 и A3 АЦП Arduino.
Рабочее объяснение:
В этом проекте Arduino используется для управления всем процессом с помощью GPS-приемника и модуля GSM. Приемник GPS используется для определения координат транспортного средства, модуль GSM используется для отправки тревожного SMS с координатами и ссылкой на Google Map. Акселерометр, а именно ADXL335, используется для обнаружения аварии или резкого изменения любой оси. А дополнительный ЖК-дисплей 16x2 также используется для отображения сообщений о состоянии или координат. Мы использовали GPS-модуль SIM28ML и GSM-модуль SIM900A.
Когда мы будем готовы с нашим оборудованием после программирования, мы можем установить его в наш автомобиль и включить его. Теперь всякий раз, когда происходит авария, автомобиль получает наклон, и акселерометр меняет значения оси. Эти значения считываются Arduino и проверяют, происходят ли какие-либо изменения в какой-либо оси. Если происходит какое-либо изменение, Arduino считывает координаты, извлекая строку $ GPGGA из данных модуля GPS (работа GPS описана выше), и отправляет SMS на заданный номер в полицию, скорую помощь или члену семьи с координатами места происшествия. Сообщение также содержит ссылку на карту Google на место аварии, так что это место можно легко отследить. Когда мы получим сообщение, нам нужно только щелкнуть ссылку, и мы выполним перенаправление на карту Google, и тогда мы сможем увидеть точное местоположение автомобиля. Скорость транспортного средства, в узлах(1,852 км / ч), также отправляется в SMS и отображается на ЖК-панели. Посмотрите полное демонстрационное видео под проектом.
Здесь, в этом проекте, мы можем установить чувствительность акселерометра, указав минимальное и максимальное значение в коде.
Здесь в демонстрации использованы указанные значения:
#define minVal -50 #define MaxVal 50
Но для лучших результатов вы можете использовать 200 вместо 50 или установить в соответствии с вашими требованиями.
Объяснение программирования:
Полная программа приведена ниже в разделе «Код»; здесь мы кратко объясняем его различные функции.
Сначала мы включили все необходимые библиотеки или файлы заголовков и объявили различные переменные для вычислений и временного хранения данных.
После этого мы создали функцию void initModule (String cmd, char * res, int t) для инициализации модуля GSM и проверки его ответа с помощью AT-команд.
void initModule (String cmd, char * res, int t) {while (1) {Serial.println (cmd); Serial1.println (cmd); задержка (100); while (Serial1.available ()> 0) {if (Serial1.find (res)) {Serial.println (res); задержка (t); возвращение; } else {Serial.println ("Ошибка"); }} задержка (t); }}
После этого в функции void setup () мы инициализировали аппаратную и программную последовательную связь, ЖК-дисплей, GPS, модуль GSM и акселерометр.
void setup () {Serial1.begin (9600); Serial.begin (9600); lcd.begin (16,2); lcd.print («Предупреждение об аварии»); lcd.setCursor (0,1); lcd.print («Система»); задержка (2000); lcd.clear ();…………………
Процесс калибровки акселерометра также выполняется в цикле настройки . Здесь мы взяли несколько образцов, а затем нашли средние значения для оси x, оси y и оси z. И сохраните их в переменной. Затем мы использовали эти примерные значения для считывания изменений оси акселерометра при наклоне автомобиля (аварии).
lcd.print («Калибровка»); lcd.setCursor (0,1); lcd.print («Акселерометр»); для (int i = 0; i
После этого в функции void loop () мы считали значения оси акселерометра и выполнили расчет для извлечения изменений с помощью выборок, взятых при калибровке. Теперь, если какие-либо изменения более или менее определенного уровня, Arduino отправляет сообщение на предопределенный номер.
void loop () {значение int1 = analogRead (x); int значение2 = analogRead (y); int значение3 = analogRead (z); int xValue = xsample-значение1; int yValue = ysample-value2; int zValue = zsample-value3; Serial.print ("x ="); Serial.println (xValue); Serial.print ("y ="); Serial.println (yValue); Serial.print ("z ="); Serial.println (zValue);…………………
Здесь мы также создали некоторые другие функции для различных курсовых, как ничтожной gpsEvent () , чтобы получить координаты GPS, аннулируется coordinate2dec () для извлечения координат из строки GPS и преобразовывать их в десятичные значения, аннулируется show_coordinate () для отображения значений через последовательный порт монитор и LCD, и, наконец, void Send () для отправки предупреждающего SMS на заранее определенный номер.
Полный код и демонстрационное видео приведены ниже, вы можете проверить все функции в коде.