Как сделать радиоуправление своими руками
Радиоуправляемый выключатель своими руками. Часть 1 — Hardware
Этот пост — первая часть из серии рассказов о том, как можно относительно несложно сделать своими руками радиоуправляемый выключатель полезной нагрузки.
Пост ориентирован на новичков, для остальных, думаю, это будет «повторение пройденного».
Начало
Второй пункт в общем-то предполагает, что надо бы сделать две разные схемы (для одно- и двух-канального выключателя), но поступим иначе — сделаем «двухканальный» модуль, но в случае, когда реально требуется только один канал — не будем распаивать часть комплектующих на плате (аналогичный подход реализуем и в коде).
Третий пункт — обуславливает некоторую гибкость в выборе форм-фактора выключателя (реально снимается существующий выключатель, демонтируется монтажная коробка, внутрь стены монтируется готовое устройство, возвращается монтажная коробка и монтируется выключатель назад).
Четвертый пункт — существенно облегчает поиск источника питания (220В есть «под рукой»).
Вводные данные ясны, можно двигаться дальше.
Принципы и элементная база
Выключатель хочется сделать многофункциональным — т.е. должна остаться «тактильная» составляющая (выключатель физически должен остаться и должна сохраниться его обычная функция по включению/выключению нагрузки, но при этом должна появиться возможность управления нагрузкой через радиоканал.
Для этого обычные двухпозиционные (включено-выключено) выключатели заменим на аналогичные по дизайну выключатели без фиксации (кнопки):
Эти выключатели работают примитивно просто: когда клавиша нажата — пара контактов замкнуты, когда клавишу отпускаем — контакты размыкаются. Очевидно, что это обычная «тактовая кнопка» (собственно так ее и будем обрабатывать).
Радиоканал будем организовывать с помощью nRF24L01+:
Модуль, как известно, толерантен к 5В-сигналам на входах, но требует для питания в 3.3В, соответственно, в схему добавим еще линейный стабилизатор L78L33 и пару конденсаторов к нему.
Дополнительно добавим блокировочные конденсаторы по питанию МК.
МК будем программировать через ISP — для этого на плате модуля предусмотрим соответствующий разъем.
Собственно, вся схема описана, осталось только определиться с выводами МК, к которым будем подключать нашу «периферию» (радиомодуль, «кнопки» и выбрать пины для управления реле).
Теперь следует определиться с тем, какие «корпуса» будем использовать. В этом месте начинает диктовать правила моя природная лень: мне очень не нравится сверлить печатные платы — поэтому выберем по максимуму «поверхностный монтаж» (SMD). С другой стороны, здравый смысл подсказывает, что использование SMD очень существенно сэкономит размер печатной платы.
Для новичков поверхностный монтаж покажется достаточно сложной темой, но реально это не так страшно (правда, при наличии более-менее приличной паяльной станции с феном). На youtube очень много видео-роликов с уроками по SMD — очень рекомендую ознакомиться (сам начал использовать SMD пару месяцев назад, учился как раз по таким материалам).
Тут я немного хитрю и подглядываю в свои «запасники» (просто выбираю то, что там уже есть в наличии). Вы можете выбирать компоненты по своему усмотрению (выбор конкретных компонентов выходит за пределы этого поста).
Поскольку вся схема уже практически «сформирована» (по крайней мере, в голове), можно приступать к проектированию нашего модуля.
Вообще неплохо было бы все сначала собрать на макетке (используя корпуса с выводными элементами), но поскольку у меня все описанные выше «узлы» уже неоднократно проверены и воплощены в других проектах — позволю себе этап макетирования пропустить.
Проектирование
Для этого воспользуемся замечательной программой — EAGLE.
На мой взгляд — очень простая, но в то же время — очень удобная программа для создания принципиальных схем и печатных плат по ним. Дополнительные «плюсы» в копилку EAGLE: мультиплатформенность (мне приходится работать как на Win-, так и на MAC-компьютерах) и наличие бесплатной версии (с некоторыми ограничениями, которые для большинства «самодельщиков» покажутся совершенно несущественными).
Научить вас пользоваться EAGLE в этом топике не входит в мои планы (в конце статьи есть ссылка на замечательный и очень простой для освоения учебник по пользованию EAGLE), я лишь расскажу, некоторые свои «хитрости» при создании платы.
Мой алгоритм создания схемы и платы был примерно следюущий (ключевая последовательность):
Теперь уже можно определиться с подключением ключей и кнопок (смотрю, какие пины ближе к соответствующим цепям и которые проще будет подключить на плате), для этого хорошо перед глазами иметь следующую картинку:
Внимательный читатель увидит, что на схеме ниже фигурирует atmega8, в описании упоминается atmega168, а на картинке с чипом — вообще amega328. Пусть это вас не смущает — чипы имеют одинаковую распиновку и (конкретно для этого проекта) взаимозаменяемы и отличаются только количеством памяти «на борту». Выбираем то, что нравится/имеется (я в последствии в плату запаял 168 «камушек»: памяти побольше, чем у amega8 — можно будет побольше логики реализовать, но об этом во второй части).
После этого уже доделываю последние соединения в проекте печатной платы, «набрасываю» полигоны GND (поскольку лазерный принтер плохо печатает сплошные полигоны, делаю его «сеточкой»), добавляю пару-тройку переходов (VIA) с одного слоя платы на другой и проверяю, что не осталось ни одной не разведенной цепи.
У меня получилась платка размером 56х35мм.
Архив со схемой и платой для Eagle версии 6.1.0 (и выше) находится по ссылке.
Вуаля, можно приступать к изготовлению печатной платы.
Изготовление печатной платы
Плату делаю методом ЛУТ (Лазерно-Утюжная Технология). В конце поста есть ссылка на материалы, которые мне очень помогли.
Далее плату травлю в растворе хлорного железа (не допуская недо- и пере-травливания).
Тонер смываю ацетоном.
Совет: когда делаете мелкие платы, сделайте заготовку под нужное количество плат, просто разместив изображения верхней и нижней части платы в нескольких экземплярах — и уже это «комбинированное» изображение «накатывайте» на заготовку из стеклотекстолита. После травления достаточно будет разрезать заготовку на отдельные платы.
Только обязательно проверяйте размеры плат при вводе на бумагу: некоторые программы любят «чуть-чуть» изменить масштаб изображения при выводе, а это недопустимо.
Контроль качества
После этого делаю визуальный контроль (требуется хорошее освещение и лупа). Если есть какие-то подозрения, что имеется «залипуха» — контроль тестером «подозрительных» мест.
Для самоуспокоения — контроль тестером всех соседствующих проводников (удобно пользоваться режимом «прозвонка», когда при «коротком замыкании» тестер подает звуковой сигнал).
Если все-таки где-то обнаружен ненужный контакт — исправляю это острым ножом. Дополнительно обращаю внимание на возможные «микротрещины» (пока просто фиксирую их — исправлять буду на этапе лужения платы).
Лужение, сверление
Я предпочитаю плату перед сверлением залудить — так мягкий припой позволяет чуть проще сверлить и сверло на «выходе» из платы меньше «рвет» медные проводники.
Сначала изготовленную печатную плату необходимо обезжирить (ацетон или спирт), можно «пройтись» ластиком, чтобы убрать появившиеся окислы. После этого — покрываю плату обычным глицерином и дальше уже паяльником (температура где-то около 300 градусов) с небольшим количеством припоя «вожу» по дорожкам — припой ложится ровно и красиво (блестит). Лудить надо достаточно быстро, чтобы дорожки не поотваливались.
Когда все готово — отмываю плату с обычным жидким мылом.
После этого уже можно сверлить плату.
С отверстиями диаметром более 1мм все достаточно просто (просто сверлю и все — надо только вертикальность постараться соблюсти, тогда выходное отверстие попадет в отведенное ему место).
А вот с переходными отверстиями (я их делаю сверлом 0,6мм) несколько сложнее — выходное отверстие, как правило, получается немного «рваным» и это может приводить к нежелательному разрыву проводника.
Тут можно посоветовать делать каждое отверстие за два прохода: засверлить сначала с одной стороны (но так, чтобы сверло не вышло с другой стороны платы), а затем — аналогично с другой стороны. При таком подходе «соединение» отверстий произойдет в толще платы (и небольшая несоосность не будет проблемой).
Монтаж элементов
Сначала распаиваются межслойные перемычки.
Там где это просто переходные отверстия — просто вставляю кусочек медной проволоки и запаиваю его с двух сторон.
Если «переход» осуществляется через одно из отверстий для выводных элементов (разъемы, реле и т.п.): распускаю многожильный провод на тонкие жилы и аккуратно запаиваю кусочки этой жилы с двух сторон в тех отверстиях, где нужен переход, при этом минимально занимая пространство внутри отверстия. Это позволяет реализовать переход и отверстия остаются достаточно свободными для того, чтобы соответствующие разъемы нормально встали на свои места и были распаяны.
Тут опять следует вернуться к этапу «контроль качества» — прозваниваю тестером все подозрительные ранее и полученные в ходе лужения/сверления/создания переходов новые места.
Проверяю, что обнаруженные ранее микротрещины устранены припоем (или устраняю припаивая тонкий проводник поверх трещинки, если после лужения трещинка осталась).
Устраняю все «залипухи», если такие все-таки появились в процессе лужения. Это гораздо проще сделать сейчас, чем в процессе отладки уже полностью собранной платы.
Теперь можно приступать непосредственно к монтажу элементов.
Мой принцип: «снизу вверх» (сначала распаиваю наименее высокие компоненты, потом те, что «повыше» и те, что «высокие»). Такой подход позволяет с меньшими неудобствами разместить все элементы на плате.
Таким образом, сначала распаиваются SMD-компоненты (я начинаю с тех элементов, у которых «больше ног» — МК, транзисторы, диоды, резисторы, конденсаторы), потом дело доходит и до выводных компонентов — разъемов, реле и т.п.
Пульт радиоуправления моделями своими руками
Всем привет. Представляю на общее обозрение самодельный пульт радиоуправления для управления различными объектами на расстоянии. Это может быть машинка, танк, катер и т.д. изготовленное мной для “детского” радио кружка. С применением радио модуля NRF24L01 и микроконтроллера ATMEGA16.
Давно у меня лежала коробка одинаковых поломанных игровых джойстиков от приставок. Досталась от игрового заведения. Особого применения в неисправных игровых джойстиках я не видел, да и выкидывать или разбирать жалко. Вот и стояла коробка мертвым грузом пылилась. Идея применения игровых джойстиков, пришла, как только пообщался со своим приятелем. Приятель вел кружок для юных радиолюбителей в интернате, причем бесплатно по выходным, приобщал любознательных детишек к миру радиоэлектроники. Дети они ведь как губка, впитывают информацию. Так как я сам очень приветствую подобные кружки для детей, а тут еще и в таком месте. То и предложил идею, как задействовать нерабочие джойстики. Идея заключалась в следующем: создать самодельный радио дистанционный пульт управления моделями, собранными своими руками, который хотелось бы предложить детям для изучения проекта. Идея ему очень понравилась, учитывая, что финансирование детских учреждений мягко сказать не очень, да и мне был интересен данный проект. Пускай я тоже внесу свою лепту в развитие радио кружка.
Цель проекта создать законченное устройство не только как радио дистанционный пульт, но и ответную часть на радиоуправляемый объект. Учитывая, что пульт для детей то и подключение приёмной части на модель, также должно быть по возможности простым.
Сборка и комплектующие:
Разобрав игровой джойстик на составляющие, сразу стало ясно, нужно изготовить новую печатную плату, причем, весьма необычной формы. Сначала, хотел развести печатную плату на микроконтроллер ATMEGA48, но как оказалось портов микроконтроллера просто не хватает под все кнопки. Конечно, такое количество кнопок в принципе не нужно и можно было ограничиться только четырьмя портами микроконтроллера АЦП для двух джойстиков и два порта для тактовых кнопок, размещенных на джойстиках. Но мне захотелось по возможности максимально большое количество кнопок задействовать, кто знает, чего там детишки ещё захотят добавить. Так была рождена печатная плата под микроконтроллер ATMEGA16. Сами микроконтроллеры у меня были в наличии, остались от какого-то проекта.
Резинки на кнопках очень сильно были изношены, и восстановлению не подлежали. Но это не удивительно учитывая, где джойстики использовались. По этой причине применил тактовые кнопки. Пожалуй, к минусам тактовых кнопок можно отнести сильное щелканье, возникавшие в результате нажатия на кнопку. Но для данного проекта это весьма терпимо.
Плату с джойстиками не пришлось переделывать, оставил какая есть, что значительно сэкономило времени. Торцевые кнопки также сохранил в первоначальном виде.
В качестве приемопередатчика выбрал радиомодуль NRF24L01, так как цена весьма мала в Китае по цене 0.60$ за шт. купил. Несмотря на свою малую стоимость, радиомодуль обладает не малыми возможностями и конечно мне подходил. Следующей проблемой, с которой столкнулся, а собственно где радиомодуль разместить. Пространство в корпусе свободного маловато, по этой причине радио модуль разместил в одной из ручек корпуса джойстика. Даже фиксировать не пришлось, модуль плотно прижимался, когда собирался полностью корпус.
Пожалуй, самой большой проблемой стал вопрос с питанием для радио пульта. Покупка каких-то специализированных аккумуляторов, скажем литиевых, влетало в немалую копеечку, так как собирать решено было семь комплектов. Да и оставшееся свободное пространство в корпусе не очень позволяло использовать стандартные аккумуляторы серии AA. Хотя потребление и не значительное можно использовать разные подходящие источники питания. Как всегда, на помощь пришла дружба, коллега на работе подогнал аккумуляторы литиевые плоские от мобильных телефонов и бонусом зарядки к ним. Все же немного пришлось переделать их, но это незначительно и гораздо лучше, чем делать с нуля зарядку для аккумуляторов. Вот на плоских литиевых аккумуляторах я и остановился.
В процессе испытания радио модуль, свою заявленную дальность оправдал и уверенно работал по прямой видимости на расстоянии 50 метров, через стены дальность значительно уменьшилась. Также было в планах установить вибромотор, который реагировал, скажем на какие-то столкновения или другие действия в радиоуправляемой модели. В связи с этим предусмотрел на печатной плате транзисторный ключ для управления. Но дополнительные усложнения я оставил на потом сначала нужно обкатать программу, так как она ещё сыровата. Да и конструкция, учитывая, что это прототип требует мелких доработок. Вот так как говорится “с миру по нитке”, практически с минимальными вложениями был создан пульт радиоуправление.
Рцборда, или Как Сделать Управляемую через Интернет Машинку
За последние несколько лет мне довелось сделать немало дистанционно управляемых устройств. Некоторые управлялись локально, с обычного ПК или со смартфона. Некоторые — через Интернет. Все устройства объединяет общий принцип — управляет ими человек, ориентируясь по картинке с видеокамеры на борту устройства. А само управление, в итоге, сводится к выдаче управляющих сигналов на сервомоторы или регуляторы (драйверы) моторов.
Так что, набравшись опыта в данном деле, решил попробовать более-менее систематизировать различные типы управления устройствами, чтоб при создании нового девайса не приходилось кучу всего переписывать, а достаточно было лишь изменить некоторые параметры конфигурации. В результате родился программный комплекс RCboard, или РЦборда. Т.к. все управляемые штуки я делаю с контролером Virt2real (Виртурилка) в качестве главного бортового мозга, то и рцборда изначально писалась именно под неё. Так что всю связку можно пафосно называть «Программно-аппаратный комплекс РЦборда».
В общем, в продолжении топика попробую написать рецепт про то как с помощью Виртурилки и РЦборды из обычной радиоуправляемой машинки сделать машинку, управляемую через Интернет (ну и локально она тоже будет управляться). Каналом связи будет обычный Wi-Fi (выход в инет через домашний роутер) или 4G связь через свисток Yota.
Краулер BSD Racing 4WD RTR 2.4Ghz 1:10
Сразу уточню — под термином «радиоуправляемая машинка» я подразумеваю не дешёвые китайские машинки, в которых вся электроника реализована на одной плате, а более-менее приличные машинки, построенные по модульной схеме — которые имеют регулятор оборотов двигателя (коллекторного, бесколлекторного — неважно) и сервомашинку для управления поворотом передних колёс.
Такую машинку я приведу в качестве подопытного кролика лишь в этом рецепте, так как проще всего для повторения. С небольшими изменениями в настройках рцборды и добавлением платки-регулятора оборотов движка всё то же самое можно сделать и с любой машинкой, главное чтобы у машинки были колёса (да хоть гусеницы) и был моторчик.
Что понадобится для сборки
Но сначала, чтобы продемонстрировать некоторые варианты использования
Где это уже было использовано
Как я уже писал, рцборду мы уже много где использовали, но из задокументированных случаев нашёл только вот эти:
Испытания рцборды на багги в Шеньчжене, управление из Москвы
Испытания рцборды на краулере в Питере, управление из Москвы
Испытания рцборды на самолёте над Питером, управление из Москвы
Клёвый снегоуборщик под управлением рцборды
Кстати, сам снегоуборщик — разработка пермских ребят http://omiplow.ru
Самый тяжёлый девайс под управлением рцборды
Итак, подопытный кролик
Краулер для дистанционного управления хорош тем что он обладает очень высокой проходимостью.
У краулера полный привод, постоянная блокировка дифференциалов (все колёса крутятся одновременно) и постоянная «пониженная передача». Т.е. он ездит сравнительно медленно, но мощно и проходимо.
Настройка Виртурилки
Перед тем как собирать машинку, надо настроить Виртурилку. Сначала рассмотрим вариант с подключением по Wi-Fi.
Проверка подключения Виртурилки к сети
Общий принцип подключения моторов машинки
Обычно у RC машинки два мотора. Один обычный, коллекторный — крутит колёса. Второй — сервомотор, поворачивает передние колёса в нужную сторону. Т.е. получается что требуется всего два канала управления — газ и руль. Изначально (если машинка куплена в собранном виде) все каналы подключены к штатному радиоприёмнику трёхпиновыми разъёмами типа JR (стандартный серворазъём). Чёрный (или коричневый) провод — земля, красный — питание (5-6В), жёлтый (или белый, или оранжевый) — сигнальный провод.
Именно по сигнальному проводу мы и будем управлять моторами, но сначала надо подать питание на серву, которая рулит колёсами. Тут общий принцип такой — с бортового аккумулятора силовое питание с напряжением, равным напряжению аккумулятора, идёт по толстым проводам на мощный регулятор коллекторного (или бесколлекторного) мотора. Внутри этого регулятора есть так называемый BEC — преобразователь напряжения, делающий из различного аккумуляторного напряжения стабильные 5 Вольт (иногда 6В, можно выбирать перемычкой на регуляторе), требуемые для питания бортовых сервомашинок, приёмника и различной другой электроники. Это стабилизированное питание обычно рассчитано на нагрузку не более чем 2-3А, хотя это тоже зависит от модели регулятора.
Выходное напряжение BEC по чёрному и красному проводам тонкого трёхжильного шлейфа от регулятора подаётся на приёмник. Здесь таится главный нюанс, который не все сразу осмысливают. Повторюсь — от регулятора идёт кабель с тремя жилами. Из них две жилы это питание, которое выдаётся с регулятора, т.е. это выход. А третий провод (белый, жёлтый или оранжевый) — это провод управления, т.е. вход. Вроде мелочь, а почему-то многие путаются.
В приёмнике есть несколько групп трёхпиновых контактов. Их количество зависит от количества каналов, на которое приёмник рассчитан. У машинок обычно 2 или 3 канала, так что групп, соответственно, 3 или 4 (одна группа для установки перемычки Pair (сигнал на спаривание приёмника и передатчика). У этих групп контактов все пины питания замкнуты между собой, т.е. земля и питание приходят с регулятора и подаётся сразу на все группы контактов. А вот сигнальные пины все независимые, на них выдаётся сигнал, принятый приёмником с радиоаппаратуры управления.
Должно получиться примерно такое подключение
Если под рукой есть сервоудлинители — удобно сделать подключение с их помощью. У меня с ними вечный напряг, так что я просто обрезаю проводки и кручиваю-спаиваю.
И да, самое главное — питание на Виртурилку подаём прямо с контактов аккумулятора. Ей нестрашно напряжение вплоть до 20В, так что чем выше напряжение — тем лучше, ток меньший будет потреблять. КПД преобразователя питания (SEPIC, установлен на самой Виртурилке) падает только после 15В, так что идеальное питание — от 12 до 15 В, при этом в полной нагрузке (с вифи) Виртурилка будет потреблять около 150-300 мА. Хотя это тоже зависит от свистка (свисток Yota шибко прожорливый, с ним будет поболее).
Сборка машинки
Я попробовал заснять видео процесса сборки моего краулера. Не знаю, насколько там всё понятно, но лишним, думаю, не будет. Вот видеоролик про сборку:
Настройка сервера рцборды
Все настройки рцборды можно редактировать в специальной панели управления рцбордой (не путать с админкой Виртурилки). Вот так сейчас выглядит панель управления рцборды (первая версия)
Во вкладке «Общие настройки» можно задать имя устройства (отображается при обнаружении девайса в приложениях), указать надо ли запускать сервер рцборды автоматически при загрузке Виртурилки, задать тип конфигурации.
Конфигурация может быть локальная (т.е. файл конфигурации постоянно находится в каталоге рцборды и доступен для редактирования в панели управления), а может быть удалённая, когда файл конфигурации скачивается при каждом запуске рцборды с веб-сервера.
Сервер удалённых конфигов, по дефолту, http://rc.virt2real.ru/getconfig, создавать и редактировать конфигурации там разрешено только зарегистрированным пользователям форума forum.virt2real.ru
В топике я расскажу лишь про локальную конфигурацию, удалённую сами можете попробовать, если кому интересно. К слову, когда я катался на машинке по Шеньчженю (видео в конце топика), то как раз удалённый конфиг использовал, чтобы можно было менять настройки. Изменение настроек из приложения есть пока в виде набросков, толком ещё не работает, но даже когда и доделаю — удалённый конфиг всё равно пригодится.
Итак, больше всего нас сейчас интересует вкладка «Локальная конфигурация». Вообще, дефолтный конфиг уже настраивает рцборду в режим сервера, можно подключать машинку и управлять локально (в локальной сети, с виндового приложения, с андроидного или с айфонно-айпадного). Разве что может потребоваться каналы поменять местами. А вот для режима P2P (peer-to-peer), для управления через Интернет, настройки придётся менять.
По умолчанию за всё управление отвечает библиотека universal.so, параметры для которой находятся в конце конфига, в разделе «[universal]».
Соответствие каналов управления и каналов PWM/PPM задаётся параметром axis.
По дефолту настроено 4 канала PPM, которые находятся на пинах CON43, CON44, CON19, CON42. За это отвечают вот эти строчки конфига
ch0=43,ppm,500,1500,2500,127,0
ch1=44,ppm,500,1500,2500,127,0
ch2=19,ppm,500,1500,2500,127,1
ch3=42,ppm,500,1500,2500,127,1
Формат настройки канала такой:
chX=CON,TYPE,MIN,CENTER,MAX,NEUTRAL,NOAUTOCENTER
Где
X — номер канала PWM/PPM, от 0 до 3
CON — номер пина (не GPIO, а именно пина, см. схему)
TYPE — тип сигнала, ppm или pwm. Для машинки нужно ppm, для типа pwm другой формат строки конфига.
MIN — минимальное положение PPM сигнала, в миллисекундах.
MAX — максимальное положение PPM сигнала, в миллисекундах.
CENTER — центральное положение PPM сигнала, в миллисекундах.
NEUTRAL — относительное значение нейтрали, т.е. нейтральное значение команд управления. Обычно = 127
NOAUTOCENTER — если = 0 — автоматически возвращать сигнал в центральное положение, = 1 — не возвращать. Для каналов газа и руля машинки нужно указать 0, для каналов сервоприводов, которые используются для вращения камеры обзора — нужно указать 1 (если такие есть, конечно)
Если на машинке стоят фары, можно сделать их включение-выключение, потребуется собрать простейший усилитель транзисторный (один полевой транзистор, по сути). Для получения управляющего сигнала используется параметр «pins». Он задаёт пины, которые будут устанавливаться в 0 или 1 при нажатии кнопки в Virt2real Player (на экранных кнопках, на клавиатуре, мышкой или на геймпаде).
Формат такой:
pins=CHANNEL,CON,DEFVALUE,SAVESTATE|.
где
CHANNEL — канал кнопки (от 1 до 32)
CON — номер пина, который требуется установить в 0 или 1 по приходу команды управления с кнопок
DEFVALUE — значение, в которое данный пин будет установлен при запуске рцборды
SAVESTATE — если = 0 — при нажатии кнопки пин установить в 1, при отпускании — установить в 0. Если = 1 — при нажатии кнопки пин установить в 1, при отпускании кнопки ничего не делать. При следующем нажатии кнопки пин установить в 0, при отпускании — снова ничего не делать. И так в цикле.
Каналы кнопок можно указывать подряд, через разделитель «|».
Краткий вывод из этой смутной информации — если у вас перепутаны каналы газа и руля — можно их поменять местами, изменив параметр axis на axis=1,0,2,3 🙂
Если нужно ограничить крайнее положение сервы руля — меняем значения MIN и MAX для нужного канала. Если машинка при нейтральном положении едет вперёд или назад — изменить значение CENTER для нужного канала.
Дополнительные модули
Во вкладке «Дополнительные модули» находится список активных и неактивных модулей рцборды.
Модуль — это отдельное приложение (исполняемый бинарник), которое обычно выступает в качестве источника телеметрии. Активные модули — это те, которые запускаются автоматически при старте рцборды и завершаются при завершении её работы. В панели управления можно перемещать модули из одного столбца в другой, нажатием на оранжевую стрелочку. При перемещении в колонку активных — модуль сразу запускается, неважно, запущена рцборда или нет. При перемещении в неактивные — модуль автоматически прекращает работу.
Модули работают просто — читают требуемые параметры и по UDP отправляют на локальный порт (ext_telemetry), указанный в конфиге. А там уже рцборда принимает инфу и передаёт по каналу телеметрии в приложение Virt2real Player. Одновременно с этим та же информация передаётся в пользовательскую библиотеку девайса (в нашем случае это universal.so), чтоб приложение могло анализировать информацию и использовать по своему назначению. Например, у меня была библиотека девайса под названием autobot.so — управляемая тележка, которая помимо управления пользователем могла ещё и автономно ездить, ориентируясь по сигналу с ультразвукового дальномера.
Из основных модулей — statuswifi поставляет в рцборду информацию о статусе вайфай линка. Airosstatus.php (да, модуль можно и на похапе писать) — читает статус линка с оборудования Ubiquity, gps — читает GPS приёмник. Модуль imu обрабатывает инфу с инерциальных датчиков (углы Эйлера формирует, азимут и компас), правда он пока работает только с одним типом датчиков, так что для универсального использования ещё не годится. Nfc — читает NFC метки, но тоже работает только с одним типом ридеров. rc.in — читает PPM сигналы с RC приёмника, т.е. машинкой можно ещё и с обычной аппы управлять, у неё приоритет перед командами управления через вайфай. rfid — читает метки RFID. statusyota — читает статус линка 4G модема Yota. usrange — читает показания ультразвуковых дальномеров. voltage — определяет напряжение питания борта, требуется простенький делитель напряжения (2 резистора) подключить к ADC0. В общем, интересных модулей куча, по каждому предстоит подробное описание делать, так что пока считаем что я упомянул их для затравки 🙂
Для нашего рецепта управляемой машинки актуален модуль statuswifi — если настраиваем подключение через Wi-Fi или statusyota — если подключаем Виртурилку через свисток Yota.
Настройка приложений
В Андроидном и айпадно-айфонном приложениях настройки несложные, заключаются лишь в выборе каналов управления. В Андроидном есть ещё выбор канала кнопок (по умолчанию канал не задан, кнопки не отображаются). А вот в виндовом приложении я столько фич накрутил, что сам прихожу в состояние лёгкой паники при осознании того что всё это задокументировать надо. Пока могу только дать ссылочку на описание прошлой версии приложения
http://wiki.virt2real.ru/wiki/Как_сделать_управляемую_тележку_2
http://wiki.virt2real.ru/wiki/RCboard
Протокол управления с тех пор заметно видоизменился, но вот настройка виндового приложения поменялась несильно, так что может помочь при ковырянии. А подробное описание текущей версии постараюсь написать в следующем году 🙂
Кстати, в самой ранней версии для передачи телеметрии я использовал протокол MAVLINK, но по мере обрастания фичами его стало не хватать, так что перешёл на свой протокол. А MAVLINK подумываю добавить в качестве параллельного канала телеметрии, но это уже в следующей версии приложения.
Скажу лишь одно — лучше всего машинкой управлять с USB руля и педалей, подключённых к компу. Ну или хотя бы с RC аппы, подключённой тренерским разъёмом к компу. А пальцами по экрану смартфона может быть и круто, но нифига не удобно без тактильных ощущений.
А теперь самое главное — управление через Интернет
Вводная информация про P2P режим
Так как для канала управления и для канала видео используется UDP — так и хотелось сделать полноценный P2P (Peer-to-peer) линк, чтоб не гонять видео от борта до сервера и обратно до клиента. Ну, раз хотелось — взял и сделал 🙂 Фактически, получился простой и лёгкий аналог адобовского RTMFP (не путать с RTMP). Только вот передачу звука добавить никак руки не дойдут, так что рцборда пока немая и глухая.
С UDP какая основная проблема — преодоление NAT. Так как на одном из концов линка (на передающей стороне или на приёмной) обязательно есть NAT — просто указать адрес и порт сервера (или клиента) не получится — NAT помешает. В виндовом Virt2real Player есть возможность с помощью UPnP сделать проброс порта, но это не совсем то чего я хотел. А то что хотел — получилось только после вдумчивого курения технологии UDP Hole Punching. В итоге всё получилось как надо — неважно, какой роутер, неважно где клиент или сервер. Главное чтоб был выход в Интернет. Хотя вру, есть один единственный тип NAT, который пробить пока не удалось. Всё время забываю как он правильно называется, вроде бы симметричный NAT.
И да, обычные TURN и STUN серверы в рцборде не используются, только своя реализация. Как я обычно говорю: хочешь изучить технологию — сделай по своему, а потом сравни с общепринятыми решениями. Любители велосипедов меня поймут. Однако часто оказывается что велосипед не так уж плох и свои задачи выполняет лучше чем общепринятые решения.
Это так, лёгкий оффтоп был. Продолжаем про NAT. Поддержка P2P есть пока только в виндовом приложении Virt2real Player, в андроидное и айфонно-айпадное ещё не добавлял. Проверял работу с коннектом через свисток Yota, через свисток Beeline 4G, через точку доступа на смартфоне, который в инет выходил тоже через Beeline 4G. Во всех этих случаях всё работает, но заметил что идеально только через Yota. Через билайн (в любом из опробованных видах) тоже работает, но коннект дольше времени занимает. Почему так происходит — пока не разбирался. Из печального — пока не удалось заставить работать линк (и команд, и видео) когда и клиент и сервер подключены через 4G свистки. Возможно, тут как раз симметричный NAT и подкрался.
Настройка P2P режима, на борту стоит Wi-Fi
К Виртурилке на борту машинки подключён свисток Wi-Fi (т.е. как делали до сих пор по инструкции из этого топика). Только сначала мы управляли машинкой локально, а теперь сможем дать кому-нибудь порулить из Инета.
Для включения p2p режима идём веб-панель управления рцборды, раздел «Локальные настройки». Там устанавливаем параметр
Теперь необходимо задать параметры p2p_uid и p2p_hash. Это эдакий аналог логина-пароля, но полноценной авторизации пока нет (но будет обязательно), так что используем именно такую связку. p2p_uid лучше брать из своей учётки на rc.virt2real.ru/remoteconfig там он называется «ID пользователя», тогда будет механизм инвайтов работать (об этом чуть ниже). А p2p_hash надо придумать самостоятельно. Любой набор символов, максимальная длина 40 символов.
Всё, на этом настройка p2p режима рцборды закончена. Необходимо убедиться что Виртурилка имеет выход в инет и можно запускать Virt2real Player виндовый. Если его запустить в локальной сети, там же где и рцборда — плеер обнаружит локальную рцборду (неважно что она в p2p режиме) и можно будет подключиться напрямую. А вот если плеер запускается в другой сети, надо настроить его на p2p режим.
Иногда бывает что сообщения не появляются, тогда лучше просто перезапустить плеер (мой косяк, не отловил его ещё), при запуске он сам сразу начнём коннектиться с теми параметрами, которые мы ему задали, т.е. в режиме P2P.
Из замеченных нюансов — если плеер запускаем на компе, который выходит в инет через Yota — коннект быстро устанавливается. Само собой, если у Йоты сигнал нормальный. А вот если через роутер Yota или 4G свисток от Билайна — первое подключение может длиться до минуты. Но зато все последующие почти мгновенно будут. Я примерно знаю, где я накосячил, но исправить пока руки не дошли.
Настройка P2P режима, на борту стоит Yota
К micro-USB порту Виртурилки на борту машинки подключаем свисток Yota (через переходник USB-OTG, само собой). Те свистки, которые сейчас в продаже у Yota
В остальном всё аналогично предыдущему пункту. Разве что в настройках рцборды в разделе «Дополнительные модули» хорошо бы убрать из активных скриптов модуль statuswifi и наоборот, поместить в активные скрипты модуль statusyota, для того чтоб в плеере видеть параметры сигнала Yota.
Иллюстрации различных типов коннекта
К сожалению, дома у меня Yota еле-еле фурычит, так что полноценно не покатаешься. А вот Билайновский 4G отлично работает, поток 3 мегабита (и входящий, и исходящий) пролазит без проблем.
Во всех нижеприведённых экспериментах все настройки одинаковые, меняется лишь вид связи.