Радиоуправление на Ардуино и NRF24L01: описание модуля и двухсторонняя связь

Вопросы и ответы

Шаг 1. Комплектующие

Чтобы сделать модель радиоуправляемой машины (радиоуправляемой машины) на Arduino и с возможностью управления через смартфон, нам понадобятся следующие детали:

  1. Комплект шасси робота 4WD
  2. Ардуино Уно
  3. LM298 H-мостовой модуль
  4. Модуль Bluetooth HC-05
  5. Li-Po аккумулятор 12 В
  6. Джемперы
  7. Папа-папа темы
  8. Малярный скотч или любой другой скотч
  9. Смартфон

Шаг 2. Шасси

Вы можете купить готовый комплект для сборки каркаса 4WD или сделать его из ПВХ или любого типа жесткой доски. Наша версия, изображенная выше, была куплена в интернет-магазине. Сделать аналог этого каркаса своими руками вполне реально. Тип оправы особого значения не имеет, можете выбрать на свой вкус.

Шаг 3. Моторы (приводы)

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

Отрежьте 4 куска красной и черной ниток длиной около 5-6 дюймов (12-15 см). Можно использовать кабели 0,5 мм. Снимите изоляцию с проводов с каждого конца. Припаяйте провода к клеммам двигателя.

полярность двигателя можно проверить, подключив его к аккумуляторной батарее. Если он вращается вперед (красный провод от положительного полюса и черный провод от отрицательного полюса аккумулятора), соединение правильное.

Связь двух плат Ардуионо посредством радиомодулей RF24

Чтобы подключить к обеим две платы arduin, необходимо подключить радиомодуль RF24 согласно схеме выше. Один радиомодуль должен быть настроен в режиме приемника, а другой — в режиме передатчика. Для этого следующие программы необходимо вшить в соответствующие платы ардуино. Следовательно, когда получатель получит данные от отправителя, мы узнаем об этом.

Связь двух плат Arduiono через радиомодули RF24

Режимы работы и управление приёмопередатчиком nRF24L01

Трансивер может находиться в четырех состояниях: выключен, ожидает, принимает, передает. Микросхема nRF24L01 имеет встроенный конечный автомат, который обеспечивает правильный переход между этими состояниями. Пользователь проверяет состояния, загружая специальные команды в регистры управления.

Режим выключения (power down mode)

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

Режим ожидания (standby mode)

Есть два режима ожидания.

Первый режим ожидания (Standby-I) используется для снижения потребления. В этом режиме микросхема принимает команды через SPI, быстро входит в режим передачи и так же быстро возвращается в режим ожидания 1. Для входа в этот режим установите бит PWR_UP на «1» на CE и установите бит PWR_UP в регистре CONFIG».

Второй режим ожидания (Standby-II) потребляет больше энергии, чем первый: микросхема полностью работоспособна, и устройство готово к приему и передаче почти мгновенно (около 130 мкс). Как только в буфере передачи появляются данные, чип nRF24L01 начинает передачу. Чтобы войти в этот режим, CE должен находиться в состоянии «HIGH», а бит PWR_UP должен быть установлен в «1» в регистре CONFIG».

Режим приёма (RX mode)

Так микросхема nRF24L01 используется в качестве приемника. При этом он постоянно сканирует эфир на наличие действительных пакетов. Как только действительный пакет найден, он помещается в свободный слот приемного буфера. Если буфер заполнен, пакет игнорируется.

Чтобы переключиться в режим приема, установите биты PWR_UP и PRIM_RX в «1» и установите вывод CE в «HIGH». Режим будет поддерживаться до тех пор, пока контроллер не перейдет в другой режим (например, режим ожидания или выключение).

Шаг 4. Установка двигателей

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

Arduino NANO V3 (ATmega 328P / CH340G)

Ардуино Нано V3.0

SYB-170 – макетная плата на 170 точек

SYB-170 Макетная плата 170 точек (макет)

Подключение приёмопередатчика nRF24L01к Arduino

Подключаем модули к Arduino, как показано на рисунке. Каждый модуль на свой контроллер.

Схема подключения nRF24L01 к Arduino
Схема подключения nRF24L01 к Arduino

Модули подключаются точно так же, как вы понимаете. И программы в Ардуино будут другими. Один модуль будет работать как приемник, а другой как передатчик. Но сначала нужно скачать библиотеку для nRF24L01 и установить обычным способом. Библиотека также прилагается в конце статьи.

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

Загрузите скетч приемника на другую Ардуинку:

В моем случае макет со связанными модулями выглядит так:

Пользователи часто сообщают о проблемах с питанием этих модулей nRF24L01. Это проявляется в том, что нет приема. В этом случае попробуйте впаять конденсатор емкостью 1… 2 пФ в свободное пространство модуля.

Запускаем последовательный монитор для платы Arduino, которая управляет приемником nRF24L01. На мониторе мы увидим, что 1 раз в секунду мы получаем пакеты, 31 байт, в которых они не меняются, а последний, 32-й, содержит увеличивающийся счетчик.

Пакеты, полученные радиоприемником nRF24L01 в последовательном мониторе
Пакеты, полученные радиоприемником nRF24L01 в последовательном мониторе

Мы убедились, что модули работают и что мы можем использовать их для передачи и приема данных по радиоканалу. Теперь займемся «капюшоном» и узнаем, как заставить работать трансивер nRF24L01.

Шаг 5. Ардуино контроллер

Arduino UNO — это плата микроконтроллера с открытым исходным кодом, основанная на микроконтроллере Microchip ATmega328P и разработанная Arduino.cc.

Плата оснащена наборами цифровых и аналоговых контактов ввода / вывода (I / O), которые могут быть подключены к различным платам расширения (экранам) и другим схемам. Плата имеет 14 цифровых контактов, 6 аналоговых контактов и программируется с помощью Arduino IDE (интегрированная среда разработки) через кабель USB типа B. Плата может питаться от кабеля USB или внешней батареи 9 В, хотя она принимает от 7 до 20 вольт, вольт, аналогично Arduino Nano и Leonardo.

Эталонный дизайн аппаратного обеспечения находится под лицензией Creative Commons Attribution Share-Alike 2.5 и доступен на веб-сайте Arduino. Существуют также файлы макета и производственные файлы для некоторых версий оборудования. «Uno» в переводе с итальянского означает «один» и было выбрано в честь выпуска программного обеспечения Arduino (IDE) 1.0. Плата Uno и версия 1.0 программного обеспечения Arduino (IDE) были эталонными версиями Arduino, теперь разработанными для самых последних версий.

Плата Uno является первой в серии плат Arduino с USB и эталонной моделью для более поздних платформ. ATmega328 на Arduino Uno имеет предварительно запрограммированный загрузчик, который позволяет загружать новый код без использования внешнего аппаратного программатора с использованием исходного протокола STK500. Uno также отличается от всех предыдущих карт тем, что не использует микросхему драйвера FTDI USB-Serial. Вместо этого он использует Atmega16U2 (Atmega8U2 до R2), запрограммированный как преобразователь USB в последовательный порт.

Микроконтроллеры обычно программируются с использованием диалекта функций языков программирования C и C ++. Помимо использования традиционных наборов инструментов компилятора, проект Arduino предоставляет интегрированную среду разработки (IDE).

Шаг 6. H-мост (модуль LM 298)

Термин H-мост происходит от типичного графического представления такой схемы. Это схема, которая может управлять двигателем постоянного тока вперед и назад, см. Рисунок выше, чтобы понять, как работает H-мост.

Он состоит из 4-х электронных переключателей S1, S2, S3 и S4 (транзистор / MOSFET / IGBTS). Когда переключатели S1 и S4 замкнуты (а S2 и S3 разомкнуты), на двигатель подается положительное напряжение. Поэтому он вращается вперед. Аналогично, когда S2 и S3 замкнуты, а S1 и S4 разомкнуты, обратное напряжение проходит через двигатель, а затем вращается в противоположном направлении.

Примечание. Переключатели в одном плече (S1, S2 или S3, S4) никогда не включатся одновременно, это вызовет короткое замыкание.

H-мосты доступны в виде интегральных схем, или вы можете построить свои собственные, используя 4 обычных транзистора или полевых транзисторов (MOSFET). В нашем случае мы используем микросхему LM298 H-bridge, которая позволяет нам контролировать скорость и направление вращения двигателей. Ниже мы переходим к описанию пинов:

Выход 1: двигатель постоянного тока 1 «+» или шаговый двигатель A+

Выход 2: двигатель постоянного тока 1 «-» или шаговый двигатель A-

Выход 3: двигатель постоянного тока 2 «+» или шаговый двигатель B+

Выход 4: выход двигателя B

Вывод 12 В: вход 12 В, но можно использовать от 7 до 35 В

GND: земля

Вывод 5 В: выход 5 В, если установлена ​​перемычка 12 В, идеально подходит для питания Arduino

EnA: активирует сигнал PWM для двигателя A

IN1: включить двигатель A

IN2: включить двигатель A

IN3: запустить двигатель B

IN4: запустить двигатель B

EnB: активирует сигнал PWM для двигателя B

Рабочее расстояние NRF24L01

Расстояние зависит от внешних условий. То есть: вы внутри или снаружи, на пути сигнала от радиопередатчика есть препятствия. Большинство производителей маломощных модулей nRF24L01 указывают диапазон 200 футов или 100 метров. Это характеристика передатчиков, которые используются на открытом воздухе, без препятствий на пути прохождения сигнала. Частота передатчика установлена ​​на 2500 кГц. Внутри из-за наличия стен и других препятствий дальность обнаружения будет меньше.

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

Если вы хотите узнать больше о технических характеристиках этого маленького «радио», вы можете скачать технический лист. Наиболее полезными являются страницы 7, 8, 9 (общие характеристики и характеристики радиопередатчика nRF24L01) и страница 39 (MultiCeiver, позволяющая передавать информацию с 6 плат Arduino на Arduino Primario).

Существуют дополнительные модули передатчика / приемника (передатчика / приемника), обеспечивающие беспроводную радиопередачу на расстояние до 1 км! В этих модулях используется внешняя антенна, которая может быть установлена ​​непосредственно на модуле, или антенна, подключенная через дополнительные разъемы. На фото ниже показаны разные типы модулей.

Слева — маломощный вариант передатчика со встроенной антенной. Справа внизу вы можете увидеть контакты (на фото они вверху), которые подключаются к Arduino. Схема подключения мы увидим ниже.

NRF24L01 - общий вид 2
NRF24L01 - Общий вид 3

На фото ниже передатчик с возможностью подключения внешней антенны и самой антенны. Те же 8 контактов и такое же программное обеспечение используются для подключения радиопередатчика к Arduino.

NRF24L01 - общий вид 2
NRF24L01 - Общий вид 3

Приемопередатчик использует частоту 2,4 ГГц, как и большинство современных WiFi-роутеров и телефонов.

Такие трансиверы отправляют и принимают пакеты данных по несколько байтов. Есть встроенная коррекция ошибок и возможность повторной отправки данных. Каждый отдельный модуль NRF24L01 может связываться с шестью одновременно! аналогичные модули!

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

Подключение NRF24L01 к Arduino (вид сверху):

Подключение NRF24L01 - вид сверху

Подключение NRF24L01 к Arduino (вид снизу):

Подключение NRF24L01 - вид снизу

Сигнальный контакт на RF-модулеЦвет кабеляПин на модулеВывод Arduino (библиотека TMRh20, RF24)Вывод Arduino (библиотека RF24) Вывод Arduino (библиотека Mirf) Вывод MEGA2560 (библиотека RF24) Вывод Arduino (библиотека RH_NRF24 RadioHead) Вывод MEGA2560 (библиотека RH_NRF24 RadioHead)

GND 1 Коричневый GND GND GND GND GND GND GND
VCC 2 Красный VCC 3,3 В 3,3 В 3,3 В 3,3 В 3,3 В 3,3 В
ТАМ ЕСТЬ 3 Апельсин ТАМ ЕСТЬ 7 девять восемь девять восемь восемь
ДНС 4 Желтый ДНС восемь 10 7 53 10 53
SCK 5 Зеленый SCK 13 13 13 52 13 52
MOSI 6 Синий МО одиннадцать одиннадцать одиннадцать 51 одиннадцать 51
MISO 7 Альт МЕНЯ 12 12 12 50 12 50
IRQ восемь Серый IRQ 2 Это зависит от библиотеки N / C N / C

Примечание! Большинство проблем с передачей возникает из-за шума источника питания 3,3 В. Это особенно заметно при использовании плат Arduino Mega. Эту проблему можно решить следующим образом: добавить конденсатор в цепь между выводом GND и 3,3В на радиомодуле. Можно использовать конденсаторы номиналом 100 нФ. Некоторые используют конденсаторы от 1 до 10 пФ.

Цвета предоставлены для удобства кодирования. Вы можете использовать их по-разному. Главное — не запутаться.

Обратите внимание, что модули подключены к 3,3 В, а не 5,0 В, хотя ваш Arduino может работать от 5 В, микросхема NRF24L01 + рассчитана на питание от 3,3 В, но контакты будут обрабатывать также 5 В.

Arduino Uno и предыдущие платы имеют выход 3,3 В, который можно использовать с некоторыми версиями передатчика (см. Статью выше, чтобы узнать о проблемах с питанием). Но если вы используете более мощные передатчики, их нужно запитать отдельно на 3,3 В.

Код ПЕРЕДАТЧИКА (transmitter)

Вот программа для работы радиомодуля в режиме передатчика. Программный код намного проще. Мы просто отправляем сообщение «Hello World» от передатчика каждые 2 секунды.

Обратите внимание, что для связи друг с другом только двух радиомодулей нам необходимо указать для них один и тот же адрес rxAddr.

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

nRF24L01 — софт и библиотеки

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

Библиотека TMRh20 RF24.

Вы можете скачать его здесь (кнопка «Скачать ZIP» в правом нижнем углу страницы).

После загрузки ZIP-архива на вашем ПК появится архив RF24-master.ZIP. Измените имя архива на RF24.ZIP. Внутри архива находится одноименная папка RF24-master. Также переименуйте его в RF24.

Для начинающих разбираться в Arduino есть отличная инструкция по установке библиотек в Arduino IDE.

После установки библиотек вы можете запускать примеры, включенные в библиотеку.

Шаг 7. Источник питания

Следующие батареи можно использовать для нашей модели радиоуправляемого автомобиля на базе Arduino и смартфона:

  1. Щелочная батарея AA (неперезаряжаемая)
  2. Батарея AA NiMh или NiCd
  3. Литий-ионный аккумулятор
  4. LiPo аккумулятор

Шаг 8. Электрические соединения

Для соединения необходимы перемычки. Соедините красные провода от двух двигателей (с каждой стороны) и черные провода вместе. Итак, теперь у нас есть по два терминала с каждой стороны. MOTORA отвечает за два двигателя справа, соответственно, два двигателя слева подключены к MOTORB. Следуйте инструкциям ниже, чтобы все подключить.

Подключение двигателя

Out1 -> красный провод левого двигателя (+)

Out2 -> Черный провод левого двигателя (-)

Out3 -> красный провод правого мотора (+)

Out4 -> Черный провод правой стороны мотора (-)

LM298 -> Ардуино

IN1 -> D5

IN2-> RE6

IN2 -> D9

IN2-> D10

Модуль Bluetooth -> Arduino

Rx-> Tx

Tx -> Rx

GND -> GND

Vcc -> 3,3 В

Питание

12 В -> Подключите красный провод аккумулятора

GND -> Подключите черный провод аккумулятора к контакту Arduino GND

5V -> Подключите к выводу 5V Arduino

Код ПРИЕМНИКА (receiver)

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

За все время

  • BMS — обзор контроллеров защиты аккумуляторных батарей
  • Установка ESP32 в Arduino IDE (Руководство для Windows)
  • Адресная светодиодная лента Arduino и WS2812B
  • Веб-сервер потокового видео ESP32-CAM (работает с Home Assistant)
  • Светодиодный индикатор TM1637 и Arduino — схема подключения

Шаг 10. Приложение для смартфона

Мы используем смартфон для управления радиоуправляемой машиной. Смартфон подключается к контроллеру через модуль Bluetooth (HC-06/05). После установки приложения вам необходимо настроить соединение с модулем Bluetooth. Пароль связи: «1234».

Читайте также: Raspberry Pi или Arduino: что это и какие проекты можно сделать

Оцените статью
Блог про Arduino