Сборка 4WD робота-робомобиля с ИК-управлением на Arduino
Компоненты и материалы
- Набор ИК-пульта и приемника (WINGONEER) — 1 комплект
- Драйвер двигателей L298N (SainSmart Dual H-Bridge) — 1 шт.
- Шасси 4WD робот-платформа — 1 комплект
- Arduino UNO — 1 шт.
Необходимые инструменты
- Паяльник
- Отвертка
- Клей-пистолет (для фиксации проводов)
О проекте
Проект основан на дизайне с Instructables (гусеничный робот), адаптирован под 4WD платформу. Главная проблема оригинала — помехи от двигателей на ИК-приемник (двигатели работали как генераторы, поднимая потенциал земли). Решено сменой пинов ИК-приемника и их программного управления питанием.
Сборка механики
Соберите шасси по инструкции к набору SAINSMART Rover Kit.
Подключение ИК-приемника
ИК-модуль имеет 3 пина: VCC, GND, OUT. Чтобы избежать помех, его питание (VCC/GND) подается с цифровых пинов Arduino, которые программно устанавливаются в HIGH/LOW:
int receiver_pin = 4; // OUT ИК-приемника
int vcc = 5; // VCC ИК-приемника (цифровой пин)
int gnd = 6; // GND ИК-приемника (цифровой пин)
Подключение драйвера L298N
Двигатель A (правый борт):
int enA = 8; // PWM скорость
int in1 = 12; // Направление 1
int in2 = 11; // Направление 2
Двигатель B (левый борт):
int enB = 7; // PWM скорость
int in3 = 10; // Направление 1
int in4 = 9; // Направление 2
GND L298N соединяется с GND Arduino.
Подключение двигателей к L298N
Набор A (правые колеса): «+» (красный) → OUT4, «-» (черный) → OUT3.
Набор B (левые колеса): «+» (красный) → OUT2, «-» (черный) → OUT1.
Батарея: «+» → VCC L298N, «-» → GND L298N.
Код прошивки (Arduino)
Используется библиотека IRremote.h. Коды кнопок пульта определены константами (0xFF18E7 — кнопка «2» вперед, 0xFF10EF — «4» влево, 0xFF30CF — «1» разворот вправо, 0xFF5AA5 — «6» вправо, 0xFF7A85 — «3» разворот влево, 0xFF4AB5 — «8» назад, 0xFF38C7 — «5» стоп). Скорость задана константой 100 (из 255).
#include <IRremote.h>
char command;
int receiver_pin = 4;
int vcc = 5;
int gnd = 6;
int statusled = 13;
IRrecv irrecv(receiver_pin);
decode_results results;
// Мотор A
int enA = 8; int in1 = 12; int in2 = 11;
// Мотор B
int enB = 7; int in3 = 10; int in4 = 9;
void setup() {
Serial.begin(9600);
irrecv.enableIRIn();
pinMode(statusled, OUTPUT); digitalWrite(statusled, LOW);
pinMode(enA, OUTPUT); pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT); pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT); pinMode(in4, OUTPUT);
pinMode(vcc, OUTPUT); pinMode(gnd, OUTPUT);
digitalWrite(vcc, HIGH); // Включаем питание ИК-приемника
}
void loop() {
if (irrecv.decode(&results)) {
digitalWrite(statusled, LOW);
irrecv.resume();
if (results.value == 0xFF18E7) { // Кнопка 2 - ВПЕРЕД
digitalWrite(in1, HIGH); digitalWrite(in2, LOW); analogWrite(enA, 100);
digitalWrite(in3, HIGH); digitalWrite(in4, LOW); analogWrite(enB, 100);
}
else if (results.value == 0xFF10EF) { // Кнопка 4 - ВЛЕВО (поворот на месте)
digitalWrite(in1, HIGH); digitalWrite(in2, LOW); analogWrite(enA, 100);
digitalWrite(in3, LOW); digitalWrite(in4, LOW); analogWrite(enB, 100);
}
else if (results.value == 0xFF30CF) { // Кнопка 1 - РАЗВОРОТ ВПРАВО
digitalWrite(in1, HIGH); digitalWrite(in2, LOW); analogWrite(enA, 100);
digitalWrite(in3, LOW); digitalWrite(in4, HIGH); analogWrite(enB, 100);
}
else if (results.value == 0xFF5AA5) { // Кнопка 6 - ВПРАВО (поворот на месте)
digitalWrite(in1, LOW); digitalWrite(in2, LOW); analogWrite(enA, 100);
digitalWrite(in3, HIGH); digitalWrite(in4, LOW); analogWrite(enB, 100);
}
else if (results.value == 0xFF7A85) { // Кнопка 3 - РАЗВОРОТ ВЛЕВО
digitalWrite(in1, LOW); digitalWrite(in2, HIGH); analogWrite(enA, 100);
digitalWrite(in3, HIGH); digitalWrite(in4, LOW); analogWrite(enB, 100);
}
else if (results.value == 0xFF4AB5) { // Кнопка 8 - НАЗАД
digitalWrite(in1, LOW); digitalWrite(in2, HIGH); analogWrite(enA, 100);
digitalWrite(in3, LOW); digitalWrite(in4, HIGH); analogWrite(enB, 100);
}
else if (results.value == 0xFF38C7) { // Кнопка 5 - СТОП
digitalWrite(in1, LOW); digitalWrite(in2, LOW); analogWrite(enA, 100);
digitalWrite(in3, LOW); digitalWrite(in4, LOW); analogWrite(enB, 100);
}
}
}
Схема подключения (обобщенная)
Производственный процесс
- Управляющие цепи: основы, применение и лучшие практики
- Конструкторы в C#: виды, примеры и продвинутые паттерны
- Создание профессионального универсального пульта на Raspberry Pi с LIRC
- Автоматизированная система наполнения и мониторинга бассейна
- Система удалённого мониторинга сердечного ритма с алертами AWS IoT
- Управление Raspberry Pi с переделанного ИК-пульта: выключение и перезагрузка через LIRC
- Уязвимость Delta Controls enteliBUS: удаленное управление системами зданий раскрыто
- Облачный мониторинг: система удаленного контроля для управления активами в реальном времени
- 5 ключевых преимуществ удаленного контроля производства для современной промышленности
- Овладейте пультом мостового крана: безопасность и эффективность на складе