Call response arduino nrf24l01

Урок 26.4 Соединяем две arduino по радиоканалу через nRF24L01+

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

В этом уроке мы научимся соединять две arduino по радиоканалу ISM диапазона, используя радио модуль nRF24L01+, на расстоянии до 100 м. Если использовать радио модули NRF24L01+PA+LNA, то расстояние между arduino можно увеличить до 1 км, не меняя код скетча.

Преимущества:

  • Отсутствие проводов между arduino.
  • Высокая скорость передачи данных, до 2 Мб/с. Выше чем у шин I2C и UART.
  • Полудуплексная связь. Режим работы модулей (приёмник / передатчик) можно менять в процессе их работы.
  • Высокая помехозащищенность. Данные в пакетах принимаются с проверкой CRC.
  • Контроль доставки данных. Приемник отправляет передатчику сигнал подтверждения приёма данных (без смены режима работы).
  • Возможность выбора одного из 128 каналов связи. Шаг каждого канала равен 1 МГц (от 2,400 ГГц до 2,527 ГГц).
  • Возможность одновременной работы до 6 передатчиков на одном канале.

Недостатки:

  • Модули nRF24L01+ работают в радиочастотном диапазоне ISM (Industrial, Scientific, Medical) 2,4 ГГц, на котором работают WiFi, Bluetooth и другие устройства, например радио телефоны и даже СВЧ печи. Эти устройства могут «глушить» некоторые каналы данного диапазона. Поэтому вблизи таких устройств дальность связи между модулями, на некоторых каналах, резко уменьшается. Увеличить дальность можно сменив канал связи на любой из 128 доступных модулям nRF24L01+.
  • При выборе скорости 2 Мб/с, задействуются сразу два канала (выбранный и следующий за ним).
  • Модули питаются от напряжения 3,3 В постоянного тока. Но их можно запитать от 5 В через адаптер nRF24L01+.

Нам понадобится:

  • Радио модуль nRF24L01+ х 2шт.
  • Адаптер к модулю nRF24L01+ х 2шт.
  • Arduino х 2шт.
  • Trema Shield х 2шт.
  • Trema Slider х 1шт.
  • Trema потенциометр х 1шт.
  • Trema четырехразрядный LED индикатор х 1шт.
  • Сервопривод x 1шт.
  • Набор проводов «мама-мама» для подключения радио модулей х 1 комплект.

Для реализации проекта нам необходимо установить библиотеки:

  • Библиотека RF24 (для работы с радио модулями nRF24L01+).
  • Библиотека iarduino_4LED, (для работы с Trema четырехразрядным LED индикатором).
  • Библиотеки SPI и Servo входят в стандартный набор Arduino IDE.

О том как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki — Установка библиотек в Arduino IDE .

Видео:

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

Оба радио модуля nFR24L01+ подключены, через адаптер, к аппаратной шине SPI. Trema четырехразрядный LED индикатор подключён к цифровым выводам D2 и D3 (можно подключить к любым выводам Arduino). Сервопривод подключён к цифровому выводу D4 (можно подключить к любым выводам). Trema потенциометр и слайдер подключены к аналоговым входам A1 и A0 (можно подключить к любым аналоговым входам). Питание адаптера nFR24L01+ взято с контактов GND и Vcc (5 В).

Если Вы будете подключать модуль nFR24L01+ без адаптера, то модуль требуется запитать от напряжения 3,3 В постоянного тока.

Адаптер nRF24L01+ Arduino Uno Назначение
CE 9 (меняется в скетче) Выбор режима: приёмник / передатчик
CSN (CS/SS) 10 (меняется в скетче) Шина SPI — выбор устройства
SСK 13 (SCK) Шина SPI — линия тактирования
MO 11 (MOSI) Шина SPI — линия данных (от мастера к ведомому)
MI 12 (MISO) Шина SPI — линия данных (от ведомого к мастеру)
IRQ Не используется Прерывание

Алгоритм работы:

Передатчик:

При старте (в коде setup) скетч настраивает работу радио модуля в режим передачи данных, указывая номер канала, скорость передачи, мощность передачи и идентификатор трубы. После чего, постоянно (в коде loop), считывает показания с Trema потенциометра и Trema слайдера, сохраняя их в массив data, и отправляет его радио модулю для передачи.

Приёмник:

При старте (в коде setup) скетч настраивает работу радио модуля, указывая те же параметры что и у передатчика, но в режим приёма данных, а также инициирует работу с LED индикатором и сервоприводом. После чего, постоянно (в коде loop), проверяет нет ли в буфере данных, принятых радио модулем. Если данные есть, то они читаются в массив data, после чего значение 0 элемента (показания Trema слайдера) выводится на LED индикатор, а значение 1 элемента (показания Trema потенциометра) преобразуются в градусы и используется для поворота сервопривода.

Источник

Взаимодействие nRF24L01 с Arduino: удаленное управление серводвигателем

В то время как интернет вещей (IoT), межмашинное общение и тому подобное становятся всё более популярными, потребность в беспроводной связи становится всё более востребованной, и всё больше машин/устройств общаются друг с другом в облаке. Разработчики используют множество систем беспроводной связи, таких как Bluetooth Low Energy (BLE 4.0), Zigbee, ESP43 Wi-Fi модули, RF модули 433 МГц, Lora, nRF и т.д., и выбор посредника зависит от типа приложения, в котором она используется.

Одним из популярных беспроводных посредников для локальной сети является nRF24L01. Эти модули работают на частоте 2,4 ГГц (диапазон ISM) со скоростью передачи данных от 250 кбит/с до 2 Мбит/с, что является легальным во многих странах и может использоваться в промышленных и медицинских приложениях. Также утверждается, что при наличии соответствующих антенн эти модули могут передавать и принимать сигналы на расстоянии до 100 метров между ними. Интересно! Итак, в этом уроке мы узнаем больше об этих модулях nRF24L01 и о том, как связать их микроконтроллерной платформой, такой как Arduino. Мы также поделимся некоторыми решениями для часто возникающих проблем при использовании этого модуля.

Взаимодействие nRF24L01 с Arduino: удаленное управление серводвигателем

Знакомство с RF модулем nRF24L01

Модули nRF24L01 являются приемопередающими модулями, то есть каждый модуль может отправлять и принимать данные, но поскольку они полудуплексные, в какой-либо момент времени они могут либо передавать, либо принимать данные. Модуль содержит микросхему nRF24L01 от Nordic semiconductors, которая отвечает за передачу и прием данных. Микросхема обменивается данным с помощью интерфейса SPI и, следовательно, может легко взаимодействовать с любыми микроконтроллерами. С Arduino всё становится намного проще, так как для нее доступны библиотеки. Распиновка стандартного модуля nRF24L01 показана ниже.

Распиновка модуля nRF24L01

Рабочее напряжение модуля составляет от 1,9 В до 3,6 В (как правило, 3,3 В). Модуль потребляет очень маленький ток, составляющий всего 12 мА при нормальной работе, что делает его эффективным при использовании с аккумуляторами, и, следовательно, он может работать даже от элементов питания размером с монету. Несмотря на то, что рабочее напряжение составляет 3,3 В, большинство выводов толерантны к 5 В и, следовательно, могут напрямую подключаться к 5-вольтовым микроконтроллерам, таким как Arduino. Еще одним преимуществом использования этих модулей является то, что каждый модуль имеет 6 каналов связи (pipeline). Это означает, что каждый модуль может связываться с 6 другими модулями для передачи и приема данных. Это делает данный модуль пригодным для создания сетей с топологиями «звезда» и «ячеистая» в приложениях IoT. Кроме того, они имеют широкий диапазон адресов из 125 уникальных идентификаторов, поэтому в закрытом пространстве мы можем использовать 125 таких модулей, не мешающих друг другу.

Взаимодействие nRF24L01 с Arduino

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

Принципиальная схема подключения модуля nRF24L01 к Arduino приведена ниже. Для разнообразия я использовал UNO для приемной части и Nano для предающей части. Но для других плат Arduino, таких как Mini и Mega, логика подключения остается неизменной.

Приемная часть: подключение модуля nRF24L01 к Arduino Uno

Как было сказано ранее, nRF24L01 взаимодействует с помощью интерфейса SPI. Для связи через SPI на Arduino Nano и UNO используются выводы 11, 12 и 13. Следовательно, мы подключаем выводы MOSI, MISO и SCK от nRF к выводам 11, 12 и 13 соответственно. Выводы CE и CS настраиваются пользователем, здесь я использовал выводы 7 и 8, но вы можете использовать любые выводы, изменив программу. Модуль nRF питается от вывода 3,3V на Arduino, что в большинстве случаев работать будет. Если нет, то можно попробовать отдельный источник питания. Помимо интерфейса nRF, я также подключил серводвигатель к выводу 7 и запитал его через вывод 5V на Arduino. Аналогично схема передатчика показана ниже.

Передающая часть: подключение модуля nRF24L01 к Arduino Nano

Соединения для передатчика точно такие же; кроме того, я использовал потенциометр, подключенный через выводы 5V и GND к Arduino. Выходное аналоговое напряжение, которое изменяется от 0 до 5 вольт, подается на вывод A7 Arduino Nano. Обе платы питаются через порт USB.

Работа с беспроводным приемопередающим модулем nRF24L01+

Однако для того, чтобы наш nRF24L01 работал без проблем, мы могли бы рассмотреть следующие вещи. Я долгое время работал с этим nRF24L01+ и изучил следующие моменты, которые могут помочь вам избежать препятствий. Вы можете попробовать это, когда модули не работают в нормальном режиме.

  1. Большинство модулей nRF24L01+ на рынке являются поддельными. Самые дешевые, которые мы можем найти на Ebay и Amazon, являются худшими (не волнуйтесь, с помощью нескольких ухищрений мы можем заставить их работать).
  2. Основная проблема – источник питания, а не ваш код. Большинство примеров кода в интернете работают правильно.
  3. Обратите внимание, что модули, которые промаркированы как NRF24L01+, на самом деле это Si24Ri (да, это китайский продукт).
  4. Клоны и поддельные модули будут потреблять больше энергии, поэтому разрабатывайте свою схему питания не на основе технического описания nRF24L01+, поскольку Si24Ri будет иметь высокое потребление тока, около 250 мА.
  5. Остерегайтесь пульсаций напряжения и скачков тока, эти модули очень чувствительны и могут легко выйти из строя (я пока поджарил 2 модуля).
  6. Добавление пары конденсаторов (10 мкФ и 0,1 мкФ) между Vcc и Gnd модуля помогает очистить питание, и это работает с большинством модулей.

Тем не менее, если у вас есть проблемы, напишите в комментариях.

Программирование nRF24L01 для Arduino

Использовать эти модули с Arduino очень просто благодаря доступной готовой библиотеке, созданной maniacbug на GitHub. Нажмите на ссылку, чтобы загрузить библиотеку в виде zip-каталога, и добавьте её в Arduino IDE с помощью Скетч (Sketch) → Подключить библиотеку (Include Library) → Добавить ZIP библиотеку (Add .ZIP library) . После добавления библиотеки мы можем начать программирование для проекта. Мы должны написать две программы, одна для передающей части, а другая для приемной части. Однако, как я уже говорил ранее, каждый модуль может работать как и передатчик, и приемник. Обе программы приведены в конце страницы, в коде передатчика будет закомментирован код приемника, а в программе приемника будет закомментирован код передатчика. Вы можете использовать его, если хотите, чтобы в вашем проекте модуль работал в обоих режимах. Работа программы описана ниже.

Как и во всех программах, мы начинаем с включения заголовочных файлов. Поскольку nRF использует протокол SPI, мы включили заголовочный файл SPI, а также библиотеку, которую только что загрузили. Библиотека servo используется для управления серводвигателем.

Далее идет важная строка, в которой мы указываем выводы CE и CS. На нашей принципиальной схеме CE подключен к выводу 7, а CS – к выводу 8.

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

Каждый RF модуль имеет уникальный адрес, используя который можно отправлять данные на соответствующее устройство. Поскольку у нас здесь только одна пара, мы устанавливаем адрес, равный нулю, как на передатчике, так и приемнике, но если у вас несколько модулей, вы можете установить ID на любую уникальную строку, состоящую из шести цифр.

Затем внутри функции void setup() мы инициализируем RF модуль и настраиваем его на работу в диапазоне 115, который свободен от шума, а также настраиваем модуль для работы в режиме минимального энергопотребления с минимальной скоростью 250 кбит/с.

Функция void WriteData() записывает переданные ей данные. Как говорилось ранее, nRF имеет 6 различных каналов, в которые мы можем записывать и считывать данные, здесь мы использовали 0xF0F0F0F066 в качестве адреса для записи данных. В приемной части для получения данных мы должны использовать тот же адрес в функции ReadData() .

Функция void WriteData() считывает данные и помещает их в переменную. Снова из 6 различных каналов, используя которые мы может считывать и записывать данные, здесь мы использовали 0xF0F0F0F066 в качестве адреса для чтения данных. Этот означает, что передатчик другого модуля записал что-то по этому адресу, и, следовательно, мы читаем это что-то с того же адреса.

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

Беспроводное управление серводвигателем с помощью nRF24L01

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

Работа проекта показана на демонстрационном видео ниже. Вполне нормально, если эти модули не заработают с первой попытки. Если вы столкнулись с какой-либо проблемой, снова проверьте код и разводку и попробуйте приведенные выше рекомендации по устранению неполадок.

Код передающей части

Код приемной части

Видео

Источник

Adblock
detector