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

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

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

О проекте

В период пандемии все дома. Я создал робота, следующего за человеком (Human Following Bot).

Используются 2 IR-датчика для слежения за объектом и ультразвуковой датчик для отъезда назад.

Смотрите видео-инструкцию для полной сборки.

Пошаговая инструкция

  1. Соберите компоненты: Arduino, 4 DC-мотора с колёсами, 2 IR-датчика, ультразвуковой датчик, сервопривод, картон, Motor Shield L293D, батарея 9 В, выключатель, провода.
  2. На картонной базе закрепите 4 мотора с колёсами — получается платформа.
  3. Установите IR-датчики на платформу.
  4. Закрепите сервопривод.
  5. Ультразвуковой датчик поместите в коробку с ручкой и установите на сервопривод.
  6. Установите Arduino и Motor Shield на платформу.
  7. Сделайте проводку по схеме.
  8. Загрузите код, подключите выключатель с батареей к Shield.
  9. Отрегулируйте чувствительность 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);
}

Схема

DIY робот-следопыт на Arduino UNO и Motor Shield

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

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