- Как построить робота для обхода препятствий с помощью ультразвукового датчика
- Необходимые компоненты
- Принципиальная электрическая схема
- Робот, избегающий препятствий, использующий Arduino - Код
Робот для обхода препятствий - это интеллектуальное устройство, которое может автоматически определять препятствие перед ним и избегать его, поворачиваясь в другом направлении. Такая конструкция позволяет роботу перемещаться в неизвестной среде, избегая столкновений, что является основным требованием для любого автономного мобильного робота. Применение робота для избегания препятствий не ограничено, и он используется в большинстве военных организаций в настоящее время, что помогает выполнять множество рискованных работ, которые не могут быть выполнены ни одним солдатом.
Ранее мы создавали робота, избегающего препятствий, используя Raspberry Pi и микроконтроллер PIC. На этот раз мы создадим робота, избегающего препятствий, используя ультразвуковой датчик и Arduino. Здесь ультразвуковой датчик используется для определения препятствий на пути путем расчета расстояния между роботом и препятствием. Если робот находит препятствие, он меняет направление и продолжает движение.
Как построить робота для обхода препятствий с помощью ультразвукового датчика
Прежде чем приступить к сборке робота, важно понять, как работает ультразвуковой датчик, потому что этот датчик будет играть важную роль в обнаружении препятствий. Основной принцип работы ультразвукового датчика состоит в том, чтобы записать время, необходимое датчику для передачи ультразвуковых лучей и приема ультразвуковых лучей после удара о поверхность. Далее по формуле рассчитывается расстояние. В этом проекте используется широко распространенный ультразвуковой датчик HC-SR04. Для использования этого датчика будет использован аналогичный подход, описанный выше.
Итак, триггерный вывод HC-SR04 сделан высоким как минимум на 10 мкс. Звуковой луч передается с 8 импульсами по 40 кГц каждый.
Затем сигнал падает на поверхность, возвращается обратно и улавливается выводом Echo приемника HC-SR04. Пин Echo уже достиг высокого уровня в момент отправки высокого уровня.
Время, затрачиваемое лучом на возвращение, сохраняется в переменной и конвертируется в расстояние с использованием соответствующих вычислений, как показано ниже.
Расстояние = (Время x скорость звука в воздухе (343 м / с)) / 2
Мы использовали ультразвуковой датчик во многих проектах, чтобы узнать больше об ультразвуковом датчике, проверить другие проекты, связанные с ультразвуковым датчиком.
Компоненты этого робота для избегания препятствий можно легко найти. Для изготовления шасси можно использовать любое игрушечное шасси или сделать его на заказ.
Необходимые компоненты
- Arduino NANO или Uno (любая версия)
- Ультразвуковой датчик HC-SR04
- Модуль драйвера двигателя LM298N
- Двигатели постоянного тока 5 В
- Аккумулятор
- Колеса
- Шасси
- Перемычки
Принципиальная электрическая схема
Полная принципиальная схема этого проекта представлена ниже, поскольку вы можете видеть, что он использует Arduino nano. Но мы также можем создать робота, избегающего препятствий, используя Arduino UNO с той же схемой (следуйте той же распиновке) и кодом.
Как только схема будет готова, мы должны построить нашу машину для обхода препятствий, собрав схему на шасси робота, как показано ниже.
Робот, избегающий препятствий, использующий Arduino - Код
Полная программа с демонстрационным видео представлена в конце этого проекта. Программа будет включать в себя настройку модуля HC-SR04 и вывод сигналов на выводы двигателя для соответствующего изменения направления двигателя. В этом проекте не будут использоваться библиотеки.
Сначала определите в программе триггерный и эхо-вывод HC-SR04. В этом проекте триггерный вывод подключен к GPIO9, а вывод эха - к GPIO10 Arduino NANO.
int trigPin = 9; // триггерный вывод HC-SR04 int echoPin = 10; // Вывод эхо HC-SR04
Определите контакты для входа модуля драйвера двигателя LM298N. LM298N имеет 4 контакта ввода данных, используемых для управления направлением двигателя, подключенного к нему.
int revleft4 = 4; // Обратное движение левого мотора int fwdleft5 = 5; // Движение левого мотора вперед int revright6 = 6; // Обратное движение правого мотора int fwdright7 = 7; // Движение вперед правого мотора
В настройках () функции, определить направление данных, используемые штифтов GPIO. Четыре контакта двигателя и триггерный контакт установлены как ВЫХОД, а вывод Echo - как вход.
pinMode (revleft4, ВЫХОД); // устанавливаем выводы двигателя как выходные данные pinMode (fwdleft5, OUTPUT); pinMode (revright6, ВЫХОД); pinMode (fwdright7, ВЫХОД); pinMode (trigPin, ВЫХОД); // установить вывод триггера как выходной pinMode (echoPin, INPUT); // устанавливаем вывод эха как вход для захвата отраженных волн
В петле () функции, получить расстояние от HC-SR04 и на основе расстояния перемещения направления вращения двигателя. Расстояние покажет расстояние до объекта, находящегося перед роботом. Расстояние измеряется путем разрыва ультразвукового луча до 10 мкс и получения его после 10 мкс. Чтобы узнать больше об измерении расстояния с помощью ультразвукового датчика и Arduino, перейдите по ссылке.
digitalWrite (trigPin, LOW); delayMicroseconds (2); digitalWrite (trigPin, HIGH); // отправляем волны на 10 мкс delayMicroseconds (10); duration = pulseIn (echoPin, HIGH); // получение отраженных волн distance = duration / 58.2; // конвертируем в расстояние delay (10);
Если расстояние больше заданного, значит, на его пути нет препятствий, и он будет двигаться вперед.
если (расстояние> 19) { digitalWrite (fwdright7, HIGH); // двигаться вперед digitalWrite (revright6, LOW); digitalWrite (fwdleft5, HIGH); digitalWrite (revleft4, LOW); }
Если расстояние меньше заданного расстояния для объезда препятствия, значит впереди есть препятствие. Таким образом, в этой ситуации робот остановится на некоторое время и двинется назад, после чего снова остановится на некоторое время, а затем повернет в другом направлении.
если (расстояние <18) { digitalWrite (fwdright7, LOW); // Остановить digitalWrite (revright6, LOW); digitalWrite (fwdleft5, LOW); digitalWrite (revleft4, LOW); задержка (500); digitalWrite (fwdright7, LOW); // обратное слово digitalWrite (revright6, HIGH); digitalWrite (fwdleft5, LOW); digitalWrite (revleft4, HIGH); задержка (500); digitalWrite (fwdright7, LOW); // Остановить digitalWrite (revright6, LOW); digitalWrite (fwdleft5, LOW); digitalWrite (revleft4, LOW); задержка (100); digitalWrite (fwdright7, HIGH); digitalWrite (revright6, LOW); digitalWrite (revleft4, LOW); digitalWrite (fwdleft5, LOW); задержка (500); }
Вот так робот может избегать препятствий на своем пути, не застревая где-нибудь. Найдите полный код и видео ниже.