Авто с функцией объезда препятствий - Своими руками
Своими руками

Авто с функцией объезда препятствий

>

Авто с функцией объезда препятствийАвто с функцией объезда препятствийАвто с функцией объезда препятствийВ этой статье мастер расскажет нам, как построить робота, избегающего препятствий. Робот представляет собой небольшой и простой двухколесный автомобиль, который будет двигаться вперед, пока не обнаружит препятствие на своем пути. Дальше он остановится, отъедет немного назад, а затем “посмотрит” влево и вправо.

Затем он сравнит расстояния, доступные с обеих сторон и повернет в направлении, где доступное расстояние кажется более предпочтительным. Таким образом, он сможет перемещаться в пространстве, полном препятствий, не сталкиваясь с ними.

Для определения расстояния робот использует ультразвуковой датчик HC-SR04. Этот датчик посылает ультразвуковые звуковые волны каждые 10 микросекунд, и если впереди есть какое-либо препятствие, датчик получает отражение сигнала.
Инструменты и материалы:-Arduino UNO;-Плата расширения L293D;-Шасси (включая моторы и колеса);-Провода соединительные;-Держатель батареи;-Серводвигатель SG90;-Ультразвуковой датчик HC-SR04;-Паяльник;-Клеевой пистолет;
-Кусачки;
-Отвертка;
Авто с функцией объезда препятствийАвто с функцией объезда препятствийАвто с функцией объезда препятствийШаг первый: база
Сначала собираем базу и добавляем роликовое колесо спереди. Оно будет действовать как поддерживающее третье колесо спереди, и оно может свободно вращаться на 360 градусов.

Устанавливает моторы и колеса на шасси. Припаиваем провода к моторам и переходим к следующему шагу.
Авто с функцией объезда препятствийАвто с функцией объезда препятствийШаг второй: установка ардуино
Устанавливаем ардуино и плату расширения. Фиксируем на двусторонний скотч.
Авто с функцией объезда препятствийАвто с функцией объезда препятствийШаг третий: ультразвуковой датчик
Дальше нужно установить сервопривод и на его вал закрепить ультразвуковой датчик.
Авто с функцией объезда препятствийАвто с функцией объезда препятствийАвто с функцией объезда препятствийШаг четвертый: схема подключения
Двигатели
Щит двигателя имеет винтовые клеммы для подключения до четырех двигателей. Просто подключите двигатели к любым двум клеммам, поскольку используются только два двигателя.
Серводвигатель
Серводвигатель имеет один соединительный провод, в котором три жилы. Просто подключите его к S1 на плате расширения.

Ультразвуковой датчик
Датчик GND: Arduino GND
Датчик VCC: Arduino + 5 В
Датчик TRIP : Arduino A4
Датчик ECHO: Arduino A5
Кроме того, подсоедините держатель аккумулятора к винтовой клемме аккумулятора платы расширения.
Авто с функцией объезда препятствийШаг пятый: код
Теперь нужно через Arduino IDE запрограммировать Ардуино. Код можно скачать ниже.
Авто с функцией объезда препятствий Показать / Скрыть текст

////////////////////////////////////////////////////////
// Arduino Obstacle Avoiding Robot v2.0 //
// By Aarav Garg – 2021 //
////////////////////////////////////////////////////////

//including the libraries
#include <AFMotor.h>
#include <NewPing.h>
#include <Servo.h>

//defining pins and variables
#define TRIG_PIN A4
#define ECHO_PIN A5
#define MAX_DISTANCE 200
#define MAX_SPEED 200 // sets speed of DC motors
#define MAX_SPEED_OFFSET 20

#define turn_amount 500

//defining motors,servo,sensor
NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE);
AF_DCMotor motor1(2, MOTOR12_8KHZ);
AF_DCMotor motor2(1, MOTOR12_8KHZ);
Servo myservo;

//defining global variables
boolean goesForward=false;
int distance = 100;
int speedSet = 0;

void setup() {
Serial.begin(9600);
myservo.attach(10);
myservo.write(90);
delay(2000);
distance = readPing();
delay(100);
distance = readPing();
delay(100);
distance = readPing();
delay(100);
distance = readPing();
delay(100);
}

void loop() {
int distanceR = 0;
int distanceL = 0;
delay(40);
Serial.println(distance);

if(distance<=15)
{
Serial.println("Object Detected");
moveStop();
delay(100);
moveBackward();
delay(300);
moveStop();
delay(200);
distanceR = lookRight();
Serial.print("Distance Right = ");
Serial.println(distanceR);
delay(200);
distanceL = lookLeft();
Serial.print("Distance Left = ");
Serial.println(distanceL);
delay(200);

if(distanceR>=distanceL)
{
turnRight();
moveStop();
}
else
{
turnLeft();
moveStop();
}
}
else
{
moveForward();
}

//reseting the variable after the operations
distance = readPing();
}

int lookRight()
{
myservo.write(0);
delay(500);
int distance = readPing();
delay(100);
myservo.write(90);
return distance;
}

int lookLeft()
{
myservo.write(180);
delay(500);
int distance = readPing();
delay(100);
myservo.write(90);
return distance;
delay(100);
}

int readPing() {
delay(70);
int cm = sonar.ping_cm();
if(cm==0)
{
cm = 250;
}
return cm;
}

void moveStop() {
motor1.run(RELEASE);
motor2.run(RELEASE);
}

void moveForward() {

if(!goesForward)
{
goesForward=true;
motor1.run(FORWARD);
motor2.run(FORWARD);
for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2) // slowly bring the speed up to avoid loading down the batteries too quickly
{
motor1.setSpeed(speedSet);
motor2.setSpeed(speedSet+MAX_SPEED_OFFSET);
delay(5);
}
}
}

void moveBackward() {
goesForward=false;
motor1.run(BACKWARD);
motor2.run(BACKWARD);
for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2) // slowly bring the speed up to avoid loading down the batteries too quickly
{
motor1.setSpeed(speedSet);
motor2.setSpeed(speedSet+MAX_SPEED_OFFSET);
delay(5);
}
}

void turnRight() {
Serial.println("Turning Right");
motor1.run(FORWARD);
motor2.run(BACKWARD);
delay(turn_amount);
motor1.run(FORWARD);
motor2.run(FORWARD);
}

void turnLeft() {
Serial.println("Turning Left");
motor1.run(BACKWARD);
motor2.run(FORWARD);
delay(turn_amount);
motor1.run(FORWARD);
motor2.run(FORWARD);
}
На видео можно посмотреть сборку и демонстрацию работы робота.

SitesReady

Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного. - Альберт Эйнштейн

Follow us

Don't be shy, get in touch. We love meeting interesting people and making new friends.