Данните се записват в електронна таблица dataGPS.csv, чийто формат отговаря на изискванията на услугата Google My Maps.

    Език за програмиране: Arduino (C++)

Видео инструкция

От какво имаш нужда

Как се сглобява

gps-tracker.ino // библиотека за работа с устройства през SPI#включи // библиотека за работа с SD карта#включи // библиотека за работа с GPS устройство#включи // създайте обект от класа GPS и му предайте обекта Serial1 GPS gps (сериен1); // LED щифт#define LED_PIN A0 // бутон щифт #define BUTTON_PIN 13 // закачете CS micro-sd карта#define CHIP_SELECT_PIN 9 // интервал от време за запис на данни на картата#define INTERVAL 5000 // задаваме размера на масива за час, дата, географска ширина и дължина#define MAX_SIZE_MASS 16 // масив за съхраняване на текущия час char време [MAX_SIZE_MASS]; // състояние на запис bool stateRec = невярно; // запомня текущото времедълго началоMillis = millis() ; void setup() ( // отваряне на серийния порт за наблюдение на действията в програмата Serial.begin(115200); // изчакайте, докато мониторът на серийния порт се отвори // за да проследим всички събития в програмата// while (!Serial) ( // ) Serial.print ("Serial init OK \r\n") ; // отворете серийна връзка с GPS модула Serial1.begin(115200); // задайте светодиода в изходен режим pinMode(LED_PIN, OUTPUT) ; // задайте бутона в режим на влизане pinMode(BUTTON_PIN, INPUT_PULLUP) ; // извежда информация за инициализация към серийния порт Serial.println("Инициализиране на SD карта...") ; // инициализиране на SD картата while (! SD.begin (CHIP_SELECT_PIN) ) ( Serial.println ("Картата е неуспешна или не присъства") ; delay(1000) ; ) // извежда информация към серийния порт Serial.println("Инициализирана карта"); // създаване на обект dataFile от класа File за работа с файловеФайл dataFile = SD.open("dataGPS.csv" , FILE_WRITE) ; // ако файлът съществуваако (файл с данни) ( // запишете името на бъдещите данни на картата с памет dataFile.println("Време, координати, скорост"); // затворете файла dataFile.close(); Serial.println("Запазване OK"); ) else ( Serial.println ("Грешка при отваряне на test.csv" ) ; ) ) void loop() ( // Запишете натискането на бутона if (! digitalRead(BUTTON_PIN) ) ( // промяна на състоянието „запис“ / „не запис“ на картата с памет stateRec = ! stateRec; // промяна на състоянието на светодиода за индикация digitalWrite(LED_PIN, stateRec) ; ) // ако данните идват от GPS модулаако (gps.available()) ( // четене на данни и анализиране gps.readParsing(); // проверка на състоянието на GPS модула switch (gps.getState () ) ( // всичко е наред case GPS_OK: Serial.println ("GPS е наред" ) ); // ако зададеният интервал от време е изтекъл if (millis() - startMillis > INTERVAL && stateRec) ( // запазване на данни в карта с памет saveSD() ; // запомня текущото време startMillis = millis() ; ) прекъсване ; // случай на грешка в данните GPS_ERROR_DATA: Serial.println ("GPS данни за грешка" ) ; прекъсване ; // няма връзка със сателити case GPS_ERROR_SAT: Serial.println ( „GPS няма връзка със сателити“) ; прекъсване ; ) ) ) // функция за запис на данни в карта с памет void saveSD() ( File dataFile = SD.open("dataGPS.csv" , FILE_WRITE) ; // ако файлът съществува и е бил отворенако (файл с данни) ( // чете текущото време gps.getTime(време, MAX_SIZE_MASS); // запишете часа на картата с памет dataFile.print(" \" " ) ; dataFile.print(време); dataFile.print(" \" " ) ; dataFile.print ("," ); dataFile.print(" \" " ) ; // чете и записва координати на географска ширина и дължина в картата с памет dataFile.print(gps.getLatitudeBase10(), 6); dataFile.print ("," ); dataFile.print(gps.getLongitudeBase10(), 6); dataFile.print(" \" " ) ; dataFile.print ("," ); dataFile.print(gps.getSpeedKm()); dataFile.println("км/ч"); dataFile.close(); Serial.println("Запазване OK"); ) else ( Serial.println ( "Грешка при отваряне на test.csv" ) ; ) )

Системата за глобално позициониране GPS вече е станала част от живота ни. Днес е трудно да си представим мобилен телефон без вграден GPS модул. Тази сателитна навигационна система ви позволява да проследявате всякакви обекти, да определяте техните координати и скорост на движение. Сега GPS е достъпен не само за компании, разработващи съответното оборудване, но и за обикновени радиолюбители, които вече използват популярните платки Arduino в пълния им потенциал. Този материал ще обсъди свързването на миниатюрен GPS тракер към платката Arduino Pro Mini. Като тест се използва тракерът PG03 MiniGPS.



Този тракер, в допълнение към директните географски координати, показва посоката на движение, изминатото разстояние и скоростта на движение. За съжаление, той не записва информация, така че като го свържете към Arduino, можете да получите достъп до тези данни и да правите каквото искате с тях.


Първо, тракерът трябва да бъде разглобен. По-долу има изображения на разглобен GPS тракер.




Сърцето на тракера е GPS чипът Venus638FLP. Неговият 44-ти щифт е изходът на UART интерфейса (TxD). Можете да запоите проводник директно към този щифт или можете да намерите тестов щифт на платката, към който този щифт също е свързан. По-долу има изображения на местоположението на щифтовете на микросхемата и как да се свържете към желания щифт.





Сега нека вземем компактна платка Arduino Pro Mini и модул SD карта за записване на данни на NMEA протокол. Схемата за свързване на Arduino Pro Mini и модула на SD картата е както следва:



Свързващи модулни щифтове за SD карти:


GND към GND
VCC до 3.3V
MISO към пин 12
MOSI към пин 11
SCK към щифт 13
CS към пин 10

Свързване на щифтовете на GPS тракера:


GND към GND
Pin 2 (Arduino) към Pin 44 (GPS)

По-добре е да вземете захранване от GPS тракера (3,7 V). Тъй като батерията му има нисък енергиен капацитет, за предпочитане е да свържете външна батерия, например от мобилен телефон с капацитет 1400 mAh, както е показано на една от снимките по-горе.


Сега трябва да изтеглите библиотеката TinyGPS, ще ви е необходима и библиотека за работа с SD карти и библиотеката SoftwareSerial, която можете да намерите в Arduino\libraries.



В следната част от кода можете да изберете какви данни да запишете:


void gpsdump(TinyGPS &gps) ( float flat, flon; // Lat, Long float fkmph = gps.f_speed_kmph(); // Скорост в km/hr float falt = gps.f_altitude(); // +/- надморска височина в метри (всъщност изглежда елевация) float fc = gps.f_course(); // Курс в градуси unsigned_position(&flat, &flon, &age); " lon "); Serial.print (" kms "); Serial.print (" надморска височина "); /////////// //// ////////////////////////////////////////////// // ////////////////

Качете скицата в Arduino, поставете SD карта, форматирана според FAT32 и имаща файл log.txt в корена. Стартирайте Serial Monitor и ще видите данните да се записват на SD картата.



След няколко експеримента с Arduino, реших да направя прост и не много скъп GPS тракер с координати, изпратени чрез GPRS към сървъра.
Използван Arduino Mega 2560 (Arduino Uno), SIM900 - GSM/GPRS модул (за изпращане на информация към сървъра), GPS приемник SKM53 GPS.

Всичко беше закупено на ebay.com, за общо около 1500 рубли (около 500 рубли за arduino, малко по-малко за GSM модула, малко повече за GPS).

GPS приемник

Първо трябва да разберете как да работите с GPS. Избраният модул е ​​един от най-евтините и опростени. Производителят обаче обещава батерия за запазване на сателитни данни. Според листа с данни, студеният старт трябва да отнеме 36 секунди, но в моите условия (10-ти етаж от перваза на прозореца, без сгради наблизо) отне до 20 минути. Следващият старт обаче е вече 2 минути.

Важен параметър на устройствата, свързани към Arduino, е консумацията на енергия. Ако претоварите преобразувателя Arduino, той може да изгори. За използвания приемник максималната консумация на енергия е 45mA при 3,3v. Защо спецификацията трябва да посочва сила на тока при напрежение, различно от необходимото (5V), за мен е загадка. Преобразувателят Arduino обаче ще издържи 45 mA.

Връзка
GPS не се управлява, въпреки че има RX пин. С каква цел не е известно. Основното, което можете да правите с този приемник, е да четете данни през NMEA протокола от TX щифта. Нива - 5V, само за Arduino, скорост - 9600 бода. Свързвам VIN към VCC на arduino, GND към GND, TX към RX на съответния сериен номер. Прочетох данните първо ръчно, след това с помощта на библиотеката TinyGPS. Изненадващо всичко се чете. След като преминах към Uno, трябваше да използвам SoftwareSerial и тогава започнаха проблемите - някои от символите на съобщението бяха изгубени. Това не е много критично, тъй като TinyGPS прекъсва невалидните съобщения, но е доста неприятно: можете да забравите за честотата от 1Hz.

Кратка бележка относно SoftwareSerial: няма хардуерни портове на Uno (освен този, свързан към USB Serial), така че трябва да използвате софтуер. Така че може да получава данни само на щифт, на който платката поддържа прекъсвания. В случая на Uno това са 2 и 3. Освен това само един такъв порт може да получава данни наведнъж.

Ето как изглежда "тестовият стенд".

GSM приемник/предавател


Сега идва по-интересната част. GSM модул - SIM900. Поддържа GSM и GPRS. Не се поддържат нито EDGE, нито особено 3G. За предаване на координатни данни това вероятно е добре - няма да има забавяния или проблеми при превключване между режими, плюс GPRS вече е достъпен почти навсякъде. За някои по-сложни приложения обаче това може да не е достатъчно.

Връзка
Модулът се управлява и през серийния порт, със същото ниво - 5V. И тук ще ни трябват както RX, така и TX. Модулът е щит, тоест той е инсталиран на Arduino. Освен това той е съвместим както с mega, така и с uno. Скоростта по подразбиране е 115200.

Сглобяваме го на Mega и тук ни очаква първата неприятна изненада: TX пинът на модула попада на 7-ия пин на Mega. Прекъсванията не са налични на 7-ия пин на мегата, което означава, че ще трябва да свържете 7-ия пин, да речем, към 6-ия пин, на който са възможни прекъсвания. Така ще загубим един щифт на Arduino. Е, за мега не е много страшно - в крайна сметка има достатъчно щифтове. Но при Uno това вече е по-сложно (напомням ви, че има само 2 пина, които поддържат прекъсвания - 2 и 3). Като решение на този проблем можем да предложим да не инсталирате модула на Arduino, а да го свържете с кабели. След това можете да използвате Serial1.

След свързване се опитваме да „говорим“ с модула (не забравяйте да го включите). Избираме скоростта на порта - 115200, като е добре всички вградени серийни портове (4 на mega, 1 на uno) и всички софтуерни портове да работят на еднаква скорост. По този начин можете да постигнете по-стабилен трансфер на данни. Не знам защо, но мога да предполагам.

И така, ние пишем примитивен код за препращане на данни между серийни портове, изпращаме Atz и получаваме мълчание в отговор. Какво стана? А, малки и малки букви. ATZ, добре сме. Ура, модулът ни чува. Трябва ли да ни се обадите от любопитство? ATD +7499... Стационарният телефон звъни, от arduino излиза дим, лаптопът се изключва. Конверторът Arduino изгоря. Беше лоша идея да го захранваш с 19 волта, въпреки че пише, че може да работи от 6 до 20V, препоръчва се 7-12V. В листа с данни за GSM модула не се казва никъде за консумация на енергия при натоварване. Е, Мега отива в склада за резервни части. Със затаен дъх включвам лаптопа, който получи +19V по +5V линия от USB. Работи и дори USB-то не е изгоряло. Благодарим на Lenovo, че ни защити.

След като изгоря преобразувателя, гледах за консумация на ток. И така, пик - 2А, типичен - 0,5А. Това очевидно надхвърля възможностите на преобразувателя Arduino. Изисква отделна храна.

Програмиране
Модулът предоставя широки възможности за пренос на данни. Започвайки от гласови повиквания и SMS и завършвайки със самия GPRS. Освен това, за последното е възможно да се изпълни HTTP заявка с помощта на AT команди. Ще трябва да изпратите няколко, но си заслужава: всъщност не искате да създавате заявка ръчно. Има няколко нюанса при отваряне на канал за предаване на данни чрез GPRS - помните ли класическия AT+CGDCONT=1, “IP”, “apn”? И така, тук е необходимо същото, но малко по-хитро.

За да получите страница на определен URL адрес, трябва да изпратите следните команди:
AT+SAPBR=1,1 //Отворен оператор (Carrier) AT+SAPBR=3,1,"CONTYPE","GPRS" //тип връзка - GPRS AT+SAPBR=3,1,"APN","интернет" //APN, за Megafon - интернет AT+HTTPINIT //Инициализиране на HTTP AT+HTTPPARA="CID",1 //Идентификатор на оператора за използване. AT+HTTPPARA="URL","http://www.example.com/GpsTracking/record.php?Lat=%ld&Lng=%ld" //Действителният URL адрес след sprintf с координати AT+HTTPACTION=0 // Изискване на данни чрез метода GET //изчакване на отговор AT+HTTPTERM //спиране на HTTP

В резултат на това, ако има връзка, ще получим отговор от сървъра. Тоест всъщност вече знаем как да изпратим координатни данни, ако сървърът ги получи чрез GET.

Хранене
Тъй като захранването на GSM модула от преобразувател Arduino, както разбрах, е лоша идея, беше решено да се купи преобразувател 12v->5v, 3A от същия ebay. Модулът обаче не харесва 5V захранване. Да отидем на хак: свържете 5V към щифта, от който 5V идва от arduino. Тогава вграденият преобразувател на модула (много по-мощен от преобразувателя Arduino, MIC 29302WU) ще направи от 5V това, от което се нуждае модулът.

сървър

Сървърът написа примитивен - съхраняване на координати и рисуване на Yandex.maps. В бъдеще е възможно да се добавят различни функции, включително поддръжка за много потребители, състояние „въоръжен/невъоръжен“, състоянието на системите на превозното средство (запалване, фарове и т.н.) и евентуално дори контрол на системите на превозното средство. Разбира се, с подходяща поддръжка на тракера, който плавно се превръща в пълноценна алармена система.

Полеви тестове

Ето как изглежда сглобеното устройство без калъфа:

След инсталиране на захранващия преобразувател и поставянето му в кутията от мъртъв DSL модем, системата изглежда така:

Запоих проводниците и премахнах няколко контакта от блоковете на Arduino. Те изглеждат така:

Свързах 12V в колата, карах из Москва и получих пистата:


Точките на пистата са доста далеч една от друга. Причината е, че изпращането на данни през GPRS отнема сравнително дълго време, а през това време координатите не се четат. Това очевидно е програмна грешка. Той се третира, първо, чрез незабавно изпращане на пакет с координати във времето и второ, чрез асинхронна работа с GPRS модула.

Времето за търсене на сателити на пътническата седалка на автомобил е няколко минути.

заключения

Създаването на GPS тракер на Arduino със собствените си ръце е възможно, макар и не тривиална задача. Основният въпрос сега е как да скриете устройството в колата, така че да не е изложено на вредни фактори (вода, температура), да не е покрито с метал (GPS и GPRS ще бъдат екранирани) и да не е особено забележимо. Засега просто лежи в купето и се свързва към гнездото на запалката.

Е, ние също трябва да коригираме кода за по-плавна следа, въпреки че тракерът вече изпълнява основната задача.

Използвани устройства

  • Arduino Mega 2560
  • Ардуино Уно
  • GPS SkyLab SKM53
  • SIM900 базиран GSM/GPRS щит
  • DC-DC 12v->5v 3A преобразувател

След няколко експеримента с Arduino, реших да направя прост и не много скъп GPS тракер с координати, изпратени чрез GPRS към сървъра.
Използван Arduino Mega 2560 (Arduino Uno), SIM900 - GSM/GPRS модул (за изпращане на информация към сървъра), GPS приемник SKM53 GPS.

Всичко беше закупено на ebay.com, за общо около 1500 рубли (около 500 рубли за arduino, малко по-малко за GSM модула, малко повече за GPS).

GPS приемник

Първо трябва да разберете как да работите с GPS. Избраният модул е ​​един от най-евтините и опростени. Производителят обаче обещава батерия за запазване на сателитни данни. Според листа с данни, студеният старт трябва да отнеме 36 секунди, но в моите условия (10-ти етаж от перваза на прозореца, без сгради наблизо) отне до 20 минути. Следващият старт обаче е вече 2 минути.

Важен параметър на устройствата, свързани към Arduino, е консумацията на енергия. Ако претоварите преобразувателя Arduino, той може да изгори. За използвания приемник максималната консумация на енергия е 45mA при 3,3v. Защо спецификацията трябва да посочва сила на тока при напрежение, различно от необходимото (5V), за мен е загадка. Преобразувателят Arduino обаче ще издържи 45 mA.

Връзка

GPS не се управлява, въпреки че има RX пин. С каква цел не е известно. Основното, което можете да правите с този приемник, е да четете данни през NMEA протокола от TX щифта. Нива - 5V, само за Arduino, скорост - 9600 бода. Свързвам VIN към VCC на arduino, GND към GND, TX към RX на съответния сериен номер. Прочетох данните първо ръчно, след това с помощта на библиотеката TinyGPS. Изненадващо всичко се чете. След като преминах към Uno, трябваше да използвам SoftwareSerial и тогава започнаха проблеми - някои от символите на съобщението бяха изгубени. Това не е много критично, тъй като TinyGPS прекъсва невалидните съобщения, но е доста неприятно: можете да забравите за честотата от 1Hz.

Кратка бележка за SoftwareSerial: няма хардуерни портове на Uno, така че трябва да използвате софтуерния. Така че може да получава данни само на щифт, на който платката поддържа прекъсвания. В случая на Uno това са 2 и 3. Освен това само един такъв порт може да получава данни наведнъж.

Ето как изглежда "тестовият стенд".


GSM приемник/предавател


Сега идва по-интересната част. GSM модул - SIM900. Поддържа GSM и GPRS. Не се поддържат нито EDGE, нито особено 3G. За предаване на координатни данни това вероятно е добре - няма да има забавяния или проблеми при превключване между режими, плюс GPRS вече е достъпен почти навсякъде. За някои по-сложни приложения обаче това може да не е достатъчно.

Връзка

Модулът се управлява и през серийния порт, със същото ниво - 5V. И тук ще ни трябват както RX, така и TX. Модулът е щит, тоест той е инсталиран на Arduino. Освен това той е съвместим както с mega, така и с uno. Скоростта по подразбиране е 115200.

Сглобяваме го на Mega и тук ни очаква първата неприятна изненада: TX пинът на модула попада на 7-ия пин на Mega. Прекъсванията не са налични на 7-ия пин на мегата, което означава, че ще трябва да свържете 7-ия пин, да речем, към 6-ия пин, на който са възможни прекъсвания. Така ще загубим един щифт на Arduino. Е, за мега не е много страшно - в крайна сметка има достатъчно щифтове. Но при Uno това вече е по-сложно (напомням ви, че има само 2 пина, които поддържат прекъсвания - 2 и 3). Като решение на този проблем можем да предложим да не инсталирате модула на Arduino, а да го свържете с кабели. След това можете да използвате Serial1.

След свързване се опитваме да „говорим“ с модула (не забравяйте да го включите). Избираме скоростта на порта - 115200, като е добре всички вградени серийни портове (4 на mega, 1 на uno) и всички софтуерни портове да работят на еднаква скорост. По този начин можете да постигнете по-стабилен трансфер на данни. Не знам защо, но мога да предполагам.

И така, ние пишем примитивен код за препращане на данни между серийни портове, изпращаме Atz и получаваме мълчание в отговор. Какво стана? А, малки и малки букви. ATZ, добре сме. Ура, модулът ни чува. Трябва ли да ни се обадите от любопитство? ATD +7499... Стационарният телефон звъни, от arduino излиза дим, лаптопът се изключва. Конверторът Arduino изгоря. Беше лоша идея да го захранваш с 19 волта, въпреки че пише, че може да работи от 6 до 20V, препоръчва се 7-12V. В листа с данни за GSM модула не се казва никъде за консумация на енергия при натоварване. Е, Мега отива в склада за резервни части. Със затаен дъх включвам лаптопа, който получи +19V по +5V линия от USB. Работи и дори USB-то не е изгоряло. Благодарим на Lenovo, че ни защити.


След като изгоря преобразувателя, гледах за консумация на ток. И така, пик - 2А, типичен - 0,5А. Това очевидно надхвърля възможностите на преобразувателя Arduino. Изисква отделна храна.

Програмиране

Модулът предоставя широки възможности за пренос на данни. Започвайки от гласови повиквания и SMS и завършвайки със самия GPRS. Освен това, за последното е възможно да се изпълни HTTP заявка с помощта на AT команди. Ще трябва да изпратите няколко, но си заслужава: всъщност не искате да създавате заявка ръчно. Има няколко нюанса при отваряне на канал за предаване на данни чрез GPRS - помните ли класическия AT+CGDCONT=1, “IP”, “apn”? И така, тук е необходимо същото, но малко по-хитро.

За да получите страница на определен URL адрес, трябва да изпратите следните команди:

AT+SAPBR=1,1 //Отворен оператор (Carrier) AT+SAPBR=3,1,"CONTYPE","GPRS" //тип връзка - GPRS AT+SAPBR=3,1,"APN","интернет" //APN, за Megafon - интернет AT+HTTPINIT //Инициализиране на HTTP AT+HTTPPARA="CID",1 //Идентификатор на оператора за използване. AT+HTTPPARA="URL","http://www.example.com/GpsTracking/record.php?Lat=%ld&Lng=%ld" // Действителният URL, след sprintf с координати AT+HTTPACTION=0 // Изискване на данни чрез метода GET //изчакване на отговор AT+HTTPTERM //спиране на HTTP

В резултат на това, ако има връзка, ще получим отговор от сървъра. Тоест всъщност вече знаем как да изпратим координатни данни, ако сървърът ги получи чрез GET.

Хранене

Тъй като захранването на GSM модула от преобразувател Arduino, както разбрах, е лоша идея, беше решено да се купи преобразувател 12v->5v, 3A от същия ebay. Модулът обаче не харесва 5V захранване. Нека направим хак: свържете 5V към щифта, от който 5V идва от Arduino. Тогава вграденият преобразувател на модула (много по-мощен от преобразувателя Arduino, MIC 29302WU) ще направи от 5V това, от което се нуждае модулът.

сървър

Сървърът написа примитивен - съхраняване на координати и рисуване на Yandex.maps. В бъдеще е възможно да се добавят различни функции, включително поддръжка за много потребители, състояние „въоръжен/невъоръжен“, състоянието на системите на превозното средство (запалване, фарове и т.н.) и евентуално дори контрол на системите на превозното средство. Разбира се, с подходяща поддръжка на тракера, който плавно се превръща в пълноценна алармена система.

Полеви тестове

Ето как изглежда сглобеното устройство без калъфа:


След инсталиране на захранващия преобразувател и поставянето му в кутията от мъртъв DSL модем, системата изглежда така:

Запоих проводниците и премахнах няколко контакта от блоковете на Arduino. Те изглеждат така:

Свързах 12V в колата, карах из Москва и получих пистата:


Трасето се оказва скъсано. Причината е, че изпращането на данни през GPRS отнема сравнително дълго време, а през това време координатите не се четат. Това очевидно е програмна грешка. Той се третира, първо, чрез незабавно изпращане на пакет с координати във времето и второ, чрез асинхронна работа с GPRS модула.

Персонални GPS предаватели

Днес напредъкът върви с такова темпо, че устройствата, които преди бяха обемисти, скъпи и високоспециализирани, бързо губят размер, тегло и цена, но придобиват много нови функции.

Ето как устройствата, базирани на GPS технология, достигнаха до джобните джаджи и се настаниха здраво там, давайки на хората нови възможности. Особено си струва да се подчертаят отделните GPS предаватели.

По същество това са същите GPS тракери, предназначени само за използване не на превозно средство, а от човек в ежедневието.

В зависимост от модела в един корпус могат да се комбинират няколко различни устройства. В най-простата си форма това е просто малка кутия без дисплей, която ви позволява да контролирате движенията на деца, животни или други предмети, на който е фиксиран.

Вътре има GPS модул, който определя координатите на земята, GSM/GPRS модул, който предава информация и получава команди за управление, както и източник на захранване, който осигурява автономна работа за дълго време.

Функционалност на GPS предавателите

С увеличаването на функционалността се появяват следните възможности на устройството:


Опции за GPS предаватели

В зависимост от конфигурацията корпусите на трансмитера може да се различават значително. Предлагат се различни модели под формата на мобилни телефони, класически навигатори или дори ръчни часовници.

Цветният дизайн на специалните версии и полезните допълнения позволяват на децата да се отнасят към тези устройства не като към „родителски шпиони“, а като към модерни и практични джаджи.

Като предимство си струва да се посочи фактът, че много версии на устройството работят добре без абонаментни такси за услугите на специализирани оператори, а цялата необходима информация се изпраща на клиента директно чрез интернет или SMS съобщения, което позволява значителни спестявания относно поддръжката на такова оборудване.

Статии за GPS тракери

В тази статия ще покажа как да използвате gsm модул с arduino, като използвам sim800L като пример. Същите инструкции са напълно подходящи за използване на всякакви други gsm модули, например sim900 и т.н., тъй като всички модули работят приблизително по същия начин - това е обменът на AT команди през порта.

Ще покажа използването на модула с arduino на примера на SMS реле, което може да се използва за дистанционно управление на устройството чрез SMS команди. Това може да се използва заедно с автомобилни аларми и др.

Модулът е свързан към Arduino чрез UART интерфейс на софтуерен сериен порт, работещ на 2 и 3 цифрови пина на Arduino nano.

Работа с Arduino с GSM модули

За захранване на модула е необходимо напрежение в диапазона от 3.6V до 4.2V, което означава, че ще трябва да използвате допълнителен стабилизатор на напрежението, тъй като Arduino има инсталиран стабилизатор 3.3 V, който не е подходящ за захранване на модула , втората причина за инсталиране на допълнителен стабилизатор е, че GSM модулът е сериозно натоварване, тъй като има слаб предавател, който осигурява стабилна комуникация с клетъчната станция. Захранването за Arduino nano се подава към VIN щифта - това е стабилизатор, вграден в Arduino, който гарантира, че модулът работи в широк диапазон на напрежение (6-10V). Релейният модул се свързва според зададения програмен текст към пин 10 на Arduino nano и може лесно да се смени с всеки друг, който работи като цифров изход.

Работи по следния начин: инсталираме SIM карта в GSM модула, включваме захранването и изпращаме SMS с текст „1“ на номера на SIM картата, за да включим нашето реле, за да го изключим, изпращаме SMS с текст „0“.

#включи
SoftwareSerial gprsSerial(2, 3); // задайте щифтове 2 и 3 за софтуерен порт
int LedPin = 10; // за реле

void setup()
{
gprsSerial.begin(4800);
pinMode(LedPin, ИЗХОД);

// настройка на получаване на съобщение

gprsSerial.print("AT+CMGF=1\r");
gprsSerial.print("AT+IFC=1, 1\r");
забавяне (500);
gprsSerial.print("AT+CPBS=\"SM\"\r");
забавяне (500); // забавяне за обработка на команда
gprsSerial.print("AT+CNMI=1,2,2,1,0\r");
забавяне (700);
}

Низ currStr = "";
// ако този ред е съобщение, тогава променливата ще приеме стойността True
boolean isStringMessage = false;

void loop()
{
ако (!gprsSerial.available())
връщане;

char currSymb = gprsSerial.read();
if ('\r' == currSymb) (
if (isStringMessage) (
// ако текущият ред е съобщение, тогава...
ако (!currStr.compareTo("1")) (
digitalWrite(LedPin, HIGH);
) иначе ако (!currStr.compareTo("0")) (
digitalWrite(LedPin, LOW);
}
isStringMessage = невярно;
) иначе (
if (currStr.startsWith("+CMT")) (
// ако текущият ред започва с “+CMT”, следващото съобщение
isStringMessage = вярно;
}
}
currStr = "";
) иначе ако (‘\n’ != currSymb) (
currStr += String(currSymb);
}
}

Видео версия на статията:

Етикети: #Arduino, #SIM800L

Вашият знак:

Продукти, използвани в тази статия:

← GPS регистратор на arduino | Управление на реле през COM порт →

GSM скенер на RTL-SDR

| У дома| английски | Развитие | ЧЗВ |

Основни характеристики на скенера

GSM скенерът сканира GSM каналите надолу по веригата и показва информация за нивото на сигнала и дали каналът принадлежи на един от трите основни клетъчни оператора MTS, Beeline и Megafon. Въз основа на резултатите от работата си скенерът ви позволява да запазите списък с идентификатори на MCC, MNC, LAC и CI базови станции за всички сканирани канали.
GSM скенер може да се използва за оценка на нивото на GSM сигнал, сравняване на качеството на сигнала на различни оператори, оценка на радио покритието, при вземане на решение за инсталиране на усилватели на клетъчния сигнал и настройка на техните параметри, за образователни цели и др.
Скенерът работи под Windows и използва прост и евтин приемник - RTL-SDR. Можете да прочетете за RTL-SDR на:
RTL-SDR (RTL2832U) и софтуерно дефинирани радио новини и проекти,
RTL-SDR – OsmoSDR,
RTL-SDR на руски.
Параметрите RTL-SDR определят основните характеристики на скенера. Разбира се, GSM скенерът не е заместител на нормалното измервателно оборудване.
Скенерът се разпространява безплатно, без никакви ограничения за използване.
Текущата версия поддържа обхвата GSM 900 и не поддържа GSM 1800. Това се определя от факта, че работната честота на RTL-SDR с тунер R820T е ограничена до 1760 MHz. Има надежда, че използването на експерименталния драйвер RTL-SDR ще позволи работа в поне част от диапазона 1800 MHz.

Стартиране на скенера

Последната версия на скенера може да бъде изтеглена от тази връзка. Просто разархивирайте файла на удобно място и стартирайте gsmscan.exe.
Предишни версии на скенера, връзка към хранилището с източници и друга информация, свързана с разработката, се намират на страницата за разработка.
Скенерът изисква инсталиране на RTL-SDR драйвери; ако те все още не са инсталирани, това може удобно да се направи с помощта на програмата Zadig, описваща процедурата за инсталиране.

Използване на скенера

По-долу е изглед на прозореца на програмата на скенера:

Хоризонталната ос показва номера на GSM канала под формата на ARFCN или в MHz, а вертикалната ос показва нивото на сигнала в dBm. Височината на линията показва силата на сигнала.

GSM модул NEOWAY M590 комуникация с Arduino

Ако BS идентификаторите са декодирани успешно и отговарят на идентификаторите на трите основни телекомуникационни оператора, линиите се оцветяват в съответните цветове.
Падащите списъци в горната част на екрана ви позволяват да изберете SDR приемника, ако са свързани няколко, работния обхват GSM 900 или GSM 1800 и мерните единици по хоризонталната ос ARFCN или MHz.
Бутоните ви позволяват да запазите отчет за работата на скенера под формата на списък с декодирани базови станции, да изчистите резултатите от декодирането на BS и да получите информация за програмата.

Принципи и особености на работа.

По време на работа програмата сканира работния честотен диапазон със стъпка 2,0 MHz (10 GSM канала) и дигитализира сигнала с честота на дискретизация 2,4 MHz. Процесът на сканиране се състои от бързо преминаване през целия диапазон за измерване на силата на сигнала и бавно преминаване за декодиране на BS идентификаторите.

Една стъпка на декодиране се извършва след преминаване на целия диапазон за измерване на мощността. По този начин в диапазона GSM 900 нивото на сигнала се актуализира приблизително веднъж на всеки 2 s, а пълното декодиране отнема около 1 минута.
Поради лошото качество на сигнала, получен от RTL-SDR, вероятността за правилно декодиране на системната информация (SI) на BS канала за управление на излъчване (BCCH) не е висока. Флуктуациите в нивото на сигнала в резултат на многопътно разпространение също намаляват вероятността от декодиране на системна информация. Поради тези причини, за да се получат BS идентификатори, е необходимо скенерът да натрупа информация за период от около 10 минути. Но дори и в този случай не всички канали осигуряват достатъчно ниво и качество на сигнала на дадено място за декодиране дори от най-идеалния приемник. Освен това не всички GSM канали се използват за работа по стандарта GSM, както се вижда на фигурата по-горе, канали 975 - 1000 са заети от Megafon за работа по стандарта UMTS.
По време на работа скенерът добавя системна информация за нови декодирани канали към общия масив от информация за каналите. Но информацията за предварително декодирани канали не се изтрива, когато системната информация не е декодирана на тази стъпка, и остава в масива. За да изчистите тази информация, използвайте бутона за изчистване на резултатите от BS декодирането.
Когато щракнете върху бутона за запазване на отчета, натрупаните резултати се записват в текстов файл с име, съставено от името на програмата, датата и часа на записване на данните. По-долу е даден пример за част от отчетния файл:
Скенерът е проектиран да работи под Windows 7, 8.1 и 10. Работата е тествана с три копия на RTL-SDR с тунер R820T, други видове тунери не са тествани.
Специална версия на програмата е компилирана за работа под Windows XP, работи няколко пъти по-бавно от стандартната версия.

развитие.

Програмата за скенер се доставя такава, каквато е, без никакви гаранции или отговорност. Ако имате разумни идеи как да разширите функционалността или да подобрите работата на скенера, ние сме готови да обсъдим възможността за тяхното внедряване.
Можете да участвате в разработката на скенера; посетете страницата за разработка.
Предвижда се по-нататъшно развитие на GSM скенера, евентуално с Ваше участие.