Беспроводной модуль NRF24L01+PA+LNA с усилителем и внешней антенной.

Беспроводной модуль NRF24L01 (2.4 ГГц) служит для связи микроконтроллеров между собой. Работает на частоте 2.4 ГГц (не требующая разрешений частота, которая также используется для Wi-Fi), скорость до 2 Мбит/с, управляется по интерфейсу SPI, питание 3,3 В (можно использовать вывод 3,3 В платы Arduino). Существенно дешевле xbee-модуля, хорошо подходит для промышленных систем управления. Радиус действия – в пределах квартиры, через две стены работает уверенно, через три – могут быть потери сигнала.

Распиновка

image

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

image

Подключение с помощью переходника для NRF24L01 (3,3 В)

Тесты

nrf_listen_air – тест одного модуля, прослушивание всех каналов GettingStarted_CallResponse – тест качества связи между двумя модулями Приём (RX) / передача (TX) – базовая пара скетчей со всеми настройками модулей, а также примером передачи данных

Документация NRF24L01+ (PDF) Библиотека и примеры (ZIP)

Помница я обещал провести тестирование радиомодулей на базе чипа nRF24L01+ c усилителем RFX2401C. В силу разных обстоятельств эксперименты растянулись более чем на 2 месяца. Для тестов собрал вот такие портативные конструкции с питанием от литий-ионных аккумуляторов 18650. Один из модулей выступает в роли передатчика данных (справа), другой, соответственно, в качестве приемника (слева). К приемнику приделал компьютерную пищалку, в случае потери более 90% пакетов пищалка начинает работать и таким образом сигнализирует о потере связи. Ну а дальше начались тесты… Перед началом экспериментов отключил AutoACK, установил скорость передачи данных 250 кБит/с, что соответствует максимальной чувствительности приемника -94dBm 1. Сравнение антенн. В этом эксперименте хотелось поверить работу разных типов антенн: родного штырька, зигзагообразной и баночной антенн. Зигзагообразную антенну спаял специально для эксперимента, баночная – уже много лет пылилась на полке. Оставил передатчик дома на подоконнике, а с приемником пошел в здание расположенное на расстоянии 1.5 км от дома. Прямая видимость между приемником и передатчиком отсутствовала: на пути распространения сигнала находится небольшой лесной массив и выступающая железобетонная стена соседнего здания. На штыревую антенну приема, можно сказать, не было, из 100 передаваемых пакетов принималось не более 2-х. Заменил штырек направленной баночной антенной и картина резко поменялась: стало приниматься от 95 до 100% пакетов. Далее подключил зигзагообразную антенну, результат еще лучше – принимается от 98 до 100% пакетов. В этом эксперименте выйграла зигзагообразная антенна, помимо отличных результатов по стабильности связи она гораздо компактнее баночной антенны. 2. Проверка железобетоном Разместил передатчик в центре квартиры, вышел с приемником на лестничную площадку. Прошел все 5 этажей, потери связи не было. Вышел из подъезда и закрыл за собой металлическую дверь, только тогда связь пропала. Этот эксперимент проводился с родными штыревыми антеннами поставляемыми в комплекте. 3. Проверка максимальной дальности связи в условиях прямой видимости Данный эксперимент так же провел с родными штыревыми антеннами. Разместил передатчик на самом высоком здании в округе, а сам пошел с приемником “куда глаза глядят”. Прошел 1800 метров, дорога закончилась, а связь все ещё была. Если на пути прохождения сигнала появлялось даже небольшое препятствие, связь сразу пропадала, не любят эти волны огибать рельеф. Таким образом модули подтвердили заявленную дальность связи в 1 км и даже перекрыли это расстояние. Хотелось бы, конечно, провести испытания более тщательно, но пока не сезон – кругом глубокие сугробы, сложный рельеф местности и малое число доступных троп и дорог. Возможно летом еще раз вернусь к этой теме, можно будет выехать в поля и там уже нормально оттестировать оборудование с разными антеннами.

Давайте начнем с тех возможностей, которые откроются перед вами, если вы обеспечите беспроводной обмен данными между двумя платами Arduino:

  • Удаленное снятие показаний с датчиков температуры, давления, систем сигнализации на основе пироэлектрических датчиков движения и т.п.
  • Беспроводное управление и мониторинг состояния роботов на расстоянии от 50 2000  футов или до 1 км .
  • Беспроводное управление и мониторинг помещений в соседних домах.
  • И т.д. и т.п. В общем, практически все, что требует беспроводных систем управления и мониторинга…

Существует целая серия радио модулей 2.4 ГГц, которые созданы на базе чипа Nordic Semiconductor nRF24L01+ (более детальная информация на английском языке) Nordic nRF24L01+ включает в себя 2.4 ГГц RF трансивер, логику, которая поддерживает высокоскоростной SPI интерфейс для подключения и обмена данными. Маломощный, с небольшой дальностью действия (200 футов или около того) передатчик для Arduino со встроенной антенной можно приобрести меньше чем за 2 $!

Ссылки nRF24L01+ антенна  на алиэкспресс (кликабельно )  – 1.88 долл 

Проблемы с питанием NRF24L01

У многих возникают проблемы при запуске модуля nRF24L01. В основном это связано с тем, что в модуле питания 3.3 В не предусмотрена необходимая сила тока. Решение проблемы следующее:

  • Подключите конденсатор на 3.3 или 10 мкФ (микрофарад) напрямую к модулю – от 3.3 В (+) к GND (-). Некоторые рекомендуют использовать 10 мкФ или больше.
  • Отдельный источник питания на 3.3 В.
  • Использовать совместимый с Arduino YourDuinoRobo1, на котором добавлен регулятор 3.3 В (в этом случае, возможно, стоит добавить конденсатор на 1 мкФ на радиомодуль).
  • Старайтесь максимально избегать дополнительных проводов при подключении модуля радиопередатчика.
  • Разработать отдельную плату, на которую устанавливается модуль nRF24L01 и добавляются конденсаторы на 1 и 10 мкФ неподалеку от контактов 3.3 В и GND.

Проблемы с питанием возникают при использовании таких микроконтроллеров как, например, Arduino Uno, Nano, Mega, в которых на пины подается всего 50 мА. На некоторых новых модификациях плат делают пины с силой тока до 350 мА. Ну или вы можете отдельно приобрести шилды для увеличения мощности.

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

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

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

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

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

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

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

Трансивер использует частоту 2.4 ГГц, как и большинство современных WiFi роутеров, телефонов.

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

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

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

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

Сигнал Контакт на Arduino (библиотека RF24) Контакт на Arduino (библиотека Mirf) Контакт MEGA2560 (библиотека RF24) Контакт Arduino (библиотека RH_NRF24 RadioHead) Контакт MEGA2560 (библиотека RH_NRF24 RadioHead)
GND Коричневый GND GND GND GND GND GND GND
VCC 2 Красный VCC 3.3 V 3.3V 3.3V 3.3V 3.3V 3.3V
CE 3 Оранжевый CE 7 9 8 9 8 8
CSN 4 Желтый CSN 8 10 7 53 10 53
SCK 5 Зеленый SCK 13 13 13 52 13 52
MOSI 6 Синий MO 11 11 11 51 11 51
MISO 7 Фиолетовый MI 12 12 12 50 12 50
IRQ 8 Серый IRQ 2 N/C N/C

Обратите внимание! Большинство проблем при передаче возникает из-за шумов от источника питания 3.3 В. Особенно это чувствуется при использовании плат Arduino Mega. Решить эту проблему можно следующим образом: добавить в схему конденсатор между контактом GND и 3.3 В на радио модуле. Можно использовать конденсаторы номиналом 100 нФ. Некоторые ставят конденсаторы номиналом от 1 пкФ до 10 пФ.

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

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

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

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

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

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

Скачать ее можно здесь (Кнопка “Download ZIP” в нижнем правом углу страницы).

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

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

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

Скетчи для nRF24L01 и Arduino

Скетчи для nRF24L01 и Arduino

Пример: передача данных о положении координат 

джойстика

 Х и Y от одного модуля nRF24L01 к другому nRF24L01. Второй модуль получает данные положении джойстика и передает их на дальнейшее отображение.

Ниже два скетча. Загрузите первый на ваш первый Arduino, к которому подключен радиопередатчик nRF24L01 и джойстик (или можно использовать потенциометр). Второй скетч загрузите на Arduino с подключенным модулем nRf24L01.

/* YourDuinoStarter пример: nRF24L01 передаем данные о положении джойстика

– Что делает скетч: считывает аналоговые значения на контакте A0, A1 и передает их

с помощью радиопередатчика nRF24L01 приемнику.

– Подключение nRF24L01 модуля смотрите на:

1 – GND

2 – VCC 3.3V !!! НЕ 5V

3 – CE к Arduino пину 9

4 – CSN к Arduino пину 10

5 – SCK к Arduino пину 13

6 – MOSI к Arduino пину 11

7 – MISO к Arduino пину 12

8 – НЕ ИСПОЛЬЗУЕТСЯ

Аналоговый джойстик или два потенциометра 10 КОм:

GND к Arduino GND

VCC к Arduino +5V

X потенциометр к Arduino A0

Y потенциометр к Arduino A1 */

/*—–(Импортируем необходимые библиотеки)—–*/

#include

#include

#include

/*—–(Объявляем константы и номера пинов)—–*/

#define CE_PIN 9

#define CSN_PIN 10

#define JOYSTICK_X A0

#define JOYSTICK_Y A1 // ПРИМЕЧАНИЕ: “LL” в конце константы – это тип данных “LongLong”

const uint64_t pipe = 0xE8E8F0F0E1LL;

/*—–(Объявляем объекты)—–*/

RF24 radio(CE_PIN, CSN_PIN); // Создаем объект Radio

/*—–(Объявляем переменные)—–*/

int joystick[2]; // массив из 2-х элементов, в котором хранятся с джойстика

int i = 0;

void setup() /****** SETUP: ОТРАБАТЫВАЕТ 1 РАЗ ******/

{

Serial.begin(9600);

radio.begin();

radio.openWritingPipe(pipe);

}//–(завершение setup )—

void loop() /****** LOOP: ОТРАБАТЫВАЕТ В БЕСКОНЕЧНОМ ЦИКЛЕ ******/

{

joystick[0] = i++;

joystick[1] = i++;

radio.write( joystick, sizeof(joystick) );

delay(3);

}//--(завершаем главный цикл)---

Еще один интересный пример обмена данными между двумя радиомодулями RF24 находится по ссылке на Github.

Похожие статьи

Arduino – что это такое? Популярно для начинающих

Arduino это недорогая, доступная в смысле покупки электронная плата с микроконтроллером и выводами входов-выходов. Arduino выпускаются в различных версиях, но поддерживают один и тот же, простой язык программирования. Огромный успех Ардуино, с уважением к другим микроконтроллерам, связан с тем, что аппаратное и программное обеспечение были опубликованы в открытом бесплатном для общего пользования виде: вы можете читать, изучать и даже расширять его возможности как в плане программного обеспечения, так и с точки зрения аппаратных средств. Вся информация об Ардуино доступна под лицензией “Creative Commons Attribution-ShareAlike 3.0 License”.

Как работают шаговые двигатели

Использование шаговых двигателей является одним из самых простых, дешевых и легких решений для реализации систем точного позиционирования. Эти двигатели очень часто используются в различных станках ЧПУ и роботах. Сегодня я расскажу о том, как устроены шаговые двигатели и как они работают.

Arduino и использование двигателей. Подключение двигателя постоянного тока и управление им.

1. Управляем маленькими моторчиками

Управление маленьким двигателем может быть может осуществляться довольно просто. Если двигатель достаточно маленький, он может быть непосредственно соединен с выводом Arduino, и просто изменяя уровень управляющего сигнала от логической единицы до нуля будем контролировать моторчик. Этот проект раскроет вам основную логику в управлении электродвигателем; однако, это не является стандартным способом подключения двигателей к Arduino. Мы рекомендуем, вам изучить данный способ, а затем перейти на следующую ступень – заняться управлением двигателями при помощи транзисторов.

Подключим миниатюрный вибромоторчик к нашему Arduino.

Теги: NRF24L01 2.4 ГГц радио/беспроводные передатчики и Arduino

Как запрограммировать радиомодуль NRF24LE1

Автор: Mike(admin) от 17-11-2016, 07:55

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

NRF24LE1 построен на основе ядра 8051, поэтому его можно программировать как микроконтроллер с гарвардской архитектурой 8051. Помимо радиочастотного приемопередатчика, поддерживающего модуляцию GFSK и передающего данные на расстояние до 100 метров, в составе NRF24LE1 есть АЦП, ШИМ, UART, I2C линии ввода/вывода общего назначения (GPIO), которыми можно управлять, правильно их запрограммировав.

Программировать NRF24LE1 будем на языке C в среде KEIL IDE. Для работы с модулем потребуются специальные библиотеки, которые можно найти на сайте Nordic Semiconductors или скачать здесь. Загрузка прошивки в данном случае будет осуществляться с помощью программатора Mpro Burner. Для этого программатора будет следующее соответствие выводов:

Учтите, что напряжение питания модуля составляет 3.3 В, а не 5 В. Поэтому будьте внимательны при подключении линий питания. Программирование модуля NRF24LE1, то есть загрузка в него hex-файла, осуществляется с помощью утилиты для Mpro Burner, которая также представлена в архиве по ссылке выше. Ниже приведем простой пример, который позволит мигать светодиодом, подключенным к линии GPIO модуля NRF24LE1. Схема подключения:

В коде мы используем регистр PnDIR (где n номер порта), чтобы изменить направление (вход или выход) конкретной линии порта (в данном случае порта 0). Запись значения 0 означает, что линия порта настроена на выход, а запись 1 – на вход. Например, запись P1DIR = 0x01 значит, что линия 0 порта 1 настроена на вход, а остальные линии 1 этого же порта настроены на выход. Для выбора типа линий порта (аналоговые или цифровые) служит регистр PnCON. По умолчанию все линии настроены как цифровые, что и будет в данном примере. Но при желании с помощью PnCON можно изменить их принцип работы на аналоговый. Запись значения в линию порта также выполняется довольно легко. Для этого нужно просто в регистр Pnm (n – номер порта, m – номер линии) записать 0 или 1. Код программы для мигания светодиодом:

  #include "reg24le1.h"  // заголовочный файл для выводв NRF24LE1  #include "hal_delay.h" // заголовочный файл для функций задержки     // основной код  void main()  {  P0DIR = 0x00;  // порт PORT0 на выход  while(1)  // бесконечный цикл  {  P00 = 0; // линия 0 порта 0 в низкий лог. уровень  delay_ms(1000); // задержка 1 секунда  P00 = 1; // линия 0 порта 0 в высокий лог. уровень  delay_ms(1000); // задержка 1 секунда  }  }  

Версия для печати &nbsp&nbsp&nbspБлагодарим Вас за интерес к информационному проекту digitrode.ru. &nbsp&nbsp&nbspЕсли Вы хотите, чтобы интересные и полезные материалы выходили чаще, и было меньше рекламы, &nbsp&nbsp&nbspВы можее поддержать наш проект, пожертвовав любую сумму на его развитие. –> Вернуться 8485–> 1 В 

Категория: Статьи, Программирование

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий

Форум — Science & Engineering

Недавно приехало мне из китаев. А я думал там уже оптимизировать нечего.

Вместо чипа у нас блоб из эпоксидки скрывающий кристалл. Это нормально. Что-то мне подсказывает сам кристалл это тот самый левак, а значит жрать будет больше, чувствительность — меньше. После того, как матерные выражения у меня иссякли при виде ‘оптимизаций’, я открыл референсную схематику и оценил масштабы бедствия. Они впечатляют. См. рисунок ниже, я там вычеркнул то, чего нам недопаяли.

А теперь, внимание, знатоки, вопрос. При одинаковой регистровой карте и прочих равных наблюдается адская штука: Эти штуки могут передать пакет на настоящий nrf24l01, но вот получить пакет от нормального nrf24l01 модуля не могут. Хотя размер пейлоада правильный – в пакете мусор. А вот между собой пакеты принимают и отправляют нормально.

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
А как считаете Вы?
Напишите в комментариях, что вы думаете – согласны
ли со статьей или есть что добавить?
Добавить комментарий