- Необходими компоненти:
- GPS модул и неговата работа:
- GSM модул:
- Акселерометър:
- Обяснение на веригата:
- Работно обяснение:
- Обяснение на програмирането:
В предишните ни уроци научихме за това как да свързваме GPS модул с компютър, как да изградим Arduino GPS часовник и как да проследяваме превозно средство с помощта на GSM и GPS. Тук в този проект ще изградим базирана на Arduino система за предупреждение за произшествия с помощта на GPS, GSM и акселерометър. Акселерометърът открива внезапната промяна в осите на автомобила и GSM модулът изпраща предупредителното съобщение на вашия мобилен телефон с местоположението на инцидента. Местоположението на произшествието се изпраща под формата на връзка към Google Map, получена от географската ширина и дължина от GPS модула. Съобщението съдържа и скоростта на превозното средство във възли. Вижте демонстрационния видеоклипнакрая. Този проект за предупреждение за злополука с превозно средство може да се използва и като система за проследяване и много повече, като просто направи няколко промени в хардуера и софтуера.
Необходими компоненти:
- Arduino Uno
- GSM модул (SIM900A)
- GPS модул (SIM28ML)
- Акселерометър (ADXL335)
- 16x2 LCD
- Захранване
- Свързване на проводници
- 10 K-POT
- Макет или печатни платки
- Захранване 12v 1amp
Преди да влезем в Project, ще обсъдим GPS, GSM и акселерометър.
GPS модул и неговата работа:
GPS означава система за глобално позициониране и се използва за откриване на географската ширина и дължина на всяко местоположение на Земята, с точно UTC време (универсално координирано време). GPS модулът се използва за проследяване на местоположението на произшествието в нашия проект. Това устройство получава координатите от спътника за всяка секунда, с час и дата. Преди това извадихме низ от $ GPGGA в системата за проследяване на превозни средства, за да намерим координатите на географска ширина и дължина.
GPS модулът изпраща данните, свързани с проследяващата позиция, в реално време и изпраща толкова много данни във формат NMEA (вижте екранната снимка по-долу). Форматът NMEA се състои от няколко изречения, в които се нуждаем само от едно изречение. Това изречение започва от $ GPGGA и съдържа координатите, времето и друга полезна информация. Този GPGGA се отнася до данните за корекция на системата за глобално позициониране. Научете повече за NMEA изречения и четене на GPS данни тук.
Можем да извлечем координати от низ $ GPGGA, като преброим запетаите в низа. Да предположим, че намерите $ GPGGA низ и го съхранявате в масив, тогава Latitude може да бъде намерен след две запетаи и Longitude може да бъде намерен след четири запетаи. Сега тази географска ширина и дължина могат да бъдат поставени в други масиви.
По-долу е $ GPGGA String, заедно с неговото описание:
$ 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 |
Данни за корекция на системата за глобално позициониране |
HHMMSS.SSS |
Време в час минута секунди и милисекунди формат. |
Географска ширина |
Географска ширина (координата) |
н |
Посока N = север, S = юг |
Географска дължина |
Географска дължина (координати) |
Е. |
Посока E = Изток, W = Запад |
FQ |
Коригирайте данните за качеството |
NOS |
Брой използвани сателити |
HDP |
Хоризонтално разреждане на прецизността |
Надморска височина |
Надморска височина (метри над морското равнище) |
М |
Метър |
Височина |
Височина |
Контролна сума |
Данни за контролна сума |
GSM модул:
SIM900 е пълен четирибандов GSM / GPRS модул, който може да бъде вграден лесно за използване от клиент или любител. Модулът SIM900 GSM осигурява индустриален стандартен интерфейс. SIM900 предоставя GSM / GPRS 850/900/1800 / 1900MHz производителност за глас, SMS, данни с ниска консумация на енергия. Той е лесно достъпен на пазара.
- SIM900, проектиран с помощта на едночипов процесор, интегриращ ядрото AMR926EJ-S
- Четирилентов GSM / GPRS модул в малък размер.
- GPRS активиран
AT команда:
AT означава ВНИМАНИЕ. Тази команда се използва за управление на GSM модул. Има някои команди за обаждания и съобщения, които сме използвали в много от предишните ни GSM проекти с Arduino. За тестване на GSM модул използвахме AT команда. След получаване на AT Command 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 Този щифт се използва за зададена чувствителност на сензора
Проверете и другите ни проекти с помощта на акселерометър: игра за пинг понг, използвайки Arduino и акселерометър, базиран на ръчен жест, контролиран робот.
Обяснение на веригата:
Верижните връзки на този проект за система за предупреждение за аварии в автомобила са прости. Тук Tx щифтът на GPS модула е директно свързан с цифров щифт номер 10 на Arduino. Използвайки тук софтуерна серийна библиотека, ние разрешихме серийна комуникация на пин 10 и 11 и ги направихме съответно Rx и Tx и оставихме Rx щифта на GPS модула отворен. По подразбиране Пин 0 и 1 на Arduino се използват за серийна комуникация, но като използваме библиотеката SoftwareSerial, можем да разрешим серийна комуникация на други цифрови щифтове на Arduino. 12-волтово захранване се използва за захранване на GPS модула.
Tx и Rx щифтовете на GSM модула са директно свързани към пинове D2 и D3 на Arduino. За GSM взаимодействие тук използваме и софтуерна серийна библиотека. GSM модулът също се захранва от 12v захранване. Един по избор LCD на щифтове данни D4, D5, D6 и D7 са свързани към игла номер 6, 7, 8 и 9 от Ардуино. Командният щифт RS и EN на LCD са свързани с пинове с номера 4 и 5 на Arduino и RW щифтът е директно свързан със земята. Потенциометър се използва също за настройка на контраст или яркост на LCD.
В тази система е добавен акселерометър за откриване на инцидент и неговите изходни щифтове ADC по x, y и z са директно свързани към Arduino ADC щифтове A1, A2 и A3.
Работно обяснение:
В този проект Arduino се използва за управление на целия процес с GPS приемник и GSM модул. GPS приемник се използва за откриване на координати на превозното средство, GSM модул се използва за изпращане на предупредителен SMS с координатите и връзката към Google Map. Акселерометърът, а именно ADXL335, се използва за откриване на авария или внезапна промяна във всяка ос. И допълнителен 16x2 LCD се използва също за показване на съобщения за състояние или координати. Използвали сме GPS модул SIM28ML и GSM модул SIM900A.
Когато сме готови с нашия хардуер след програмиране, можем да го инсталираме в автомобила си и да го включим. Сега, когато има инцидент, колата се накланя и акселерометърът променя стойностите на оста си. Тези стойности се четат от Arduino и се проверява дали има промени в която и да е ос. Ако се случи някаква промяна, тогава Arduino чете координати, като извлича $ GPGGA String от данните на GPS модула (GPS работи обяснено по-горе) и изпраща SMS на предварително зададения номер до полицията или линейка или член на семейството с координатите на местоположението на мястото на произшествието. Съобщението съдържа и връзка към Google Map към мястото на произшествието, така че местоположението може лесно да бъде проследено. Когато получим съобщението, трябва само да щракнем върху връзката и ще пренасочим към картата на Google и тогава ще можем да видим точното местоположение на превозното средство. Скорост на превозното средство, във възли(1.852 KPH), също се изпраща в SMS и се показва на LCD панела. Проверете пълния демонстрационен видеоклип под проекта.
Тук в този проект можем да зададем чувствителността на акселерометъра, като поставим минимална и максимална стойност в кода.
Тук в демонстрацията са използвани зададени стойности:
#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); докато (Serial1.available ()> 0) {if (Serial1.find (res)) {Serial.println (res); забавяне (t); връщане; } else {Serial.println ("Грешка"); }} забавяне (t); }}
След това, в void setup () функция, ние инициализирахме хардуерна и софтуерна серийна комуникация, LCD, 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 ("Acceleromiter"); за (int i = 0; i
След това, във функцията void loop () , прочетохме стойностите на оста на акселерометъра и направихме изчисление, за да извлечем промени с помощта на проби, взети в Калибриране Сега, ако някакви промени са повече или по-малко от определеното ниво, тогава Arduino изпраща съобщение до предварително дефинирания номер.
void loop () {int value1 = analogRead (x); int стойност2 = 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 () за показване на стойности през сериен монитор и LCD и накрая невалидното Send () за изпращане на предупредителен SMS на предварително зададения номер.
Пълният код и демо видео е даден по-долу, можете да проверите всички функции в кода.