GPS-трекер LoRa-GPS. Часть 2. Приемник pinko.

Продолжаю публикацию сведений о LoRa-GPS трекере, который летает в любительских ракетах (моих и коллег). Обычные решения используют GSM канал для передачи местоположения в СМС. Здесь описывается решение имеющее большую автономность — свой радиоканал — совсем не так как на картинке.

Описан LoRa-GPS трекер, выполненный на платформе Arduino и LoRa модулях E19 от E-byte. На приемной стороне в качестве оконечного устройства используется смартфон/планшет на Android. Конструкция совместима по протоколам радиоканала с конструкцией Дианко Чернева (pinko): настройка модуля LoRa, длина и формат передаваемого пакета.

Общая схема работы GPS-трекера типовая: модуль GPS принимает сигналы навигационных спутников и определяет свои текущие координаты. Полученные данные передаются радиопередатчиком (диапазон 433МГц). Приемник получает пакет данных, извлекает координаты и по последовательному каналу отправляет информацию на оконечное устройство. Оконечное устройство (смартфон/планшет/компьютер и т.п.) отображает/обрабатывает полученные координаты, сообщая/рисуя на карте местоположение передатчика.

В первой части повествования был описан передатчик. Его функция заключалась в приеме сигналов со спутников и определении текущих координат (этим занимается специальный модуль GPS), упаковке полученных данных в удобный формат и передаче подготовленного пакета по радиоканалу (этим занимается радиопередатчик модуля LoRa E19-433M20S2).

Во второй части посмотрим на приемник LoRa-GPS, разработанный Дианко Черневым. Очень хорошее устройство: отличный прием, продуманное управление и индикация принимаемых параметров. Приемник совсем не похож на то, что будет описано позднее. И, тем не менее, полезно посмотреть на то — как им пользоваться. Ранее было сказано, что описываемая конструкция совместима по протоколу работы, поэтому передатчик из первой части прекрасно работает с приемником pinko.


Внешний вид приемникаЭто автономное устройство (надо только прицепить литиевый аккумулятор — у меня он держится резинкой). Антенна 433МГц закреплена на плате приемника. На ней же установлены четыре кнопки управления и выключатель. Информация отображается на графическом дисплее (в текстовом режиме 8 строк по 16 символов).

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

Основным режимом работы является обычный прием сигналов с LoRa-GPS передатчика. Этот режим изображен на фото выше. Разберем отображаемые параметры, их смысл, каким образом они передаются и принимаются приемником на Arduino.


В приемнике использован двухцветный (верхние две строки желтые, остальные — голубые) индикатор. В верхней строке отображается уровень сигнала (RSSI) и соотношение сигнал/шум (SNR). Чем сигнал сильнее, тем цифры RSSI меньше. Соотношение сигнал/шум — чем больше цифра, тем лучше условия приема. LoRa позволяет принимать сигнал с уровнем ниже уровня шумов — так что цифры могут упасть ниже единицы.

Индикация уровня сигнала и соотношения сигнал/шум работает ТОЛЬКО при условии корректного приема передаваемого сигнала!

Ниже строки с цифрами находится линейный индикатор сигнала на выбранной частоте. Это желтая полоса — на фото она во всю длину — это индикация рядом работающего генератора 433,92МГц. Индикатор удобен для оценки «радиочастотной обстановки» на выбранной частоте работы приемника. Для его работы не требуется LoRa модуляция сигнала.

Описанные индикаторы вычисляются приемником по состоянию принимаемого сигнала. В приемнике на Arduino нет линейного индикатора (в самой схеме приемника нет индикаторов, а на телефон его решил не транслировать). RSSI и SNR приемником на Arduino вычисляются (по данным из регистров SX1278) и передаются по последовательному каналу в оконечное устройство (смартфон и т.п.)


Отдельно следует упомянуть совсем незаметный символ «N» в строке линейного индикатора уровня сигнала.  Это индикатор «записи». Приемник pinko позволяет записывать принимаемые данные в собственную память (на фото видно две микросхемы EEPROM справа от индикатора). Запись включается по нажатию кнопки «REC» (внизу третья слева). Индикатором осуществляющейся записи является буква «R». Когда запись остановлена (кнопка «STOP») — индицируется буква «N».

В приемнике на Arduino принимаемые данные всегда выдаются в последовательный канал текстовыми строками. Приемник не имеет своей памяти (EEPROM). Как поступить с поступающим потоком данных оконечное устройство решает само (на данный момент, все данные записываются в Список, отображаются на экране и по кнопке сохранить сбрасываются в csv файл).


Ниже индикатора уровня сигнала уже голубым цветом отображается информация GPS: 

  • Широта (LAT), формат: две цифры градусы, две цифры минуты и четыре цифры доли минут, буква N или S (северная или южная широта). В приемнике на Arduino для широты передаются только цифры. Разделителем полей (градусы и минуты) является точка с запятой, дробная часть отделяется точкой. Южное полушарие в приемнике на Arduino не отрабатывалось: знак широты и «буква» не передаются.
  • Долгота (LON), формат: три цифры градусы, две цифры минуты и четыре цифры доли минут, буква E или W (восточная или западная долгота). В приемнике на Arduino для долготы передаются только цифры. Разделителем полей (градусы и минуты) является точка с запятой, дробная часть отделяется точкой. Западное полушарие в приемнике на Arduino не отрабатывалось: знак долготы и «буква» не передаются.
  • Высота (ALT), формат: целое число со знаком. В конце строки стоит «М» — метры, единица измерения. В приемнике на Arduino для высоты передаются только цифры (без знака).

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

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

Направление также рассчитывается по координатам. Окружность делится на 16 секторов и направление выводится на экран общепринятым буквенным кодом.

В приемнике на Arduino нет всех этих вычислений. Эти сведения не передаются по последовательному каналу в оконечное устройство. Функции определения расстояния и направления возложены на оконечное устройство. На текущий момент программа под Android определяет расстояние и направление от любой выбранной (в том числе определенной GPS самого телефона) точки до текущей, полученной по последовательному порту. Кроме расстояния и направления на экран выводится разность высот точек (удобно во время полета ракеты отслеживать текущую высоту и удаление).


Во второй снизу строке на экране приемника отображается время, как оно получено по данным GPS с учетом часового пояса, заданного при настройке приемника. В программе передатчика (по просьбе Михаила) вместо часа передается число видимых спутников.

Справа в этой же строке отображается уровень напряжения питания передатчика в вольтах. На фото отмечено стрелкой.

!!!Важно. Принятое приемником pinko напряжение является «контрольным параметром» на приемном конце. Все полученные данные будут обработаны (рассчитаны, отображены на индикаторе, сохранены в памяти) соответствующим образом ТОЛЬКО в случае ненулевого значения напряжения (у pinko даже есть специальный пороговый параметр для этого).

В приемнике на Arduino время передается в последовательный канал аналогично (с разделителем «двоеточие» и «решеткой» в качестве префикса). Напряжение также передается в строке данных последовательного интерфейса. Разделитель — точка с запятой, десятичная точка — «обычная точка». Никакого контроля или блокировки обработки принятых данных в зависимости от уровня напряжения питания передатчика, приемник не делает.


Последняя строка на индикаторе (POS) отображает номер принимаемой в данный момент посылки и общее число принятых пакетов.это удобно — сразу видно — есть ли выпадания пакетов.

В приемнике на Arduino в последовательный порт выводится номер текущей посылки. Функции определения общего числа принятых пакетов переданы на ПО оконечного устройства. В текущей версии ПО Android обработки номера посылки нет, информация сохраняется в общем массиве поступаемых данных.


Расположение индицируемых параметров и их позиция в передаваемом пакете

Параметр Единица Номер байта Расположение
Широта Градусы’ Минуты. Доли минут 0…3 LAT:
Долгота Градусы’ Минуты. Доли минут 4…7 LON:
Высота Метры 8,9 ALT:
Напряжение Вольты 10,11
Номер посылки шт 12,13 POS:
Время Часы 14
Минуты 15
Секунды 16

Пример скриншота одной из ранних версий приемного ПО под Android.В нижней половине экрана видно Список поступающих с приемника на Arduino данных. Данные: время, широта (градусы и минуты), долгота (градусы и минуты), высота (метры), напряжение питания передатчика (вольты), номер посылки, уровень сигнала (RSSI), соотношение сигнал/шум.

Файлы:

Добавить комментарий