Надо сказать, что полноценный пульт управления для авто/судо моделей мне в руках держать как-то не приходилось. Всегда использовал авиационные. Сама идея сделать такой пульт родилась после покупки игрушки для сына. Надо сказать пульт вполне похож на полноценный. Есть правда несколько "НО":
1. всего 2 канала
2. приемник к нему купить можно, но он идет вместе с коллекторным регулятором скорости и сервой (все-в-одном). При чем последние достаточно низкого качества и годятся только для игрушек.
3. на пульте можно триммировать каналы. Но и только... Других функций у него нет.

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

Вскрытие показало наличие большого свободного пространства. Элементы управления (курок и колесо) сделаны на обычных переменных резисторах 5кОм. Не понравилось, что ход их составляет 100 градусов. Ну да переживем...
Удивило так же наличие достаточно неплохого радиомодуля с выходной мощностью 100мВт. Правда такие в наших краях птица редкая и от его использования я отказался. Вся электронная начинка отправилась в запчасти на случай, если сгорит первый пульт.

 

 

 

 

 

 

 

 

 

 

 

Теперь займемся новой начинкой. Будущий пульт должен работать на уровне земли. Следовательно предпочтительнее использование радиомодуля мегагерцового диапазона. На глаза очень кстати попался OrangeRx 433МГц приемник. Ему то и будет уготована участь "мозгов" в будущем устройстве. Принимая во внимание его доступность и то, что это фактически радиомодуль и микроконтроллер сразу, лучшей альтернативы я придумать не смог. Единственное, что возмутило до безобразия - радиомодуль в этой схеме предполагает использование программного SPI. Как следствие - дефицит свободных пинов. Ну и какой же пульт без дисплея. Настройки делать, телеметрию отображать надо. Значит дисплею быть! В корпусе для него даже место есть (в стоке закрыто заглушкой с наклейкой). Требований к дисплею два: интерфейс SPI и максимально близкий к имеющемуся окошку размер. В итоге лучше всего подошел дисплей Arduino TFT.

 

 

 

 

 

 

 

 

 

 

 

Бонусом получаем SD-карту и цветное изображение.

 

Проведя ревизию я пришел к следующему:

1. на плате есть свободный аппаратный SPI. То, что на SCK висит светодиод - не помеха. Будет мешать - отпаять не долго.
2. из входов АЦП легко доступны только два совмещенные с I2C. Их и используем. Еще две линии не распаяны - по необходимости можно влезть в схему с паяльником и подпаять пару проводков прямо к ногам микроконтроллера. Остальные заняты радиомодулем. На данный момент двух входов мне будет достаточно. А в случае необходимости есть еще вариант использования внешнего коммутатора АЦП.
3. кнопки управления. Я пришел к выводу, что мне их понадобится 5-6 штук. И раз уж взялся активно использовать SPI, то и кнопки подключим через него. Для этого нам понадобится сдвиговый регистр 74HC165. Подключение очень хорошо расписано в этой статье и я на этом останавливаться не буду.
4. Все для организации радиоканала уже есть и можно использовать готовые наработки.

 

Проработка функционала

На самом деле при управлении большинством авто/судо моделей достаточно двух пропорциональных каналов. Один отвечает за скорость/направление движения, другой - за повороты. Обычно не хватает дискретных каналов для организации световых и звуковых эффектов. Как я уже упоминал ранее, для пропорциональных каналов я решил оставить курок и колесо без изменений. Для организации же дискретных каналов я решил предусмотреть кнопки. При чем большинство кнопок будет иметь двойное назначение: при входе в меню они будут отвечать за навигацию, а в обычном режиме работать как управляющие элементы дискретных каналов. Такое решение было принято еще и из-за того, что я решил использовать штатные места для кнопок и сверлить дырки в корпусе только в случае крайней необходимости. Итого получился такой расклад:

1. кнопка привязки - решено было оставить ее на том месте где есть и использовать как и было задумано в пульте изначально. В противном случае неизбежно пострадал бы внешний вид. А ему и так еще достанется.
2. кнопка меню(она же кнопка подтверждения) - Вот для нее я сделаю отдельное отверстие где-нибудь в таком месте корпуса, где будет наименьшая вероятность случайного нажатия.
3. кнопка "+" будет совмещена с дискретным каналом 1
4. кнопка "-" - с дискретным каналом 2
5. кнопка отмены - с каналом 3
6. кнопка канала 4

 

Первые 5 кнопок будут располагаться на штатных местах пульта. Надо сказать, что сдвиговый регистр - 8-ми разрядный и в нем еще осталась возможность подключения еще двух кнопок. При необходимости можно будет без труда расширить пульт еще двумя дискретными каналами.

 

Кнопки в режиме управления каналами должны будут иметь возможность работать в двух вариантах - с фиксацией и без. Регулироваться это будет отдельной настройкой в меню.

 

Меню пульта решил построить следующим образом. Главный экран должен отображать несколько жизненно важных показателей с телеметрии. Пока окончательной определенности в вопросе "что это будут за показатели?" нет. Примерно такие: напряжение бортовой батареи, температура двигателя, качество радиосигнала на стороне модели (RSSI). Так же не плохо бы отобразить наименование модели.

 

Вход в основное меню будет осуществляться кнопкой "меню". Чтобы выйти из меню или вернуться на предыдущий его уровень надо будет нажать кнопку "отмена". Для выбора пунктов подменю и сохранения настроек будет служить та же кнопка "меню". Кнопки + и - будут служить для смены активной позиции в меню и изменения значений выбранных настроек. Итого получилось:

Схема подключения кнопок и дисплея:

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

Результат:

Теперь ставим все на свои законные места...

 

 

После этого поставил кнопку сбоку, спаял на макетке регистр и стабилизатор питания на 5В (7805).

Пульт будет питаться от LiPo 3S.

Сейчас пульт выглядит примерно так:

 

 

 

Провода, торчащие вместо штатной антенны - явление временное. Это выведен UART для заливки прошивки. В конечном итоге там будет стоять родная заглушка.

Пара фото меню напоследок...

 

 

На роль приемника использован такой же модуль OrangeRx Open LRS в чистом виде.

На данный момент пульт может хранить 8 моделей. Реализован своего рода Model Match - невозможно использовать настройки одной модели с другой. Так же как и невозможно использовать модель с другой копией такого же пульта. Привязка сделана таким образом, чтоб обеспечивать однозначность модели в пульте и приемника в модели. Работают 2 пропорциональных и 4 дискретных канала.

 

В планах на ближайшее будущее:

1. Написать FHSS - скачкообразное изменение частоты. Пока пульт жестко работает на одном канале.

2. Написать передачу телеметрии с модели на пульт и отображение ее на экране.

 

P.S. В чем плюсы для меня:

1. не надо ждать 2 месяца посылку из Китая

2. начинка пульта - в большой степени универсальные модули. Если мне не нужен будет этот пульт - я его разберу и использую их в других проектах.

3. 4 дискретных канала для управления разного рода эффектами.

4. открытое железо и открытый код - я волен встроить в эту систему радиоуправления все что мне понадобится.

5. Это хобби и процесс сам создания в удовольствие.