Модуль 2 4 ггц для arduino

Победа над nRF24L01: на три шага ближе

Многие испытывают трудности при соединении по эфиру радиомодулей nRF24L01. Об этом свидетельствует тема на форуме Амперки, открытая в конце 2014г. За пять с небольшим лет в теме накопилось более 120(!) страниц. Это при том, что автор темы не просто обозначил проблему, а поделился своим трехнедельным опытом победного для него боя. Кроме того, он тут же — в первом сообщении создал навигатор по страницам темы, где приводит ссылки на решения проблемы другими.

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

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

Как правило, все тесты, которые мне встречались в Инете, сводятся к проверке работы и качества связи пары радиомодулей в полнофункциональном режиме, когда передатчик, послав пакет, ждет на подтверждение приема пакета приемником.

Я же разделил эту задачу на несколько простых задачек. Вначале модули проверяются на работоспособность и правильность подключения (шаг 1), затем один из пары работающих радиомодулей тестируется на работу в режиме передатчика без ожидания отклика с приемника (шаг 2) и последний этап — улучшение качества связи в этой связке передатчик-приемник (шаг 3).

Для общего представления — картинка с прототипом:

Шаг 1

Загрузить в контроллер платы Ардуино скетч сканера эфира, который можно найти среди примеров Arduino IDE: Файл -> Примеры -> RF24 -> scanner. Ниже под спойлером есть этот скетч с несущественным изменением. В нем изменено время между стартом и остановкой сканирования одного канала с 128 мксек на 512 мксек. Увеличение времени позволило за один цикл сканирования всего диапазона выявлять больше источников помех и сигналов. Это равнозначно замене результата измерений в канале на сумму четырех соседних результатов в этом канале до изменения времени сканирования. При этом, время прохода всего прослушиваемого диапазона сканером увеличилось несущественно: примерно с 8 до 10 сек.

В разных скетчах адрес канала в командах приводится в разных форматах: в одних — . (0x6f), в других — . (112). Перевод с одного формата в другой станет понятным с примера перевода. Например, для (0x1а) — это: (1+1)*16 + а = (1+1)*16 + 10 = 42. Отсчет каналов начинается с частоты 2,4 ГГц, далее идет увеличение частоты на 1 МГц с увеличением номера канала на 1.

Далее подключаем модуль nRF24L01 к плате Ардуино или любому прототипу, собранному, допустим, на контроллере ATMEGA328P. Я собрал два образца на платах для прототипирования на контроллере ATMEGA328P по схеме контроллер + резонатор. Один образец подключаю к компу через плату Arduino UNO, а второй — через конвертор USB/TTL.

Мощность стабилизатора платы Arduino UNO вполне приемлема для подключения дополнительной импульсной нагрузки такой, как nRF24L01+ c адаптером 5В/3,3В для этого модуля или без адаптера.

На мониторе последовательного порта Arduino IDE увидите нечто похожее:

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

Обратите внимание на чистый диапазон, начиная с канала 4а. У меня он остается чистым даже, если на расстоянии нескольких метров работает старая СВЧ-печь — мощный источник помех в этом диапазоне. А в общем-то, в Интернете рекомендуют выбирать каналы для своих проектов выше «60».

Если на каналах — шум, но радиомодуль определяется (смотрим преамбулу на мониторе Arduino IDE, подробно тут) — это однозначно копия. Не отчаивайтесь — ее тоже можно запустить.

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

Шаг 2

По схеме, аналогичной первой, собираем второй радиоузел. Это будет передатчик. В его контроллер загружаем скетч передатчика (под спойлером).

Передатчик без пауз в работе передает сигнал на канале 6f (112).

Подаем питание на сканер эфира и передатчик. Присмотритесь что творится на канале 6f и соседних с ним каналах. Сканер эфира при включенном передатчике рано или поздно прорисует единички или другие одноразрядные числа в шестнадцатиричном исчислении в области 6f, на который запрограммирован передатчик. Наберитесь терпения на 1 — 2 минуты, особенно при работе со сканером из примеров.

Увидев сигнал от передатчика делаем следующий шаг.

Шаг 3

Загружаем вместо сканера скетч приемника (под спойлером).

Логика работы приемника такая же, как и у сканера эфира, но он в отличие от сканера принимает сигналы только на частоте передатчика 6f и, как и сканер, не посылает автоответ. Скорость обмена информацией и размер контрольной суммы у приемника такие же, как у передатчика. После каждых 1000-и циклов прослушивания счетчик числа циклов обнуляется и выводится инфа о количестве принятых пакетов с передатчика в монитор порта Arduino IDE.

Включаем передатчик и приемник. Если приемник принимает хотя бы каждый третий пакет — это уже успех. У меня не получилось. Приемник по непонятным причинам принимал максимум 50 пакетов.

Подумал о увеличении мощности передаваемого сигнала с помощью дополнительной антенны. Для начала, подключил зажимом монтажный провод «папа-мама» к «корню» штатной антенны передатчика. И счастье привалило: сразу 999 принятых пакетов — максимально возможное число из 1 000!

Юзерам, которые захотят сделать все грамотно, придется поработать. Дополнительная антенна в данном случае — это отрезок коаксиального кабеля с волновым сопротивлением 50 Ом и длиной 115 мм. Антенна подключается к выводу 13 (АNT2) микросхемы nRF24L01+. Схему подключения и номиналы нескольких недостающих smd компонентов, которые надо поставить на плату радиомодуля, можно найти на принципиальной электрической схеме nRF24L01+ тут. Впрочем, есть альтернатива — в магазин за NRF24L01+PA+LNA

Теперь обязательно припаиваем между пинами GND и VCC обеих радиомодулей по два конденсатора. Керамический конденсатор, выполняющий роль ВЧ-фильтра, емкостью не менее 0,15 мкФ (чем больше, тем лучше) и электролит емкостью около 10 мкФ (можно и больше, но бесполезно) — это НЧ-фильтр. ВЧ-фильтр шунтирует высокочастотные помехи по цепи питания радиомодуля, а НЧ-фильтр сглаживает пульсации питания. Для надежности, цепи питания радиомодулей лучше непосредственно подпаять к пинам контроллеров.

Тут не могу не упомянуть о решении, предложенном GennPen в комментариях. Это установка на платах nRF24L01+ отсутствующего конденсатора С6 (1. 2pF). Конденсатор будет выполнять роль пассивной нагрузки. Без пассивной нагрузки модули nRF24L01+ со встроенной антенной «захлебываются» и часто нормально работают только на пониженных мощностях передатчика.

После того, как удалось установить наилучшую связь в паре передатчик — приемник, можно провести тестирование на определение дальности связи радиомодулей, задав мощность передатчика и свои критерии качества связи, допустим, 300 принятых пакетов из 1000. У меня пара в режиме усилителя PA_MAX обеспечивает связь «999:1000» в пределах квартиры через 3 кирпичных простенка.

И наконец, несколько слов о своей скромной статистике работы с модулем. В свое время купил 8 шт. радиомодулей nRF24L01+. Приобрел в разное время с интервалом больше года, в разных интернет-магазинах и, судя по стилю маркировки, от разных производителей. Сначала, безрезультатно повозившись с ними и начитавшись, как мучаются с nRF24L01+ другие, без особых проблем перешел на радиомодули LoRa. Жизнь заставила вернуться к nRF24L01+, поскольку заявленный максимальный ток потребления nRF24L01+ ниже, чем у LoRa. Кроме того, nRF24L01+совместим с малопотребляющим nRF52832 и другими. Это особенно важно для автономных систем с ограниченным ресурсом источников. В итоге удалось соединить все 8 радиомодулей по эфиру. Вывод простой — не надо верить мифам, что рынок переполнен неработающими копиями (клонами, репликами, подделками). Да и какой изготовитель станет запускать высокотехнологичное производство, чтобы тиражировать неработающие изделия! Клонов на рынке хватает. К сожалению, они не всегда стоят дешевле оригиналов. Уровень основных технических характеристик клонов ниже, чем у оригинальных продуктов. Единственная возможность отличить копию от оригинала — это тестирование. Основные признаки копии — это выше заявленного в спецификации энергопотребление, больший процент потерь пакетов и более низкая скорость при передаче.

Конечно, эти простые шаги не могут гарантировать решение всех проблем с nRF24L01 — мне их и не перечесть, но после того, как их сделаете, будете уверены, что:

  • радиомодули исправны;
  • подключены верно;
  • уровень сигнала передатчика, чувствительность приемника удовлетворительны и, в случае необходимости, обеспечиваются дополнительными мерами;
  • пара nRF24L01+ работает в режиме «передатчик-приемник» без откликов и ожидания на отклики. Иногда этого достаточно.

Все! Надеюсь, как и у меня, у вас в дальнейшем поубавится проблем с 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 потенциометра) преобразуются в градусы и используется для поворота сервопривода.

Источник

Adblock
detector