Постройте 4WD Arduino-робота с обходом препятствий
Что вы получите из этого руководства
- Полный пошаговый план сборки 4WD-робота из стандартного набора
- Схема проводки между H-мостом, мотор-редукторами, Arduino и ультразвуковым датчиком
- Тестовые скетчи: проверка моторов, тест сенсора, финальная логика обхода препятствий (с кодом)
- Советы по отладке, улучшению поведения и безопасности

Необходимые детали и инструменты
- Набор 4WD с четырьмя моторами и колесами
- H-мост (модуль драйвера моторов) — в наборе он красного цвета
- Arduino UNO (или совместимый)
- Ультразвуковой датчик HC-SR04 (TRIG, ECHO, VCC, GND)
- Микросерво (для поворота датчика)
- Держатели, болты, гайки, медные валы
- Батарейный отсек на 6×AA и держатель 9V для Arduino (или внешний стабилизированный блок питания)
- Несколько соединительных проводов (джампер), изоляционная лента
- Отвертки, бокорезы/стругание изоляции, паяльник (по необходимости)
Совет: используйте перезаряжаемые AA (NiMH) вместо щелочных, если планируете долгую работу — они дают более стабильное напряжение под нагрузкой.
Подготовка деталей — обзор набора
Вот как обычно выглядит содержимое после распаковки:
Важно: прежде чем начинать, прочитайте весь план целиком — так вы избежите лишних разборок и поймёте порядок сборки.
Шаг 1 — Установка моторов на нижнюю часть шасси
- К мотору прикрутите прямоугольную металлическую скобу, используя два длинных болта и две гайки.
- Убедитесь, что сторона скобы с двумя отверстиями направлена вниз — это важно для крепления к шасси. Провода мотора должны выходить в сторону центра шасси.
Проверьте ориентацию каждого мотора:
- Закрепите моторы к шасси, используя короткие болты через нижние отверстия скоб.
Совет: не затягивайте болты чрезмерно — пластик шасси хрупкий.
Шаг 2 — Крепление H-моста и питание моторов
Закрепите плату H-моста на шасси. Если в комплекте не хватает крепежа, временно можно использовать изоленту.
Подключение питания:
- Если у вас батарейный блок с DC-штекером, можно обрезать штекер и присоединить провода напрямую.
- Плюс батареи подключается к выводу, помеченному VMS (или VCC для моторов), минус — к GND на H-мосте.
Важно: убедитесь в полярности, не подавайте питание на плату при перепутанных проводах.
Шаг 3 — Подключение моторных выводов к H-мосту
На каждой стороне плат существуют два выхода для моторов: MOTORA и MOTORB. В вашем наборе оба красных провода (питание моторных обмоток) подключаются в центральный зелёный порт, а оба чёрных провода — в наружный.
Совет: иногда необходимо частично снять изоляцию проводов у моторных выводов, чтобы обеспечить хороший контакт.
Шаг 4 — Установка ступиц, валов и колёс
Сдвиньте колёса на шлицевые валы мотор-редукторов и закрепите медные валы в указанных местах (каждый вал фиксируется одним маленьким болтом).
Проверьте свободный ход и отсутствие трения при вращении колес вручную.
Шаг 5 — Монтаж Arduino и верхней части шасси
Прикрепите Arduino к верхней части шасси. В идеале используйте болты и стойки; при отсутствии комплектных крепежей временно примените изоленту.
Шаг 6 — Сборка сервопривода для «глаз» робота
- Прикрутите крестовину (black crosspiece) к микросерво одним из крупных острых винтов из набора.
- Вставьте серво в пластиковое кольцо держателя так, чтобы провода шли вдоль более длинной стороны корпуса держателя. Закрепите крестовину четырьмя мелкими винтами.
Нижняя часть после сборки:
- Защёлкните боковые части держателя на серьгу серво.
- Закрепите собранный серво-блок на шасси.
Места для болтов показаны здесь:
Шаг 7 — Крепление ультразвукового датчика
Закрепите HC-SR04 к серво-держателю с помощью двух стяжек (zip ties). Это позволит сервоприводу поворачивать «глаза».
Шаг 8 — Подключение датчика к Arduino
- VCC датчика -> 5V на Arduino
- GND -> GND
- TRIG -> цифровой пин 12
- ECHO -> цифровой пин 13
Если у вас есть Arduino sensor shield, вы можете временно установить его на плату UNO — это упростит подключение джамперов.
Шаг 9 — Подключение управляющих проводов H-моста к Arduino
На H-мосте имеются порты ENA, IN1, IN2, IN3, IN4, ENB. Подключите их так:
- ENA -> цифровой пин 11 (PWM для левой пары моторов)
- ENB -> цифровой пин 10 (PWM для правой пары моторов)
- A1 -> цифровой пин 5
- A2 -> цифровой пин 6
- B1 -> цифровой пин 4
- B2 -> цифровой пин 3
Протяните провода через отверстие в верхнем шасси и закрепите верхнюю часть на медных валах четырьмя короткими винтами.
Шаг 10 — Финальная сборка и питание
- Установите батарейный блок на верхнюю часть шасси и при возможности закрепите его винтами.
- Подключите 9V-держатель к Arduino Supply (если нужен внешний источник для Arduino).
Позаботьтесь о внешнем виде робота — наклейте «лицо» или декор, чтобы он выглядел дружелюбно:
Проверка и программирование — краткий план
- Загрузите скетч для проверки работы моторов: убедитесь, что робот едет вперёд, назад и поворачивает в обе стороны.
- Установите библиотеку NewPing (Sketch > Include Library > Add .ZIP Library… или через Library Manager).
- Загрузите скетч теста ультразвука и проверьте показания в Serial Monitor.
- Загрузите финальную программу обхода препятствий и проверьте поведение в свободном пространстве.
Тест моторов (скетч)
Ниже — пример простого теста моторов. Он использует назначенные выше пины и функции для движения.
// Тест моторов для H-моста
const int ENA = 11; // PWM
const int ENB = 10; // PWM
const int A1 = 5;
const int A2 = 6;
const int B1 = 4;
const int B2 = 3;
void setup() {
pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(A1, OUTPUT);
pinMode(A2, OUTPUT);
pinMode(B1, OUTPUT);
pinMode(B2, OUTPUT);
Serial.begin(9600);
}
void loop() {
driveForward(200); // вперед 0.5с
delay(500);
driveBackward(200);
delay(500);
turnLeft(200);
delay(500);
turnRight(200);
delay(500);
}
void driveForward(int speed) {
analogWrite(ENA, speed);
analogWrite(ENB, speed);
digitalWrite(A1, HIGH);
digitalWrite(A2, LOW);
digitalWrite(B1, HIGH);
digitalWrite(B2, LOW);
}
void driveBackward(int speed) {
analogWrite(ENA, speed);
analogWrite(ENB, speed);
digitalWrite(A1, LOW);
digitalWrite(A2, HIGH);
digitalWrite(B1, LOW);
digitalWrite(B2, HIGH);
}
void turnLeft(int speed) {
analogWrite(ENA, speed);
analogWrite(ENB, speed);
digitalWrite(A1, LOW);
digitalWrite(A2, HIGH);
digitalWrite(B1, HIGH);
digitalWrite(B2, LOW);
}
void turnRight(int speed) {
analogWrite(ENA, speed);
analogWrite(ENB, speed);
digitalWrite(A1, HIGH);
digitalWrite(A2, LOW);
digitalWrite(B1, LOW);
digitalWrite(B2, HIGH);
}Если моторы не вращаются как ожидается: проверьте питание H-моста, направление проводки к моторам и то, что соответствующие контакты надежно зажаты.
Тест ультразвукового датчика (NewPing)
Установите библиотеку NewPing. Затем загрузите этот скетч и откройте Serial Monitor:
#include
#define TRIG_PIN 12
#define ECHO_PIN 13
#define MAX_DISTANCE 200 // см
NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE);
void setup() {
Serial.begin(9600);
}
void loop() {
delay(50);
unsigned int distance = sonar.ping_cm();
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
} Двигайте руку перед датчиком — показания должны меняться быстро и плавно.
Финальная логика обхода препятствий (скетч)
Этот скетч объединяет тест моторов и показания ультразвукового датчика. При обнаружении предмета ближе 10 см робот отъедет назад, повернёт и продолжит движение.
#include
#include
// Пины моторов
const int ENA = 11;
const int ENB = 10;
const int A1 = 5;
const int A2 = 6;
const int B1 = 4;
const int B2 = 3;
// Пины ультразвука
#define TRIG_PIN 12
#define ECHO_PIN 13
#define MAX_DISTANCE 200
NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE);
Servo eyeServo;
const int SERVO_PIN = 9; // при необходимости
void setup() {
pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(A1, OUTPUT);
pinMode(A2, OUTPUT);
pinMode(B1, OUTPUT);
pinMode(B2, OUTPUT);
Serial.begin(9600);
eyeServo.attach(SERVO_PIN);
eyeServo.write(90); // центр
}
void loop() {
unsigned int dist = sonar.ping_cm();
if (dist == 0) dist = MAX_DISTANCE; // отсутствие сигнала
Serial.print("Dist: "); Serial.print(dist); Serial.println(" cm");
if (dist > 0 && dist < 10) { // если ближе 10 см
backup();
delay(400);
turnLeft(220);
delay(400);
} else {
driveForward(220);
}
delay(50);
}
void driveForward(int speed) {
analogWrite(ENA, speed);
analogWrite(ENB, speed);
digitalWrite(A1, HIGH);
digitalWrite(A2, LOW);
digitalWrite(B1, HIGH);
digitalWrite(B2, LOW);
}
void backup() {
analogWrite(ENA, 200);
analogWrite(ENB, 200);
digitalWrite(A1, LOW);
digitalWrite(A2, HIGH);
digitalWrite(B1, LOW);
digitalWrite(B2, HIGH);
}
void turnLeft(int speed) {
analogWrite(ENA, speed);
analogWrite(ENB, speed);
digitalWrite(A1, LOW);
digitalWrite(A2, HIGH);
digitalWrite(B1, HIGH);
digitalWrite(B2, LOW);
} Настройте расстояние срабатывания (параметр 10 см) и скорости (значения PWM) под вашу механику и аккумулятор.
Критерии приёмки
- Робот едет вперёд по прямой при отсутствии препятствий в радиусе 10 см.
- При появлении препятствия впереди робот отъезжает назад и выполняет поворот, затем продолжает движение.
- Ультразвуковой датчик даёт стабильные показания в Serial Monitor (нет «скачков» данных).
- Нет сильного нагрева моторных проводов или H-моста после 5 минут работы в цикле.
Отладка и распространённые проблемы
- Моторы не крутятся: проверьте питание H-моста, провода моторов и полярность батарей.
- Один мотор работает слабее: поменяйте провода местами или проверьте посадочные контакты двигателя.
- Датчик даёт нулевые или шумные показания: убедитесь, что питание 5V стабильно, минимизируйте посторонние помехи и проверьте соединения TRIG/ECHO.
- Робот вращается в сторону при движении вперёд: проверьте симметрию установки колёс и отрегулируйте скобы моторов.
Совет: при длительных тестах подключите внешний источник питания для Arduino (стабилизированный 5V), чтобы исключить падение напряжения батареек.
Альтернативные подходы и улучшения
- Использовать энкодеры на валах для точного контроля пробега и угла поворота.
- Заменить HC-SR04 на лазерный дальномер (ToF) для большей точности в сложных условиях.
- Добавить IMU (гироскоп/акселерометр) для контроля направления движения.
- Программировать поведение с использованием состояний (машин состояний) вместо простых if-ветвлений.
Ментальные модели и эвристики при проектировании
- Разделяйте уровни: аппаратный (моторы, питание), коммуникационный (пины), поведенческий (логика принятия решений).
- Правило 80/20: 80% поведения робота достигается простыми правилами (если-далеко — вперед, если-близко — назад+поворот).
- «Чистый вход — чистый выход»: сначала добейтесь стабильных показаний сенсора, потом добавляйте моторику.
Ролевые чек-листы
- Сборщик:
- Все механические крепления затянуты, колёса свободно вращаются.
- Провода аккуратно уложены и не зажаты между частями шасси.
- Программист:
- Загружены тестовые скетчи, Serial Monitor показывает ожидаемые данные.
- Поведение при сигнале датчика корректно.
- QA/Тестировщик:
- Проверил поведение в трёх средах: пустая комната, стол с препятствиями, коридор.
- Зафиксировал ошибки и повторяемость реакции на препятствия.
Безопасность и эксплуатация
- Никогда не подключайте питание при открытой плате с оголёнными контактами; изолируйте оголённые провода.
- При высоких токах (мощные моторы) используйте предохранители или ограничители тока.
- Не оставляйте робот с подключёнными батареями без присмотра при отладке.
Идеи для следующих шагов
- Реализовать случайный выбор направления при обходе, чтобы робот не застревал в ловушке.
- Подключить светодиоды или зуммер, сигнализирующие о состоянии (обнаружено препятствие, низкий заряд).
- Добавить управление по Bluetooth или Wi‑Fi для дистанционного переключения режимов.
Факт-бокс: ключевые числа
- Напряжение батарей: 6×AA ≈ 9 В
- Рабочее напряжение Arduino: 5 В (через стабилизатор)
- Стандартное срабатывание ультразвука в этом руководстве: 10 см (≈4 дюйма)
- Частота опроса датчика в примерах: 20 Гц (пауза ~50 мс)
Тестовые случаи и критерии приёмки
- TC1: при отсутствии препятствий робот движется вперёд 30 с без заметных отклонений.
- TC2: при появлении объекта на расстоянии 8 см робот выполняет сценарий: стоп → назад 0.4 с → поворот → вперед.
- TC3: проверка стабилизации: 5 минут работы без перегрева H-моста и сильного падения напряжения.
Краткий итог
Вы собрали базовый четырёхколёсный робот на Arduino с системой обхода препятствий, изучили порядок монтажa, сделали тесты моторов и датчика, загрузили финальную программу и получили основу для экспериментов. Дальше можно добавлять сенсоры, улучшать алгоритмы и превращать проект в учебную платформу.
Сообщите о своих доработках и вопросах — опишите поведение робота, ошибки и порекомендуем варианты решения. Удачи в сборке и программировании!