NRF24L01+ на Arduino: электронный кодовый замок с беспроводным управлением
NRF24L01+ на Arduino — дешёвый радиомодуль 2.4 ГГц для беспроводного управления. Дальность до 100 м (открыто), 30 м в помещении. Скорость до 2 Мбит/с, 128 каналов. Подключение по SPI, питание 3.3В. Проект: кодовый замок на клавиатуре 4×4 (передатчик) + реле (приёмник). Ввод кода ABCD открывает замок на 5 сек. Карманный пульт без ключа. Расширение: несколько пультов, голос, домофон. Стабильная связь, низкое потребление.
Характеристики NRF24L01+
Частота 2.4 ГГц ISM. Модуляция GFSK. Скорость 250 кбит/с – 2 Мбит/с. Каналы 128. Дальность 100 м открыто, 30 м помещение. Мощность +0 дБм. Питание 1.9–3.6В, ток 13 мА передача. SPI интерфейс. 1 приёмник + 6 передатчиков на канал. Поддержка ACK, авторетрансмит.
Компоненты
- 2 Arduino Nano
- 2 NRF24L01+ (с антенной для дальности)
- Клавиатура 4×4
- Реле модуль
- Замок/сирена
Подключение передатчика (пульт)
- NRF24: VCC 3.3V, GND, CE D9, CSN D10, SCK D13, MOSI D11, MISO D12
- Клавиатура 4×4: ряды D2–D5, столбцы D6–D8
Подключение приёмника (замок)
- NRF24 аналогично
- Реле IN → D8
Библиотека RF24
Установка из Менеджера библиотек. Примеры GettingStarted.
Скетч передатчика
#include <SPI.h>
#include <RF24.h>
#include <Keypad.h>
RF24 radio(9,10);
const byte address[6] = "00001";
const byte rows = 4, cols = 4;
char keys[rows][cols] = {{'1','2','3','A'},{'4','5','6','B'},{'7','8','9','C'},{'*','0','#','D'}};
byte rowPins[rows] = {2,3,4,5};
byte colPins[cols] = {6,7,8,A0};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, rows, cols);
String code = "";
const String correct = "ABCD";
void setup() {
radio.begin();
radio.openWritingPipe(address);
radio.setPALevel(RF24_PA_MAX);
radio.stopListening();
}
void loop() {
char key = keypad.getKey();
if (key) {
if (key == '#') {
if (code == correct) radio.write("OPEN", 5);
code = "";
} else if (key == '*') code = "";
else code += key;
}
}
Накопляет нажатия клавиш в строку code.
При нажатии # проверяет, совпадает ли введённый код с правильным («ABCD»).
Если код верный, отправляет по радиоканалу RF24 команду «OPEN».
Клавиша * очищает текущий ввод, а все остальные клавиши добавляют символы в код.
Скетч приёмника
#include <SPI.h>
#include <RF24.h>
RF24 radio(9,10);
const byte address[6] = "00001";
void setup() {
radio.begin();
radio.openReadingPipe(0, address);
radio.setPALevel(RF24_PA_MAX);
radio.startListening();
pinMode(8, OUTPUT);
}
void loop() {
if (radio.available()) {
char text[5] = "";
radio.read(&text, sizeof(text));
if (strcmp(text,"OPEN")==0) {
digitalWrite(8, HIGH);
delay(5000);
digitalWrite(8, LOW);
}
}
}
В цикле проверяет наличие новых данных через radio.available().
Если приходит сообщение «OPEN», включает пин 8 на 5 секунд (например, для реле), затем выключает.
Таким образом, приёмник реагирует на команду от передатчика, отправляющего «OPEN».
Настройка
Адрес трубы одинаковый. PA_MAX для дальности. ACK для надёжности.
Расширение
Несколько пультов (разные адреса). Голос домофон. Wi-Fi ESP8266. LCD статус. Кнопка внутри открытия.
Заключение
NRF24L01+ — надёжный радиомодуль для Arduino. Беспроводный кодовый замок: клавиатура + реле. Дальность, стабильность, простота.
FAQ — NRF24L01+ кодовый замок
Нет связи между модулями?
Проверьте адрес трубы одинаковый. Питание 3.3В стабильное, конденсатор 10 мкФ. PA_MAX для мощности.
Дальность малая?
Модуль с внешней антенной — до 1 км. PA_MAX, открытое пространство. Избегайте помех 2.4 ГГц (Wi-Fi).
Клавиатура не работает?
Пины rows/cols правильные. Библиотека Keypad. Pull-up резисторы если нужно.
Реле не срабатывает?
Проверьте radio.available() и strcmp(text,»OPEN»). Задержка delay(5000) для открытия.
Несколько пультов?
Разные адреса труб. Приёмник openReadingPipe для каждого.
Голос по NRF24?
Да, поток аудио 1–2 Мбит/с. Микрофон + динамик, буфер.
ESP8266 с NRF24?
Да, библиотека RF24 работает. Wi-Fi + радио для гибрида.