Собираем 4WD Arduino-робота с обходом препятствий
Зачем этот проект
Небольшой четырёхколёсный робот — отличный учебный проект для понимания основ электроники, управления двигателями и работы с датчиками. Вы научитесь крепить моторы и H-мост, подключать питание, управлять сервоприводом и обрабатывать данные ультразвукового датчика.
Основная идея и поведение
Робот движется вперёд, измеряет расстояние перед собой ультразвуковым сенсором. Если обнаруживается препятствие ближе заданного порога (в исходном проекте — 4 дюйма ≈ 10 см), робот отъезжает назад, поворачивает и продолжает движение.
Important: перед началом убедитесь, что питание отключено при механической сборке и проведении соединений.
Содержание
- Необходимые детали и инструменты
- Распаковка и подготовка деталей
- Сборка нижней части шасси (моторы и H-повод)
- Установка верхней части шасси, Arduino и серво-механизма
- Подключение питания и проводки H-моста
- Подключение ультразвукового датчика и сервопривода
- Тесты: моторный тест, тест датчика, интегрированный код обхода препятствий
- Отладка и типичные проблемы
- Улучшения и альтернативы
- Чек-листы, критерии приёмки и тест-кейсы
- Краткий глоссарий и рекомендации
Необходимые детали и инструменты
- Комплект 4WD (4 мотора, шасси, колёса, медные валы и крепёж)
- H-мост (движковый драйвер, в этом наборе — красная плата)
- Arduino UNO
- Ультразвуковой датчик (HC-SR04 или совместимый)
- Микросерво (micro servo)
- Плата для батареек: 6×AA + опционально держатель 9V для Arduino
- Кабели-переходники (Dupont/jumper wires)
- Набор винтов и гаек из комплекта
- Инструменты: крестовая/шестигранная отвертка, бокорезы/струбцина для снятия изоляции, паяльник (опционально)
Опционально:
- Зип-застёжки (хомуты) для крепления датчика
- Изолента, стяжки, дополнительные стойки и гайки
Факты о питании: 6×AA при щелочных батарейках дают примерно 9 В номинально; обратите внимание на допустимый вход Arduino (через Vin ~7–12 В или через разъём Barrel Jack).
Распаковка и осмотр деталей

ALT: Фото комплекта 4WD с деталями, двигателями и шасси, лежащими на столе.
Откройте упаковку и рассортируйте детали: моторы, металлические крепления, болты, гайки, колёса, платы и кабели. Убедитесь, что есть четыре мотора и визуально проверьте провода на повреждения.

ALT: Разложенные на столе компоненты комплекта: моторы, шасси, H-мост и держатели батарей.
Сборка нижней части шасси: моторы и кронштейны
Шаги:
- Прикрепите прямоугольные металлические кронштейны к каждому мотору, используя два длинных болта и две гайки на моторной коробке. Убедитесь, что сторона с двумя просверленными отверстиями направлена вниз — это видно на фото.

ALT: Металлический кронштейн, прикрученный к мотору, вид крупным планом.
- Смотрите, чтобы провода каждого мотора выходили в сторону центра шасси — это упростит прокладку проводки.

ALT: Моторы установлены на шасси; провода направлены к центру.
- Закрепите моторы к нижней части шасси короткими болтами через отверстия в кронштейнах. Вид снизу показывает расположение отверстий.

ALT: Нижняя часть шасси с отмеченными отверстиями для болтов моторов.
Установка H-моста
H-мост — это плата, управляющая направлением и скоростью двигателей. В комплекте она была красного цвета.
- Прикрутите H-мост к шасси. Если каких-то креплений не хватает, временно можно использовать изоленту, но лучше поставить болты и гайки.

ALT: H-мост закреплён на шасси; видны места для болтов и гаек.
Подключение источника питания и моторных проводов
Держатель для шести AA-шек обычно снабжён DC-проводом. Удалите штекер, если планируете припаять проводники напрямую или подключить джампер-провода.

ALT: Держатель батарей 6×AA с отрезанным DC-разъёмом; оголённые провода готовы для подключения.
Подключения на H-мосте:
- Положительный провод батареи — к клемме, помеченной VMS (или V+)
- Отрицательный провод — к GND
Подключение моторов: на каждой стороне H-моста есть пара клемм для одного мотора. В этом наборе оба красных провода каждой стороны идут в центральный зелёный порт, а оба чёрных — во внешний.

ALT: Провода моторов подключены к клеммам H-моста; видно расположение красных и чёрных проводов.
Совет: при необходимости зачистите изоляцию моторных проводов, чтобы они лучше фиксировались в клеммах.
Установка колёс и валов
Наденьте колёса на приводные валы моторов и закрепите медные валы (по одному на каждое крепление) небольшими болтиками.

ALT: Колёса надеты на приводные валы, рядом лежат медные соединительные валы с болтами.
Верхняя часть шасси и Arduino
Возьмите верхнюю часть шасси и прикрепите Arduino UNO. В идеале фиксируйте плату винтами и стойками, но временно можно использовать изоленту для проверки.

ALT: Плата Arduino установлена на верхнюю часть шасси; видна точка крепления и провода.
Сборка серво-держателя и установка серво
- Прикрутите пластиковный чёрный крестовидный рычаг (crosspiece) к серво одним из больших острых винтов из комплекта.

ALT: Крупный план: крестовидный рычаг прикручен к микросерво.
- Переверните серво и вставьте в пластиковое кольцо держателя так, чтобы провод был направлен в сторону длинной части держателя. Закрепите маленькими винтами через четыре отверстия.

ALT: Серво установлен в пластиковом кольце; вид снизу с четырьмя крепёжными винтами.
- Соедините остальные части держателя и защёлкните их вместе.

ALT: Завершённый держатель серво с защёлкнутыми боковинами.
- Прикрутите собранный держатель к верхней части шасси в указанном месте.

ALT: Серво-держатель установлен на шасси; вид сверху.

ALT: Отмеченные отверстия для болтов, которыми фиксируется серво-держатель на шасси.
Крепление ультразвукового датчика
Прикрепите HC-SR04 (или совместимый) к держателю серво с помощью zip-застёжек (стяжек). Датчик будет вращаться вместе с серво и «оглядывать» пространство перед роботом.

ALT: Ультразвуковой датчик закреплён на серво с помощью двух пластиковых стяжек.
Опционально: сенсорный шилд
Если у вас есть Arduino sensor shield, вы можете установить его поверх UNO. В нашем проекте Шилд не обязателен, но удобен для быстрого подключения датчиков.

ALT: Arduino UNO с установленным сенсорным шилдом сверху; вид общих входов и портов.
Подключение ультразвукового датчика и сервопривода к Arduino
У датчика четыре контакта: VCC, GND, TRIG и ECHO.
- VCC → 5V на Arduino
- GND → GND
- TRIG → цифровой пин 12
- ECHO → цифровой пин 13
Сервопривод подключается к выбранному PWM-порту (в примерах ниже используем пин 9). Питание серво можно брать от 5V Arduino, но при нагрузке лучше использовать отдельный 5V источник.
Подключение управляющих линий H-моста к Arduino
Протяните шесть джампер-проводов от H-моста в центр шасси и подключите их к цифровым/ШИМ-пинам Arduino так, как указано далее. Запомните цвет кабелей и к какому порту они подключены — это важно для кода.
Назначение:
- ENA → пин 11 (PWM для моторов A)
- ENB → пин 10 (PWM для моторов B)
- A1 → пин 5
- A2 → пин 6
- B1 → пин 4
- B2 → пин 3

ALT: Провода от H-моста проложены в центр шасси; видны надписи ENA, IN1, IN2 и т.д.
Теперь закрепите верхнюю часть шасси на медных валах и прикрутите держатели батарей и при необходимости держатель 9V для Arduino.

ALT: Собранный робот с проводами, выходящими на Arduino и H-мост.

ALT: Финальный вид собранного робота сверху.
Немного характера роботу

ALT: Милый «игривый» вид робота с украшениями; робот выглядит оживлённым.
Программирование: быстрые тесты и основной код
Перед загрузкой основного кода выполните два простых теста: тест моторов и тест датчика. Это сократит время на отладку.
В редакторе Arduino (IDE) создайте новые скетчи. Ниже даны рабочие примеры кода. Они написаны простым, понятным стилем и документированы комментариями.
Код 1 — Тест моторов
// Motor test for 4WD H-bridge
// Подключения: ENA=11, ENB=10, A1=5, A2=6, B1=4, B2=3
const int ENA = 11;
const int ENB = 10;
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() {
Serial.println("Вперёд");
forward(200);
delay(500);
Serial.println("Назад");
backward(200);
delay(500);
Serial.println("Поворот влево");
turnLeft(200);
delay(500);
Serial.println("Поворот вправо");
turnRight(200);
delay(500);
}
void forward(int speed) {
analogWrite(ENA, speed);
analogWrite(ENB, speed);
digitalWrite(A1, HIGH);
digitalWrite(A2, LOW);
digitalWrite(B1, HIGH);
digitalWrite(B2, LOW);
}
void backward(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);
}Пояснения: этот тест по очереди заставляет робота ехать вперёд, назад и поворачивать. Если направление моторов противоположно желаемому, поменяйте местами провода одного двигателя или инвертируйте HIGH/LOW в функциях.
Код 2 — Тест ультразвукового датчика (NewPing)
- В Arduino IDE скачайте библиотеку NewPing (через Sketch > Include Library > Manage Libraries или Add .ZIP Library).
- Создайте скетч:
#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 uS = sonar.ping();
unsigned int dist = uS / US_ROUNDTRIP_CM; // расстояние в см
Serial.print("Расстояние: ");
Serial.print(dist);
Serial.println(" cm");
} Откройте Serial Monitor (Инструменты > Последовательный монитор) и наблюдайте изменения дистанции при поднесении руки к датчику.
Код 3 — Полный код обхода препятствий
Этот скетч объединяет контроль моторов и показания датчика. Он использует сервопривод, чтобы при желании сканировать пространство (опционально).
#include
#include
// H-bridge pins
const int ENA = 11;
const int ENB = 10;
const int A1 = 5;
const int A2 = 6;
const int B1 = 4;
const int B2 = 3;
// Servo and ultrasonic
Servo eyeServo;
const int SERVO_PIN = 9;
#define TRIG_PIN 12
#define ECHO_PIN 13
#define MAX_DISTANCE 200 // см
NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE);
const int SAFE_DISTANCE_CM = 10; // ~4 inches ≈ 10 cm
void setup() {
pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(A1, OUTPUT);
pinMode(A2, OUTPUT);
pinMode(B1, OUTPUT);
pinMode(B2, OUTPUT);
eyeServo.attach(SERVO_PIN);
eyeServo.write(90); // центр
Serial.begin(9600);
}
void loop() {
unsigned int uS = sonar.ping();
unsigned int dist = uS / US_ROUNDTRIP_CM; // см
Serial.print("Дистанция: ");
Serial.print(dist);
Serial.println(" cm");
if (dist > 0 && dist <= SAFE_DISTANCE_CM) {
// препятствие слишком близко
stopMotors();
delay(50);
backward(200);
delay(400);
// поворот влево
turnLeft(200);
delay(450);
stopMotors();
delay(200);
} else {
// едем вперёд
forward(200);
}
delay(100);
}
// Функции движения
void forward(int speed) {
analogWrite(ENA, speed);
analogWrite(ENB, speed);
digitalWrite(A1, HIGH);
digitalWrite(A2, LOW);
digitalWrite(B1, HIGH);
digitalWrite(B2, LOW);
}
void backward(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);
}
void stopMotors() {
analogWrite(ENA, 0);
analogWrite(ENB, 0);
} Пояснения: пороги скорости и времени поворота зависят от конструкции шасси и состояния батарей. Подберите задержки и скорость эмпирически.
Отладка и типичные проблемы
Робот не двигается вовсе:
- Проверьте питание батареек и полярность.
- Убедитесь, что на H-мост подано питание (VMS) и кабели прочно зажаты.
- Убедитесь, что пины в коде соответствуют реальным подключениям.
Моторы крутятся в обратную сторону:
- Инвертируйте проводку одного мотора (поменяйте местами его красный и чёрный провод) или поменяйте HIGH/LOW в функциях для этого мотора.
Датчик не реагирует или даёт шумные значения:
- Проверьте соединения TRIG/ECHO к плате.
- Установите максимальную дистанцию в NewPing и увеличьте задержку между ping.
- Убедитесь, что вокруг нет резонансных поверхностей и параллельных отражателей.
Серво «дергается» или искажает показания:
- Возможно недостаточно питания 5V. Используйте отдельный стабилизированный 5V источник для серво.
H-мост сильно греется:
- Проверьте ток потребления моторов. При высоких токах H-мост может перегреваться; используйте радиатор и обеспечьте адекватное питание.
Примеры улучшений и альтернативные подходы
Альтернативные датчики:
- Инфракрасные дальномеры (IR) — дешёвы, но чувствительны к цвету/отражению.
- LIDAR или Time-of-Flight (ToF) — дают более точные измерения и возможность картирования.
Управление поведением:
- Состояния (FSM): движение → обнаружение → манёвр → повтор.
- Стохастические решения: случайный выбор направления поворота при столкновении.
- Алгоритмы SLAM/локализации для продвинутых проектов.
Альтернативы для привода:
- Использовать мотор-драйвер с I2C/Serial управлением для упрощения проводки.
- Применить драйверы с текущим ограничением.
Ментальные модели и эвристики
- «Чем проще — тем надежнее»: начните с минимальной логики (вперёд/назад/поворот) и постепенно усложняйте.
- «Разделяй и властвуй»: тестируйте моторы и датчики отдельно, затем интегрируйте.
- «Безопасность питания»: всегда выключайте питание при смене проводки и при механическом вмешательстве.
Чек-лист перед первым запуском
- Батареи вставлены и подают нужное напряжение.
- H-мост правильно подключён к VMS и GND.
- Провода моторов прочно закреплены в клеммах H-моста.
- Arduino подключён USB (для загрузки кода) или имеет питание.
- Ультразвуковой датчик подключён к 5V, GND, TRIG (12) и ECHO (13).
- Сервопривод подключён к пину 9 и получает питание.
- Код соответствует назначенным пинам.
Критерии приёмки
- При запуске скетча Motor Test робот выполняет циклы: вперёд, назад, влево, вправо.
- При тесте датчика NewPing в Serial Monitor наблюдается корректное отображение дистанции при приближении руки.
- После установки финального скетча робот движется и меняет траекторию при появлении препятствий ближе 10 см.
Тест-кейсы и приёмо-сдаточные проверки
TC01: Механическая проверка
- Условие: батареи отключены.
- Шаги: проверьте затяжку болтов, отсутствие лишних деталей, свободный ход колёс.
- Ожидаемый результат: колёса свободно вращаются вручную, нет заеданий.
TC02: Проверка питания H-моста
- Условие: включено питание батарей.
- Шаги: измерьте напряжение на VMS относительно GND.
- Ожидаемый результат: ~9 В (для 6×AA);
TC03: Функциональный моторный тест
- Условие: загружен Motor Test скетч.
- Шаги: наблюдать последовательность движений.
- Ожидаемый результат: робот выполняет 4 поведения (вперёд/назад/лево/право).
TC04: Тест датчика
- Условие: загружен тест NewPing.
- Шаги: поднести руку до 5–50 см.
- Ожидаемый результат: в serial monitor показания меняются адекватно.
TC05: Интеграционный тест обхода препятствий
- Условие: финальный скетч загружен.
- Шаги: поместить препятствие впереди робота.
- Ожидаемый результат: робот сработал на пороге, отъехал и повернул.
Руководство по устранению неполадок (короткая инструкция)
- Если моторы гудят, но не крутятся — проверьте напряжение батарей при нагрузке.
- Если H-мост сильно греется — сократите время тестов, проверьте ток, подумайте об усилении охлаждения.
- Если показания датчика нестабильны — добавьте усреднение нескольких измерений в коде.
Безопасность и советы по питанию
- Никогда не подключайте аккумуляторы с обратной полярностью.
- Для длённой работы рассматривайте NiMH аккумуляторы для AA (они дают ~1.2 В на элемент) или литий-ионные сборки с соответствующим контроллером.
- Если вы используете отдельный источник 5V для серво, соедините общую землю (GND) с Arduino и H-мостом.
Что дальше — идеи для улучшений
- Добавить несколько датчиков и алгоритм выбора наилучшего пути (fusion).
- Добавить Bluetooth или Wi‑Fi для удалённого управления и телеметрии.
- Реализовать поведение «следуй за светом» или «поиск стены».
- Добавить звуковое сопровождение (зуммер) и светодиоды для обратной связи.
Роли и чек-листы (быстро)
Для новичка/ученика:
- Пройти по шагам сборки, выполнить тесты мотор/датчик, загрузить финальный код.
Для преподавателя/ментора:
- Подготовить запасные провода, мультиметр, набор батарей и примеры кода; дать задание по модификации поведения.
Для хоббиста/инженера:
- Оптимизировать питание, заменить H-мост на более мощный драйвер, интегрировать SLAM-датчики.
Мини‑методология: как эффективно учиться на этом проекте
- Разделите работу на слои: механика → питание → электроника → ПО.
- Тестируйте каждый слой отдельно.
- Документируйте изменения: какие пины, цвета проводов, версии кода.
- Итеративно улучшайте: небольшие изменения и проверка результата.
Короткий глоссарий (1‑строчные определения)
- H-мост: электронный модуль для управления направлением и скоростью двигателя.
- TRIG/ECHO: контакты ультразвукового датчика для отправки и приёма сигнала.
- PWM: широтно-импульсная модуляция, позволяет регулировать скорость двигателей.
- Servo: сервопривод для точного поворота датчика.
Заключение
Этот проект даёт надёжную базу: вы собрали механическую часть шасси, подключили H-мост, настроили питание, интегрировали ультразвуковой датчик и написали код для простой стратегии обхода препятствий. Дальше — расширяйте поведение, добавляйте датчики и улучшайте электронику. Главное — разбивайте задачу на маленькие части и тестируйте их отдельно.
Если вы соберёте этот робот или модифицируете его, расскажите о своих результатах и проблемах — сообщество и практическая отладка помогут вам двигаться дальше.
Copyright — ваши заметки и правки к сборке остаются у вас. Удачи и приятной сборки!
Похожие материалы
Как копировать формулы в Excel эффективно
Фокус на iPad — настройка и лучшие практики
Защитить домашний Wi‑Fi: как не дать соседям воровать интернет
Профессиональный баннер LinkedIn в Canva
Spotify Wrapped 2024 — как посмотреть и что нового