Рубрики
Схемы на Arduino

Робот на Arduino следующий за человеком

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

Создание робота, следующего за человеком, с использованием Arduino и трёх ультразвуковых датчиков — интересный проект. Особенно интересным этот проект делает использование не одного, а трех ультразвуковых датчиков. Это добавляет новое измерение этому опыту, поскольку обычно подобные роботы конструируются с помощью одного ультразвукового, двух инфракрасных датчиков и одного серводвигателя. Но серводвигатель в подобных проектах не играет никакой роли в работе, но добавляет ненужные сложности. Поэтому мы удалили сервопривод и ИК-датчики и использовали 3 ультразвуковых датчика. С помощью ультразвуковых датчиков вы можете измерять расстояние и использовать эту информацию для навигации и отслеживания человеческого тела. Кратко принцип работы нашего робота можно посмотреть в следующем видео.

Необходимые компоненты

  • Плата Arduino UNO (купить на AliExpress).
  • Ультразвуковой датчик HC-SR04 – 3 шт. (купить на AliExpress).
  • Драйвер двигателя L298N (купить на AliExpress).
  • Шасси робота.
  • Двигатели BO — 2 шт.
  • Колеса — 2 шт.
  • Литий-ионный аккумулятор 3,7 В — 2 шт.
  • Держатель батареи.
  • Макетная плата.
  • Держатель ультразвукового датчика — 3 шт.
  • Выключатель и соединительные провода.

Схема проекта

Схема робота на основе платы Arduino, следующего за человеком, представлена на следующем рисунке.

Представленная схема содержит три ультразвуковых датчика, позволяющих измерять расстояние в трех направлениях: вперед, вправо и влево. Эти датчики подключаются к плате Arduino через соответствующие цифровые контакты. Кроме того, схема включает в себя два двигателя постоянного тока для движения, которые подключены к модулю драйвера двигателя L298N. Модуль драйвера двигателя, в свою очередь, подключается к цифровым контактам платы. Для питания всей установки используются два литий-ионных элемента на 3,7 В, которые подключаются к модулю драйвера двигателя через переключатель.

Внешний вид собранной конструкции робота показан на следующем рисунке.

Соединения модуля ультразвукового датчика HC-SR04 и платы Arduino:

  • Подключите контакт VCC каждого ультразвукового датчика к контакту 5 В на плате Arduino.
  • Подключите контакт GND каждого ультразвукового датчика к контакту GND на плате Arduino.
  • Подключите триггерный контакт (TRIG) каждого ультразвукового датчика к отдельным цифровым контактам (2, 4 и 6) на плате Arduino.
  • Подключите эхо-контакт (ECHO) каждого ультразвукового устройства к отдельным цифровым контактам (3, 5 и 7) на плате Arduino.

Соединения Arduino и драйвера двигателя:

  • Подключите цифровые выходные контакты Arduino (цифровые контакты 8, 9, 10 и 11) к соответствующим входным контактам (IN1, IN2, IN3 и IN4) на модуле драйвера двигателя.
  • Подключите контакты ENA и ENB модуля драйвера двигателя к контакту платы Arduino, который будет в состоянии High с помощью разъема типа «мама».
  • Подключите контакты OUT1, OUT2, OUT3 и OUT4 модуля драйвера двигателя к соответствующим клеммам двигателей.
  • Подключите контакты VCC (+5 В) и GND модуля драйвера двигателя к соответствующим разъемам питания (Vin) и земли (GND) на Arduino.

Соединения источника питания:

  • Подключите положительную клемму источника питания к входу +12 В модуля драйвера двигателя.
  • Подключите отрицательную клемму источника питания к контакту GND модуля драйвера двигателя.
  • Подключите контакт GND Arduino к контакту GND модуля драйвера двигателя.

Объяснение кода программы

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

В коде программы мы будем считывать расстояния от трех ультразвуковых датчиков («frontDistance», «leftDistance» и «rightDistance»). Затем мы будем сравнивать эти расстояния, чтобы определить датчик с наименьшим расстоянием. Если это наименьшее расстояние будет ниже порогового значения, наш робот будет перемещаться с помощью соответствующей функции управления двигателем («moveForward()», «turnLeft()», «turnRight()»). Если ни одно из расстояний не ниже порогового значения, двигатель останавливается с помощью функции «stop()».

Сначала в программе  мы задаем контакты для ультразвуковых датчиков и управления двигателем. Переменные S1Trig , S2Trig, S3Trig представляют триггерные контакты трех ультразвуковых датчиков, а S1Echo, S2Echo, S3Echo представляют соответствующие им эхо-контакты.

Переменные LEFT_MOTOR_PIN1, LEFT_MOTOR_PIN2RIGHT_MOTOR_PIN1 и RIGHT_MOTOR_PIN2 определяют контакты для управления двигателями.

Переменные MAX_DISTANCE и MIN_DISTANCE_BACK задают пороговые значения для обнаружения препятствий.

Обязательно отрегулируйте значения «MIN_DISTANCE_BACK» и «MAX_DISTANCE» в соответствии с вашими требованиями и характеристиками вашего робота. При выставлении их значений необходимо будет учитывать такие факторы, как скорость вашего робота, время отклика датчиков и желаемый запас безопасности. Вот несколько общих рекомендаций, которые помогут вам выбрать подходящие значения этих параметров.

MIN_DISTANCE_BACK — это значение представляет собой расстояние, на которое робот должен двигаться назад, когда прямо впереди обнаружено препятствие или рука. Это расстояние должно быть установлено на такое значение, которое позволяет роботу безопасно двигаться задним ходом, не сталкиваясь с препятствием или рукой. Типичное значение может составлять около 5-10 см.

MAX_DISTANCE — это значение представляет собой максимальное расстояние, на котором робот считает путь впереди свободным и может продолжать движение вперед. Значение этого расстояния должно быть установлено таким, чтобы обеспечивалось достаточно места для движения робота без столкновения с какими-либо препятствиями или руками. Если ваша рука и препятствие выходят за пределы этого диапазона, робота следует остановить. Типичное значение может составлять около 30-50 см.

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

Далее в программе мы устанавливаем ограничения скорости двигателя. MAX_SPEED — обозначает верхний предел скорости двигателя, а MIN_SPEED — нижнее значение, используемое для небольшого смещения влево. Значения скорости обычно находятся в диапазоне от 0 до 255 и могут быть скорректированы в соответствии с вашими конкретными требованиями.

В функции setup() мы зададим режимы работы используемых контактов: LEFT_MOTOR_PIN1, LEFT_MOTOR_PIN2, RIGHT_MOTOR_PIN1, RIGHT_MOTOR_PIN2 — на вывод данных, триггерные контакты S1Trig, S2Trig, S3Trig — также на вывод данных, а эхо-контакты S1Echo, S2Echo, S3Echo — на ввод данных. Также мы инициализируем последовательную связь со скоростью 9600 бод для целей отладки.

Следующий фрагмент кода содержит три функции (‘sensorOne()’, ‘sensorTwo()’, ‘sensorThree()’), ответственные за проведение измерений с помощью ультразвуковых датчиков.

Функция sensorOne() измеряет расстояние с помощью первого ультразвукового датчика. При этом при расчете расстояния предполагается что скорость звука равна 343 м/с. Деля на 29 и потом еще на 2 мы обеспечиваем приблизительное преобразование микросекунд в сантиметры.

Функции sensorTwo() и sensorThree() работают аналогичным образом, только для измерения расстояний используют второй и третий ультразвуковой датчики соответственно.

В функции loop() мы первым делом вызываем функции sensorOne(), sensorTwo() и sensorThree() для измерения расстояний от ультразвуковых датчиков. Эти расстояния мы сохраняем в переменных frontDistance, leftDistance и rightDistance. Затем мы выводим эти расстояния в окно монитора последовательной связи.

Далее в программе мы проверяем меньше ли расстояние от переднего датчика чем MIN_DISTANCE_BACK — это будет означать что препятствие находится очень близко. Поэтому робот в данном случае должен двигаться назад чтобы избежать столкновения — соответственно вызывается функция moveBackward().

Если предыдущее условие ложно, то проверяем следующее условие: если переднее расстояние меньше левого расстояния, меньше правого расстояния и меньше порога MAX_DISTANCE. Если это условие истинно, это означает, что переднее расстояние является наименьшим среди трех расстояний, а также ниже порога максимального расстояния. В этом случае вызывается функция moveForward(), чтобы заставить робота двигаться вперед.

Если предыдущее условие ложно, то проверяем следующее условие: если левое расстояние меньше чем правое расстояние, и меньше ли оно порога MAX_DISTANCE. Это условие указывает на то, что левое расстояние является наименьшим среди трех расстояний, а также ниже порога минимального расстояния. Поэтому вызывается функция TurnLeft(), чтобы заставить робота повернуть налево.

Если ни одно из предыдущих условий не выполняется, то проверяем следующее условие. Оно гарантирует, что правое расстояние меньше порога MAX_DISTANCE. Это условие предполагает, что правое расстояние является наименьшим среди трех расстояний и находится ниже порога минимального расстояния. Поэтому в данном случае вызывается функция TurnRight (), чтобы заставить робота повернуть направо.

Если ни одно из предыдущих условий не выполняется это значит что ни одно из измеренных расстояния не соответствует направлению движения, в этом случае мы просто вызываем функцию stop() чтобы остановить робота.

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

https://circuitdigest.com/sites/default/files/other/human-following-robot.mp4

Заключение

Создание робота, следующего за человеком, с использованием платы Arduino и трех ультразвуковых датчиков — увлекательный и полезный проект, сочетающий в себе программирование, электронику и механику.

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

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

Исходный код программы (скетча)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *