У попередніх підручниках ми дізналися про те, як взаємодіяти модуль 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 разом з описом:
$ 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
ATD
AT + CMGF = 1
AT + CMGS = "Мобільний номер"
>> Тепер ми можемо написати своє повідомлення
>> Після написання повідомлення
Ctrl + Z надсилає команду повідомлення (26 у десяткових кодах).
ENTER = 0x0d у шістнадцятковій формі
(Щоб дізнатись більше про модуль GSM, перегляньте наші різні проекти GSM за допомогою різних мікроконтролерів тут)
Модуль датчика вібрації
У цьому проекті системи оповіщення про аварії MSP430 ми використали модуль датчика вібрації, який виявляє вібрації або раптові модуляції. Модуль датчика вібрації дає цифровий висновок HIGH / LOW логіки залежно від модуля. У нашому випадку ми використовували активний модуль високого логічного датчика вібрації. Це означає, що коли датчик вібрації виявить вібрацію, це дасть ВИСОКУ логіку мікроконтролеру.
Пояснення схеми
Схема підключень цього проекту системи оповіщення про аварії на транспортному засобі проста. Тут штекер Tx модуля GPS безпосередньо підключений до цифрового номера контакту P1_1 пускової панелі MSP430 (апаратний послідовний), а 5 В використовується для живлення модуля GPS. Використовуючи тут послідовну бібліотеку програмного забезпечення, ми дозволили послідовний зв’язок на контактах P_6 та P1_7, зробили їх відповідно Rx та Tx та підключили до модуля GSM. Для живлення модуля GSM використовується джерело живлення 12 Вольт. Вібрації датчик з'єднаний P1_3. Світлодіод також використовується для індикації виявлення аварії. Інші з'єднання показані на схемі.
Пояснення програмування
Програмувати цей проект легко, за винятком GPS-частини. Повний код наведено в кінці проекту. Для написання або компіляції коду в MSP430 ми використовували Energia IDE, сумісний з Arduino. Більшість функцій Arduino IDE можна використовувати безпосередньо в цій IDE Energia.
Отже, перш за все ми включили необхідні бібліотеки та оголосили pin та змінні.
#включати
Дана функція використовується для зчитування сигналу датчика вібрації. Ця функція також фільтрує невеликі або помилкові вібрації.
#define count_max 25 char SensorRead (int pin) // зчитування sw з debounce { char count_low = 0, count_high = 0; do { затримка (1); if (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) повертає LOW; ще повернути ВИСОКО; }
Нижче функція виявляє вібрацію та викликає функцію gpsEvent (), щоб отримати GPS-координату, і нарешті викличте функцію Send (), щоб надіслати SMS.
void loop () { 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 ("Широта:"); // GSM.println (широта); GSM.println ("Аварія сталася"); затримка (500); // GSM.print ("довгота:"); // GSM.println (логітет); 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); }
Повний код та демонстраційне відео наведено нижче, ви можете перевірити всі функції коду.