Телеметрия в ORX OpenLRS с прошивкой OpenLRSng
Доброго времени суток, форумчане!
Только что закончил играться с телеметрией, и решил поделиться с Вами полученным опытом.
Итак, суть довольно проста: пересылка данных между приёмником и передатчиком в обе стороны. Без влияния на этот процесс канала радиоуправления.
Нам понадобится:
- Аппаратура радиоуправления модульного типа (у меня это 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) хватило, что-бы Ваш пакет телеметрии добрался до Вас, стоящего(ую) на земле 😃
---------
Большое спасибо Вам за проявленное внимание к этой статье. Надеюсь, она была полезна.
С радостью отвечу на все вопросы,
Данил
Это типа замена радиомодему или совмещение РУ и радиомодема?
Это типа замена радиомодему или совмещение РУ и радиомодема?
Это использование возможностей установленного в приёмники и передатчики OpangeRX OpenLRS приёмопередающего радиомодуля. Для телеметрии. С использованием прошивки OpenLRSng.
Как-то так 😃
Я правильно понимаю что ардуина на стороне приемника нас не интересует, т.к. подключаем уарт к полетному контроллеру, и у Вас используется просто как usb-uart? Как впрочем и фтди на стороне передатчика, вместо которого может быть все что угодно.
Я правильно понимаю что ардуина на стороне приемника нас не интересует, т.к. подключаем уарт к полетному контроллеру, и у Вас используется просто как usb-uart? Как впрочем и фтди на стороне передатчика, вместо которого может быть все что угодно.
Совершенно врено. Просто в моей наземной станции основным контроллером является Arduino с собственной прошивкой. Поэтому, для наглядность, взял её.
rcopen.com/forum/f90/topic302333/2453 таким образом реализовал телеметрийный линк еще зимой), на борту один ват рфмб.
Это не оно?
Да, хороший лайфхак 😃 Но у него есть большой минус - нужно найти достаточно мощный преобразователь на 3.3V. Он должен выдавать как минимум полтора-два ватта мощности для ваттного модуля в приёмнике.
А здесь на телеметрию 100мвт на модели. Хотя все равно преимущества совмещения LRS и телеметрии налицо.
Да, хороший лайфхак 😃 Но у него есть большой минус - нужно найти достаточно мощный преобразователь на 3.3V. Он должен выдавать как минимум полтора-два ватта мощности для ваттного модуля в приёмнике.
5 вольтами рфм нужно запитывать для того чтобы получить с нее ват. логику 3.3 вольтами.
А здесь на телеметрию 100мвт на модели.
Здесь да, штатные, заводские 100 мВт выходной мощности приёмника. Передатчик у меня ваттный. Плюс бустер на 7 ватт 8)
5 вольтами рфм нужно запитывать для того чтобы получить с нее ват. логику 3.3 вольтами.
И я был не прав, и Вы. По документации, от 3.3V до 6V. Естественно, 5-6 вольт оптимально. Но всё равно выходная мощность стабилизатора должна быть полтора-два ватта.
Вот что меня во всем этом напрягает, так это то, что почему-то дорогие lrs uart телеметрию не предлагают ни в каком виде, а на openlrs есть несколько вариантов, но дальнобойная часть там еще нуждается в доработке. В тоже время ставить обычный дальнобой на тойже частоте что и модем никто не станет.
А бустер у вас я так понимаю умный, сигнал от телеметрии с той же антенны обратно принимает?
Вот что меня во всем этом напрягает, так это то, что почему-то дорогие lrs uart телеметрию не предлагают ни в каком виде, а на openlrs есть несколько вариантов, но дальнобойная часть там еще нуждается в доработке.
Вы знаете, сколько пользуюсь этой LRS-системой - никогда проблем ни с дальностью, ни с телеметрией не было. Возможно, это результат постоянных корректировок той же самой прошивки или параметров. А возможно, использование дополнительных анетн и усилителей. Но, факт фактом 😃
А бустер у вас я так понимаю умный, сигнал от телеметрии с той же антенны обратно принимает?
Да, есть такое. Отдельный патч на приём, который не проходит через цепь усиления. И цепь возврата для полученного сигнала. Полусамосборный.
Отдельный патч на приём, который не проходит через цепь усиления. И цепь возврата для полученного сигнала. Полусамосборный.
Здорово, а можно подробней? Если ВЧ часть делите, то как, а если два отдельных модуля, то ведь не договорятся они о частотах?
Здорово, а можно подробней? Если ВЧ часть делите, то как, а если два отдельных модуля, то ведь не договорятся они о частотах?
Вообще, насколько мне известно, таких извращений как делаю я, делать вовсе не нужно. Я просто использую патч отдельно для лучшего приёма данных телеметрии.
Как пример адекватного бустинга сигнала без разделения - WiFi-бустеры. WiFi, как ни крути, идёт и на приём и на передачу. При использовании бустера всё работает как и без него. Просто Ваш WiFi становится достоянием как минимум квартала 😃