Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Pathfinder: набор робота-избегателя препятствий на Arduino UNO

Компоненты и материалы

Инструменты

Программное обеспечение

О проекте

Аннотация

Проект представляет собой автономного робота-исключателя препятствий на базе Arduino UNO и Adafruit Motor Shield. Код написан в Arduino IDE. Ультразвуковой датчик на микросервоприводе сканирует пространство на 180° впереди. Робот оснащён магнитным зуммером и RGB-светодиодом для индикации режимов и контроля скорости двигателей в 4 сценариях. Технология применима для военных и гуманитарных задач при доработке системы обнаружения.

Мультимедиа

Pathfinder: набор робота-избегателя препятствий на Arduino UNO
Готовый робот Pathfinder

Алгоритм работы

Библиотеки: AFMotor.h (Adafruit Motor Shield), Servo.h.

Распиновка:

ПинНазначение
A0Buzzer (+)
A1Trig (HC-SR04)
A2Echo (HC-SR04)
A3RGB Blue
A4RGB Green
A5RGB Red

Логика управления (4 зоны дистанции):

Сервопривод поворачивает сонар: вперёд (80°) → право (12°) → лево (160°) → выбор направления с большим расстоянием.

Pathfinder: набор робота-избегателя препятствий на Arduino UNO
Блок-схема логики избегания препятствий

Полный код (Arduino)

#include <AFMotor.h>
#include <Servo.h>

#define BuzzPIN A0
#define TrigPIN A1
#define EchoPIN A2
#define LEDBPIN A3
#define LEDGPIN A4
#define LEDRPIN A5
#define DCMROFF 25  // Калибровка разницы моторов

AF_DCMotor M1(1, MOTOR12_64KHZ);
AF_DCMotor M2(2, MOTOR12_64KHZ);
Servo SER1;

int Search() {
  float Duration = 0.0, CM = 0.0;
  digitalWrite(TrigPIN, LOW); delayMicroseconds(2);
  digitalWrite(TrigPIN, HIGH); delayMicroseconds(10);
  digitalWrite(TrigPIN, LOW);
  Duration = pulseIn(EchoPIN, HIGH);
  CM = Duration / 58.8;
  return (int)CM;
}

int RightDistance, LeftDistance;
float Distance = 0.00;

void setup() {
  pinMode(BuzzPIN, OUTPUT);
  pinMode(TrigPIN, OUTPUT);
  pinMode(EchoPIN, INPUT);
  pinMode(LEDBPIN, OUTPUT);
  pinMode(LEDGPIN, OUTPUT);
  pinMode(LEDRPIN, OUTPUT);
  SER1.attach(10);  // Серво на пине 10 Motor Shield
}

void loop() {
  SER1.write(80); delay(100);  // Вперёд
  Distance = Search();

  if (Distance < 30) {
    digitalWrite(BuzzPIN, HIGH);
    digitalWrite(LEDBPIN, LOW); digitalWrite(LEDGPIN, LOW); digitalWrite(LEDRPIN, HIGH);
    M1.setSpeed(100); M2.setSpeed(100);
    ChangePath();
  }
  else if (Distance >= 30 && Distance < 60) {
    digitalWrite(BuzzPIN, LOW);
    digitalWrite(LEDBPIN, HIGH); digitalWrite(LEDGPIN, LOW); digitalWrite(LEDRPIN, LOW);
    M1.setSpeed(150); M2.setSpeed(150);
    Forward();
  }
  else if (Distance >= 60 && Distance < 90) {
    digitalWrite(BuzzPIN, LOW);
    digitalWrite(LEDBPIN, LOW); digitalWrite(LEDGPIN, HIGH); digitalWrite(LEDRPIN, LOW);
    M1.setSpeed(200); M2.setSpeed(200);
    Forward();
  }
  else {
    digitalWrite(BuzzPIN, LOW);
    digitalWrite(LEDBPIN, HIGH); digitalWrite(LEDGPIN, HIGH); digitalWrite(LEDRPIN, HIGH);
    M1.setSpeed(250); M2.setSpeed(250);
    Forward();
  }
}

void ChangePath() {
  Stop(); Backward(); Stop();
  SER1.write(12); delay(500); RightDistance = Search(); delay(500);
  SER1.write(160); delay(1000); LeftDistance = Search(); delay(500);
  SER1.write(80); delay(500);
  CompareDistance();
}

void CompareDistance() {
  if (RightDistance > LeftDistance) TurnRight();
  else if (LeftDistance > RightDistance) TurnLeft();
  else TurnAround();
}

void Forward() { M1.run(FORWARD); M2.run(FORWARD); }
void Backward() { M1.run(BACKWARD); M2.run(BACKWARD); delay(500); }
void TurnRight() { M1.run(BACKWARD); M2.run(FORWARD); M1.setSpeed(100+DCMROFF); delay(300); }
void TurnLeft() { M1.run(FORWARD); M2.run(BACKWARD); M2.setSpeed(100+DCMROFF); delay(300); }
void TurnAround() { M1.run(FORWARD); M2.run(BACKWARD); M2.setSpeed(100+DCMROFF); delay(700); }
void Stop() { M1.run(RELEASE); M2.run(RELEASE); delay(100); }

3D-модель шасси

Файл шасси для 3D-печати (Fusion 360) — в разделе CAD проекта.

Схема подключения

Принципиальная схема подключения Motor Shield, сервы, сонара, RGB и зуммера к Arduino UNO.


Youth Zest Project Showcase — проект в рамках молодежной выставки.

Производственный процесс

  1. Синтаксис нетлистов SPICE: именование компонентов, пассивные и активные элементы, определение источников
  2. Интегральные схемы (ИС): компактные мощные чипы, питающие современную электронику
  3. Передача данных температуры и влажности между двумя Arduino через Firebase
  4. Цифровые кости на Arduino: генератор случайных чисел с LCD-дисплеем и кнопкой
  5. Многопозиционная система датчиков температуры для интеграции в умный дом
  6. DIY USB-геймпад на Arduino: собственный высокопроизводительный контроллер
  7. Набор MOSMusic: MOSFET, Arduino и управление светом по музыке
  8. Микроэлектроника: наука о сверхмалых электронных компонентах
  9. Основные компоненты сверлильного станка: подробный обзор
  10. Ключевые компоненты двигателя внутреннего сгорания