- Знакомство с RF-модулем nRF24L01
- Взаимодействие nRF24L01 с Arduino
- Сторона приемника: Подключение модуля Arduino Uno nRF24L01
- Сторона передатчика: Подключение модуля Arduino Nano nRF24L01
- Работа с модулем беспроводного приемопередатчика nRF24L01 +
- Программирование nRF24L01 для Arduino
- Управление серводвигателем с помощью nRF24L01 по беспроводной сети
В то время как Интернет вещей (IoT), Индустрия 4.0, связь между машинами и т. Д. Становятся все более популярными, необходимость в беспроводной связи становится все более актуальной, поскольку все больше машин / устройств могут общаться друг с другом в облаке. Разработчики используют множество систем беспроводной связи, таких как Bluetooth Low Energy (BLE 4.0), Zigbee, модули Wi-Fi ESP43, радиочастотные модули 433 МГц, Lora, nRF и т. Д., А выбор среды зависит от типа приложения, в котором она используется.
Среди всего прочего, одним из популярных беспроводных средств связи для локальной сети является nRF24L01. Эти модули работают на частоте 2,4 ГГц (диапазон ISM) со скоростью передачи от 250 Кбит / с до 2 Мбит / с, что является законным во многих странах и может использоваться в промышленных и медицинских приложениях. Также утверждается, что с соответствующими антеннами эти модули могут передавать и принимать на расстоянии до 100 метров между собой. Интересно, правда !!? Итак, в этом руководстве мы узнаем больше об этих модулях nRF24l01 и о том, как их взаимодействовать с платформой микроконтроллеров, такой как Arduino. Мы также поделимся некоторыми решениями часто встречающихся проблем при использовании этого модуля.
Знакомство с RF-модулем nRF24L01
В модулях NRF24L01 являются приемопередающими модулями, то есть каждый модуль может отправлять и получать данные, но так как они Полудуплексные они могут либо передавать или принимать данные одновременно. В модуле используется общая микросхема nRF24L01 от Nordic semi-wirectors, которая отвечает за передачу и прием данных. IC взаимодействует с использованием протокола SPI и, следовательно, может легко взаимодействовать с любыми микроконтроллерами. С Arduino становится намного проще, так как библиотеки легко доступны. В распиновки из стандартного модуля NRF24L01 показан ниже
Модуль имеет рабочее напряжение от 1,9 В до 3,6 В (обычно 3,3 В) и потребляет очень меньший ток, всего 12 мА во время нормальной работы, что делает его эффективным аккумулятором и, следовательно, может работать даже от монетных элементов. Несмотря на то, что рабочее напряжение составляет 3,3 В, большинство контактов допускают 5 В и, следовательно, могут напрямую взаимодействовать с микроконтроллерами 5 В, такими как Arduino. Еще одно преимущество использования этих модулей заключается в том, что каждый модуль имеет 6 конвейеров. Это означает, что каждый модуль может связываться с 6 другими модулями для передачи или приема данных. Это делает модуль подходящим для создания звездообразных или ячеистых сетей в приложениях IoT. Кроме того, они имеют широкий диапазон адресов из 125 уникальных идентификаторов, поэтому в закрытой зоне мы можем использовать 125 из этих модулей, не мешая друг другу.
Взаимодействие nRF24L01 с Arduino
В этом уроке мы узнаем, как связать nRF24L01 с Arduino, управляя серводвигателем, подключенным к одному Arduino, изменяя потенциометр на другом Arduino. Для простоты мы использовали один модуль nRF24L01 в качестве передатчика, а другой - в качестве приемника, но каждый модуль можно запрограммировать на отправку и получение данных индивидуально.
Принципиальная схема для подключения модуля nRF24L01 к Arduino показана ниже. Для разнообразия я использовал UNO для стороны приемника и Nano для стороны передатчика. Но логика подключения остается такой же для других плат Arduino, таких как mini, mega.
Сторона приемника: Подключение модуля Arduino Uno nRF24L01
Как было сказано ранее, nRF24L01 обменивается данными с помощью протокола SPI. На Arduino Nano и UNO контакты 11, 12 и 13 используются для связи SPI. Следовательно, мы подключаем выводы MOSI, MISO и SCK от nRF к выводам 11, 12 и 13 соответственно. Контакты CE и CS настраиваются пользователем, здесь я использовал контакты 7 и 8, но вы можете использовать любой контакт, изменив программу. Модуль nRF питается от вывода 3.3V на Arduino, который в большинстве случаев будет работать. Если нет, можно попробовать отдельный источник питания. Помимо взаимодействия с nRF, я также подключил серводвигатель к выводу 7 и запитал его через вывод 5V на Arduino. Аналогичным образом схема передатчика показана ниже.
Сторона передатчика: Подключение модуля Arduino Nano nRF24L01
Соединения для передатчика также такие же, кроме того, я использовал потенциометр, подключенный к контакту 5V ad Ground Arduino. Выходное аналоговое напряжение, которое будет варьироваться от 0 до 5 В, подключено к контакту A7 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.
Программирование nRF24L01 для Arduino
Эти модули было очень легко использовать с Arduino благодаря легкодоступной библиотеке, созданной maniacbug на GitHub. Щелкните ссылку, чтобы загрузить библиотеку в виде ZIP-архива и добавить ее в свою IDE Arduino с помощью команды Sketch -> Включить библиотеку -> Добавить библиотеку.ZIP . После добавления библиотеки мы можем приступить к программированию проекта. Нам нужно написать две программы, одну для стороны передатчика, а другую - для стороны приемника. Однако, как я уже говорил ранее, каждый модуль может работать как передатчик, так и как приемник. Обе программы приведены в конце этой страницы., в коде передатчика вариант приемника будет закомментирован, а в программе приемника закомментирован код передатчика. Вы можете использовать его, если пробуете проект, в котором модуль должен работать как и то и другое. Ниже поясняется работа программы.
Как и все программы, мы начинаем с включения файлов заголовков. Поскольку nRF использует протокол SPI, мы включили заголовок SPI, а также только что загруженную библиотеку. Библиотека сервомотора используется для управления серводвигателем.
#включают
Следующая строка - важная строка, в которой мы сообщаем библиотеке о выводах CE и CS. На нашей принципиальной схеме мы подключили CE к контакту 7 и CS к контакту 8, поэтому мы установили линию как
RF24 myRadio (7, 8);
Все переменные, связанные с библиотекой RF, должны быть объявлены как составная структура переменных. В этой программе переменная msg используется для отправки и получения данных от модуля RF.
struct package { int msg; }; typedef struct package Package; Данные пакета;
Каждый радиочастотный модуль имеет уникальный адрес, по которому он может отправлять данные на соответствующее устройство. Поскольку у нас здесь только одна пара, мы устанавливаем нулевой адрес как в передатчике, так и в приемнике, но если у вас несколько модулей, вы можете установить идентификатор в любую уникальную 6-значную строку.
байтовые адреса = {"0"};
Затем внутри функции настройки void мы инициализируем RF-модуль и настраиваем его на работу в диапазоне 115, который свободен от шумов, а также настраиваем модуль на работу в режиме минимального энергопотребления с минимальной скоростью 250 Кбит / с.
void setup () { Serial.begin (9600); myRadio.begin (); myRadio.setChannel (115); // 115 полоса выше сигналов WIFI myRadio.setPALevel (RF24_PA_MIN); // МИН. Мощность low rage myRadio.setDataRate (RF24_250KBPS); // Минимальная скорость myservo.attach (6); Serial.print («Настройка инициализирована»); задержка (500); }
Функция void WriteData () записывает переданные ей данные. Как было сказано ранее, nRF имеет 6 различных каналов, по которым мы можем читать или записывать данные, здесь мы использовали 0xF0F0F0F066 в качестве адреса для записи данных. На стороне получателя мы должны использовать тот же адрес в функции ReadData () для получения записанных данных.
void WriteData () { myRadio.stopListening (); // Прекращение приема и начало передачи myRadio.openWritingPipe (0xF0F0F0F066); // Отправляет данные по этому 40-битному адресу myRadio.write (& data, sizeof (data)); задержка (300); }
Функция void WriteData () считывает данные и помещает их в переменную. Снова из 6 различных каналов, с помощью которых мы можем читать или записывать данные, мы использовали 0xF0F0F0F0AA в качестве адреса для чтения данных. Это означает, что передатчик другого модуля записал что-то по этому адресу, и, следовательно, мы читаем это с того же адреса.
void ReadData () { myRadio.openReadingPipe (1, 0xF0F0F0F0AA); // Какой канал читать, 40 бит Address myRadio.startListening (); // Прекращаем передачу и запускаем Reveicing if (myRadio.available ()) { while (myRadio.available ()) { myRadio.read (& data, sizeof (data)); } Serial.println (data.text); } }
Помимо этих строк, другие строки в программе используются для чтения POT и преобразования его в 0 в 180 с помощью функции карты и отправки его в модуль приемника, где мы соответственно управляем сервоприводом. Я не объяснял их построчно, так как мы уже узнали об этом в нашем руководстве по сервоинтерфейсу.
Управление серводвигателем с помощью nRF24L01 по беспроводной сети
Как только вы будете готовы с программой, загрузите код передатчика и приемника (указанный ниже) на соответствующие платы Arduino и включите их через порт USB. Вы также можете запустить последовательный монитор обеих плат, чтобы проверить, какое значение передается, а что принимается. Если все работает, как ожидалось, когда вы поворачиваете ручку POT на стороне передатчика, сервопривод на другой стороне также должен вращаться соответственно.
Полная работа проекта демонстрируется на видео ниже. Это вполне нормально, если эти модули не заработают с первой попытки. Если вы столкнулись с какой-либо проблемой, проверьте код и проводку еще раз и попробуйте приведенные выше рекомендации по устранению неполадок. Если ничего не работает, опубликуйте свою проблему на форумах или в комментариях, и я постараюсь их решить.