На днях получило популярность видео о том, как здорово можно сделать управление практически любым видеопередатчиком с пульта, просто управляя кнопкой. Видео интересное и познавательное, но особенно английская версия (а немедленно была записана и русскоязычная, что очень здорово) примечательна тем, что сразу вспоминается школа, или в крайнем случае первый курс института: студент бодро рапортует правильный ответ, мало что понимая и объясняя. Дальше — хуже, так как студенты — а мы, слушающие это видео, и есть студенты, так как материала не знаем — могут попробовать воспроизвести бесстрастному преподавателю, коим выступает суровая реальность, то, что они усвоили, и на любой вопрос за рамками усвоенного от коллеги ответить уже не смогут. Почему 40? Ведь ответ на «вечный вопрос» — 42… На будущее скажу, что и 42 тоже сработает!
В этой статье мы научимся управлять внешними устройствами с пульта через полетный контроллер, а так же разберемся, как вообще управлять ресурсами и что значат разные цифры и значения при их управлении.
Лабораторные мыши
Для детального освоения темы я предлагаю читателю взглянуть — не без трепета — на схему ниже:
Сейчас мне многие предъявят, мол, чего это я тут F1 поставил, с ним никто работать не будет. Но тут я подловлю вас на некотором незнании материала: можете открыть схему для F3 в том же корпусе, и вы удивитесь, на сколько похожи эти процессоры по распиновке. Для наших задач сейчас в первую очередь важны названия ножек и их номера, а на схеме для F1 видны еще и функции, как UART (наши любимые TX/RX), к примеру.
Давайте знакомиться со следующим участником. В операционную приглашается мой любимый полетник для тинивупов — Eachine Tiny, полное название которого длинее, чем это предложение.
Предвосхищая распросы о том, почему именно этот полетник мой любимый, отвечу сразу: он легкий (2.1гр), компактный, простой, как мыльница, и лишен всяких недостатков многих All-inclusive решений, вроде отваливающихся приемников и невнятного управления. Минус — мы подключаем приемник самостоятельно.
Постановка задачи
Теперь давайте поставим задачу: мы хотим управлять неким периферийным устройством с нашего пульта. Это может быть прожектор, который вы подключите с помощью мосфета, может быть сброс валентинки любимой девушке (придумайте сами, как это реализовать), или, возможно, вы просто хотите управлять своей камерой с пульта. Для начала нам надо определиться с тем, какие ноги мы можем использовать для данной задачи, а какие — нет. Да-да, не думаете же вы, что все 48 ножек процессора используются всегда во всех сетапах? В примерах на видео предлагали использовать пины пищалки, но мы решили разобраться в проблеме поглубже, поэтому будем использовать вообще случайный свободный пин! Да и площадки для пищалки не нашлось на моем полетничке, так что нам остается придумать решение самостоятельно.
Скажу, на будущее, что паяться к ножке процессора — то еще удовольствие, поэтому для своих задач я использовал ноги UART2, который у меня нигде не используется.
Управление ресурсами
Подключаем полетник и открываем консоль betaflight (я только что прошил его, чтобы было проще и понятнее). Набираем команду resource list и видим список ножек с назначенными им задачами. Список пестрит свободными ножками (FREE), однако не спешите радоваться. Наберите resource и вы увидите иную картину, где, к примеру, свободной ножке A14 назначен вполне себе такой TX2. Если вы готовы распрощаться с одним из UART и вам не жалко эту ножку, то можете освободить ее от задачи и использовать — будет проще подпаяться. Но я решил пойти чуть более сложным путем, чтобы у нас получился более полноценный мануал. Давайте исходить из того, что я очень жадный, и все UART мне нужны. Тогда остается использовать какую-то свободную ножку. Мы же разберем случай, когда нам все-таки придется освободить ресурс и отобрать у ножки родную функцию.
Для микрохирургии я выбрал ногу мотора 8 — B01. Мой вуп и на 7 моторах будет летать прекрасно, поэтому я решил, что 8й мне точно не нужен (UART, напоминаю, жалко просто для примера). Обращаю внимание читателя на то, что на схеме ножка B01 обозначается PB1: номера соответствуют, но ведущего нуля нет и буква P стоит перед обозначением ножки. Освобождаем ресурс:
resource MOTOR 8 none
Проверяем результат командами resource и resource list. В первой мы увидим FREE напротив ножки B01, а во второй увидим, что мотора 8 больше нет в списке ресурсов.
Ножки свободного назначения PINIO
Далее назначаем ножке B01 специальный ресурс PINIO, коих предусмотрено 4, а значит всего 4 ножками мы сможем управлять сами. Мы назначаем первому PINIO:
resource PINIO 1 B01
Теперь надо немного поковыряться с тем, что есть PINIO и PINIO_BOX. PINIO — это просто страшное слово для обозначения ножки свободного назначения, а PINIO_BOX — это привязка ножки к функции, которая будет значениями ножки управлять. Грубо говоря, ножкой мотора у нас управляет PID контроллер и всякая логика, ножкой TX1 управляет UART1. Аналогично, ножке свободного назначения PINIO можно назначить управляющим сигналом что-то, что нам нужно, как вариант — ARM статус, или одно из пользовательских значений, управляемых с пульта.
Давайте, для начала, глянем, что там уже стоит:
get PINIO_BOX
pinio_box = 255,255,255,255 Array length: 4
Консоль возвращает массив из 4х чисел, разделенных запятой. По умолчанию все числа равны 255 — это пустые значения.
Нас интересуют 4 значения для пользовательских функций (USER1..USER4), а кому-то полезным окажется ARM (самое простое — диод, включающийся на заармленном коптере).
USER1 | 40 |
USER2 | 41 |
USER3 | 42 |
USER4 | 43 |
ARM | 0 |
AIRMODE | 28 |
Полный список значений доступен любому страждущему в файле src/main/interface/msp_box.c в исходниках betaflight.
Теперь у нас есть вся необходимая информация, чтобы назначить управление нужной ножкой с пульта. Для этого выполняем:
set PINIO_BOX = 40,255,255,255
Так мы для PINIO 1 назначили 40 функцию, которая является пользовательской функцией USER1. Не забываем сохранить изменения:
save
После перезагрузки у нас на вкладке Modes должен появиться режим USER1, для значения которого мы указываем свой диапазон и канал приемника. Поздравляю, если вы не заснули или не сожгли ничего — вы только что научились работать с PINIO и сможете не только управлять своим видеопередатчиком с пульта, но и сделать, к примеру, вот такой тинивуп: