Тарас Каленюк

Время на чтение: 3 минуты

А А

GPS трекер

Ардуино – это возможность для каждого создать сложные вещи просто. А также своего рода конструктор, как для взрослых, так и для детей. С помощью Arduino воплощаются мечты, создаются и оживают роботы.

Ардуино обладает большим выбором плат, предназначенных для выполнения разного объема и вида работ. Самые популярные из них – Arduino Uno, Ardino Mega, Arduino Nano и Arduino Leonardo. Также есть еще большой выбор вариантов для конкретных случаев.

Также Ардуино это еще и бесплатная среда программирования при помощи, которой можно прошивать свой микроконтроллер буквально одним нажатием клавиши. Особых знаний не требуется, так как присутствуют уже базовые заготовки кодов, и инструкции их применений. Также можно скачать готовые варианты скетчей из интернета.

Ардуино с удовольствием развивается в направлении доступности для детей. Раньше он считался слишком сложным для них, однако сейчас компанией максимально упрощено управление с платой, и обучающие элементы для начинающих. Отныне детей приобщать к электронике можно уже прямо сейчас.

Цель создания GPS трекера

GPS трекеры на сегодняшний день, такая же необходимая вещь в машине, как и видеорегистратор. Это не только обезопасит вас самих, но и защитит машину в случае угона. Опять же благодаря наличию GPS трекера появится возможность всегда знать, где находится твой автомобиль, или каким маршрутом он двигался, когда ты отдавал его жене или другу.

Геотрекеров сейчас великое множество, однако, как говорит пословица – «Хочешь сделать что-то хорошо – сделай это сам». При наличии понимания как должно это работать, или при желании разобраться во всем самому, шанс создать выглядит предпочтительным.

К тому же в каждом из нас живет параноик. Иногда он тише, иногда громче. Доверия чужим «жучкам» нет. Лучше сделать самому и точно знать, что прослушивать его будешь только ты, а не пять соседних держав.

Работа

Для создания GPS трекера Arduino были изучены всевозможные материалы в интернете. И принято решение остановиться на таких запчастях:

  • модуль Sim808 – для использования сим-карты;
  • GPS и GSM антенны;
  • непосредственно плата Arduino nano и переходники к ней, для скрепления всего со всем.

Схема, найденная в интернете, оказалась невероятно проста. В качестве учебного занятия в будущем после ознакомления с Arduino самостоятельно имеет смысл создать еще один GPS/GSM трекер со своим ребенком.

Подключив схему Ардуино к модулю сим, подключаем антенны, и обеспечиваем всё это зарядом батареи на 12В. И это всё. Гениально и просто. Далее при помощи Ардуино и имеющегося скретча прошиваем получившийся аппарат и вуаля – готово.

Результаты

Можно рассчитывать, что пока маяк Ардуино находится внутри машины, с ней ничего не произойдет. Данные о геолокации автомобиля приходят по мановению руки прямо на телефон. Если произойдет угон, вы тут же сможете получить данные о местонахождение вашего авто. Однако чаще всего, вы просто наблюдаете за передвижениями жены от дома до магазина и обратно. Но в полезности аппарата сомневаться не приходится.

После испытаний было принято решение заменить обычную батарею, чтобы ее постоянно не менять, на аккумулятор. Теперь просто подзаряжая, свое устройство прямо от автомобиля, когда приходит необходимость, вы можете не заморачиваться с батарейками.

В интернете существуют статьи про более сложные системы и платы, но целесообразности их использования или замены на них того что есть нет. Как говорится «зачем исправлять то, что и так работает».

Из замечаний стоит отметить, что просветы между точками геолокации машины слишком высоки, хотя в этом виновата программная часть. У покупных китайских аналогов есть возможности записи голосов вокруг, и в целом они выглядят намного компактнее того что сделано при помощи Ардуино.

Судя по отзывам у китайских аналогов и проблем с частотой записи нет, и даже обрывы связи незаметны у некоторых моделей. Хотя по цене они выходят также как то, что сделано из Ардуино. Из этого вытекает рекомендация – если вы не инженер в душе, и тяги к изобретениям у вас нет, проще всё-таки купить готовый китайский продукт, чем делать крупногабаритное свое.

Стоит отметить, что для общего развития не будет зазорно купить китайский аналог и разобрать его, чтобы выяснить, как всё устроено внутри него, и найти ошибки у себя. Хотя с программной частью это вряд ли поможет.

После нескольких экспериментов с ардуиной решил сделать простенький и не очень дорогой 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 based GSM/GPRS Shield
  • DC-DC 12v->5v 3A converter

Вам необходим источник точного времени от GPS? Данная статья покажет вам, как использовать модуль GPS для получения времени, даты и координат, и как показать их на LCD индикаторе с помощью Arduino.

Что необходимо?

  • компьютер с установленной Arduino IDE;
  • Arduino (мы используем Arduino Mega);
  • GPS модуль (мы используем EM-411, возможны и другие, поддерживающие протокол NMEA, например, VK2828U7G5LF или GY-NEO6MV2);
  • макетная плата , перемычки и потенциометр 5 кОм;
  • библиотека TinyGPS (ссылка ниже).

Введение

Создание системы глобального позиционирования, или GPS, началось в начале 1970-х годов. Каждая страна (Россия, США, Китай и т.д.) обладают своей собственной системой, но большинство средств спутниковой навигации в мире используют систему США.

Каждый спутник системы имеет атомные часы, которые непрерывно контролируются и корректируются NORAD (командованием воздушно-космической обороны Северной Америки) каждый день.

По сути, приемник по своим часам измеряет TOA (время получения сигнала, time of arrival) четырех спутниковых сигналов. Исходя из TOA и TOT (времени отправки сигнала, time of transmission), приемник вычисляет четыре значения времени «пролета» сигнала (TOF, time of flight), которые отличаются друг от друга в зависимости от расстояния спутник-приемник. Затем, исходя из четырех значений TOF, приемник вычисляет свое положение в трехмерном пространстве и отклонение своих часов.

Самые недорогие GPS приемники обладают точностью около 20 метров для большинства мест на Земле. Теперь посмотрим, как изготовить свои собственные часы GPS с помощью Arduino.

Аппаратная часть

Мой GPS модуль имеет 6 контактов: GND, Vin, Tx, Rx и снова GND. Шестой вывод никуда не подключен. Контакт GND соединен с корпусом на Arduino, Vin подключаем к шине +5В на Arduino, Tx подключен к выводу 10 на Arduino, а вывод Rx никуда не подключаем, так как не будем посылать на GPS модуль никаких сообщений. Мой модуль передает спутниковые данные, используя интерфейс RS-232, со скоростью 4800 бит/сек, которые принимаются Arduino на выводе 10.

Ниже показана фотография GPS модуля:

GPS модуль EM-411

Модуль отправляет то, что известно как NMEA сообщения. Здесь вы можете увидеть пример одного NMEA сообщения и его разъяснение (выдержка из технического описания):

$GPGGA,161229.487,3723.2475,N,12158.3416,W,1,07,1.0,9.0,M,0000*18

Формат данных GGA
Название Пример Единицы Описание
ID сообщения $GPGGA Заголовок протокола GGA
Время UTC 161229.487 hhmmss.sss (две цифры часы, две цифры минуты, затем секунды с точностью до тысячных)
Широта 3723.2475
Флаг N/S N N - север, S - юг
Долгота 12158.3416 ddmm.mmmm (первые две цифры градусы, затем минуты с точностью до десятитысячных)
Флаг E/W W E - восток, W - запад
Индикатор местоположения 1
  • 0 - местоположение недоступно или некорректно;
  • 1 - режим GPS SPS, местоположение корректно;
  • 2 - дифференциальный GPS, режим SPS, местоположение корректно;
  • 3 - режим GPS PPS, местоположение корректно.
Количество используемых спутников 07 В диапазоне от 0 до 12
HDOP 1.0 Ухудшение точности по горизонтали
Высота относительно уровня моря 9.0 метры
Единицы измерения M метры
Геоидальное различие Различие между земным эллипсоидом WGS-84 и уровнем моря (геноидом)
Единицы измерения M метры
Возраст дифференциальных данных GPS секунды Нулевые поля, когда DGPS не используется
ID станции, передающей дифференциальные поправки 0000
Контрольная сумма *18
Конец сообщения

Все эти данные принимаются Arduino через вывод 10. Библиотека TinyGPS читает сообщения GPGGA и GPRMC (для подробной информации о GPRMC смотрите техническое описание).

Arduino на схеме не показан. Подключите периферийные устройства согласно подписанным соединениям.


Схема GPS часов на arduino

Программное обеспечение

При подаче питания GPS модуль затрачивает некоторое время, чтобы получить правильное местоположения от спутников. Когда местоположение получено, модуль шлет NMEA сообщения на Arduino. Библиотека TinyGPS содержит функцию для получения времени и даты из GPRMC сообщения. Она называется crack_datetime() и принимает в качестве параметров семь указателей на переменные: год year , месяц month , день месяца day , часы hour , минуты minute , секунды second , и сотые доли секунды hundredths . Вызов функции выглядит так:

Gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths);

Вызов данной функции возвращает вам в переменных правильные значения до тех пор, пока с железом всё в порядке.

Чтобы получить ваше местоположение, можно вызвать функцию f_get_position() . Данная функция принимает в качестве параметров два указателя на переменные: широта latitude и долгота longitude . Вызов данной функции выглядит так:

Gps.f_get_position(&latitude, &longitude);

Исходный текст программы:

#include #include #include #define RXPIN 10 #define TXPIN 9 #define GPSBAUD 4800 #define RS 2 #define EN 3 #define D4 4 #define D5 5 #define D6 6 #define D7 7 TinyGPS gps; SoftwareSerial uart_gps(RXPIN, TXPIN); LiquidCrystal lcd(RS, EN, D4, D5, D6, D7); // Переменные int seconds; int timeoffset = 1; // Пользователь должен изменить единицу на соответствующий часовой пояс. В примере используем сдвиг на +1 час. // Объявление функций. void getgps(TinyGPS &gps); // Функция настройки - запускается только при включении void setup() { Serial.begin(115200); // Запуск последовательного интерфейса для отладки uart_gps.begin(GPSBAUD); // Запуск приемника UART для GPS lcd.begin(16,2); // Объявление LCD lcd.print(" GPS clock"); // Сообщение приветствия delay(1000); // Ждем одну секунду lcd.clear(); // Очистить LCD } // Цикл главной программы - запущен всегда void loop() { while(uart_gps.available()) { int c = uart_gps.read(); if(gps.encode(c)) { getgps(gps); } } } /* * Данная функция получает данные от GPS модуля * и отображает их на LCD */ void getgps(TinyGPS &gps) { int year; float latitude, longitude; byte month, day, hour, minute, second, hundredths; gps.f_get_position(&latitude, &longitude); gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths); hour = hour + timeoffset; lcd.clear();//lcd.setCursor(0, 0); lcd.print("Time: "); if (hour <= 9) { lcd.print("0"); lcd.print(hour, DEC); } else { lcd.print(hour, DEC); } lcd.print(":"); if (minute <=9) { lcd.print("0"); lcd.print(minute, DEC); } else { lcd.print(minute, DEC); } lcd.print(":"); if (second <= 9) { lcd.print("0"); lcd.print(second, DEC); } else { lcd.print(second, DEC); } lcd.setCursor(0,1); lcd.print("Date: "); if (day <= 9) { lcd.print("0"); lcd.print(day, DEC); } else { lcd.print(day, DEC); } lcd.print("-"); if (month <= 9) { lcd.print(month, DEC); } else { lcd.print(month, DEC); } lcd.print("-"); lcd.print(year, DEC); delay(2000); lcd.clear(); lcd.print("Lat: "); lcd.print(latitude, DEC); lcd.setCursor(0,1); lcd.print("Lon: "); lcd.print(longitude, DEC); delay(2000); // Debugging purpose only. Serial.print(latitude, DEC); Serial.print(" - "); Serial.println(longitude, DEC); }

Индивидуальные GPS передатчики

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

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

По сути, это те же самые GPS-трекеры, только рассчитанные на использование не на транспортном средстве, а человеком в повседневной жизни.

В зависимости от модели, в одном корпусе могут быть совмещены несколько различных устройств. В самом простом варианте это просто не большая коробочка без дисплея, которая позволяет контролировать перемещения детей, животных либо каких-то других объектов , на которых закреплена.

Внутри у неё расположен GPS модуль, определяющий координаты на местности, GSM/GPRS модуль, передающий информацию и принимающий управляющие команды, а так же источник питания, обеспечивающий автономную работу в течение длительного времени.

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

По мере роста функциональности, появляются следующие возможности прибора:


Варианты исполнения GPS передатчиков

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

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

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

Статьи о 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=1\r»);
gprsSerial.print(«AT+IFC=1, 1\r»);
delay(500);
gprsSerial.print(«AT+CPBS=\»SM\»\r»);
delay(500); // задержка на обработку команды
gprsSerial.print(«AT+CNMI=1,2,2,1,0\r»);
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) and software defined radio news and projects,
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 сканера, возможно с вашим участием.

Система глобального позиционирования 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; gps.f_get_position(&flat, &flon, &age); Serial.print(” lat “); Serial.print(flat, 4); Serial.print(” lon “); Serial.print(flon, 4); Serial.print(” kms “); Serial.print(fkmph); Serial.print(” course “); Serial.print(fc); Serial.print(” elevation “); Serial.println(falt); /////////////////////////////////////////////////////////////////////////////////////////////

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