Гид по технологиям

Постройте 4WD Arduino-робота с обходом препятствий

8 min read Робототехника Обновлено 27 Dec 2025
4WD Arduino робот: сборка и обход препятствий
4WD Arduino робот: сборка и обход препятствий

Что вы получите из этого руководства

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

4wd-arduino

Необходимые детали и инструменты

  • Набор 4WD с четырьмя моторами и колесами
  • H-мост (модуль драйвера моторов) — в наборе он красного цвета
  • Arduino UNO (или совместимый)
  • Ультразвуковой датчик HC-SR04 (TRIG, ECHO, VCC, GND)
  • Микросерво (для поворота датчика)
  • Держатели, болты, гайки, медные валы
  • Батарейный отсек на 6×AA и держатель 9V для Arduino (или внешний стабилизированный блок питания)
  • Несколько соединительных проводов (джампер), изоляционная лента
  • Отвертки, бокорезы/стругание изоляции, паяльник (по необходимости)

Совет: используйте перезаряжаемые AA (NiMH) вместо щелочных, если планируете долгую работу — они дают более стабильное напряжение под нагрузкой.

Подготовка деталей — обзор набора

Вот как обычно выглядит содержимое после распаковки:

arduino-bot-parts

Важно: прежде чем начинать, прочитайте весь план целиком — так вы избежите лишних разборок и поймёте порядок сборки.

Шаг 1 — Установка моторов на нижнюю часть шасси

  1. К мотору прикрутите прямоугольную металлическую скобу, используя два длинных болта и две гайки.
  2. Убедитесь, что сторона скобы с двумя отверстиями направлена вниз — это важно для крепления к шасси. Провода мотора должны выходить в сторону центра шасси.

arduino-bot-bracket

Проверьте ориентацию каждого мотора:

arduino-bot-motors

  1. Закрепите моторы к шасси, используя короткие болты через нижние отверстия скоб.

motor-screws-bottom-view

Совет: не затягивайте болты чрезмерно — пластик шасси хрупкий.

Шаг 2 — Крепление H-моста и питание моторов

Закрепите плату H-моста на шасси. Если в комплекте не хватает крепежа, временно можно использовать изоленту.

h-bridge-bolts

Подключение питания:

  • Если у вас батарейный блок с DC-штекером, можно обрезать штекер и присоединить провода напрямую.
  • Плюс батареи подключается к выводу, помеченному VMS (или VCC для моторов), минус — к GND на H-мосте.

battery-holder-dc-removed

Важно: убедитесь в полярности, не подавайте питание на плату при перепутанных проводах.

Шаг 3 — Подключение моторных выводов к H-мосту

На каждой стороне плат существуют два выхода для моторов: MOTORA и MOTORB. В вашем наборе оба красных провода (питание моторных обмоток) подключаются в центральный зелёный порт, а оба чёрных провода — в наружный.

h-bridge-motors-wired-up

Совет: иногда необходимо частично снять изоляцию проводов у моторных выводов, чтобы обеспечить хороший контакт.

Шаг 4 — Установка ступиц, валов и колёс

Сдвиньте колёса на шлицевые валы мотор-редукторов и закрепите медные валы в указанных местах (каждый вал фиксируется одним маленьким болтом).

wheels-on-drive-shafts

Проверьте свободный ход и отсутствие трения при вращении колес вручную.

Шаг 5 — Монтаж Arduino и верхней части шасси

Прикрепите Arduino к верхней части шасси. В идеале используйте болты и стойки; при отсутствии комплектных крепежей временно примените изоленту.

arduino-chassis

Шаг 6 — Сборка сервопривода для «глаз» робота

  1. Прикрутите крестовину (black crosspiece) к микросерво одним из крупных острых винтов из набора.

black-crossbar-micro-servo

  1. Вставьте серво в пластиковое кольцо держателя так, чтобы провода шли вдоль более длинной стороны корпуса держателя. Закрепите крестовину четырьмя мелкими винтами.

servo-black-ring

Нижняя часть после сборки:

ring-board-bottom

  1. Защёлкните боковые части держателя на серьгу серво.

completed-servo-holder

  1. Закрепите собранный серво-блок на шасси.

servo-holder-mounted

Места для болтов показаны здесь:

servo-holder-chassis-bolts

Шаг 7 — Крепление ультразвукового датчика

Закрепите HC-SR04 к серво-держателю с помощью двух стяжек (zip ties). Это позволит сервоприводу поворачивать «глаза».

ultrasonic-sensor-zip-ties

Шаг 8 — Подключение датчика к Arduino

  • VCC датчика -> 5V на Arduino
  • GND -> GND
  • TRIG -> цифровой пин 12
  • ECHO -> цифровой пин 13

Если у вас есть Arduino sensor shield, вы можете временно установить его на плату UNO — это упростит подключение джамперов.

arduino-sensor-shield

Шаг 9 — Подключение управляющих проводов H-моста к Arduino

На H-мосте имеются порты ENA, IN1, IN2, IN3, IN4, ENB. Подключите их так:

  • ENA -> цифровой пин 11 (PWM для левой пары моторов)
  • ENB -> цифровой пин 10 (PWM для правой пары моторов)
  • A1 -> цифровой пин 5
  • A2 -> цифровой пин 6
  • B1 -> цифровой пин 4
  • B2 -> цифровой пин 3

Протяните провода через отверстие в верхнем шасси и закрепите верхнюю часть на медных валах четырьмя короткими винтами.

h-bridge-wires

arduino-bot-wiring

Шаг 10 — Финальная сборка и питание

  • Установите батарейный блок на верхнюю часть шасси и при возможности закрепите его винтами.
  • Подключите 9V-держатель к Arduino Supply (если нужен внешний источник для Arduino).

arduino-bot-final

Позаботьтесь о внешнем виде робота — наклейте «лицо» или декор, чтобы он выглядел дружелюбно:

arduino-bad-bot

Проверка и программирование — краткий план

  1. Загрузите скетч для проверки работы моторов: убедитесь, что робот едет вперёд, назад и поворачивает в обе стороны.
  2. Установите библиотеку NewPing (Sketch > Include Library > Add .ZIP Library… или через Library Manager).
  3. Загрузите скетч теста ультразвука и проверьте показания в Serial Monitor.
  4. Загрузите финальную программу обхода препятствий и проверьте поведение в свободном пространстве.

Тест моторов (скетч)

Ниже — пример простого теста моторов. Он использует назначенные выше пины и функции для движения.

// Тест моторов для 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, сделали тесты моторов и датчика, загрузили финальную программу и получили основу для экспериментов. Дальше можно добавлять сенсоры, улучшать алгоритмы и превращать проект в учебную платформу.

Сообщите о своих доработках и вопросах — опишите поведение робота, ошибки и порекомендуем варианты решения. Удачи в сборке и программировании!

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Астрофотография на DSLR: как начать
Фотография

Астрофотография на DSLR: как начать

Переместить папки пользователя в Windows
Windows

Переместить папки пользователя в Windows

Закрепление постов в Instagram — как и зачем
соцсети

Закрепление постов в Instagram — как и зачем

Как подключить клавиатуру и мышь к PS5
Гайды

Как подключить клавиатуру и мышь к PS5

Как размыть фон на видеозвонках iPhone
iOS

Как размыть фон на видеозвонках iPhone

Проверить максимальный объём ОЗУ на ПК
Оборудование

Проверить максимальный объём ОЗУ на ПК