Меню

Nrf24l01 питание от батареи

Радио модуль NRF24L01

Товары

Содержание

  • Обзор
  • Технические характеристики модуля
  • Пример использования 1
  • Пример использования 2
  • Часто задаваемые вопросы FAQ

Обзор Модули nRF24L01

При разработке электронных устройств нередко возникает потребность в передаче каких-либо данных на некоторое расстояние. Например термодатчик, расположенный на улице, должен передавать значение температуры центральному устройству, а датчик движения – отдавать команду на включение сирены, расположенной в отдельном помещении. Подобных задач существует множество, как и методов их решения. В тех случаях, когда организовать проводную связь не представляется возможным, на помощь приходят радиомодули NFR24L01, работающие в диапазоне частот 2.4-2.5 ГГц. Их простота и надёжность обеспечила модулям огромную популярность среди радиолюбительских конструкций. NFR24L01 можно встретить в таких устройствах, как:

Беспроводная клавиатура, мышь, джойстик;

Система беспроводного доступа;

Сетевая система сбора данных;

Беспроводные охранные системы;

Всевозможные системы наблюдения и мониторинга;

Системы автоматики и телемеханики;

Игрушки на радиоуправлении и многое другое.

В общем, область применения данных радиомодулей ограничивается лишь фантазией разработчика, а их невысокая стоимость является приятным дополнением к прочим достоинствам. На рисунке №1 показан внешний вид радиомодуля NRF24L01 с распиновкой выводов.

Рисунок №1 – внешний вид NRF24L01

Как видно из вышеприведенного рисунка, комплектация платы является базовой и содержит сам чип, штыревую колодку и антенну в виде извилистой дорожки. Такой набор обеспечивает дальность связи до 100м при прямой видимости или до 30м в помещении. Если этого недостаточно, то есть возможность приобрести такие же модули, только с дополнительным усилителем и внешней антенной (рисунок №2). В таком случае дальность связи можно увеличить до 1000м.

Рисунок №2 — NRF24L01 с усилителем и внешней антенной

Организация питания радиомодулей требует повышенного внимания, так как большинство начинающих пользователей сталкивается с проблемами при их запуске. Дело в том, что в момент инициализации NRF24L01 потребляют значительный ток, который не может обеспечить стандартный 3-вольтовый преобразователь Arduino. Как следствие, наблюдаются сбои в работе радиосвязи. Исключить эту неприятную ситуацию поможет электролитический конденсатор, ёмкостью около 100 мкФ. Его необходимо подпаять параллельно выводам GROUND и VCC модуля. Дополнительная ёмкость поможет сгладить пульсации при старте и обеспечит достаточный запас энергии.

Ещё одним вариантом решения проблемы запуска, является использование дополнительного адаптера со встроенным стабилизатором напряжения. В таком случае для NRF24L01 можно использовать внешнее питание от 4.8В до 12В, а максимальный выходной ток составит 800мА. Внешний вид такого адаптера показан на рисунке №3.

Рисунок №3 – Дополнительный адаптер для NRF24L01

И наконец, для тех, кто хочет углубиться в строение самого радиомодуля NRF24L01, на рисунке №4 приведена его электрическая схема.

Рисунок №4 – электрическая схема NRF24L01

Технические характеристики Модули nRF24L01

Напряжение питания: 1,9В – 3,6В;

Интерфейс обмена данными: SPI;

Частота приёма и передачи: 2,4 ГГц;

Количество каналов: 128 с шагом 1МГц;

Тип модуляции: GFSK;

Скорость передачи данных: 250kbps, 1Mbps и 2Mbps;

Чувствительность приёмника: —82 dBm;

Расстояние приёма/передачи данных: 100м – прямая видимость; 30м – помещение;

Коэффициент усиления антенны: 2dBm;

Диапазон рабочей температуры: -40 о С…+85 о С;

Организация сети на одном канале: 7 модулей (1 приёмник и 6 передатчиков).

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

Рисунок №5 — карта подключения NRF 24 L 01 к различным сериям Arduino .

Выводы CE и CSN могут быть соединены с любыми цифровыми пинами Arduino . Единственное что потребуется – указать их номера при написании скетча. Что касается программирования, то для взаимодействия с NRF 24 L 01 существует несколько библиотек, но наиболее популярной и стабильной является библиотека RF 24 .

Как правило, большинство любительских проектов начального уровня предусматривают использование двух модулей NRF 24 L 01 , один из которых работает в режиме передатчика, а другой как приёмник на одинаковой частоте. Но что делать, когда на одном канале необходимо контролировать сразу несколько датчиков, например температуру в разных комнатах? В этом случае, функциональные возможности радиомодуля NRF 24 L 01 предусматривают возможность организации мини-сети. А именно, на одной частоте или канале могут работать до 6 передатчиков и 1 приёмник. При этом каждому передатчику присваивается свой уникальный идентификатор (« Pipe ID » или «Идентификатор трубы»), а приёмнику необходимо присвоить все идентификаторы тех передатчиков, от которых он будет принимать данные.

Каждый идентификатор представляет из себя произвольное число, состоящее из 5 байт, но он должен задаваться по определённым правилам, а именно:

На одном и том же канале идентификатор каждого передатчика должен быть обязательно уникальным;

Чтобы приёмник мог принимать данные от передатчиков, ему должны быть указаны их идентификаторы;

Идентификаторы труб Pipe 0 и Pipe 1 должны отличаться всеми пятью байтами, например Pipe 0 = 0 x 7878787878 , а Pipe 1 = 0 xB 4 B 5 B 6 B 7 F 1 ;

Идентификаторы труб Pipe 2 – Pipe 5 должны отличаться от Pipe 1 только последним байтом, например: Pipe 1 = 0 xB 4 B 5 B 6 B 7 F 1 ; Pipe 2 = 0 xB 4 B 5 B 6 B 7 CD ; Pipe 3 = 0 xB 4 B 5 B 6 B 7 A 3 ; Pipe 4 = 0 xB 4 B 5 B 6 B 7 0 F ; Pipe 5 = 0 xB 4 B 5 B 6 B 7 05 ;

Читайте также:  Питание для моделей парней

Рисунок №6 наглядно демонстрирует вышеизложенное.

Рисунок №6 – Приём данных от 6 передатчиков

Для закрепления материала, создадим проект, где 2 платы Arduino будут соединены между собой по радиоканалу. К первой Arduino подсоединим потенциометр, а ко второй – светодиод. Путём вращения ручки потенциометра будем регулировать яркость светодиода по радиоканалу. Схема проекта показана на рисунке №7.

Рисунок №7 – соединение 2-х Arduino по радиоканалу

Программный код для передатчика:

#include // Подключаем библиотеку для работы с SPI-интерфейсом

#include // Подключаем файл конфигурации из библиотеки RF24

#include // Подключаем библиотеку для работа для работы с модулем NRF24L01

#define PIN_POT A7 // Номер пина Arduino, к которому подключен потенциометр

#define PIN_CE 10 // Номер пина Arduino, к которому подключен вывод CE радиомодуля

#define PIN_CSN 9 // Номер пина Arduino, к которому подключен вывод CSN радиомодуля

RF24 radio ( PIN_CE , PIN_CSN ); // Создаём объект radio с указанием выводов CE и CSN

int potValue [ 1 ]; // Создаём массив для передачи значений потенциометра

radio . begin (); // Инициализация модуля NRF24L01

radio . setChannel ( 5 ); // Обмен данными будет вестись на пятом канале (2,405 ГГц)

radio . setDataRate ( RF24_1MBPS ); // Скорость обмена данными 1 Мбит/сек

radio . setPALevel ( RF24_PA_HIGH ); // Выбираем высокую мощность передатчика (-6dBm)

radio . openWritingPipe ( 0x7878787878LL ); // Открываем трубу с уникальным ID

potValue [ 0 ] = analogRead ( PIN_POT ); // Считываем показания потенциометра

radio . write ( potValue , 1 ); // Отправляем считанные показания по радиоканалу

#include // Подключаем библиотеку для работы с SPI-интерфейсом

#include // Подключаем файл конфигурации из библиотеки RF24

#include // Подключаем библиотеку для работа для работы с модулем NRF24L01

#define PIN_LED 3 // Номер пина Arduino, к которому подключен светодиод

#define PIN_CE 10 // Номер пина Arduino, к которому подключен вывод CE радиомодуля

#define PIN_CSN 9 // Номер пина Arduino, к которому подключен вывод CSN радиомодуля

RF24 radio ( PIN_CE , PIN_CSN ); // Создаём объект radio с указанием выводов CE и CSN

int potValue [ 1 ]; // Создаём массив для приёма значений потенциометра

pinMode ( PIN_LED , OUTPUT ); // Настраиваем на выход пин светодиода

radio . begin (); // Инициализация модуля NRF24L01

radio . setChannel ( 5 ); // Обмен данными будет вестись на пятом канале (2,405 ГГц)

radio . setDataRate ( RF24_1MBPS ); // Скорость обмена данными 1 Мбит/сек

radio . setPALevel ( RF24_PA_HIGH ); // Выбираем высокую мощность передатчика (-6dBm)

radio . openReadingPipe ( 1 , 0x7878787878LL ); // Открываем трубу ID передатчика

radio . startListening (); // Начинаем прослушивать открываемую трубу

if ( radio . available ()) < // Если в буфер приёмника поступили данные

analogWrite ( PIN_LED , map ( potValue [ 0 ], 0 , 1023 , 0 , 255 )); // Регулируем яркость диода

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

  • Функция setDataRate () устанавливает скорость обмена данными и может принимать следующие значения:

— RF24_250KBPS – скорость 250 кбит/сек;

— RF24_1MBPS – скорость 1Мбит/сек;

— RF24_2MBPS – скорость 2Мбит/сек;

  • Функция setPALevel() определяет мощность передатчика и может принимать следующие значения:

— RF24_PA_MIN – мощность -18dBm;

— RF24_PA_LOW – мощность -12dBm ;

— RF24_PA_HIGH – мощность -6dBm ;

— RF24_PA_MAX – мощность 0dBm ;

Пример использования 1

Так как основной областью применения радиомодулей NRF 24 L 01 являются различные системы удалённого мониторинга, создадим небольшой проект, суть которого передавать по радиоканалу температуру и влажность с датчика DHT 11 . На стороне приёма данная информация будет выводиться на символьный LCD -дисплей 16х2. Схема проекта показана на рисунке №8.

Рисунок №8 – проект удалённого контроля температуры и влажности

Arduino 1 будет один раз в 2 секунды считывать показания датчика DHT 11 и отправлять данные по радиоканалу на Arduino 2 , которая выведет их на дисплей. В данном проекте использован символьный ЖКИ-дисплей с конвертером I 2 C , что позволяет использовать всего 2 провода для его подключения. Также понадобятся несколько библиотек для работы с датчиком влажности и самим дисплеем по шине I 2 C . Скачать их можно по приведенным ниже ссылкам:

После установки всех необходимых библиотек, можно переходить непосредственно к программированию. Ниже приведены 2 скетча с комментариями для передатчика и приёмника.

Программный код для передатчика:

#include // Библиотека для работы с датчиком DHT11/DHT22

iarduino_DHT sensor ( 3 ); // Датчик подключен к 3 пину Arduino

#include ; // Библиотека для работы с шиной SPI

#include ; // Файл конфигурации для библиотеки RF24

Читайте также:  Бренды продуктов питания украины

#include ; // Библиотека для работы с модулем NRF24L01

#define PIN_CE 10 // Номер пина Arduino, к которому подключен вывод CE радиомодуля

#define PIN_CSN 9 // Номер пина Arduino, к которому подключен вывод CSN радиомодуля

RF24 radio ( PIN_CE , PIN_CSN ); // Создаём объект radio с указанием выводов CE и CSN

int DHT_value [ 2 ]; // Массив для передачи данных о температуре и влажности

Serial . begin ( 9600 ); // Инициализация серийного порта для отладки

radio . begin (); // Инициализация радиомодуля NRF24L01

radio . setChannel ( 5 ); // Обмен данными будет вестись на пятом канале (2,405 ГГц)

radio . setDataRate ( RF24_1MBPS ); // Скорость обмена данными 1 Мбит/сек

radio . setPALevel ( RF24_PA_HIGH ); // Выбираем высокую мощность передатчика (-6dBm)

radio . openWritingPipe ( 0x7878787878LL ); // Открываем трубу с уникальным ID

delay ( 2000 ); // Задержка на инициализацию датчика DHT

if ( sensor . read () == DHT_OK ) < // Если датчик выполнил преобразования

DHT_value [ 0 ] = sensor . tem ; // Запоминаем температуру

DHT_value [ 1 ] = sensor . hum ; // Запоминаем влажность

radio . write ( DHT_value , sizeof ( DHT_value )); // Передаём данные по радиоканалу

// Паралельно выводим считанные значения в терминал

delay ( 2000 ); // Задержка на время преобразований датчика DHT

Программный код для приёмника:

#include ; // Библиотека для работы с шиной SPI

#include ; // Файл конфигурации для библиотеки RF24

#include ; // Библиотека для работы с модулем NRF24L01

#define PIN_CE 10 // Номер пина Arduino, к которому подключен вывод CE радиомодуля

#define PIN_CSN 9 // Номер пина Arduino, к которому подключен вывод CSN радиомодуля

RF24 radio ( PIN_CE , PIN_CSN ); // Создаём объект radio с указанием выводов CE и CSN

#include // Библиотека для работы с шиной 1-Wire

#include
// Библиотека для работы с ЖКИ

// Создаём объект lcd для работы с дисплеем

// (I2C_ADDR, En_pin, Rw_pin, Rs_pin ,D4_pin, D5_pin, D6_pin, D7_pin)

int DHT_value [ 2 ]; // Массив для передачи данных о температуре и влажности

lcd . begin ( 16 , 2 ); // Инициализация ЖКИ

lcd . backlight (); // Включаем подсветку

radio . begin (); // Инициализация радиомодуля NRF24L01

radio . setChannel ( 5 ); // Обмен данными будет вестись на пятом канале (2,405 ГГц)

radio . setDataRate ( RF24_1MBPS ); // Скорость обмена данными 1 Мбит/сек

radio . setPALevel ( RF24_PA_HIGH ); // Выбираем высокую мощность передатчика (-6dBm)

radio . openReadingPipe ( 1 , 0x7878787878LL ); // Открываем трубу с ID передатчика

radio . startListening (); // Включаем прослушивание открытой трубы

if ( radio . available ()) < // Если по рпдиоканалу поступили данные

// Выводим принятые данные на ЖКИ по координатам

При повторении проекта может возникнуть проблема с выводом информации на экран дисплея. Дело в том, что дополнительные модули, предоставляющие интерфейс I 2 C могут иметь различные адреса. В моём случае адрес дисплея на шине равен x 27 . Определить адрес вашего дисплея можно специальным скетчем-сканером шины I 2 C . Найти его на просторах Интернета не составит никакого труда. Результат работы данного проекта на макетной плате показан на рисунке №9.

Рисунок №9 – контроль температуры и влажности по радиоканалу

Пример использования 2

Создадим проект передачи данных с одной плата Arduino на другую по радиоканалу и использованием модулей nRF24L01+.

Для проекта нам понадобятся:

Плата Arduino – 2 шт;

Модуль nRF24L01+ – 2 шт;

Датчик DHT11 – 1 шт;

Дисплей WH1602 I2C;

Схема соединений нашего проекта на рис. 10.

Каждые 10 секунд получаем показания влажности воздуха и температуры на плате Arduino с датчика DHT11 и передаем по радиоканалу на другую плату Arduino для отображения на дисплее. Выбираем мощность передатчика, скорость передачи, канал 0x55:

Содержимое скетча для платы Arduino c датчиком DHT11 показано в листинге 3.

Теперь пишем скетч для приемника и отображения данных на экране дисплея.

Содержимое скетча для платы Arduino c дисплеем WH1602 I2C показано в листинге 4.

И результат работы (рис. 11).

FAQ. Часто задаваемые вопросы

Вопрос: Почему на некоторых каналах дальность связи резко уменьшается?

Ответ: Частотный диапазон, в котором работают данные радиомодули является довольно распространённым. В этой полосе частот работают также wifi-роутеры, Bluetooth-устройства и даже некоторые СВЧ-печи. Весть этот промышленный шум может препятствовать прохождению сигналов на некоторых каналах. При обнаружении подобных проблем рекомендуется просто сменить канал связи на другой.

Вопрос: Как прописать в коде приёмника получение данных с нескольких передатчиков?

Ответ: Для этого необходимо указать уникальный ID каждого передатчика, который будет вещать на частоте приёмника, например.

void setup () <
// .

// Первый передатчик имеен идентификатор 0xAABBCCDD11LL
radio . openReadingPipe ( 1 , 0xAABBCCDD11LL );
// Второй передатчик имеен идентификатор 0xAABBCCDD22LL
radio . openReadingPipe ( 2 , 0xAABBCCDD22LL );
radio . startListening ();

// .
>

void loop () <
// Если поступили данные, определяем номер трубы передатчика по ссылке на pipe
if ( radio . available (& pipe )) <
radio . read (& data , sizeof ( data )); // Считываем данные в массив
if ( pipe == 1 ) < // Если данные пришли от 1-го передатчика
// Выполняем какие-либо действия для 1-го передатчика
>
if ( pipe == 2 ) < // Если данные пришли от 2-го передатчика
// Выполняем какие-либо действия для 2-го передатчика
>
>
>

Вопрос: Сам модуль питается от 3,3В, а Arduino от . Насколько необходим преобразователь уровней при подключении модуля к Arduino по SPI-шине?

Ответ: Преобразователь уровней не требуется, так как информационные входы радиомодуля NRF24L01 толерантны к напряжению .

Вопрос: Какое количество байт можно отправить в буфер передатчика за один раз?

Ответ: За один сеанс можно отправить в буфер 32 байта.

Источник



Arduino.ru

Энергопотребление NRF24l01

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

Столкнулся с непонятной проблемой. Есть беспроводные клиенты которые передают информацию о температуре, влажности. Всё работает от батареек.

Ставим новый NRF — потребление 0.3 мА. Проходит минут 10 работы — потребление 0.9 мА. Дальше больше.

Вытаскиваем модуль, ставим новый — потребление маленькое, но со временем возрастает. Возвращаем исходный — потребление большое!

Что может быть? Уже проверил штук 10 Со всеми такая же картина 🙁

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

как меряешь энергопотребление ?

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

Цифровым вольтмером Fluke

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

maloicds, энергопотребление данного трансивера имеет импульсный характер (скважность импульсов прямо пропорциональна длине посылок), это измерить даже TrueRMS мультиметром затруднительно, показания должны «скакать» т.к. эти посылки не имеют чёткого периодического характера. Измерить можно осциллографом, я как раз измерял недавно, у обычной платы потребление во время передачи амплитудное до 27ма, или среднеквадратичное примерно 14ма. Т.е. truRMS тестер показал бы «пляску» данных с максимальным рузультатом 14ма.

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

Все замеры делались в спящем реиме МК и NRF (режим работы передатчика: отправка данных, сон 5 мин и так далее)

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

dimax , а у Вас не сохранилось картинок с осциллографа? На просторах интернета советуют ставить конденсатор на питание NRF, а по этим данным можно же наверняка выяснить, какой точно нужен.

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

а что мешает через полевик отрубать вообще питание nrf? занят будет еще один пин, полевик например irlml2502. размеры крохотные. просто при включении инициализация, отправил данные и снова отключил. слушать эфир не нужно. конденсатор да рекомендуется ставить. я 10мкф керамику 0805 паяю

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

jeka_tm, Вы делали измерения или по принципу «try and error»?

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

измерения? а зачем? не проще идти по простому пути. спящий режим все равно потребляет больше чем выключенный))

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

и все равно отключение экономичнее. и его можно сделать прямо сейчас, а не тратить время на разбирательство как максимально снизить потребление

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

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

Меня больше интересует стабильность работы модуля, в режиме сна отключаю стаб. на него. В интернете много вариантов емкости конденсатора советуют, в плоть до нескольких разного номинала. Вопрос только, на сколько это целеобразно. Учитывая опыт dimax , можно сделать вывод, что в каждом случае емкость нужно подбирать индивидуально (в зависимости от скважности/длины пакетов), но хотелось бы иметь хотя бы какую-то вводную.

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

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

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

Не видя кода программы, можно только гадать что Вы делаете с трансивером и почему он не меняет режим на нужный. Выложите код программы и если используете функцию write, выложите ее полный текст из библиотеки в том виде как компилируете , тк она тоже управляет энергорежимами. Может быть Вы используете startWrite и не дожидаясь завершения некорректно пытаетесь перевести в сон .

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

Керамический конденсатор 10 мкф типоразмера SMD-0805 обычно успешно решает обе задачи, а электролитическому кроме танталловых, нужен дублер.

Источник