DIY робот-следопыт на Arduino UNO и Motor Shield
Компоненты и материалы
| Arduino UNO | ×1 |
| Adafruit Motor Shield | ×1 |
| Сервопривод SG90 | ×1 |
| IR-переceiver (×2) | ×2 |
| Ультразвуковой датчик HC-SR04 | ×1 |
| Перемычки | ×1 |
| DC-моторы 12 В (×4) | ×4 |
| Колёса с моторами (×4) | ×4 |
| Крона 9 В | ×1 |
| Рокерный выключатель SPST | ×1 |
Программное обеспечение
- Arduino IDE
О проекте
В период пандемии все дома. Я создал робота, следующего за человеком (Human Following Bot).
Используются 2 IR-датчика для слежения за объектом и ультразвуковой датчик для отъезда назад.
Смотрите видео-инструкцию для полной сборки.
Пошаговая инструкция
- Соберите компоненты: Arduino, 4 DC-мотора с колёсами, 2 IR-датчика, ультразвуковой датчик, сервопривод, картон, Motor Shield L293D, батарея 9 В, выключатель, провода.
- На картонной базе закрепите 4 мотора с колёсами — получается платформа.
- Установите IR-датчики на платформу.
- Закрепите сервопривод.
- Ультразвуковой датчик поместите в коробку с ручкой и установите на сервопривод.
- Установите Arduino и Motor Shield на платформу.
- Сделайте проводку по схеме.
- Загрузите код, подключите выключатель с батареей к Shield.
- Отрегулируйте чувствительность IR-датчиков.
Проект готов! Подпишитесь на YouTube-канал «Electronics is Fun».
Исходный код (Arduino)
// www.YouTube.com/Electronics is Fun
#include <Servo.h>
#include <AFMotor.h>
#define LEFT A0
#define echopin A1
#define trigpin A2
#define RIGHT A3
AF_DCMotor Motor1(1, MOTOR12_1KHZ);
AF_DCMotor Motor2(2, MOTOR12_1KHZ);
AF_DCMotor Motor3(3, MOTOR34_1KHZ);
AF_DCMotor Motor4(4, MOTOR34_1KHZ);
Servo myservo;
int pos = 0;
long time;
void setup() {
Serial.begin(9600);
myservo.attach(10);
// Sweep сервы для калибровки
for (pos = 90; pos <= 180; pos += 1) { myservo.write(pos); delay(15); }
for (pos = 180; pos >= 0; pos -= 1) { myservo.write(pos); delay(15); }
for (pos = 0; pos <= 90; pos += 1) { myservo.write(pos); delay(15); }
pinMode(RIGHT, INPUT);
pinMode(LEFT, INPUT);
pinMode(trigpin, OUTPUT);
pinMode(echopin, INPUT);
}
void loop() {
unsigned int distance = read_cm();
int Right_Value = digitalRead(RIGHT);
int Left_Value = digitalRead(LEFT);
Serial.print("R= "); Serial.print(Right_Value);
Serial.print(" L= "); Serial.print(Left_Value);
Serial.print(" D= "); Serial.println(distance);
if ((Right_Value == 1) && (distance >= 10 && distance <= 30) && (Left_Value == 1)) { forword(); }
else if ((Right_Value == 0) && (Left_Value == 1)) { turnRight(); }
else if ((Right_Value == 1) && (Left_Value == 0)) { turnLeft(); }
else if ((Right_Value == 1) && (Left_Value == 1)) { stop(); }
else if (distance > 5 && distance < 10) { stop(); }
else if (distance < 5) { backword(); }
delay(50);
}
long read_cm() {
digitalWrite(trigpin, LOW); delayMicroseconds(2);
digitalWrite(trigpin, HIGH); delayMicroseconds(10);
time = pulseIn(echopin, HIGH);
return time / 29 / 2;
}
void forword() {
Motor1.setSpeed(120); Motor1.run(FORWARD);
Motor2.setSpeed(120); Motor2.run(FORWARD);
Motor3.setSpeed(120); Motor3.run(FORWARD);
Motor4.setSpeed(120); Motor4.run(FORWARD);
}
void backword() {
Motor1.setSpeed(120); Motor1.run(BACKWARD);
Motor2.setSpeed(120); Motor2.run(BACKWARD);
Motor3.setSpeed(120); Motor3.run(BACKWARD);
Motor4.setSpeed(120); Motor4.run(BACKWARD);
}
void turnRight() {
Motor1.setSpeed(200); Motor1.run(FORWARD);
Motor2.setSpeed(200); Motor2.run(FORWARD);
Motor3.setSpeed(100); Motor3.run(BACKWARD);
Motor4.setSpeed(100); Motor4.run(BACKWARD);
}
void turnLeft() {
Motor1.setSpeed(100); Motor1.run(BACKWARD);
Motor2.setSpeed(100); Motor2.run(BACKWARD);
Motor3.setSpeed(200); Motor3.run(FORWARD);
Motor4.setSpeed(200); Motor4.run(FORWARD);
}
void stop() {
Motor1.setSpeed(0); Motor1.run(RELEASE);
Motor2.setSpeed(0); Motor2.run(RELEASE);
Motor3.setSpeed(0); Motor3.run(RELEASE);
Motor4.setSpeed(0); Motor4.run(RELEASE);
}
Схема

Производственный процесс
- Двигатели переменного магнитного сопротивления: типы, работа и применение
- Raspoulette: Прототип солнечной автономной системы двери курятника
- Simple Pi Robot — Сборка 2WD автономного ровера на Raspberry Pi
- Игра «UFO Attack» на Arduino UNO и матрице MAX7219 — Собираем аркаду с джойстиком Atari
- Робот для поиска людей на базе Arduino Uno: пошаговая интеграция датчиков
- 3D RGB Arduclock — Bluetooth-часы на адресных LED с RTC
- Полнофункциональная библиотека для управления биполярным шаговым двигателем на Arduino
- DIY Guitar Speed Pick & Stomp Pedal — моторизированный медиатор на Arduino
- Понимание линейных моторов: от электрической энергии к точному линейному движению
- Серводвигатели: принцип работы и значение