Каталог
Проект 10: Робот, который объезжает препятствия

Проект 10: Робот, который объезжает препятствия

Этот проект основан на роботе, собранном из набора 4WD Smart Car Kit v1.0, который будет объезжать препятствия с помощью ультразвукового датчика и серво. Используя библиотеки AlashUltrasonic и AlashMotorControlLite, мы упростим управление датчиком и моторами для выполнения этой задачи. Робот сможет обнаруживать препятствия, сканировать окружающее пространство и объезжать их, что позволяет проверить правильность сборки и работоспособность датчиков.

Принцип работы

Ультразвуковой датчик измеряет расстояние до ближайшего объекта путем отправки ультразвукового сигнала и измерения времени, необходимого для возвращения отраженного сигнала. Датчик подключен к Arduino, который обрабатывает данные и управляет моторами через модуль L298N, чтобы робот мог двигаться вперед, назад или поворачиваться в зависимости от расстояния до объекта и направления, которое сканирует серво.

Установка библиотек

Чтобы подключить библиотеки для Arduino, выполните следующие шаги:

  1. Скачайте библиотеки с официального сайта или из репозитория GitHub:

  2. Откройте программу Arduino IDE и перейдите в меню «Скетч» → «Подключить библиотеку» → «Добавить .ZIP библиотеку…».

  3. В открывшемся окне выберите скачанный .zip файл и нажмите «Открыть».

  4. Внизу Arduino IDE появится сообщение “Библиотека добавлена. Проверьте меню “Подключить библиотеку””.

  5. Теперь библиотека будет доступна для использования в ваших проектах.

Пример кода

#include <AlashUltrasonic.h>
#include <Servo.h>
#include <AlashMotorControlLite.h>
// Пины для ультразвукового датчика
const uint8_t TRIGGER_PIN = A1;
const uint8_t ECHO_PIN = A0;
AlashUltrasonic sensor(TRIGGER_PIN, ECHO_PIN);
// Определение пинов для моторов
const unsigned int PIN_FORWARD_LEFT = 9;
const unsigned int PIN_BACKWARD_LEFT = 8;
const unsigned int PIN_ENABLE_LEFT = 10;
const unsigned int PIN_FORWARD_RIGHT = 7;
const unsigned int PIN_BACKWARD_RIGHT = 6;
const unsigned int PIN_ENABLE_RIGHT = 5;
// Инициализация двух моторов
AlashMotorControlLite motorLeft(DIR_DIR_PWM, PIN_FORWARD_LEFT, PIN_BACKWARD_LEFT, PIN_ENABLE_LEFT);
AlashMotorControlLite motorRight(DIR_DIR_PWM, PIN_FORWARD_RIGHT, PIN_BACKWARD_RIGHT, PIN_ENABLE_RIGHT);
// Пин для серво
const uint8_t SERVO_PIN = 11;
Servo servo;
const float SAFE_DISTANCE = 20.0; // Безопасное расстояние в см
const int MOTOR_SPEED = 100;      // Скорость вращения моторов
const int BACKWARD_TIME = 700;    // Время движения назад в мс
const int SCAN_ANGLE = 90;        // Угол для проверки препятствий
void setup() {
  Serial.begin(9600);
  sensor.begin();
  servo.attach(SERVO_PIN);
  servo.write(90); // Установим серво в центральное положение
  // Инициализация моторов
  motorLeft.setSpeed(0);
  motorRight.setSpeed(0);
}
void loop() {
  float distance = sensor.getDistance();
  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println(" cm");
  if (distance < SAFE_DISTANCE) {
    // Препятствие обнаружено, объезжаем его
    avoidObstacle();
  } else {
    // Двигаемся вперед
    moveForward();
  }
  delay(100);
}
void moveForward() {
  motorLeft.setSpeed(MOTOR_SPEED);
  motorRight.setSpeed(MOTOR_SPEED);
}
void moveBackward() {
  motorLeft.setSpeed(-MOTOR_SPEED);
  motorRight.setSpeed(-MOTOR_SPEED);
  delay(BACKWARD_TIME);
  stopMotors();
}
void stopMotors() {
  motorLeft.setSpeed(0);
  motorRight.setSpeed(0);
}
void turnRight() {
  motorLeft.setSpeed(MOTOR_SPEED);
  motorRight.setSpeed(-MOTOR_SPEED);
  delay(500); // Задержка для выполнения поворота
  stopMotors();
}
void turnLeft() {
  motorLeft.setSpeed(-MOTOR_SPEED);
  motorRight.setSpeed(MOTOR_SPEED);
  delay(500); // Задержка для выполнения поворота
  stopMotors();
}
float scanDistance(int angle) {
  servo.write(angle);
  delay(500); // Даем время серво для движения
  return sensor.getDistance();
}
void avoidObstacle() {
  moveBackward();
  float distanceRight = scanDistance(90 + SCAN_ANGLE);
  float distanceLeft = scanDistance(90 - SCAN_ANGLE);
  if (distanceRight > SAFE_DISTANCE) {
    turnRight();
  } else if (distanceLeft > SAFE_DISTANCE) {
    turnLeft();
  } else {
    // Если оба пути заблокированы, повернем на 180 градусов
    turnRight();
    turnRight();
  }
  servo.write(90); // Вернуть серво в центральное положение
  moveForward();
}

Описание кода

  1. Подключение библиотек: Подключены библиотеки для ультразвукового датчика, серво и управления моторами.
  2. Инициализация пинов: Определены пины для ультразвукового датчика, моторов и серво.
  3. Константы: Определены константы для безопасного расстояния, скорости моторов, времени движения назад и угла сканирования.
  4. Функция setup: Инициализация серийного порта, ультразвукового датчика, серво и установка начальных скоростей моторов.
  5. Основной цикл loop: В цикле считывается расстояние до препятствия. Если расстояние меньше безопасного, вызывается функция для объезда препятствия, иначе робот движется вперед.
  6. Функции для движения и маневров: Определены функции для движения вперед, назад, остановки, поворота направо и налево.
  7. Функция scanDistance: Поворачивает серво на заданный угол и считывает расстояние до препятствия.
  8. Функция avoidObstacle: Робот отъезжает назад, сканирует расстояние справа и слева, поворачивает в сторону, где больше свободного пространства, или поворачивается на 180 градусов, если оба пути заблокированы.

Полезная информация

  • Ультразвуковые датчики: Ультразвуковые датчики, такие как HC-SR04, позволяют точно измерять расстояние до объектов и избегать препятствий. Они отправляют ультразвуковые волны и измеряют время их отражения, что позволяет определять расстояние до объекта с высокой точностью.
  • Библиотека AlashUltrasonic: Эта библиотека упрощает работу с ультразвуковыми датчиками, предоставляя удобные функции для получения расстояния. Она абстрагирует детали работы с датчиком, позволяя разработчикам сосредоточиться на логике приложения.
  • Библиотека AlashMotorControlLite: Эта библиотека упрощает управление моторами, предоставляя функции для управления скоростью и направлением вращения моторов. Она поддерживает различные режимы управления и позволяет легко интегрировать управление моторами в проекты на базе Arduino.
  • Серво: Серво используется для поворота ультразвукового датчика, что позволяет роботу сканировать пространство перед собой и определять наилучший путь для объезда препятствий.
  • Оптимизация работы: Вы можете экспериментировать с настройками скорости, времени поворота и расстояния, чтобы оптимизировать работу робота для конкретных задач и условий. Например, вы можете настроить пороговые значения расстояний для более точного управления движением робота.

Заключение

Этот проект позволяет создать робота, собранного из набора 4WD Smart Car Kit v1.0, который объезжает препятствия, используя ультразвуковой датчик и серво для сканирования пространства. Это отличная возможность для изучения основ робототехники, работы с датчиками и управления моторами на базе Arduino. Вы можете продолжить улучшать и модифицировать этот проект, добавляя новые функции и возможности, такие как более сложные алгоритмы избегания препятствий или использование дополнительных датчиков для повышения точности и функциональности робота.

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

Предзаказ
Предзаказ успешно отправлен!
Имя *
Телефон *
Добавить в корзину
Название товара
100 тг
1 шт.
Перейти в корзину
Обратный звонок
Запрос успешно отправлен!
Имя *
Телефон *
Заказ в один клик
С помощью уведомлений о заказе можно не только получать актуальную информацию по заказу, но и иметь быстрый канал связи с магазином