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

    Мова програмування: Arduino (C++)

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

Що потрібно

Як зібрати

gps-tracker.ino // бібліотека для роботи з пристроями SPI#include // бібліотека для роботи з карткою SD#include // бібліотека для роботи з пристроєм GPS#include // Створюємо об'єкт класу GPS і передаємо в нього об'єкт Serial1 GPS gps(Serial1); // пін світлодіода#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 time [MAX_SIZE_MASS]; // стан запису bool stateRec = false; // запам'ятовує поточний час long startMillis = millis(); void setup() ( // відкриваємо послідовний порт для моніторингу дій у програмі Serial.begin (115200); // чекаємо, доки не відкриється монітор послідовного порту // для того, щоб відстежити всі події у програмі// while (!Serial) ( // ) Serial.print ("Serial init OK \r \n ") ; // відкриваємо Serial-з'єднання з GPS-модулем Serial1.begin (115200); // встановлюємо світлодіод у режим виходу pinMode(LED_PIN, OUTPUT); // встановлюємо кнопку режим входу pinMode(BUTTON_PIN, INPUT_PULLUP); // виводимо інформацію про ініціалізацію в Serial-порт Serial.println ("Initializing SD card..."); // ініціалізуємо SD-карту while (! SD.begin (CHIP_SELECT_PIN) ) ( Serial.println ("Card failed, or not present" ) ; delay(1000 ) ; ) // виводимо інформацію у Serial-порт Serial.println ("Card initialized"); // Створюємо об'єкт dataFile класу File для роботи з файлами File dataFile = SD.open ("dataGPS.csv", FILE_WRITE) ; // якщо файл існує if (dataFile) ( // записуємо назву майбутніх даних на картку пам'яті dataFile.println ("Time, Coordinates, Speed"); // закриваємо файл dataFile.close(); Serial.println ("Save OK"); ) else ( Serial.println ( " Error opening test.csv " ) ; ) ) void loop() ( // Фіксуємо натискання кнопки if (! digitalRead(BUTTON_PIN) ) ( // змінюємо стан "запис" / "не запис" на карту пам'яті stateRec = ! stateRec; // Змінюємо стан світлодіода індикації digitalWrite(LED_PIN, stateRec); ) // якщо прийшли дані з gps-модуля if (gps.available () ) ( // зчитуємо дані та парсим gps.readParsing(); // перевіряємо стан GPS-модуля switch (gps.getState()) ( // все OK case GPS_OK: Serial.println ("GPS is OK")); // якщо пройшов заданий інтервал часу if (millis() - startMillis > INTERVAL && stateRec) ( // Зберігаємо дані на карту пам'яті saveSD() ; // запам'ятовуємо поточний час startMillis = millis(); ) break ; // помилка даних case GPS_ERROR_DATA: Serial.println ("GPS error data"); break; // ні з'єднання з супутниками case GPS_ERROR_SAT: Serial.println ( "GPS no connect to satellites"); break; ) ) ) // функція сохареніе даних на картку пам'яті void saveSD() (File dataFile = SD.open ("dataGPS.csv", FILE_WRITE) ; // якщо файл існує та відкрився if (dataFile) ( // зчитує поточний час gps.getTime (time , MAX_SIZE_MASS) ; // записуємо час на картку пам'яті dataFile.print (" \" " ); dataFile.print (time); 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 ("km/h"); dataFile.close(); Serial.println ("Save OK"); ) else ( Serial.println ( " Error opening 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.3
MISO до висновку 12
MOSI до висновку 11
SCK до висновку 13
CS до висновку 10

Підключення висновків GPS-трекера:


GND до GND
Висновок 2 (Arduino) висновку 44 (GPS)

Харчування краще взяти з GPS-трекера (3.7). Оскільки його акумулятор має малу енергоємність, краще підключити зовнішній акумулятор, наприклад, від мобільного телефону на 1400 мАч, як показано на одному з малюнків вище.


Тепер потрібно завантажити бібліотеку TinyGPS, також знадобиться бібліотека для роботи з SD-картами та бібліотека SoftwareSerial, яку можна знайти в Arduino\libraries.



У наведеному нижче шматку коду можна вибирати, які дані записувати:


void gpsdump(TinyGPS &gps) ( float flat, flon; // Lat, Long float fkmph = gps.f_speed_kmph(); // Speed ​​in km/hr float falt = gps.f_altitude(); // +/- altitude in meters (seem to be elevation, in fact) float fc = gps.f_course(); // Course in degrees unsigned long age; (flat, 4); Serial.print(" lon "); .print(fc); Serial.print(" elevation "); /////////////////////////////////////////////////// ////////////////

Завантажте скетч в Arduino, вставте SD-карту, відформатовану відповідно до FAT32 і має докорінно файл log.txt. Запустіть послідовний монітор, і ви побачите дані, які записуватимуться на SD-карту.



Після кількох експериментів з Ардуін вирішив зробити простенький і не дуже дорогий GPS-tracker з відправкою координат по GPRS на сервер.
Використовується Arduino Mega 2560 (Arduino Uno), SIM900 - модуль GSM/GPRS (для відправки інформації на сервер), GPS приймач SKM53 GPS.

Все закуплено на ebay.com, у сумі близько 1500 р (приблизно 500р ардуїну, трохи менше – GSM модуль, трохи більше – GPS).

GPS приймач

Спочатку потрібно розібратися з роботою з GPS. Вибраний модуль - один із найдешевших і найпростіших. Тим не менш, виробник обіцяє наявність батарейки для збереження даних про супутники. За даташитом, холодний старт повинен займати 36 секунд, проте, в моїх умовах (10 поверх з підвіконня, впритул будинків немає) це зайняло аж 20 хвилин. Наступний старт, проте, вже 2 хвилини.

Важливий параметр пристроїв, що підключаються до ардуїни, - енергоспоживання. Якщо перевантажити перетворювач ардуїни, вона може згоріти. Для приймача максимальне енергоспоживання - 45mA @ 3.3v. Навіщо в специфікації вказувати силу струму на напрузі, відмінному від необхідного (5V), для мене загадка. Тим не менш, 45 mA перетворювач ардуїни витримає.

Підключення
GPS не керований, хоч і має RX пін. Для чого – невідомо. Основне, що можна робити з цим приймачем - читати дані протоколу NMEA з TX піна. Рівні - 5V, саме для ардуїни, швидкість - 9600 бод. Підключаю VIN у VCC ардуїни, GND у GND, TX у RX відповідного serial. Читаю дані спочатку вручну, потім із використанням бібліотеки TinyGPS. На диво, все читається. Після переходу на Uno довелося використовувати SoftwareSerial, і тут почалися проблеми - губиться частина символів повідомлення. Це не дуже критично, тому що TinyGPS відсікає невалідні повідомлення, але досить неприємно: про частоту 1Гц можна забути.

Невелике зауваження щодо SoftwareSerial: на Uno немає хардверних портів (крім з'єднаного з USB Serial), тому доводиться використовувати програмний. Так от він може приймати дані тільки на піні, на якому плата підтримує переривання. У випадку Uno це 2 і 3. Мало того, дані одночасно може отримувати лише один порт.

Ось так виглядає тестовий стенд.

GSM приймач/передавач


Тепер починається цікавіша частина. GSM модуль – SIM900. Він підтримує GSM та GPRS. Ні EDGE, ні тим більше 3G, не підтримуються. Для передачі даних про координати це, мабуть, добре – не буде затримок і проблем при перемиканні між режимами, плюс GPRS зараз є майже скрізь. Проте, для якихось складніших додатків цього може не вистачити.

Підключення
Модуль управляється також за послідовним портом, з тим самим рівнем - 5V. І тут нам знадобляться і RX, і TX. Модуль - shield, тобто він встановлюється на ардуїну. Причому сумісний як із mega, так і з uno. Швидкість за замовчуванням – 115200.

Збираємо на Mega, і тут на нас чекає перший неприємний сюрприз: TX пін модуля потрапляє на 7й пін мегі. На 7м піну меги недоступні переривання, а отже, доведеться з'єднати 7й пін, скажімо, з 6м, на якому можливі переривання. Таким чином, витратимо один пін ардуїни марно. Ну, для меги це не дуже страшно – таки пінів вистачає. А ось для Uno це вже складніше (нагадаю, там лише 2 піна, що підтримують переривання – 2 та 3). Як вирішення цієї проблеми можна запропонувати не встановлювати модуль на ардуїну, а з'єднати його проводами. Тоді можна використовувати Serial1.

Після підключення намагаємося «поговорити» з модулем (не забуваємо його увімкнути). Вибираємо швидкість порту – 115200, при цьому добре, якщо всі вбудовані послідовні порти (4 на мезі, 1 на uno) та всі програмні працюють на одній швидкості. Так можна досягти більш стійкої передачі даних. Чому - не знаю, хоч і здогадуюсь.

Отже, пишемо примітивний код для прокидання даних між послідовними портами, відправляємо atz, у відповідь тиша. Що таке? А, case sensitive. ATZ отримуємо OK. Ура, модуль чує нас. А чи не зателефонувати нам заради інтересу? ATD +7499 ... Телефонує міський телефон, з ардуїни йде димок, ноутбук вирубується. Згорів перетворювач Arduino. Було поганою ідеєю годувати його 19 вольтами, хоча написано, що він може працювати від 6 до 20V, рекомендують 7-12V. У даташіті на GSM модуль ніде не сказано про споживану потужність під навантаженням. Ну що ж, Mega вирушає до складу запчастин. Із завмиранням серця включаю ноутбук, що отримав +19V по +5V лінії від USB. Працює, і навіть USB не вигоріли. Дякую Lenovo за захист.

Після вигоряння перетворювача я пошукав струм, що споживається. Так ось, піковий – 2А, типовий – 0.5А. Таке не під силу перетворювачу ардуїни. Потрібне окреме харчування.

Програмування
Модуль надає широкі можливості передачі. Починаючи від голосових дзвінків та 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","internet" //APN, для Мегафону - internet AT+HTTPINIT //Ініціалізувати HTTP AT+HTTPPARA="CID",1 //Carrier ID для використання. 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 від ардуїни. Тоді вбудований перетворювач модуля (істотно потужніший за перетворювач ардуїни, MIC 29302WU) зробить з 5V те, що потрібно модулю.

Сервер

Сервер написав примітивний - зберігання координат та малювання на Яндекс.картах. Надалі можливе додавання різних фіч, включаючи підтримку багатьох користувачів, статус «на охороні/не на охороні», стан систем автомобіля (запалювання, фари тощо), можливе навіть керування системами автомобіля. Звичайно, з відповідною підтримкою трекера, що плавно перетворюється на повноважну сигналізацію.

Польові випробування

Ось так виглядає зібраний девайс, без корпусу:

Після встановлення перетворювача живлення та укладання в корпус від дохлого DSL модему система виглядає так:

Припаював дроти, вийняв кілька контактів із колодок ардуїни. Виглядають так:

Підключив 12V в машині, проїхався Москвою, отримав трек:


Крапки треку досить далеко один від одного. Причина в тому, що відправка даних по GPRS займає багато часу, і в цей час координати не зчитуються. Це очевидна помилка програмування. Лікується по-перше, відправкою відразу пачки координат з часом, по-друге, асинхронною роботою з модулем GPRS.

Час пошуку супутників на пасажирському сидінні автомобіля – пара хвилин.

Висновки

Створення GPS трекера на Ардуїно своїми руками можливе, хоча і не є тривіальним завданням. Головне питання зараз - як сховати пристрій у машині так, щоб він не піддавався впливам шкідливих факторів (вода, температура), не було закрито металом (GPS та GPRS екрануватимуться) і не було особливо помітно. Поки що просто лежить в салоні і підключається до гнізда прикурювача.

Ну і ще потрібно поправити код для плавнішого треку, хоча основне завдання трекер і так виконує.

Використані пристрої

  • Arduino Mega 2560
  • Arduino Uno
  • GPS SkyLab SKM53
  • SIM900 заснований GSM/GPRS Shield
  • DC-DC 12v->5v 3A converter

Після кількох експериментів з Ардуін вирішив зробити простенький і не дуже дорогий GPS-tracker з відправкою координат по GPRS на сервер.
Використовується Arduino Mega 2560 (Arduino Uno), SIM900 - модуль GSM/GPRS (для відправки інформації на сервер), GPS приймач SKM53 GPS.

Все закуплено на ebay.com, у сумі близько 1500 р (приблизно 500р ардуїну, трохи менше – GSM модуль, трохи більше – GPS).

GPS приймач

Спочатку потрібно розібратися з роботою з GPS. Вибраний модуль - один із найдешевших і найпростіших. Тим не менш, виробник обіцяє наявність батарейки для збереження даних про супутники. За даташитом, холодний старт повинен займати 36 секунд, проте, в моїх умовах (10 поверх з підвіконня, впритул будинків немає) це зайняло аж 20 хвилин. Наступний старт, проте, вже 2 хвилини.

Важливий параметр пристроїв, що підключаються до ардуїни, - енергоспоживання. Якщо перевантажити перетворювач ардуїни, вона може згоріти. Для приймача максимальне енергоспоживання - 45mA @ 3.3v. Навіщо в специфікації вказувати силу струму на напрузі, відмінному від необхідного (5V), для мене загадка. Тим не менш, 45 mA перетворювач ардуїни витримає.

Підключення

GPS не керований, хоч і має RX пін. Для чого – невідомо. Основне, що можна робити з цим приймачем - читати дані протоколу NMEA з TX піна. Рівні - 5V, саме для ардуїни, швидкість - 9600 бод. Підключаю VIN у VCC ардуїни, GND у GND, TX у RX відповідного serial. Читаю дані спочатку вручну, потім із використанням бібліотеки TinyGPS. На диво, все читається. Після переходу на Uno довелося використовувати SoftwareSerial, і тут почалися проблеми - губиться частина символів повідомлення. Це не дуже критично, тому що TinyGPS відсікає невалідні повідомлення, але досить неприємно: про частоту 1Гц можна забути.

Невелике зауваження щодо SoftwareSerial: на Uno немає хардверних портів, тому доводиться використовувати програмний. Так от він може приймати дані тільки на піні, на якому плата підтримує переривання. У випадку Uno це 2 і 3. Мало того, дані одночасно може отримувати лише один порт.

Ось так виглядає тестовий стенд.


GSM приймач/передавач


Тепер починається цікавіша частина. GSM модуль – SIM900. Він підтримує GSM та GPRS. Ні EDGE, ні тим більше 3G, не підтримуються. Для передачі даних про координати це, мабуть, добре – не буде затримок і проблем при перемиканні між режимами, плюс GPRS зараз є майже скрізь. Проте, для якихось складніших додатків цього може не вистачити.

Підключення

Модуль управляється також за послідовним портом, з тим самим рівнем - 5V. І тут нам знадобляться і RX, і TX. Модуль - shield, тобто він встановлюється на ардуїну. Причому сумісний як із mega, так і з uno. Швидкість за замовчуванням – 115200.

Збираємо на Mega, і тут на нас чекає перший неприємний сюрприз: TX пін модуля потрапляє на 7й пін мегі. На 7м піну меги недоступні переривання, а отже, доведеться з'єднати 7й пін, скажімо, з 6м, на якому можливі переривання. Таким чином, витратимо один пін ардуїни марно. Ну, для меги це не дуже страшно – таки пінів вистачає. А ось для Uno це вже складніше (нагадаю, там лише 2 піна, що підтримують переривання – 2 та 3). Як вирішення цієї проблеми можна запропонувати не встановлювати модуль на ардуїну, а з'єднати його проводами. Тоді можна використовувати Serial1.

Після підключення намагаємося «поговорити» з модулем (не забуваємо його увімкнути). Вибираємо швидкість порту – 115200, при цьому добре, якщо всі вбудовані послідовні порти (4 на мезі, 1 на uno) та всі програмні працюють на одній швидкості. Так можна досягти більш стійкої передачі даних. Чому - не знаю, хоч і здогадуюсь.

Отже, пишемо примітивний код для прокидання даних між послідовними портами, відправляємо atz, у відповідь тиша. Що таке? А, case sensitive. ATZ отримуємо OK. Ура, модуль чує нас. А чи не зателефонувати нам заради інтересу? ATD +7499 ... Телефонує міський телефон, з ардуїни йде димок, ноутбук вирубується. Згорів перетворювач Arduino. Було поганою ідеєю годувати його 19 вольтами, хоча написано, що він може працювати від 6 до 20V, рекомендують 7-12V. У даташіті на GSM модуль ніде не сказано про споживану потужність під навантаженням. Ну що ж, Mega вирушає до складу запчастин. Із завмиранням серця включаю ноутбук, що отримав +19V по +5V лінії від USB. Працює, і навіть USB не вигоріли. Дякую Lenovo за захист.


Після вигоряння перетворювача я пошукав струм, що споживається. Так ось, піковий – 2А, типовий – 0.5А. Таке не під силу перетворювачу ардуїни. Потрібне окреме харчування.

Програмування

Модуль надає широкі можливості передачі. Починаючи від голосових дзвінків та 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","internet" //APN, для Мегафону - internet AT+HTTPINIT //Ініціалізувати HTTP AT+HTTPPARA="CID",1 //Carrier ID для використання. 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. Однак, модулю не подобається живлення 5в. Ідемо на хак: підключаємо 5в пін, з якого приходить 5в від ардуїни. Тоді вбудований перетворювач модуля (істотно потужніший за перетворювач ардуїни, MIC 29302WU) зробить з 5в те, що потрібно модулю.

Сервер

Сервер написав примітивний - зберігання координат та малювання на Яндекс.картах. Надалі можливе додавання різних фіч, включаючи підтримку багатьох користувачів, статус «на охороні/не на охороні», стан систем автомобіля (запалювання, фари тощо), можливе навіть керування системами автомобіля. Звичайно, з відповідною підтримкою трекера, що плавно перетворюється на повноважну сигналізацію.

Польові випробування

Ось так виглядає зібраний девайс, без корпусу:


Після встановлення перетворювача живлення та укладання в корпус від дохлого DSL модему система виглядає так:

Припаював дроти, вийняв кілька контактів із колодок ардуїни. Виглядають так:

Підключив 12В в машині, проїхався Москвою, отримав трек:


Трек виходить рваним. Причина в тому, що відправка даних по GPRS займає багато часу, і в цей час координати не зчитуються. Це очевидна помилка програмування. Лікується по-перше, відправкою відразу пачки координат з часом, по-друге, асинхронною роботою з модулем GPRS.

Індивідуальні GPS передавачі

Сьогодні прогрес йде такими темпами, що пристрої, які раніше були громіздкими, дорогими та вузькоспеціалізованими, дуже швидко втрачають у розмірах, вазі та ціні, але набувають безліч нових функцій.

Так пристрої, засновані на GPS технологіях, дісталися кишенькових гаджетів і міцно там влаштувалися, даруючи людям нові можливості. Особливо варто виділити індивідуальні GPS передавачі.

По суті, це ті ж GPS-трекери, тільки розраховані на використання не на транспортному засобі, а людиною у повсякденному житті.

Залежно від моделі в одному корпусі можуть бути поєднані кілька різних пристроїв. У найпростішому варіанті це просто не велика коробочка без дисплея, яка дозволяє контролювати переміщення дітей, тварин чи якихось інших об'єктів, на яких закріплено.

Усередині неї розташований GPS модуль, що визначає координати на місцевості, GSM/GPRS модуль, що передає інформацію і приймає керуючі команди, а також джерело живлення, що забезпечує автономну роботу протягом тривалого часу.

Функціональні можливості GPS передавачів

У міру зростання функціональності з'являються такі можливості приладу:


Варіанти виконання GPS передавачів

Залежно від комплектації можуть значно відрізнятися корпуси передавачів. Різні моделі мають виконання у вигляді стільникових телефонів, класичних навігаторів, або навіть наручного годинника.

Барвистий дизайн спеціальних версій та корисні доповнення дозволяють дітям ставитися до даних пристроїв не як до «батьківських шпигунів», а як до модних та практичних гаджетів.

Як перевагу, варто згадати той факт, що багато версій приладу чудово обходяться без абонентської плати за послуги спеціалізованих операторів, а всю необхідну інформацію надсилають клієнту безпосередньо через інтернет або SMS повідомлення, що дозволяє досить вагомо заощадити на утриманні подібного обладнання.

Статті про GPS-трекери

У цій статті я покажу використання gsm модуль спільно з arduino на прикладі sim800L. Ця ж інструкція цілком підійде для використання будь-яких інших модулів gsm, наприклад, sim900 і т.д., тому що всі модулі працюють приблизно по одному і тому ж типу - це обмін АТ-командами через порт.

Використання модуля з arduino я покажу на прикладі SMS-реле, яке можна використовувати для керування пристроєм віддалено за допомогою SMS-команд. Це можна застосовувати разом із автосигналізацією тощо.

Підключається модуль Arduino через UART інтерфейс програмного серійного порту, що працює на 2 і 3 цифрових висновках Arduino nano.

Робота Arduino із GSM модулями

Для живлення модуля потрібна напруга в діапазоні від 3.6В до 4.2В, це означає, що доведеться використовувати додатковий стабілізатор напруги, так в Arduino встановлений стабілізатор на 3.3 вольта, що не підходить для живлення модуля, друга причина встановити додатковий стабілізатор - GSM модуль є серйозною навантаженням, так як у ньому є не слабкий передавач, що забезпечує стабільний зв'язок із стільниковою станцією. Живлення для Arduino nano підводиться до контакту VIN - це вбудований Arduino стабілізатор, що забезпечує роботу модуля в широких діапазонах напруги (6-10В). Модуль реле підключається згідно з наведеним текстом програми, до 10 висновку Arduino nano і легко може бути змінений будь-який інший, що працює як цифровий вихід.

Працює це так: встановлюємо SIM-карту в модуль GSM, включаємо живлення та відправляємо SMS з текстом «1» на номер SIM картки для того щоб включити наше реле, щоб відключити відправляємо SMS з текстом «0».

#include
SoftwareSerial gprsSerial(2, 3); // встановлення контактів 2 та 3 для програмного порту
int LedPin = 10; // для реле

void setup()
{
gprsSerial.begin(4800);
pinMode(LedPin, OUTPUT);

// Налаштування прийому повідомлень

gprsSerial.print(«AT+CMGF=1r»);
gprsSerial.print(«AT+IFC=1, 1r»);
delay(500);
gprsSerial.print(«AT+CPBS=SM»);
delay(500); // Затримка на обробку команди
gprsSerial.print(«AT+CNMI=1,2,2,1,0r»);
delay(700);
}

String currStr = "";
// якщо цей рядок повідомлення, то змінна прийме значення True
boolean isStringMessage = false;

void loop()
{
if (!gprsSerial.available())
return;

char currSymb = gprsSerial.read();
if ( '\r' == currSymb) (
if (isStringMessage) (
// якщо поточний рядок – повідомлення, то…
if (!currStr.compareTo(«1»)) (
digitalWrite(LedPin, HIGH);
) else if (!currStr.compareTo(«0»)) (
digitalWrite(LedPin, LOW);
}
isStringMessage = false;
) else (
if (currStr.startsWith("+CMT")) (
// якщо поточний рядок починається з +CMT, то наступне повідомлення
isStringMessage = true;
}
}
currStr = "";
) else if ('\n' != currSymb) (
currStr += String(currSymb);
}
}

Відео версія статті:

Теги: #Arduino, #SIM800L

Ваша оцінка:

Товари, використані у цій статті:

← GPS-логер на arduino | Управління реле по COM порту →

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

| Головна| English | Розробка | FAQ |

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

GSM сканер виконує сканування низхідних каналів GSM та відображає інформацію про рівень сигналу та приналежності каналу одному з трьох основних операторів стільникового зв'язку МТС, Білайн та Мегафон. За результатами роботи сканер дозволяє зберегти список ідентифікаторів базових станцій 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 МГц. Є надія, що застосування експериментального драйвера RTL-SDR дозволить реалізувати роботу хоча б в частині діапазону 1800 МГц.

Запуск сканера

Останню версію сканера можна завантажити за посиланням. Просто розархівуйте файл у зручне місце та запустіть gsmscan.exe.
Попередні версії сканера, посилання на репозиторій з вихідними джерелами та інша інформація, пов'язана з розробкою, знаходиться на сторінці розробки.
Для роботи сканера потрібне встановлення драйверів RTL-SDR, якщо вони ще не були встановлені, це зручно зробити за допомогою програми Zadig опис процедури встановлення.

Використання сканера

Нижче наведено вигляд вікна програми сканера:

По горизонтальній осі відкладається номер каналу GSM у вигляді ARFCN або МГц, по вертикальній осі рівень сигналу в дБм. Висота лінії показує рівень сигналу.

GSM модуль NEOWAY M590 зв'язок з Ардуїно

Якщо ідентифікатори БС були успішно декодовані і вони відповідають ідентифікаторам трійки основних операторів зв'язку, лінії забарвлюються у відповідні кольори.
Випадні списки у верхній частині екрану дозволяють вибирати SDR приймач, якщо їх підключено кілька, діапазон роботи GSM 900 або GSM 1800 та одиниці вимірювання горизонтальної осі ARFCN або МГц.
Кнопки дозволяють зберегти звіт про роботу сканера у вигляді списку декодованих базових станцій, очистити результати декодування БС та отримати інформацію про програму.

Принципи та особливості роботи.

У процесі роботи програма сканує робочий діапазон частот із кроком 2.0 МГц (10 каналів GSM) та оцифровує сигнал із частотою дискретизації 2.4 МГц. Процес сканування складається з швидкого проходу всього діапазону вимірювання потужності сигналу і повільного проходу для декодування ідентифікаторів БС.

Один крок декодування виконується після проходу всього діапазону вимірювання потужності. Таким чином, в діапазоні GSM 900 рівень сигналу оновлюється приблизно раз на 2 с, а повний прохід декодування займає близько 1 хв.
Через погану якість сигналу одержуваного з RTL-SDR, ймовірність правильного декодування системної інформації (SI) широкомовного керуючого каналу (BCCH) БС виявляється не високою. Флуктуації рівня сигналу в результаті багатопроменевого поширення так само знижують ймовірність декодування системної інформації. З цих причин, для отримання ідентифікаторів БС необхідно, щоб сканер накопичував інформацію протягом часу близько 10 хв. Але навіть у цьому випадку, далеко не всі канали забезпечують в цьому місці достатній рівень і якість сигналу для декодування навіть ідеальним приймачем. Крім цього, не всі канали GSM використовуються для роботи за стандартом GSM, як видно на малюнку вище, канали 975 - 1000 зайняті Мегафоном для роботи за стандартом UMTS.
В процесі роботи сканер додає системну інформацію про нові декодовані канали в загальний масив інформації по каналах. Але інформація про декодовані раніше канали не стирається при недекодуванні системної інформації на цьому кроці, і залишається в масиві. Для очищення цієї інформації служить кнопка для очищення результатів декодування БС.
При натисканні на кнопку збереження звіту, накопичені результати зберігаються у текстовий файл з назвою складеною з назви програми, дати та часу збереження даних. Нижче для прикладу наведено частину файлу звіту:
Сканер призначений для роботи під Windows 7, 8.1 та 10. робота тестувалася з трьома екземплярами RTL-SDR з тюнером R820T, інші типи тюнерів не тестувалися.
Для роботи під Windows XP зібрана спеціальна версія програми, працює вона в кілька разів повільніше за стандартну версію.

Розвиток.

Програма сканера постачається так, без будь-яких гарантій і відповідальності. Якщо у вас є розумні ідеї, як розширити функціональність або покращити роботу сканера, ми готові обговорити можливість їх реалізації.
Ви можете взяти участь у розробці сканера, відвідайте сторінку розробки.
Планується подальший розвиток GSM сканера, можливо з вашою участю.