- Необхідні компоненти:
- Модуль GPS та його робота:
- Модуль GSM:
- Акселерометр:
- Пояснення схеми:
- Робоче пояснення:
- Пояснення програмування:
У наших попередніх підручниках ми дізналися про те, як взаємодіяти модуль GPS з комп’ютером, як побудувати годинник Arduino GPS та як відстежувати автомобіль за допомогою GSM та GPS. У цьому проекті ми збираємося створити систему сповіщення про аварії на базі Arduino з використанням GPS, GSM та акселерометра. Акселерометр виявляє раптову зміну осей автомобіля, а модуль GSM надсилає попереджувальне повідомлення на ваш мобільний телефон із місцем аварії. Місце аварії надсилається у формі посилання Google Map, отриманого з широти та довготи від модуля GPS. Повідомлення також містить швидкість руху автомобіля у вузлах. Дивіться демонстраційне відеов кінці. Цей проект попередження про дорожньо-транспортні пригоди також може бути використаний як система відстеження та багато іншого, просто зробивши невеликі зміни в апаратному та програмному забезпеченні.
Необхідні компоненти:
- Arduino Uno
- Модуль GSM (SIM900A)
- Модуль GPS (SIM28ML)
- Акселерометр (ADXL335)
- РК-дисплей 16x2
- Блок живлення
- Підключення проводів
- 10 K-POT
- Макет або друкована плата
- Блок живлення 12v 1amp
Перш ніж переходити до проекту, ми обговоримо GPS, GSM та акселерометр.
Модуль GPS та його робота:
GPS розшифровується як система глобального позиціонування і використовується для виявлення широти та довготи будь-якого місця на Землі з точним часом UTC (координований за універсальним часом). Модуль GPS використовується для відстеження місця аварії в нашому проекті. Цей пристрій отримує координати від супутника щосекунди з часом та датою. Раніше ми витягли рядок $ GPGGA в Системі відстеження транспортних засобів, щоб знайти координати широти та довготи.
Модуль GPS надсилає дані, пов’язані з позицією відстеження, в режимі реального часу, і надсилає стільки даних у форматі NMEA (див. Знімок екрана нижче). Формат NMEA складається з декількох речень, у яких нам потрібне лише одне речення. Це речення починається з $ GPGGA і містить координати, час та іншу корисну інформацію. Цей GPGGA називається даними виправлення глобальної системи позиціонування. Дізнайтеся більше про пропозиції NMEA та читання даних GPS тут.
Ми можемо витягти координату з рядка $ GPGGA, підрахувавши коми у рядку. Припустимо, ви знайшли рядок $ GPGGA і зберегли його в масиві, тоді Latitude можна знайти після двох коми, а Longitude - після чотирьох коми. Тепер цю широту та довготу можна помістити в інші масиви.
Нижче наведено рядок $ 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, висота, М, висота, М,, дані контрольної суми
Ідентифікатор |
Опис |
$ GPGGA |
Дані виправлення системи глобального позиціонування |
HHMMSS.SSS |
Час у форматі години хвилини секунд та мілісекунд. |
Широта |
Широта (координата) |
N |
Напрямок N = Північ, S = Південь |
Довгота |
Довгота (координата) |
Е |
Напрямок E = Схід, W = Захід |
FQ |
Виправте дані про якість |
NOS |
Кількість використовуваних супутників |
HDP |
Горизонтальне розведення точності |
Висота над рівнем моря |
Висота (метри над рівнем моря) |
М |
Метр |
Висота |
Висота |
Контрольна сума |
Дані контрольної суми |
Модуль 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 Command GSM Module відповідь з ОК. Це означає, що модуль GSM працює нормально. Нижче наведено кілька команд AT, які ми використовували тут у цьому проекті:
ATE0 Для відлуння AT + CNMI = 2,2,0,0,0
(Щоб дізнатись більше про модуль GSM, перегляньте наші різні проекти GSM за допомогою різних мікроконтролерів тут)
Акселерометр:
Pin Опис акселерометра:
- На цьому штифті повинен підключатися живлення Vcc 5 вольт.
- X-OUT Цей штифт дає аналоговий вихід у напрямку x
- Y-OUT Цей штифт дає аналоговий вихід у напрямку y
- Z-OUT Цей штифт дає аналоговий вихід у напрямку z
- GND Земля
- ST Цей штифт використовується для встановлення чутливості датчика
Також перевірте наші інші проекти, використовуючи акселерометр: Пінг-понг, використовуючи Arduino та акселерометр на базі керованого жестами робота.
Пояснення схеми:
Схема підключень цього проекту системи оповіщення про аварії на транспортному засобі проста. Тут штекер Tx модуля GPS безпосередньо підключений до цифрового штифта № 10 Arduino. Застосувавши тут послідовну бібліотеку програмного забезпечення, ми дозволили послідовний зв’язок на виводах 10 і 11, зробили їх Rx і Tx відповідно і залишили вивід Rx модуля GPS відкритим. За замовчуванням виводи 0 і 1 Arduino використовуються для послідовного зв'язку, але, використовуючи бібліотеку SoftwareSerial, ми можемо дозволити послідовний зв'язок на інших цифрових контактах Arduino. Для живлення модуля GPS використовується джерело живлення 12 Вольт.
Виводи 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 безпосередньо підключені до штифтів АЦП Arduino A1, A2 і A3.
Робоче пояснення:
У цьому проекті Arduino використовується для контролю всього процесу за допомогою GPS-приймача та модуля GSM. GPS-приймач використовується для виявлення координат автомобіля, модуль GSM - для відправки попереджувального SMS-повідомлення з координатами та посиланням на Google Map. Акселерометр, а саме ADXL335, використовується для виявлення аварії або раптової зміни будь-якої осі. А додатковий РК-дисплей 16x2 також використовується для відображення повідомлень про стан або координат. Ми використовували GPS-модуль SIM28ML та GSM-модуль SIM900A.
Коли ми готові до нашого обладнання після програмування, ми можемо встановити його в наш автомобіль і включити його. Тепер, коли трапляється аварія, машина нахиляється, а акселерометр змінює свої осі. Ці значення зчитує Arduino та перевіряє, чи не відбулися зміни на будь-якій осі. Якщо відбудуться якісь зміни, Arduino зчитує координати, витягуючи $ GPGGA String із даних модуля GPS (GPS працює, як пояснювалося вище), і відправляє SMS на заздалегідь визначений номер до поліції, швидкої допомоги або члена сім'ї з координатами місцезнаходження місця аварії. Повідомлення також містить посилання на карту Google до місця аварії, завдяки чому місцезнаходження можна легко відстежити. Коли ми отримаємо повідомлення, нам потрібно лише натиснути посилання, і ми перенаправляємо на карту Google, і тоді ми зможемо побачити точне місце розташування автомобіля. Швидкість транспортного засобу, у вузлах(1,852 KPH), також надсилається в SMS і відображається на РК-панелі. Перегляньте повне демонстраційне відео нижче проекту.
У цьому проекті ми можемо встановити чутливість акселерометра, ввівши в код мінімальне та максимальне значення.
Тут у демонстрації використовуються задані значення:
#define minVal -50 #define MaxVal 50
Але для кращого результату ви можете використовувати 200 замість 50 або встановити відповідно до ваших вимог.
Пояснення програмування:
Повна програма подана нижче в розділі Кодексу; тут ми коротко пояснюємо різні його функції.
Спочатку ми включили всі необхідні бібліотеки або файли заголовків та оголосили різні змінні для обчислень та зберігання даних тимчасовими.
Після цього ми створили функцію void initModule (String cmd, char * res, int t) для ініціалізації модуля GSM та перевірки його реакції за допомогою AT-команд.
void initModule (рядок cmd, char * res, int t) {while (1) {Serial.println (cmd); Serial1.println (cmd); затримка (100); в той час як (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 ();…………………
Процес калібрування акселерометра також виконується в циклі налаштування . У цьому ми взяли деякі зразки, а потім знайшли середні значення для осей х, осі у та осі z. І зберігайте їх у змінній. Потім ми використовували ці зразкові значення для зчитування змін осі акселерометра, коли транспортний засіб нахиляється (аварія).
lcd.print ("Калібрування"); lcd.setCursor (0,1); lcd.print ("Acceleromiter"); для (int i = 0; i
Після цього у функції void loop () ми прочитали значення осі акселерометра і зробили обчислення для вилучення змін за допомогою зразків, які беруться в калібруванні. Тепер, якщо якісь зміни є більш-менш визначеними, тоді Arduino надсилає повідомлення на заздалегідь визначений номер.
void loop () {int value1 = analogRead (x); int value2 = analogRead (y); int значення3 = analogRead (z); int xValue = xsample-value1; 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);…………………
Тут ми також створили деякі інші функції для різних цілей, такі як void gpsEvent (), щоб отримати координати GPS, void coordinate2dec () для вилучення координат із рядка GPS та перетворення їх у десяткові значення, void show_coordinate () для відображення значень через послідовний монітор та РК-дисплеєм і, нарешті, порожнім Send () для надсилання сповіщення SMS на заздалегідь визначений номер.
Повний код та демонстраційне відео наведено нижче, ви можете перевірити всі функції коду.