воскресенье, 10 декабря 2017 г.

Радиоуправление на ардуино

Используя arduino можно самостоятельно изготовить сложную систему радиоуправления не затрачивая, при этом, много усилий. Для популярной, на данный момент, платформы arduino существует огромное количество модулей расширяющих возможности данной платформы. Например модули nrf24l01 для радиосвязи. Существует некоторое колличество разновидностей данного модуля. Есть модули для связи на расстояниях до 100м они небольшие и недорогие
Радиомодули на дальность до 1100км
Радиомодули рассчитанные на дальность до 100м можно запитать от вывода 3.3В с Arduino uno а радиомодули на дальность до 1100м от этого вывода запитать нельзя т.к. данный вывод не способен выдать достаточный для нормальной работы модуля ток, поэтому если необходимо использовать модуль с дальностью радиосвязи до 1100м то необходимо использовать внешний стабилизатор на 3.3В для питания радиомодуля. О том как самостоятельно изготовить стабилизатор постоянного напряжения написано в статье http://electe.blogspot.ru/2015/10/lm317.html там же есть программа для рассчёта. Этот стабилизатор просто надо сделать на 3.3В для того чтобы можно было им запитать радиомодуль. Ещё для того чтобы сделать систему радиоуправления на ардуино нужно само ардуино. Можно использовать почти любое (если не любое) ардуино. Например (самый простой и лучше подходящий для начинающих вариант)
1) Arduino UNO http://ali.pub/236t0v
Если необходима компактность то можно использовать другие ардуины например:
2) Arduino nano http://got.by/23nhej
Также можно использовать любое другое ардуино но эти два (описанных выше) проще всего. Есть например 
3) Arduino pro mini http://got.by/23ni7b для программирования Arduino pro mini нужен usb-uart переходник или другое ардуино.
Теперь давайте рассмотрим схему передатчика:
Рисунок 1 - Передатчик на ардуино

У данного передатчика имеется 10 кнопок и 5 потенциометров. Допустим нам надо управлять дистанционно двумя серврмрторами, 3мя ШИМами, одним пьезодинамиком и 8ю цифровыми выходами для каких либо целей (напр. сделать 8 фонарей на радиоуправлямый автомобиль или 1 фонарь а 7 выводов оставить для чего нибудь на будущее). На схеме выше показна ардуино уно но аналогично можно соединить радиомодуль кнопки и потенциометры с другим ардуино для этого надо использовать надписи на плате ардуино. Давайте теперь рассмотрим приемник:
Рисунок 2 - Приемник на Ардуино

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

Скачать скетчь передатчика можно по ссылке https://yadi.sk/d/II58CGgc3QV8gz
В начале скетча подключаются заголовочные файлы для связи с радиомодулем потом назначаются пины для связи с радиомодулем по SPI, указывается идентификатор трубы который должен совпадать с идентификатором трубы указанном в скетче приемника (см. ниже), создаётся массив для передачи данных на приемник. Далее идёт функция инициализации в которой инициализируется и настраивается радиомодуль после чего он устанавливается на передачу данных, инициализируются входы ардуино и делается небольшая задержка на всякий случай. В основном цикле считываются значения с потенциометров для сервомоторов и преобразуются в градусы функцией map. Далее, в следующую ячейку массива, запихиваются состояния входов ардуино побитно. После чего считываются значения с потенциометров для управления ШИМами, делятс на 4 т.к. аппаратный ШИМ ардуино принимает 1 байт. Оставшиеся два состояния, с кнопок, пропихиваются в оставшуюся ячейку массива и он, наконец таки, отправляется на приемник.
Теперь скетчь приемника:
Скачать скетчь приемника можно по ссылке https://yadi.sk/d/FtO9F5HZ3QV8Ct
В приемнике помимо заголовочных файлов для связи с радиомодулем есть ещё заголовочный файл для работы с сервомоторами. Радиомодуль теперь настраивается на прием. В основном цикле происходит прием и раздача информации на периферию микроконтроллера ардуины. 
Посмотреть видео по данной теме с испытаниями системы радиоуправления на ардуино:

10 комментариев:

  1. Здравствуйте. У меня есть много модулей на NRF905 (433/868/915MHz) со встроенной антенной (на плате). С паяльником дружу, а вот с программированием плохо. Я мог бы щедро поделиться ими. Если бы найти им применение... Да где угодно - телеметрия, радиоуправление, может и передача звука :) SMoshin@yandex.ua Я из Украины если что.

    ОтветитьУдалить
    Ответы

    1. Здравствуйте! Давайте скооперируемся, я тоже с Украины.

      Удалить
  2. так и не завелась машина. может что не так подключал?

    ОтветитьУдалить
    Ответы
    1. Возможно. Неправильное подключение это самая частая причина того что что то не работает. Ещё в данном случае у многих не получается откомпилировать скетч из за того что данный подходит для старой библиотеки радиомодуля, если проблема в этом то можно немного поменять код либо установить старую библиотеку.

      Удалить
  3. Вот еще вопрос, а как можно это реализовать для 12v двигателя?

    ОтветитьУдалить
  4. Здравствуйте!
    Не компилируется скеч приемника из-за строки done = radio.read( joystick, sizeof(joystick) );
    Заменил на radio.read( joystick, sizeof(joystick) ); все прошло.
    Будет ли работать еще не проверял
    С уважением А.С.

    ОтветитьУдалить
  5. а можно сылку на старую библиотеку .не могу найти

    ОтветитьУдалить