Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Беспроводное управление 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.

Беспроводное управление Arduino-роботом: HC-05 Bluetooth, NRF24L01 и HC-12
Беспроводное управление Arduino-роботом: HC-05 Bluetooth, NRF24L01 и HC-12

Код 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).

Беспроводное управление Arduino-роботом: HC-05 Bluetooth, NRF24L01 и HC-12
Беспроводное управление Arduino-роботом: HC-05 Bluetooth, NRF24L01 и HC-12

Скачать APK, .aia и картинки джойстика — в статье.

3. NRF24L01 (SPI)

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

Беспроводное управление Arduino-роботом: HC-05 Bluetooth, NRF24L01 и HC-12
Беспроводное управление Arduino-роботом: HC-05 Bluetooth, NRF24L01 и HC-12

Передатчик (джойстик)

#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){}.

Беспроводное управление Arduino-роботом: HC-05 Bluetooth, NRF24L01 и HC-12

Передатчик

/* 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 — для максимальной дальности. Выбор за вами.

Производственный процесс

  1. Создание Bluetooth-робота на Raspberry Pi с аудио-обратной связью
  2. Универсальный Android-пульт на Arduino, 1Sheeld и ИК-управлении
  3. Умный вольтметр на Arduino и смартфоне — простое DIY-проект
  4. Управление светодиодом по Bluetooth с Arduino: простой DIY-гид
  5. Управление Arduino-роботом через Firmata и геймпад Xbox One
  6. Умный счетчик парковки: Отслеживание машин в реальном времени (Arduino, Processing, PHP)
  7. Управление телевизором через Alexa и Arduino IoT Cloud — пошаговое руководство
  8. Сборка компактного FM-радио на Arduino Nano и RDA5807M
  9. Беспроводная прошивка Arduino через Bluetooth HC-05: щит без USB-кабеля
  10. Удалённое управление автомобилем на Arduino Uno и Bluetooth: пошаговое руководство