Телеметрия в ORX OpenLRS с прошивкой OpenLRSng

rizorko

Доброго времени суток, форумчане!

Только что закончил играться с телеметрией, и решил поделиться с Вами полученным опытом.


Итак, суть довольно проста: пересылка данных между приёмником и передатчиком в обе стороны. Без влияния на этот процесс канала радиоуправления.

Нам понадобится:

  • Аппаратура радиоуправления модульного типа (у меня это Turnigy 9XR)
  • Serial-монитор (о вариантах реализации оного расскажу чуть позже)
  • Передающий модуль OrangRx OpenLRS с прошивкой OpenLRSng
  • Приёмник OrangeRX OpenLRS RX 9ch с прошивкой OpenLRSng
  • Базовые знания принципов работы UART

Теперь о вариантах реализации Serial-мониторов:
На стороне передатчика, я использую обычный USB<>UART переходник с уровнем питания 3.3в (хотя в данном случае, вольтаж роли не играет, т.к. модуль питается от аппаратуры).
На стороне приёмника, я использую Arduino Mega 2560. Конкретно у Меги есть 4 Serial-канала, что очень удобно. Но Вы можете использовать “Uno” или даже “Nano”, но тогда Вам придётся повозиться с SofrwareSerial.

Стоит заметить, что Вы можете использовать либо UART-переходник, либо Arduino в обеих случаях.

Перейдём к Hardware-части

Для начала сторона передатчика:


(прощу прощения за дикий расфокус, телефон тупил)

Вот так это выглядит у меня. Модуль в аппаратуре, на столе USB<>UART, всё подключено между собой. Антенну поставил штатную, ибо модуль одноваттный, так “радиорадиации” меньше 😃 А с моим основным антенным сетапом я такое облучение получу, что волосы выпадать начнут 😒

В корпусе модуля проделал ножом дырочку для проводков. Очень удобно.
Для этого эксперимента, Вам нужно подключить только пины GND, TX и RX.

Сторона приёмника:

Тут всё просто. Не пугайтесь большого кол-ва макетных проводов 😃 Сейчас расскажу что к чему.
Приёмник запитываю от Arduino пятью вольтами, VCC и GND на первом канале.

TX от приёмника подключаю к RX1 (“#X1” это первый из трёх дополнительных Serial-терминалов у Меги), а RX приёмника - к TX1. Тут ещё до кучи подключена шина RSSI, но это уже совсем другая история 😃

Программная составляющая
Передатчик у меня взаимодействует со стационарным ПК, а приёмник - с ноутбуком.

Передатчику никакая программа не нужна. Мой UART-переходник опознаётся как COM-порт, поэтому можно просто открыть “Serial Monitor” среды Arduino, и использовать его для взаимодействия с передатчиком.

Приёмник же тесно связан с Arduino. В Мегу вшита такая простая программа:

void setup() {
  // Инициализируем основной serial (к ПК)
  Serial.begin(115200);
  //Инициализируем serial для общения с приёмниокм (в моём случае Serial1)
  Serial1.begin(115200);
}

void loop() {
  //Если приёмник дал нам какие-то данные
  if(Serial1.available() > 0) {
    //читаем их
    byte incomingByte = Serial1.read();
    // и передаём по байту на строчку (в бинарном виде) на основной Serial (тот, который "увидит" ПК)
    Serial.println(incomingByte, BIN);
  }
  //Если на основоном Serial-е есть данные, то просто передаём их модулю
  if(Serial.available() > 0) {
    byte incomingByte = Serial.read();
    Serial1.println(incomingByte, BIN);
  }
  //Задержка, абы была

  delay(1000);
}

Загружаем всё это дело в нашу Мегу, подключаем её к ПК. В среде Ардуино открываем “Serial Monitor” и выбираем нужный COM-порт. Теперь всё, что мы сюда отправим, передастся приёмнику, а всё, что получит приёмник - он передаст сюда.

Передатчик же просто, через переходник, подключаем к ПК. Открываем всё тот же монитор, выбираем COM-порт, и всё это работает по тому же принципу.

Проверяем!
Итак, включаем наш приёмнк. Затем передатчик. Не успевают они найти друг друга, как в Serial мониторе передатчика видим это:

А это, друзья мои, нам привет от прошивки прилетел 😃
Хотелось бы заметить, что скорость Serial в этой статье везде максимальная - 115200 бод.

И вот наши “ребята” “увидели” друг друга…
Пишем в Serial Monitor передатчика какое-то слово, и бежим смотреть на вывод в Serial Monitor’е приёмника. Видим примерно следующее:

1011001
1100001
1111001
100001
1010

Это слово “Yay!”, переданное побайтно через радиоканал. Ура, товарищи!

Давайте чуть-чуть разберёмся:

1011001  //символ "Y" (в UTF-8)
1100001  //символ "a"
1111001  //символ "y"
100001    //символ "!" (знак восклицания)
1010       //особая комбинация

“1010” это особая комбинация бит, которую передатчик отправил нам как сигнал окончания пакета телеметрии. По ней можно различать пакеты.

Теперь о приёме данных на стороне передатчка. Пишем в Serial Monitor приёмника, например, слово “aya!” (может, это было и не оно, я уже и подзабыл пока писал). Получаем нечто такое:

1000001
1101000
1100001
100001

Разбирать построчно нет смысла, аналогично. Только стоит отметить, что биты окончания пакета телеметрии от приёмника немного другие: 100001. Более отличий нет.

Что мы имеем в итоге:
Полное взаимодействие между приёмником и передатчиком, заключающееся в обмене байтами данных. Главное, что-бы исходящей мощности приёмника (в большинстве случаев 100 mW) хватило, что-бы Ваш пакет телеметрии добрался до Вас, стоящего(ую) на земле 😃

---------
Большое спасибо Вам за проявленное внимание к этой статье. Надеюсь, она была полезна.

С радостью отвечу на все вопросы,
Данил

serenya

Это типа замена радиомодему или совмещение РУ и радиомодема?

rizorko
serenya:

Это типа замена радиомодему или совмещение РУ и радиомодема?

Это использование возможностей установленного в приёмники и передатчики OpangeRX OpenLRS приёмопередающего радиомодуля. Для телеметрии. С использованием прошивки OpenLRSng.
Как-то так 😃

serenya

Я правильно понимаю что ардуина на стороне приемника нас не интересует, т.к. подключаем уарт к полетному контроллеру, и у Вас используется просто как usb-uart? Как впрочем и фтди на стороне передатчика, вместо которого может быть все что угодно.

rizorko
serenya:

Я правильно понимаю что ардуина на стороне приемника нас не интересует, т.к. подключаем уарт к полетному контроллеру, и у Вас используется просто как usb-uart? Как впрочем и фтди на стороне передатчика, вместо которого может быть все что угодно.

Совершенно врено. Просто в моей наземной станции основным контроллером является Arduino с собственной прошивкой. Поэтому, для наглядность, взял её.

rizorko
Wasja:

Да, хороший лайфхак 😃 Но у него есть большой минус - нужно найти достаточно мощный преобразователь на 3.3V. Он должен выдавать как минимум полтора-два ватта мощности для ваттного модуля в приёмнике.

Wasja

А здесь на телеметрию 100мвт на модели. Хотя все равно преимущества совмещения LRS и телеметрии налицо.

romkat
rizorko:

Да, хороший лайфхак 😃 Но у него есть большой минус - нужно найти достаточно мощный преобразователь на 3.3V. Он должен выдавать как минимум полтора-два ватта мощности для ваттного модуля в приёмнике.

5 вольтами рфм нужно запитывать для того чтобы получить с нее ват. логику 3.3 вольтами.

rizorko
Wasja:

А здесь на телеметрию 100мвт на модели.

Здесь да, штатные, заводские 100 мВт выходной мощности приёмника. Передатчик у меня ваттный. Плюс бустер на 7 ватт 8)

romkat:

5 вольтами рфм нужно запитывать для того чтобы получить с нее ват. логику 3.3 вольтами.

И я был не прав, и Вы. По документации, от 3.3V до 6V. Естественно, 5-6 вольт оптимально. Но всё равно выходная мощность стабилизатора должна быть полтора-два ватта.

Wasja

Вот что меня во всем этом напрягает, так это то, что почему-то дорогие lrs uart телеметрию не предлагают ни в каком виде, а на openlrs есть несколько вариантов, но дальнобойная часть там еще нуждается в доработке. В тоже время ставить обычный дальнобой на тойже частоте что и модем никто не станет.

А бустер у вас я так понимаю умный, сигнал от телеметрии с той же антенны обратно принимает?

rizorko
Wasja:

Вот что меня во всем этом напрягает, так это то, что почему-то дорогие lrs uart телеметрию не предлагают ни в каком виде, а на openlrs есть несколько вариантов, но дальнобойная часть там еще нуждается в доработке.

Вы знаете, сколько пользуюсь этой LRS-системой - никогда проблем ни с дальностью, ни с телеметрией не было. Возможно, это результат постоянных корректировок той же самой прошивки или параметров. А возможно, использование дополнительных анетн и усилителей. Но, факт фактом 😃

Wasja:

А бустер у вас я так понимаю умный, сигнал от телеметрии с той же антенны обратно принимает?

Да, есть такое. Отдельный патч на приём, который не проходит через цепь усиления. И цепь возврата для полученного сигнала. Полусамосборный.

Wasja
rizorko:

Отдельный патч на приём, который не проходит через цепь усиления. И цепь возврата для полученного сигнала. Полусамосборный.

Здорово, а можно подробней? Если ВЧ часть делите, то как, а если два отдельных модуля, то ведь не договорятся они о частотах?

rizorko
Wasja:

Здорово, а можно подробней? Если ВЧ часть делите, то как, а если два отдельных модуля, то ведь не договорятся они о частотах?

Вообще, насколько мне известно, таких извращений как делаю я, делать вовсе не нужно. Я просто использую патч отдельно для лучшего приёма данных телеметрии.
Как пример адекватного бустинга сигнала без разделения - WiFi-бустеры. WiFi, как ни крути, идёт и на приём и на передачу. При использовании бустера всё работает как и без него. Просто Ваш WiFi становится достоянием как минимум квартала 😃