3DИнструкции к проектам
Робот, объезжающий препятствия
Ультразвуковой «глаз» на сервоприводе меряет расстояние впереди; когда препятствие близко, робот останавливается, смотрит влево и вправо и поворачивает туда, где свободно.
- Сложность
- Средне
- Время
- ~150 min
- Детали
- деталей: 12
- Шаг за шагом
- шагов: 4
- Измерять расстояние с HC-SR04
- Поворачивать сервопривод
- Принимать решения по данным датчика
Детали
- 1 × Arduino UNO R3 (ATmega328P, SMD)45 000 сум
- 1 × Шасси робота 2WD (пластиковая платформа)30 000 сум
- 1 × Ультразвуковой датчик расстояния HC-SR0415 000 сум
- 1 × Микросервопривод SG90 (9г)20 000 сум
- 1 × Драйвер моторов L298N с двойным H-мостом20 000 сум
- 2 × Редукторный мотор TT с колесом (жёлтый, 3–6В)30 000 сум
- 1 × Колесо 360°: шаровая опора / Mecanum12 000 сум
- 2 × Литиевая батарея (18650 / LiPo)30 000 сум
- 1 × Батарейный отсек для 186506 000 сум
- 1 × Провода-перемычки 20 см, папа-мама (40 шт.)12 000 сум
Ещё понадобится
- — Компьютер и Arduino IDE (бесплатно на arduino.cc)
- — USB-кабель для UNO (вариант UNO SMD «+ USB-кабель»)
- — Небольшая крестовая отвёртка
Шаг за шагом
- 01
Соберите машинку
Соберите шасси, моторы, L298N и питание так же, как в инструкции «Робот-машинка» — пины те же.
- 02
Установите серво и датчик
Закрепите SG90 спереди. Код при старте ставит серво на 90° — после этого установите HC-SR04 на кронштейн, глядя строго вперёд.
- 03
Подключите датчик и серво
Дополнительные строки таблицы: TRIG → D12, ECHO → D11, сигнал серво (оранжевый) → D3, питание обоих — 5V и GND.
- 04
Загрузите код и испытайте
Код использует библиотеку Servo — она уже есть в Arduino IDE. Загрузите, вставьте аккумуляторы и отпустите робота. В Serial Monitor (9600) видно расстояние.
Подключение
- Питание (+)
- Земля (−)
- Сигнальный пин
- Шина I²C / SPI
- L298NENA→UNOD5 снимите перемычку с ENA
- L298NIN1→UNOD7
- L298NIN2→UNOD8
- L298NIN3→UNOD2
- L298NIN4→UNOD4
- L298NENB→UNOD6 снимите перемычку с ENB
- L298NGND→UNOGND общая земля — обязательно
- L298N5V→UNO5V питает UNO от драйвера
- L298NOUT1OUT2→Левый мотор
- L298NOUT3OUT4→Правый мотор
- Аккумулятор+(2×18650)→L298N12V
- Аккумулятор−→L298NGND
- HC-SR04VCC→UNO5V
- HC-SR04GND→UNOGND
- HC-SR04TRIG→UNOD12
- HC-SR04ECHO→UNOD11
- SG90сигнал(оранжевый)→UNOD3
- SG90красный→UNO5V
- SG90коричневый→UNOGND
Код
sketch.ino
#include <Servo.h>
// моторы (L298N)
const int ENA = 5, IN1 = 7, IN2 = 8; // левый
const int ENB = 6, IN3 = 2, IN4 = 4; // правый
void motors(int left, int right) { // -255 … 255
digitalWrite(IN1, left >= 0); digitalWrite(IN2, left < 0);
digitalWrite(IN3, right >= 0); digitalWrite(IN4, right < 0);
analogWrite(ENA, abs(left)); analogWrite(ENB, abs(right));
}
void setupMotors() {
int pins[] = {ENA, IN1, IN2, ENB, IN3, IN4};
for (int p : pins) pinMode(p, OUTPUT);
motors(0, 0);
}
const int TRIG = 12, ECHO = 11;
Servo neck;
long distanceCm() {
digitalWrite(TRIG, LOW); delayMicroseconds(2);
digitalWrite(TRIG, HIGH); delayMicroseconds(10);
digitalWrite(TRIG, LOW);
long us = pulseIn(ECHO, HIGH, 25000); // максимум ~4 м
return us ? us / 58 : 400; // эха нет = далеко
}
long look(int angle) {
neck.write(angle); delay(350);
return distanceCm();
}
void setup() {
Serial.begin(9600);
setupMotors();
pinMode(TRIG, OUTPUT); pinMode(ECHO, INPUT);
neck.attach(3);
neck.write(90);
delay(1500);
}
void loop() {
long ahead = distanceCm();
Serial.println(ahead);
if (ahead > 25) {
motors(170, 170);
delay(40);
return;
}
motors(0, 0);
motors(-150, -150); delay(250); // немного назад
motors(0, 0);
long left = look(160), right = look(20);
neck.write(90); delay(200);
if (left > right) motors(-170, 170); else motors(170, -170);
delay(380); // примерно четверть оборота
motors(0, 0);
}Если что-то не работает
- Расстояние всегда 0 или 400: возможно, перепутаны TRIG и ECHO.
- Скорость моторов не регулируется: убедитесь, что ENA/ENB не на D9/D10 — их занимает библиотека Servo.
- Серво дрожит, UNO перезагружается: слабые аккумуляторы — зарядите 18650.
- Робот не видит стену: мягкие поверхности (шторы, диван) поглощают ультразвук — это нормально.
Что дальше
- Добавьте второй датчик для боковых препятствий
- Плавно меняйте скорость в зависимости от расстояния

