Беспроводное управление Arduino-роботом: HC-05 Bluetooth, NRF24L01 и HC-12
Обзор
Три способа беспроводного управления роботом-платформой на L298N: HC-05 Bluetooth (включая кастомное Android-приложение), NRF24L01, HC-12 (дальность до 1.8 км). Базовый код управления моторами джойстиком взят из предыдущего урока.
1. HC-05 Bluetooth (Master/Slave)
Два модуля: джойстик — Master, робот — Slave. Настройка AT-комндами. Передача двух байт (X, Y) через Serial.


Код Master (джойстик)
/* Master - Joystick */
int xAxis, yAxis;
void setup() { Serial.begin(38400); }
void loop() {
xAxis = analogRead(A0); yAxis = analogRead(A1);
Serial.write(xAxis/4); // 0-1023 → 0-255 (1 байт)
Serial.write(yAxis/4);
delay(20);
}
Код Slave (робот)
/* Slave - Robot Car */
#define enA 9; #define in1 4; #define in2 5;
#define enB 10; #define in3 6; #define in4 7;
int xAxis, yAxis; unsigned int x=0, y=0;
int motorSpeedA=0, motorSpeedB=0;
void setup() {
pinMode(enA,OUTPUT); pinMode(enB,OUTPUT);
pinMode(in1,OUTPUT); pinMode(in2,OUTPUT);
pinMode(in3,OUTPUT); pinMode(in4,OUTPUT);
Serial.begin(38400);
}
void loop() {
x = 510/4; y = 510/4; // центр джойстика
while (Serial.available() >= 2) {
x = Serial.read(); delay(10);
y = Serial.read();
}
xAxis = x*4; yAxis = y*4; // обратно в 0-1023
// ... далее стандартный код управления L298N по осям X/Y (см. полный листинг ниже)
}
2. Управление со смартфона (Bluetooth + Android App)
Схема робота та же (Slave HC-05). Приложение на MIT App Inventor имитирует джойстик (два ImageSprite). При перетаскивании шлёт X/Y (диапазон ~60–220) по Bluetooth. Arduino конвертирует map(x, 220, 60, 1023, 0).


Скачать APK, .aia и картинки джойстика — в статье.
3. NRF24L01 (SPI)
Требует библиотеку RF24. Передача строковых значений X и Y через radio.write() в char-массив. Приём — radio.read() + atoi() для преобразования в int. Пины EN A/B перенесены на 2, 3 (9, 10 заняты SPI).


Передатчик (джойстик)
#include <SPI.h> #include <nRF24L01.h> #include <RF24.h>
RF24 radio(8,9); const byte address[6]="00001";
char xyData[32]=""; String xAxis, yAxis;
void setup() { radio.begin(); radio.openWritingPipe(address); radio.setPALevel(RF24_PA_MIN); radio.stopListening(); }
void loop() {
xAxis = String(analogRead(A0)); yAxis = String(analogRead(A1));
xAxis.toCharArray(xyData,5); radio.write(&xyData,sizeof(xyData));
yAxis.toCharArray(xyData,5); radio.write(&xyData,sizeof(xyData));
delay(20);
}
Приёмник (робот)
#include <SPI.h> #include <nRF24L01.h> #include <RF24.h>
#define enA 2; #define in1 4; #define in2 5; // пины изменены
#define enB 3; #define in3 6; #define in4 7;
RF24 radio(8,9); const byte address[6]="00001";
char receivedData[32]=""; int xAxis, yAxis;
void setup() { /* пины, radio.openReadingPipe, startListening */ }
void loop() {
if (radio.available()) {
radio.read(&receivedData,sizeof(receivedData));
xAxis = atoi(&receivedData[0]); delay(10);
radio.read(&receivedData,sizeof(receivedData));
yAxis = atoi(&receivedData[0]); delay(10);
}
// ... управление моторами (как в HC-05 Slave)
}
4. HC-12 (дальний радиоканал, Serial)
Схема как у HC-05. Скорость 9600 бод. Код передатчика идентичен HC-05 Master. Приёмник читает Serial с ожиданием while(Serial.available()==0){}.

Передатчик
/* HC-12 Transmitter */
int xAxis, yAxis;
void setup() { Serial.begin(9600); }
void loop() {
xAxis = analogRead(A0); yAxis = analogRead(A1);
Serial.write(xAxis/4); Serial.write(yAxis/4); delay(20);
}
Приёмник
/* HC-12 Receiver */
#define enA 9; #define in1 4; #define in2 5;
#define enB 10; #define in3 6; #define in4 7;
int xAxis, yAxis; int x=0, y=0;
void setup() { /* пины, Serial.begin(9600) */ }
void loop() {
xAxis=510; yAxis=510;
while (Serial.available()==0) {}
x=Serial.read(); delay(10); y=Serial.read(); delay(10);
xAxis=x*4; yAxis=y*4;
// ... управление моторами
}
Полные коды для каждого варианта
В статье приведены полные листинги Slave-кодов для HC-05, Smartphone, NRF24L01, HC-12 с كاملной логикой дифференциального управления (Y — вперёд/назад, X — поворот, deadzone 470–550, минимальный PWM 70).
Заключение
Три надёжных способа беспроводного управления. Bluetooth — для смартфона, NRF24L01 — для своих контроллеров, HC-12 — для максимальной дальности. Выбор за вами.
Производственный процесс
- Создание Bluetooth-робота на Raspberry Pi с аудио-обратной связью
- Универсальный Android-пульт на Arduino, 1Sheeld и ИК-управлении
- Умный вольтметр на Arduino и смартфоне — простое DIY-проект
- Управление светодиодом по Bluetooth с Arduino: простой DIY-гид
- Управление Arduino-роботом через Firmata и геймпад Xbox One
- Умный счетчик парковки: Отслеживание машин в реальном времени (Arduino, Processing, PHP)
- Управление телевизором через Alexa и Arduino IoT Cloud — пошаговое руководство
- Сборка компактного FM-радио на Arduino Nano и RDA5807M
- Беспроводная прошивка Arduino через Bluetooth HC-05: щит без USB-кабеля
- Удалённое управление автомобилем на Arduino Uno и Bluetooth: пошаговое руководство