
Пошаговая инструкция по сборке робота-уборщика на Arduino с моторами, драйвером L298N, ультразвуковым датчиком HC-SR04 и вентилятором для всасывания мусора.
Роботы-пылесосы давно стали обычной бытовой техникой. Они самостоятельно перемещаются по квартире, объезжают мебель, забираются под диваны и собирают пыль. За кажущейся простотой скрываются базовые принципы робототехники: восприятие окружающей среды через датчики, принятие решений в программе и физическое действие через моторы.
В этом проекте мы соберём упрощённую версию такого робота. Он будет двигаться вперёд, обнаруживать препятствия ультразвуковым датчиком, отъезжать назад, поворачивать и продолжать движение. Небольшой вентилятор (компьютерный кулер), закреплённый снизу, создаёт поток воздуха, затягивающий лёгкий мусор -- крошки, пыль, мелкие бумажки. Это не замена настоящему пылесосу, но отличная демонстрация автономной навигации и работы с моторами. Проект рассчитан на учеников 7-10 классов и занимает 3-4 часа.
Чему вы научитесь:
| Компонент | Количество | Назначение |
|---|---|---|
| Arduino Uno | 1 | Мозг робота |
| Драйвер моторов L298N | 1 | Управление DC-моторами |
| DC-мотор с редуктором и колесом | 2 | Движение робота |
| Поворотное колесо (шаровая опора) | 1 | Третья точка опоры |
| Ультразвуковой датчик HC-SR04 | 1 | Обнаружение препятствий |
| Вентилятор 5V (компьютерный кулер) | 1 | Всасывание мусора |
| Батарейный отсек 4xAA или аккумулятор 7.4V | 1 | Автономное питание |
| Шасси (картон, пластик или готовая платформа) | 1 | Корпус робота |
| Провода-перемычки | 15-20 шт. | Соединение компонентов |

Для корпуса робота подойдёт плотный гофрированный картон -- он лёгкий, прочный и легко обрабатывается ножницами. Вырежьте прямоугольную платформу примерно 20x15 см. Два ведущих мотора с колёсами крепятся по бокам ближе к задней части, а поворотное колесо (шаровая опора) ставится спереди. Вентилятор закрепите снизу платформы, направив поток вниз -- он будет затягивать лёгкий мусор. Под вентилятором можно прикрепить контейнер из бумаги или пластиковой крышки для сбора мусора.
Все провода закрепите стяжками или скотчем: робот активно двигается, и болтающиеся провода быстро отсоединятся.

L298N -- двухканальный драйвер, управляющий двумя моторами независимо. Каждый канал имеет два пина направления и один пин скорости (PWM).
Левый мотор (канал A):
Правый мотор (канал B):
Питание:
Установите датчик спереди робота, направив его по ходу движения.
Вентилятор работает постоянно при включении робота. Для экономии энергии можно добавить транзистор и включать кулер только при движении вперёд.
```cpp
// Робот-уборщик на Arduino
// Компоненты: 2x DC-мотор + L298N + HC-SR04 + вентилятор
// Пины левого мотора (канал A)
#define LEFT_IN1 7
#define LEFT_IN2 8
#define LEFT_SPEED 5 // PWM-пин для скорости
// Пины правого мотора (канал B)
#define RIGHT_IN3 4
#define RIGHT_IN4 2
#define RIGHT_SPEED 3 // PWM-пин для скорости
// Пины ультразвукового датчика
#define TRIG_PIN 10
#define ECHO_PIN 11
// Настройки поведения робота
#define BASE_SPEED 180 // Базовая скорость (0-255)
#define TURN_SPEED 200 // Скорость при повороте
#define MIN_DISTANCE 25 // Минимальное расстояние до препятствия (см)
#define TURN_DURATION 400 // Длительность поворота (мс)
void setup() {
// Настраиваем все пины моторов как выходы
pinMode(LEFT_IN1, OUTPUT);
pinMode(LEFT_IN2, OUTPUT);
pinMode(LEFT_SPEED, OUTPUT);
pinMode(RIGHT_IN3, OUTPUT);
pinMode(RIGHT_IN4, OUTPUT);
pinMode(RIGHT_SPEED, OUTPUT);
// Настраиваем пины ультразвукового датчика
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
// Serial Monitor для отладки
Serial.begin(9600);
Serial.println("Робот-уборщик запущен!");
// Пауза перед стартом -- время убрать руки
delay(3000);
}
void loop() {
// Измеряем расстояние до ближайшего объекта
long distance = measureDistance();
Serial.print("Расстояние: ");
Serial.print(distance);
Serial.println(" см");
if (distance > MIN_DISTANCE) {
// Путь свободен -- едем вперёд
moveForward(BASE_SPEED);
} else {
// Препятствие! Выполняем манёвр объезда
stopMotors();
delay(300);
// Сдаём назад
moveBackward(BASE_SPEED);
delay(400);
stopMotors();
delay(200);
// Выбираем случайное направление поворота
if (random(2) == 0) {
turnRight(TURN_SPEED);
} else {
turnLeft(TURN_SPEED);
}
delay(TURN_DURATION);
stopMotors();
delay(200);
}
// Короткая пауза между измерениями
delay(50);
}
// Измерение расстояния ультразвуковым датчиком
long measureDistance() {
// Отправляем ультразвуковой импульс
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// Измеряем время возврата эхо-сигнала
long duration = pulseIn(ECHO_PIN, HIGH, 30000); // Таймаут 30 мс
// Пересчитываем в сантиметры
// Скорость звука 343 м/с = 0.0343 см/мкс
// Делим на 2: звук идёт туда и обратно
long distance = duration * 0.0343 / 2;
// При таймауте считаем дистанцию большой
if (distance == 0) {
distance = 999;
}
return distance;
}
// Движение вперёд: оба мотора крутятся в одном направлении
void moveForward(int speed) {
digitalWrite(LEFT_IN1, HIGH);
digitalWrite(LEFT_IN2, LOW);
analogWrite(LEFT_SPEED, speed);
digitalWrite(RIGHT_IN3, HIGH);
digitalWrite(RIGHT_IN4, LOW);
analogWrite(RIGHT_SPEED, speed);
}
// Движение назад: оба мотора в обратном направлении
void moveBackward(int speed) {
digitalWrite(LEFT_IN1, LOW);
digitalWrite(LEFT_IN2, HIGH);
analogWrite(LEFT_SPEED, speed);
digitalWrite(RIGHT_IN3, LOW);
digitalWrite(RIGHT_IN4, HIGH);
analogWrite(RIGHT_SPEED, speed);
}
// Поворот вправо: левый мотор вперёд, правый назад
void turnRight(int speed) {
digitalWrite(LEFT_IN1, HIGH);
digitalWrite(LEFT_IN2, LOW);
analogWrite(LEFT_SPEED, speed);
digitalWrite(RIGHT_IN3, LOW);
digitalWrite(RIGHT_IN4, HIGH);
analogWrite(RIGHT_SPEED, speed);
}
// Поворот влево: правый мотор вперёд, левый назад
void turnLeft(int speed) {
digitalWrite(LEFT_IN1, LOW);
digitalWrite(LEFT_IN2, HIGH);
analogWrite(LEFT_SPEED, speed);
digitalWrite(RIGHT_IN3, HIGH);
digitalWrite(RIGHT_IN4, LOW);
analogWrite(RIGHT_SPEED, speed);
}
// Полная остановка обоих моторов
void stopMotors() {
analogWrite(LEFT_SPEED, 0);
analogWrite(RIGHT_SPEED, 0);
}
`
Управление направлением моторов. Каждый DC-мотор управляется парой пинов: комбинация HIGH/LOW задаёт вращение в одну сторону, обратная комбинация LOW/HIGH -- в другую. Если оба пина одинаковы, мотор стоит. Это стандартная логика H-моста, реализованного в драйвере L298N.
Регулировка скорости через PWM. Пины ENA и ENB подключены к PWM-выходам Arduino. Функция analogWrite() принимает значение от 0 до 255, где 0 -- полная остановка, а 255 -- максимальные обороты. Значение 180 даёт примерно 70% мощности -- достаточно для плавного движения, но не слишком быстро для помещения.
Ультразвуковой датчик HC-SR04. Датчик отправляет короткий ультразвуковой импульс через вывод Trig и засекает время, за которое эхо вернётся на вывод Echo. Зная скорость звука (343 м/с), мы вычисляем расстояние. Таймаут 30 мс предотвращает зависание программы, если эхо не вернулось (например, робот направлен в открытое пространство).
Алгоритм объезда препятствий. Логика работы: если расстояние больше 25 см, робот едет прямо. Если меньше -- останавливается, отъезжает назад, случайно поворачивает влево или вправо и продолжает. Функция random(2) выбирает направление, чтобы робот не ходил по кругу.
Модульные функции. Код разделён на отдельные функции для каждого действия: moveForward, moveBackward, turnRight, turnLeft, stopMotors. Это делает программу читаемой и позволяет легко менять поведение робота.
1. Начните без вентилятора. Сначала соберите и отладьте платформу с моторами и датчиком. Убедитесь, что робот ездит и объезжает препятствия. Только потом добавляйте уборочную часть.
2. Устройте соревнование. Постройте лабиринт из книг или коробок. Чей робот быстрее проедет от старта до финиша, не застряв?
3. Обсудите алгоритмы. Наш алгоритм объезда примитивен. Предложите ученикам придумать улучшения: добавить боковые ИК-датчики, запоминать направления поворотов, следовать вдоль стены.
4. Безопасность. Напомните ученикам не включать робота на краю стола и убирать волосы подальше от вентилятора.
Alashed Hardware предлагает готовые робототехнические наборы, включающие шасси, моторы с колёсами, драйвер L298N и ультразвуковой датчик -- все компоненты, необходимые для этого проекта. В Alashed CodeStudio ученики могут совместно редактировать код робота, тестировать логику алгоритмов и загружать программу на Arduino прямо из браузера, что значительно ускоряет процесс итерации и отладки на уроке.
Подключите школу к пилоту. Генерируйте КМЖ за 2 минуты, ведите CodeStudio уроки, заказывайте оборудование — всё в одном месте.