Пульт дистанционного управления (радиопередатчик) на Arduino и NRF24L01


В данной статье мы рассмотрим создание на основе платы Arduino и модуля NRF24L01 пульта дистанционного управления (радиопередатчика, RC controller), который будет работать на частоте 2,4 ГГц. Данный пульт дистанционного управления (ДУ) можно использовать для управления практически любыми устройствами, в которых приемник построен на основе модуля NRF24L01.

Пульт дистанционного управления на Arduino и NRF24L01

Также ранее на нашем сайте мы рассматривали аналогичный пульт дистанционного управления на Arduino, но попроще. Рассматриваемый в данной статье пульт более функциональный.

Обзор проекта

С помощью данного пульта ДУ можно управлять любым проектом на основе платы Arduino по беспроводной сети, сделав лишь небольшие изменения на стороне приемника. Этот передатчик также можно использовать как любой коммерческий радиоуправляемый передатчик для управления радиоуправляемыми игрушками, автомобилями, дронами и т. д. Для этой цели ему просто нужен простой приемник Arduino, который затем генерирует соответствующие сигналы для управления этими устройствами.

Пример дистанционного управления автомобилем

Радиосвязь этого контроллера основана на модуле приемопередатчика NRF24L01, который при использовании с усиленной антенной может иметь стабильную дальность действия до 700 метров на открытом пространстве. Он имеет 14 каналов, 6 из которых являются аналоговыми входами, а 8 - цифровыми входами.

Основные компоненты пульта ДУ

Он имеет два джойстика, два потенциометра, два тумблера, шесть кнопок и, кроме того, внутренний измерительный блок, состоящий из акселерометра и гироскопа, который также можно использовать для управления объектами, просто перемещая или наклоняя контроллер.

Принципиальная схема радиопередатчика на Arduino

Для начала давайте взглянем на принципиальную схему. «Мозгом» этого радиоуправляемого контроллера является плата Arduino Pro Mini, который питается от двух LiPo-батареек напряжением около 7,4 В. Мы можем подключить их непосредственно к контакту RAW Pro Mini, который имеет регулятор напряжения, снижающий напряжение до 5 В. Обратите внимание, что существует две версии Arduino Pro Mini: одна у меня работает с напряжением 5 В, а другая — с напряжением 3,3 В.

Принципиальная схема радиопередатчика на Arduino

С другой стороны, модулю NRF24L01 строго требуется напряжение 3,3 В, и рекомендуется получать его из специального источника. Поэтому нам нужно использовать стабилизатор напряжения 3,3 В, который подключается к батареям и преобразует 7,4 В в 3,3 В. Также нам необходимо использовать развязывающий конденсатор рядом с модулем, чтобы поддерживать более стабильное напряжение и, таким образом, радиосвязь также будет более стабильной. Модуль NRF24L01 обменивается данными с Arduino по протоколу SPI, а модуль акселерометра и гироскопа MPU6050 использует протокол I2C.

Необходимые компоненты

  1. Плата Arduino Pro Mini (купить на AliExpress).
  2. Модуль nRF24L01 + PA + LNA (купить на AliExpress).
  3. Модуль акселерометра и гироскопа MPU6050 (купить на AliExpress).
  4. Потенциометр.
  5. Серводвигатель.
  6. Тумблер.
  7. Джойстик.
  8. Джойстик без коммутационной панели.
  9. HT7333 (стабилизатор напряжения 3,3в) (купить на AliExpress).
  10. Регулятор напряжения AMS1117 3,3 В (купить на AliExpress).

Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158

Проектирование печатной платы для проекта

В итоге я использовал все аналоговые и цифровые контакты Arduino Pro Mini. Так что теперь, если я попытаюсь соединить все вместе с помощью соединительных проводов, это будет полный беспорядок. Поэтому я разработал специальную печатную плату, используя бесплатное онлайн-программное обеспечение для проектирования схем EasyEDA.

Прототип печатной платы для проекта в EasyEDA

Здесь я учел эргономику контроллера и спроектировал его так, чтобы его можно было легко держать двумя руками, а все элементы управления находились в пределах досягаемости пальцев. Я закруглил края и добавил несколько отверстий диаметром 3 мм, чтобы позже можно было прикрепить печатную плату к чему-нибудь. Я разместил контакты для программирования Arduino Pro Mini на верхней стороне контроллера, чтобы к ним можно было легко получить доступ, если мы захотим перепрограммировать Arduino. Здесь мы также можем заметить, что я использовал контакты RX и TX Arduino для кнопок джойстика. Однако эти две линии необходимо отключить от чего-либо, пока мы загружаем скетч в Arduino. Поэтому они прерываются двумя контактами, которые затем можно легко соединить с помощью простых перемычек.

Обратите внимание: убедитесь, что у вас есть правильная версия Arduino Pro Mini для обработки печатной платы или изменения конструкции печатной платы в соответствии с ней. Вот сравнение фотографий трех разных версий, в зависимости от вашего Arduino и регулятора напряжения.

Три различных варианта печатной платы для нашего радиопередатчика

Вот ссылка на файлы проекта этой печатной платы. Откроется три разные версии на отдельных вкладках, и вы сможете выбрать ту, которая вам нужна.

Итак, закончив проектирование, я создал файл Gerber, необходимый для изготовления печатной платы.

Гербер-файлы для изготовления печатной платы:

Внешний вид изготовленной печатной платы представлен на следующем рисунке. Качество печатной платы отличное, все точно так же, как и в дизайне.

Внешний вид изготовленной печатной платы

Сборка электронной части пульта ДУ

Хорошо, теперь мы можем перейти к сборке печатной платы. Я начал с пайки разъемов контактов Arduino Pro Mini. Самый простой и хороший способ сделать это — разместить их на макетной плате, чтобы они прочно оставались на месте во время пайки.

Необходимые компоненты для изготовления пульта ДУ

Pro Mini также имеет контакты по бокам, но учтите, что расположение этих контактов может различаться в зависимости от производителя.

Припаивание Arduino Pro Mini на печатную плату

Для моей конкретной модели мне нужно по 5 контактов для каждой стороны, оставив при этом один контакт GND пустым, поскольку я использовал его область ниже на печатной плате для проведения некоторых трассировок. Я припаял Arduino Pro Mini непосредственно к печатной плате и обрезал разъемы по длине. Рядом с ним находится модуль акселерометра и гироскопа MPU6050.

Установка модуля акселерометра и гироскопа MPU6050 на печатную плату

Затем припаял стабилизатор напряжения 3,3В с конденсатором рядом и еще один конденсатор возле модуля NRF24L01. У этого модуля есть три разные версии, и мы можем использовать здесь любую из них.

Различные версии модуля NRF24L01

Я продолжил работу с контактами для программирования Arduino, контактами RX и TX, контактами источника питания и выключателем питания.

Затем, чтобы припаять потенциометры к печатной плате, мне пришлось удлинить их контакты с помощью разъемов для контактов.

Удлинение контактов потенциометра

Здесь можно отметить, что я заранее обрезал ручки, чтобы можно было правильно надеть на них колпачки. Однако потенциометры к плате мы припаяем чуть позже.

Затем я вставил и припаял на место два тумблера и два джойстика.

Установка тумблеров и джойстиков на печатную плату

Наконец, осталось припаять четыре кнопки. Однако у них нет подходящей высоты, поэтому я снова использовал разъемы, чтобы немного расширить их контакты.

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

Печатная плата пульта ДУ со всеми установленными на нее компонентами

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

Прозрачный акрил для изготовления крышки пульта ДУ

Поэтому я отметил форму печатной платы и с помощью ручной пилы по металлу вырезал акрил в соответствии с ней.

Вырезание из акрила заготовки нужной формы

Затем с помощью простого рашпиля я доработал форму акрила. Две пластины получились великолепными и идеально сочетаются с печатной платой.

Обработка заготовки из акрила с помощью рашпиля

Затем я отметил места, где мне нужно сделать отверстия для прохождения компонентов. С помощью сверла диаметром 3 мм я сначала проделал 4 отверстия для крепления пластин к печатной плате. Для этих отверстий я также сделал зенковки, чтобы болты можно было соединить с пластинами.

Просверливание отверстий в заготовке из акрила

Для отверстий под тумблеры и потенциометры я использовал сверло диаметром 6 мм, а для отверстий джойстика — сверло Форстнера диаметром 25 мм. Опять же, используя рашпиль, я подправил все отверстия.

Просверливание отверстий для джойстика с помощью сверла Форстнера

Прежде чем собирать крышку, обратите внимание: на самом деле я припаял контактный разъем блока питания в перевернутом положении, чтобы к нему можно было добраться с задней стороны, где будет расположен аккумулятор.

Припаянный контактный разъем блока питания

Хорошо, теперь можно приступить к сборке чехла. Я начал с снятия защитной фольги с акрила, что, должен признаться, меня очень удовлетворило, потому что акрил теперь был таким чистым. Поэтому сначала я закрепил два потенциометра на верхней пластине, вставил крепежные болты диаметром 3 мм и установил дистанционные кольца диаметром 11 мм.

Прикрепление заготовки из акрила к печатной плате

Затем я аккуратно соединил и закрепил верхнюю пластину и печатную плату с помощью болтов. На этом этапе я наконец припаял потенциометры к плате, поскольку раньше я не знал точно, на какой высоте они будут размещены.

Припаивание потенциометров к печатной плате

Затем на задней панели я прикрепил держатель аккумулятора с помощью 2 болтов. Я закончил сборку крышки, прикрепив заднюю пластину к задней стороне печатной платы с помощью четырех крепежных болтов.

Установка держателя для аккумуляторов

Наконец, мы можем прикрепить линии батареи к контактам источника питания, вставить и закрепить ручки на потенциометрах, вставить ручки джойстиков и прикрепить антенну к модулю NRF24l01. Вот и все, мы наконец закончили сборку RC-передатчика Arduino своими руками.

Прикрепление антенны к модулю NRF24l01

Теперь осталось запрограммировать плату Arduino. Для программирования платы Pro Mini нам понадобится интерфейс USB-последовательный UART, который можно подключить к разъему для программирования, расположенному на верхней стороне нашего контроллера.

Интерфейс для программирования платы Arduino Pro Mini

Затем в меню инструментов Arduino IDE нам нужно выбрать плату Arduino Pro или Pro Mini, выбрать подходящую версию процессора, выбрать порт и выбрать метод программирования «USBasp».

Задание настроек для программирования платы Arduino

Итак, теперь мы можем загружать код в плату Arduino.

Код пульта ДУ на основе платы Arduino

Давайте рассмотрим как работает код нашего передатчика. Итак, сначала нам нужно подключить библиотеку SPI и RF24 для беспроводной связи, а также библиотеку I2C для модуля акселерометра. Затем нам нужно определить цифровые входы, некоторые переменные, необходимые для приведенной ниже программы, создать радиообъект и задать адрес связи.

Затем нам нужно задать структуру, в которой мы будем хранить 14 входных значений контроллера. Максимальный размер этой структуры может составлять 32 байта, поскольку это ограничение буфера NRF24L01 или объем данных, которые модуль может отправить одновременно.

В разделе настройки нам необходимо инициализировать модуль MPU6050, а также мы можем рассчитать ошибку IMU, которая представляет собой значения, которые позже используются при расчете правильных углов модуля.

Также на нашем сайте вы можете найти более подробную информацию о работе MEMS-акселерометра и гироскопа.

Затем нам нужно инициализировать радиосвязь, активировать внутренние подтягивающие резисторы Arduino для всех цифровых входов и установить начальные значения по умолчанию для всех переменных.

В разделе цикла начните с чтения всех аналоговых входов, сопоставьте их значения от 0 до 1023 с байтовыми значениями от 0 до 255, поскольку мы уже определили переменные в нашей структуре как байты. Каждый ввод сохраняется в конкретной переменной данных из нашей структуры.

Следует лишь отметить, что, поскольку мы используем подтягивающие резисторы, показания цифровых выводов равны 0 при нажатии кнопок.

Таким образом, используя функцию radio.write(), мы просто отправляем значения со всех 14 каналов на приемник.

В случае, если тумблер 1 включен, то для управления мы используем данные акселерометра и гироскопа.

Таким образом, вместо значений X и Y джойстика 1 мы используем значения углов, которые мы получаем от IMU, которые мы предварительно конвертируем из значений от -90 до +90 градусов в байтовые значения от 0 до 255 соответственно.

Полный код для нашего пульта ДУ:

Код приемника (получателя)

Теперь давайте посмотрим, как мы можем получить эти данные. Вот простая схема приемника на Arduino и модуле NRF24L01. Конечно, вы можете использовать любую другую плату Arduino.

Схема приемника на Arduino и модуле NRF24L01

А вот простой код получателя, в котором мы будем получать данные и просто распечатывать их на последовательном мониторе, чтобы знать, что связь работает правильно. Нам снова нужно подключить библиотеку RF24 и определить объекты и структуру так же, как и в коде передатчика. В разделе настройки при определении радиосвязи нам необходимо использовать те же настройки, что и для передатчика, и установить модуль в качестве приемника с помощью функции radio.startListening().

В основном цикле с помощью функции Available() мы проверяем, есть ли входящие данные. Если это правда, мы просто читаем данные и сохраняем их в переменных структуры. Теперь мы можем распечатать данные на последовательном мониторе, чтобы проверить, правильно ли работает передача. Также с помощью функции millis() и оператора if мы проверяем, продолжаем ли мы получать данные или если мы не получаем данные в течение периода более 1 секунды, затем мы сбрасываем переменные к значениям по умолчанию. Мы используем это для предотвращения нежелательного поведения, например, если у дрона есть газ, и мы теряем соединение, он может продолжать улетать, пока мы не сбросим значения.

Итак, это все. Теперь мы можем реализовать этот метод получения данных для любого проекта Arduino.

Управление роботом-муравьем на Arduino с помощью нашего пульта ДУ

Управление роботом-муравьем на Arduino с помощью нашего пульта ДУ

Вы можете использовать представленный передатчик (пульт ДУ) для управления роботом-муравьем на Arduino из предыдущей статьи на нашем сайте. Нам просто нужно прочитать данные и в соответствии с ними выполнить соответствующие функции, такие как движение вперед, влево, вправо, укус, атака и так далее.

ESC и сервоуправление с помощью RC-передатчика

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

Использование передатчика для управления BLDC двигателем

Обычно для этих устройств нам необходимо управлять сервоприводами или бесщеточными двигателями. Поэтому после получения данных от передатчика для управления сервоприводом мы просто используем библиотеку Arduino Servo и используем значения от 0 до 180 градусов. Для управления бесщеточным двигателем с помощью ESC мы снова можем использовать сервобиблиотеку для генерации сигнала ШИМ частотой 50 Гц, используемого для управления ESC. Изменяя рабочий цикл от 1000 до 2000 микросекунд, мы контролируем частоту вращения двигателя от нуля до максимума.

Обратите внимание, что на самом деле мы не можем связать стандартную систему RC-приемника с этой системой NRF24L01 2,4 ГГц. Вместо этого нам нужно модифицировать или создать собственный приемник, состоящий из Arduino и модуля NRF24L01. Отсюда мы можем генерировать соответствующие сигналы PWM (ШИМ) или PPM для управления RC-устройством.

Использование передатчика и приемника для дистанционного управления устройствами

Код программы при этом также претерпит некоторые изменения.

Видео, демонстрирующее процесс сборки и работу проекта

Источник статьи

(Проголосуй первым!)
Загрузка...
78 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *