333

Радио модули NRF24L01 (ARDUINO)

Радио модули NFR24L01 работают в диапазоне частот 2.4-2.5 ГГц, поддерживают передачу данных до 2 Мбит/с и могут работать на 125 каналах. Радио модули выпускаются малой мощности (до 100 метров или около 30 метров в помещении) и с усилителем к которому можно подключить внешнюю антенну (до 1000 м).

Один модуль способен поддерживать связь сразу с шестью приемниками или передатчиками, то есть можно объединить сразу семь устройств в общую радиосеть на частоте 2,4 ГГц. Скорость беспроводного соединения можно настраивать: 250kbps, 1Mbps или 2Mbps, а так же можно изменять мощность в пережиме передатчика от -18dBm до 0dBm.

Основные параметры радио модуля NRF24L01

  • Напряжение питания от 1.9 В до 3.6 В

  • Потребляемый ток при мощности 0dBm 11.3 мА

  • Потребляемый ток при передачи 2 Мбит 13.5 мА

  • Частота 2,4 – 2,525 ГГц

  • Скорость передачи: 250 Кбит, 1 Мбит или 2Mбит

  • Программируемая выходная мощность: 0, -6, -12 и -18 dBm

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

При передачи сигнала радио модуль NRF24L01 кратковременно может потреблять большой ток, поэтому рекомендуется по питанию установить электролитический конденсатор емкость от 10 до 220 мкФ.

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

Перед загрузкой скетчей Вам понадобятся следующие библиотеки:

Тестовый скетч

В этом примере один радио модуль работает в качестве передатчика, а другой в качестве приемника. Передатчик передает два числа, а приемник принимает сигнал и выводит в монитор порта эти числа.

ПЕРЕДАТЧИК

#include <SPI.h>

#include <nRF24L01.h>

#include <RF24.h>

RF24 radio(9, 10); // (CE, CSN)

int data[2]; 

void setup(){

radio.begin();

radio.setChannel(5); // канал от 0 до 125

radio.setDataRate (RF24_1MBPS); // RF24_250KBPS, RF24_1MBPS, RF24_2MBPS

radio.setPALevel (RF24_PA_HIGH); // RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm

radio.openWritingPipe (0xA0A0A0A001);

}

void loop(){

data[0] = 1234;

data[1] = 5678;

radio.write(&data, sizeof(data));

delay(1000);

}

ПРИЕМНИК

#include <SPI.h>

#include <nRF24L01.h>

#include <RF24.h>

RF24 radio(9, 10); // (CE, CSN) 

int data[2]; 

void setup(){

delay(1000);

Serial.begin(9600);

radio.begin();

radio.setChannel(5); // канал от 0 до 125 radio.setDataRate (RF24_1MBPS); // RF24_250KBPS, RF24_1MBPS, RF24_2MBPS

radio.setPALevel (RF24_PA_HIGH); // RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm r

adio.openReadingPipe (1, 0xA0A0A0A001);

radio.startListening (); // radio.stopListening ();

}

void loop(){

if(radio.available()){

radio.read(&data, sizeof(data));

Serial.println(data[0]);

Serial.println(data[1]);

} }

Управление 4-я реле

В этом примере можно управлять включением и выключением 4-х реле или других исполнительных уст-в. В передатчике используются 4 кнопки, при нажатии на кнопку в приемнике меняет логическое состояние один их выходов к которому можно подключить модуль реле.

ПЕРЕДАТЧИК

#include <SPI.h>

#include <nRF24L01.h>

#include <RF24.h>

RF24 radio(9, 10); // (CE, CSN) 

int data_reg;

bool w1,w2,w3,w4; 

void setup(){

delay(1000);

Serial.begin(9600);

radio.begin();

radio.setChannel(5); // канал от 0 до 125

radio.setDataRate(RF24_250KBPS); // RF24_250KBPS, RF24_1MBPS, RF24_2MBPS

radio.setPALevel(RF24_PA_MIN); // RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm

radio.openWritingPipe(0xA1A1A1A102);

pinMode(2,INPUT_PULLUP);

pinMode(3,INPUT_PULLUP);

pinMode(4,INPUT_PULLUP);

pinMode(5,INPUT_PULLUP);

}


void loop(){

if(digitalRead(2)==LOW && w1==0){

w1=1;

data_reg |= (1<<0);

delay(200);

}

if(digitalRead(2)==LOW && w1==1){

w1=0;

data_reg &=~(1<<0);

delay(200);

if(digitalRead(3)==LOW && w2==0){

w2=1;

data_reg |= (1<<1);

delay(200);

}

if(digitalRead(3)==LOW && w2==1){

w2=0;

data_reg &=~(1<<1);

delay(200);

if(digitalRead(4)==LOW && w3==0){

w3=1;

data_reg |= (1<<2);

delay(200);

}

if(digitalRead(4)==LOW && w3==1){

w3=0;

data_reg &=~(1<<2);

delay(200);

if(digitalRead(5)==LOW && w4==0){

w4=1;

data_reg |= (1<<3);

delay(200);

}

if(digitalRead(5)==LOW && w4==1){

w4=0;

data_reg &=~(1<<3);

delay(200);

radio.write(&data_reg, sizeof(data_reg));

Serial.println(data_reg);

delay(100);

}

ПРИЕМНИК

#include <SPI.h>

#include <nRF24L01.h>

#include <RF24.h>

RF24 radio(9, 10); // (CE, CSN) 

int data_old,data;

unsigned long times; 

void setup(){

delay(1000);

Serial.begin(9600);

pinMode(2,OUTPUT);

pinMode(3,OUTPUT);

pinMode(4,OUTPUT);

pinMode(5,OUTPUT);

radio.begin();

radio.setChannel(5); // канал от 0 до 125 radio.setDataRate(RF24_250KBPS); // RF24_250KBPS, RF24_1MBPS, RF24_2MBPS

radio.setPALevel(RF24_PA_MIN); // RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm

radio.openReadingPipe(1, 0xA1A1A1A102);

radio.startListening();

}

void loop(){

if(radio.available()){

radio.read(&data, sizeof(data));

Serial.println(data); 

if(((data >> 0) & 1) ==1){

digitalWrite(2,HIGH);

}

else{digitalWrite(2,LOW);

}

if(((data >> 1) & 1) ==1){

digitalWrite(3,HIGH);

}

else{digitalWrite(3,LOW);

}

if(((data >> 2) & 1) ==1){

digitalWrite(4,HIGH);

}

else{digitalWrite(4,LOW);

}

if(((data >> 3) & 1) ==1){

digitalWrite(5,HIGH);

}

else{

digitalWrite(5,LOW);

} } }

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

Электронный термометр DS18B20

В следующем примере к передатчику подключен цифровой датчик температуры DS18B20, передатчик передает температуру, а приемник выводит ее на дисплей LCD1602_I2C. В момент получения информации на экран выводится символ «*».

Терморегулятор

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

Базовый модуль терморегулятора содержит дисплей LCD1602 с модулем I2C и энкодер для установки температуры регулирования. Модуль датчика и управления нагревательным элементом измеряет температуру и каждые 2 секунды передает ее значение в базовый модуль, базовый модуль получает значение температуры и выводит ее на дисплей, при помощи энкодера в базовом модуле можно изменить температуру регулирования, температура регулирования каждые 2 секунды передается в модуль датчика. Оба модуля основное время работают как приемники и раз в 2 секунды переходят в режим передатчика передавая необходимую информацию. Модуль датчика в зависимости от текущей температуры и температуры регулирования управляет цифровым выходом D3 к который может управлять нагревательным элементом.

  • Температура регулирования

  • Индикатор получения информации (в момент приема выводится символ *)

    Скетчи - http://rcl-radio.ru/?p=128866

Больше постов читайте по тегу «Программирование». А если хотите изучить новую профессию, посмотрите актуальные курсы от проверенных школ с реальными отзывами на сайте Пикабу Курсы.

TECHNO BROTHER

2.1K пост13.6K подписчиков

Правила сообщества

1-Мы А-политическое сообщество. 2-Запрещено оскорбление: Администрации Пикабу, сообщества, участников сообщества а также родных, близких выше указанных.

3-Категорически запрещается разжигание межнациональной розни или действий, направленных на возбуждение национальной, расовой вражды, унижение национального достоинства, а также высказывания о превосходстве либо неполноценности пользователей по признаку их отношения к национальной принадлежности или политических взглядов. Мат - Нежелателен. Учитесь выражать мысли без матерщины