Собираем роботпылесос на Arduino Основные алгоритмы движения - Домашний мастер Dach-Master.ru
93 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Собираем роботпылесос на Arduino Основные алгоритмы движения

Самодельный Робот Пылесос На Ардуино

самодельный робот пылесос на ардуино

Робот пылесос — Часть1: Механика

Наверное, каждый, кто только начинает по-настоящему увлекаться робототехникой, электроникой или программирование, проходя сложный путь изучения сопутствующих технологий, надеется в будущем применить накопленные знания для работы над серьёзным и интересным проектом.

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

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

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

-Занимать как можно меньше места, но при этом иметь вместительный контейнер для мусора.

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

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

Макеты мусороуборочных узлов.

В конце — концов, остановился на схеме: широкая боковая щётка + пылесос. Радиальная щётка, расположенная с правой стороны, загребает мусор к жерлу пылесоса, расположенному по центру. Горизонтально-цилиндрическую щётку, как у Румбы, решил не ставить, так – как она лишь незначительно увеличивает качество уборки, но при этом сильно осложняет конструкцию жерла пылесоса. Устройство пылесосящего узла представлено на фото ниже.

Однако возникает вопрос: Где взять турбину и двигатель для пылесоса?

Можно спаять турбину из стеклотекстолита и жести

Турбина из жести.

Можно взять готовую турбину от большого пылесоса, предварительно обрезав её на токарном станке.

Готовая турбина, обрезанная на токарном станке до нужного диаметра(вентилятор от компьютера для сравнения).

А ещё её можно купить, в виде дешёвого китайского автомобильного пылесоса.

Не сочтите за рекламу, но рекомендую брать именно этот пылесос(kioki), так как в нём гарантировано правильная турбина с мощным двигателем и удобным краплением (при цене, в среднем, 500р). Хотя, что касается двигателя – то его лучше заменить. У стандартного потребление порядка 3А, при замене на двигатель QX-RS-385-2073 с потреблением 1.2А, мощность всасывания падает незначительно, зато робот начинает меньше шуметь и дольше бегает без подзарядки. Что касается самодельных турбин, они хоть и хорошо всасывают, но их довольно сложно отцентрировать так чтобы не было вибрации.

Боковая щётка собрана из двигателя от магнитофона, подключённого к оси с трещоткой (вынул из игрушечного шуруповёрта) через червячную передачу. Кисточки вынуты из половой швабры, и закреплены на диске из стеклотекстолита с помощью секундного клея.

В качестве приводных моторов служат два 25милиметровых моторредуктора, наверное, здесь нужно что-то более подходящее, например переделанные под постоянное вращение сервоприводы, но я поставил то что было под рукой.

Готовых колёс нужного размера не нашлось, поэтому пришлось вырезать их 10милеметровой фанеры и обклеить теплоизоляционной лентой, для лучшего сцепления с поверхностью. Отверстия в колесе – для энкодеров, хотя в конечном счёте я отказался от их применения из-за низкой точности.

Мотоблоки желательно ставить на независимую подвеску. В данной модификации робота я решил проверить, действительно ли она нужна, установив двигатели без подвески, в результате возникли проблемы при заезде на толстый ковёр. Оси двигателей должны совпадать диаметром окружности робота, так будет проще реализовать развороты на месте.

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

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

Механика робота в собранном виде.

Для проверки механической части робота была собрана следующая, простая, схема управления:

Робот пылесос — Часть2: Электроника и программа

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

Плата управления построена на микроконтроллере atmega16, изначально она разрабатывалась, как универсальный модуль, поэтому оказалось плохо защищена от помех электродвигателя турбины. Проблема решилась экранированием проводов двигателя и установкой на него конденсатора в 0.1мкф, также необходимо кинуть вывод RESET контроллера прямо (без резистора) на +5v, это позволяет избавиться от произвольно сброса.

Драйвер двигателей собран на микросхеме L298, по стандартной схеме.

Плата драйвера двигателей.

Остальная электроника и органы управления собраны на макетной плате.

Общая электронная схема.

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

Наверное, самая интересная часть всей работы – это создание алгоритма и написание программы управления роботом.

Алгоритм уборки разделён на 4 режима:

•Движение вдоль стены

Разберём каждый из них по отдельности.

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

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

На блок-схеме, проверка наличия препятствий дана условно, в программе же она производится постоянно, а не один раз за итерацию.

Движение вдоль стены

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

Алгоритм был предложен на робофоруме и опробован в среде logo. Является хорошей заменой случайному блужданию, в чём можно убедиться, прогнав алгоитм в logo на модели своей комнаты:

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

Приводить блок-схему этого алгоритма не буду, на робофоруме, есть код на logo.

Программа писалась на чистом С без asm вставок.

Код распилен на несколько частей:

main.c -документ с main функцией и главным циклом.

Periphery.с -аппаратные зависимости, настройка периферии контролера.

Action.c -функциональная часть программы

util/drivers.c -функции управления устройствами

util/timer.c -служба таймеров

Содержит только одну функцию — Periphery() в которой прописывается настройка периферии контроллера. Функция вызывается единожды, из главной функции программы.

Содержит макросы для управления уборочным узлом:

А также функцию управления приводными двигателями:

*_vector – направление вращение двигателя: 1-вперед, 0-стоп, -1-назад

*_speed – скорость вращения, число от 0 до 10

Внутри две функции:

Функция управления временными задержками. Вызывается только по прерыванию с таймера-счётчика2, каждую 1/1000сек.

Единственным параметром передаётся указатель на переменную, от которой будет отсчитываться время. Переменная должна быть заранее инициализирована некоторым, отличным от нуля значением. Как только значение переменной станет равно нулю указатель на неё будет удалён из очереди таймеров. Длину очереди таймеров можно задать с помощью макроса SIZE_ARRAY_HOURS. Обратите внимание что функция Timer_Task не является аналогом функции _delay(), так-как отдаёт управление сразу же, проверять дотикал ли таймер необходимо вручную. Например, вот так выглядит организация задержек в функции управления индикатором:

Функциональная часть кода разбита на модули, для каждого физического или программного устройства пишется свой модуль. Физические устройства:

-Управление циклом уборки.

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

Вызов функций модулей производится из главного цикла программы:

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

В Action.c так же есть функция util_mode(char _mode), она используется для смены режима работы. Помимо присваивания нового значения переменной Mode, в определении функции прописано обнуление счётчиков конечных автоматов и переменных-таймеров.

Читать еще:  Ветряная электростанция своими руками

Проект собирается с помощью компилятора avrGCC, Makefile присутствует.

Arduino-робот жук Ringo

Название проекта: Arduino-робот жук Ringo
Платформа: Arduino

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

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

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

Подготовка

Отлично, если вы знакомы с платформой Arduino. Если нет — не проблема. Построение робота Ringo — отличный способ это исправить. Начните с наших онлайн уроков Arduino для начинающих.

Компоненты, необходимые для разработки робота-жука

Инструменты, которые понадобятся

Необходимые для проекта компоненты: Arduino Uno с кабелем USB, коробочка для одной 9В батареи, батарейка 9В (или аккумулятор 7,2-8,4В), три небольших аналоговых сервоприводов, один инфракрасный (ИК) приемник, мини-бредбоард, соединительные провода, стальная проволока (диаметр 1,5 — 2 мм), 2-3 обычных металлических скрепки. Также пригодятся инструменты.

Как подключить ИК-приемник к Arduino

В проекте используется ИК-приемник и ИК-передатчик (это может быть пульт от вашего телевизора).

Давайте научимся получить команды с ИК-пульта дистанционного управления. Нужно считать и запомнить код сигнала, чтобы позже использовать его для управления роботом.
Возьмите Arduino Uno, бредбоард, соединительные провода и ИК-приемник. Соберите схему как на фотографии.

Подключение ИК-приемника к Arduino UNO

Схема подключения ИК-приемника к Arduino UNO

Эта схема подключения ИК-приемника TSOP2136. Если будете использовать другой приемник — смотрите его спецификацию.

Теперь скачайте пример кода с GitHub. Откройте Arduino IDE и проект /ir_receiver/ir_receiver.ino. Первая строка кода:

Это означает, что скетч использует специальную библиотеку IRremote.h, в которой реализован функционал приема и отправки ИК-сигналов.

IRremote.h не является частью Arduino IDE, ее потребуется установить. Это open source проект с лицензией GNU, поэтому мы можем использовать этот код для своего робота. Откройте Serial Monitor и проверьте скорость передачи. Установите скорость 9600. Возьмите ИК пульт и начните нажимать на кнопки. Если собранная модель работает — вы видите коды в Serial Monitor.

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

Наш робот может выполнять 13 команд:

  1. Двигаться вперед.
  2. Двигаться Назад.
  3. Повернуть налево.
  4. Повернуть направо.
  5. Движение вперед с левым поворотом.
  6. Движение вперед с правым поворотом.
  7. Движение назад с левым поворотом.
  8. Движение назад с правым поворотом.
  9. Остановка.
  10. Установка 1-й скорости (медленная).
  11. Установка 2-й скорости.
  12. Установка 3-й скорости.
  13. Установка 4-й скорости (быстрая).

Выберите кнопки на пульте дистанционного управления для соответствующих команд. Например, кнопки 1-9 для первых девяти команд и цветные кнопки (красная, зеленая, желтая и синяя) — для последних четырех.

Теперь нажимайте соответствующую кнопку и записывайте соответствующие уникальные коды.

Прототип:

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

Походка жука

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

Как мы можем реализовать походку жука? Наш робот имеет три сервопривода. Они установлены в ряд с левой стороны к правой. Левая серво — для левой передней и задних ног. Эти ножки изготовлены в виде одной детали. Правый сервопривод — для правой передней и задних ног. И центральный сервопривод — для средних ног.

Видео, демонстрирующее как это работает:

Монтаж

Чтобы прикрепить батарейный отсек к плате возьмем скрепку и сделаем кронштейн. Все остальные компоненты мы установим на Arduino Uno: сервоприводы, мини-бредбоард.
Распечатайте трафарет (скачать здесь). Возьмите линейку и проверьте длину линий. Если длина не совпадает нужно перед распечаткой поменять настройки в программе просмотра PDF-файлов.

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

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

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

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

Установите макетную плату. Обратите внимание, что ИК-приемник должен быть направлен вверх. Теперь включите выключатель на держателе батареи, попробуйте управлять роботом с ИК-пульта и убедитесь, что все работает.

Как насчет ног?

Автор проекта сделал трафареты, чтобы помочь подобрать размер и форму ног робота-жука. Распечатайте их и проверьте масштаб. Один трафарет для левой и правой фронтальных задних ног, другой трафарет — для средних. Приклейте ноги к серводвигателям. Кажется, все готово!

Этот Arduino-проект для начинающих можно развивать далее. Можно изменить внешний вид и изменить код. Роботу-жуку пригодятся различные датчики, крошечная веб-камера, Bluetooth-адаптер и ваша фантазия!

И чтобы вам не забывался этот проект, arduiono-жуки решили станцевать и спеть песню:

Использованные компоненты: плата arduino, три небольших аналоговых сервоприводов, стальная проволока (диаметр 1,5 — 2 мм), 2-3 обычных металлических скрепки, ИК-приемник, мини-бредбоард, стальная проволока (диаметр 1,5 — 2 мм), 2-3 обычных металлических скрепки

Возможно вас также заинтересует готовый робот-жук.

Как сделать робот-пылесос?

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

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

Робот-пылесос своими руками

Описание самодельного робота пылесоса

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

Если вы все сделаете правильно, у вас получится модель, соответствующая этому описанию:

  • диаметр устройства составляет 30 сантиметров, высота – 9 сантиметров. Корпус сделан из вспененного поливинилхлорида. При этом толщина самого корпуса достигает 6 миллиметров;
  • в бампере установлены 4 датчика, посредством которых будет фиксироваться положение робота-пылесоса в пространстве. При этом имеется пара переключателей, подсоединенных на случай непредвиденных столкновений. Края обиты резиновой прокладкой, чтобы при случайном столкновении с мебелью не повредить ее;
  • емкость для пыли и мусора изготовлена из поливинилхлорида толщиной в 4 миллиметра. Фильтр для пыли изготовлен из 2 обыкновенных тряпичных салфеток, которые можно купить в каком угодно бытовом магазине. Крышка, защищающая содержимое мусорного контейнера, прикреплена к основанию при помощи магнитов;
  • турбина изготовлена из тонких пластиковых листов, фрагментов компьютерных дисков и поливинилхлорида;
  • верхняя крышка устройства держится на суперклее;
Читать еще:  Сайдинг своими руками пошаговая инструкция

  • инфракрасные датчики имеют 4 выхода подключения к системе «Ардуино». При этом обычный режим работы подразумевает выдачу логической единицы, а ситуация, в которой хотя бы один из датчиков системы срабатывает — логический ноль;
  • если ИК-датчик не сработал, а пылесос тем не менее наткнулся на какое-либо препятствие, его бампер нажмет на переключатель, что спровоцирует откат устройства на несколько сантиметров назад. После этого будет произведен разворот, а работа продолжится. Переключатели при этом нужны достаточно мощные, чтобы своевременно устанавливать бампер в исходное положение;
  • мотор, отвечающий за движение передней щетки, подключается в Arduino через MOSFET. При этом в том случае, когда робот-пылесос находится в движении, щетка вращается достаточно медленно для того, чтобы пыль, грязь и мусор не разбрасывались по комнате, а, наоборот, собирались вместе и втягивались в жерло. А если робот находится возле стены или угла, щетка ускоряет темп своей работы, так как большинство пыли и грязи как раз и скапливается вдоль плинтусов;
  • питание робота пылесоса осуществляют 4 литийионных аккумулятора, а также понижающий преобразователь переменного тока. Каждая пара вышеупомянутых литийионных аккумуляторов подключена последовательно;
  • основание устройства изготовлено из высокопрочной фанеры;
  • конструкция устройства подразумевает наличие 3 шариковых колес;
  • все щетки робота-пылесоса изготовлены из достаточно жесткой лески.
  • Схема сборки робота-пылесоса в домашних условиях

    Чтобы правильно сделать робот-пылесос своими руками, необходимо придерживаться следующего алгоритма (схема должна выполняться в четко указанной последовательности):

    • Загрузить необходимое программное обеспечение. Если вы хотите сделать свой робот-пылесос максимально похожим на заводские аналоги (исходя из выполняемых функций), вам нужно будет загрузить на микроконтроллер «Ардуино» необходимое программное обеспечение. Это можно сделать при помощи обыкновенного персонального компьютера — достаточно лишь загрузить код на плату «Ардуино».
    • Закрепить основные компоненты. Чтобы средства передвижения робота-пылесоса, кулер, микросхемы, аккумуляторы и вся прочая начинка устройства были надежно закреплены, вам потребуется фанерная основа. Она же по совместительству будет днищем вашего пылесоса. Туда же крепятся предварительно склеенные между собой при помощи суперклея турбина и емкость для сбора отходов. Также контейнер должен быть оборудован специальной трубкой, через которую будет выводиться выдуваемый воздух. Она должна быть защищена плотной тканью, которая послужит средством фильтрации. Кулер должен быть последовательно склеен со всеми сервоприводами, после чего посажен на все ту же фанерную площадку, на которой к тому времени уже должны быть монтированы микросхемы и аккумуляторы для подпитки устройства. Колеса для робота пылесоса могут быть куплены на рынке (однако вы можете предпринять попытку сделать их своими руками из консервной банки).

    Механическая часть робота-пылесоса

    • Установить бампер. В этой модели он изготавливается из поливинилхлорида. Однако возможны и металлические аналоги. В любом случае при столкновении он должен физически воздействовать на переключатель, который заставит аппарат двигаться в другую сторону. Также стоит отметить, что после столкновения бампер должен возвращаться на первоначальное место.
    • Установить корпус. Чтобы все содержимое конструкции было надежно защищено, лучше всего использовать корпус из поливинилхлорида. При этом на нем можно сделать надрезы, чтобы он лучше снимался. Крышка корпуса крепится при помощи магнитов. В идеале их должно быть не менее 8 (приветствуются вариации, в которых использовано большее их количество).

    Изготовление робота-пылесоса в домашних условиях

    Необходимые материалы

    Чтобы сделать робот-пылесос своими руками, вам потребуются следующие материалы:

    • «Ардуино Про Мини» — главный мозг и информационный центр всей конструкции.
    • Драйвер моторов робота-пылесоса серии Л298Н.
    • Понижающий преобразователь переменного тока.
    • Модуль с мосфетом, посредством которого будет осуществляться контроль над темпом работы передней щетки устройства.
    • 4 инфракрасных датчика, которые будут фиксировать наличие препятствий на пути робота пылесоса.
    • Пара переключателей, которые будут изменять направление движение устройства при столкновении.
    • 3 шарообразных колеса.

    Колеса для самодельного робота-пылесоса

    • Мотор, обеспечивающий вращение щетки в различных режимах.
    • Мотор высокой мощности, обеспечивающий нормальное функционирование турбины.
    • 4 литийионных аккумулятора, а также средство контроля над ними.
    • Фанерное основание нужного размера.
    • Корпус из поливинилхлорида нужного размера.
    • 8 пар магнитов для крепления.
    • Провода, кабели, переключатели и прочие элементы электрической сети.

    Автор, специалист в сфере IT и новых технологий.

    Получил высшее образование по специальности Фундаментальная информатика и информационные технологии в Московском государственном университете имени М.В. Ломоносова. После этого стал экспертом в известном интернет-издании. Спустя время, решил попробовать писать статьи самостоятельно. Ведет популярный блог на Ютубе и делится интересной информацией из мира технологий.

    Как сделать робота на Ардуино своими руками: самодельный robot Arduino в домашних условиях

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

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

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

    Шаг 1: Необходимые материалы

    • Arduino UNO
    • Мини макетная плата
    • Драйвер двигателя L298N
    • Два электромотора с колесами
    • Ультразвуковой датчик измерения расстояния HC — SR04
    • Микросервопривод
    • Кнопка
    • Красный диод
    • Резистор 220 Ом
    • Отсек для элемента питания 9В (с/без коннектора)
    • 8 стоек для макетных плат с наружной и внутренней резьбой, 8 винтов и 8 гаек

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

    Для изготовления каркаса робота использован кусок плексигласа (оргстекла) 12х9,5 см. Можно сделать каркас из дерева или металла, или даже из компакт-дисков.

    • Дрель
    • Суперклей
    • Отвертка
    • Клеевой пистолет (опционально)

    Для питания робота используется батарейка 9В (крона), она достаточно компактная и дешевая, но разрядится уже примерно через час. Возможно, вы захотите сделать питание от аккумулятора на 6 В (минимум) или 7 В (максимум). Аккумулятор мощнее батарейки, но и дороже и больше по габаритам.

    Шаг 2: Делаем каркас робота

    Положите всю электронику на плексиглас и маркером отметьте места, где нужно будет просверлить монтажные отверстия (фото 1).

    На нижней стороне пластины плексигласа приклейте на суперклей электромоторы. Они должны быть параллельны друг другу, с помощью линейки-угольника проверьте их положение прежде чем клеить (фото 2). Затем приклейте на суперклей отсек для батарейки.

    Можно также просверлить отверстия под провода электромоторов и питания.

    Шаг 3: Монтируем электронику

    Закрепите на каркасе плату контроллера и драйвер двигателей, используя стойки для печатных плат, винты и гайки. Миниатюрная макетная плата клеится на липкий слой (уже есть на нижней стороне) (фото 1).

    Теперь делаем заднее опорное колесо из скрепки и бусины (фото 2). Концы проволоки закрепите на нижней стороне каркаса суперклеем или термоклеем.

    Шаг 4: Устанавливаем «глаза» робота

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

    Шаг 5: Схема подключений

    Теперь приступаем к подключению электронных компонентов. Подключение компонентов происходит согласно схеме на рисунке 1.

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

    Шаг 6: Код

    Код, который приведен ниже, сделан с помощью Codebender.

    Codebender – это браузерный IDE, это самый простой способ программировать вашего робота из браузера. Нужно кликнуть на кнопку «Run on Arduino» и все, проще некуда.

    Вставьте батарейку в отсек и нажмите на функциональную кнопку один раз, и робот начнет движение вперед. Для остановки движения нажмите на кнопку еще раз.

    Нажав кнопку «Edit», вы можете редактировать скетч для своих нужд.

    Например, изменив значение «10» измеряемого расстояния до препятствия в см, вы уменьшите или увеличите дистанцию, которую будет сканировать robot Arduino в поисках препятствия.

    Если робот не двигается, может изменить контакты электромоторов (motorA1 и motorA2 или motorB1 и motorB2).

    Шаг 7: Завершенный робот

    Ваш самодельный робот, обходящий препятствия, на базе микроконтроллера Arduino готов.

    Рассказываю как сделать какую-либо вещь с пошаговыми фото и видео инструкциями.

    Ведроид-мобиль — робот на Arduino — Часть 4. Подключаем ультразвуковой дальномер

    GeekElectronics » Arduino от А до Я » Ведроид-мобиль — робот на Arduino — Часть 4. Подключаем ультразвуковой дальномер

    Читать еще:  Детальная инструкция как удалить аккаунт в инстаграме

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

    А прошлой статье я описывал процесс реализации управления роботом по Bluetooth через смартфон на Android. Это был первый режим работы робота. После этой статьи у нас появится второй режим. В будущем я планирую добавить еще несколько.

    Создание шилда управления роботом

    Для переключения между различными режимами работы я решил сделать отдельный шилд. В прошлый раз я уже использовал Proto Shield. Сегодня я его немного модернизирую под свои потребности.

    Для этого нам понадобятся следующие детали:

    • Светодиоды — 7 штук
    • Кнопки — 3 штуки
    • Резисторы на 220 Ом — 6 штук
    • Резисторы на 10 кОм — 2 штуки
    • Перемычки — 5 штук
    • Разъём PBS (мама) на 16 контактов — 1 штука
    • Миниатюрная макетная плата — 1 штука

    Все компоненты запаиваем на Proto Shield по указанной схеме (вид со стороны деталей):

    Размещение элементов на плате:

    В левом нижнем углу я вывел кнопку RESET. Она замыкает выводы RESET и GND. В левом верхнем — разъем подключения сервоприводов. Вверху светодиод с 13 дискретного вывода. Справа 2 кнопки переключения режимов (след / пред).

    Каждая кнопка подтянута к земле резистором на 10 кОм.

    Далее размещены 6 светодиодов, которые подключены к панельке контактов через резисторы на 220 Ом.

    Светодиоды будут служить индикаторами режимов работы робота.

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

    Подключение шилда управления роботом

    Подключим провода к разъему на 16 контактов. Описывать буду назначение контактов сверху вниз. LED 1..6 — выводы светодиодов, BTN 1..2 — кнопки.

    • 1 — LED 1 — к 22 дискретному выводу Arduino
    • 2
    • 3
    • 4 — LED 2 — к 23 дискретному выводу Arduino Mega 2560
    • 5
    • 6 — BTN 1 — к 28 дискретному выводу Arduino Mega 2560
    • 7 — LED 3 — к 24 дискретному выводу Arduino Mega 2560
    • 8 — GND — к GND Arduino Mega 2560
    • 9 — +5 V — к +5 V Arduino Mega 2560
    • 10 — LED 4 — к 25 дискретному выводу Arduino Mega 2560
    • 11 — BTN 2 — к 29 дискретному выводу Arduino Mega 2560
    • 12
    • 13 — LED 5 — к 26 дискретному выводу Arduino Mega 2560
    • 14
    • 15
    • 16 — LED 6 — к 27 дискретному выводу Arduino Mega 2560
    • VCC на JY-MCU подключаем к +5В Arduino
    • GND на JY-MCU подключаем к GND Arduino
    • TXT на JY-MCU подключаем к дискретному PIN 50 на Arduino
    • RXD на JY-MCU подключаем к дискретному PIN 51 на Arduino

    Подключение ультразвукового дальномера HC-SR04

    Процесс подключения ультразвукового дальномера HC-SR04 к Arduino и работу с ним я описывал ранее. В тонкости в этот раз вдаваться не буду, а лучше подробно распишу как я его закрепил на сервоприводе.

    Для создания крепления под ультразвуковой дальномер HC-SR04 я использовал кусок платы от Proto Shield и панельку контактов.

    Откусил от панельки контактов две части по 4 контакта и запаял их на плату параллельно.

    Перед подключением дальномера я сперва “раскорячил” его контакты, чтобы они плотно держались в разъеме.

    Проковырял в плате дырку под болт.

    Закрепил модуль на сервоприводе.

    В результате у меня получился такой девайс.

    Осталось только подключить провода к контактной панельке на плате дальномера и завести их на контакты Arduino Mega 2560. Этим и займемся.

    • VCC HC-SR04 подключим к +5V на Arduino Mega 2560
    • Trig HC-SR04 к цифровому пину 31 на Arduino Mega 2560
    • Echo HC-SR04 к цифровому пину 30 на Arduino Mega 2560
    • GND HC-SR04 к GND на Arduino Mega 2560

    Алгоритм объезда препятствий

    С алгоритмом я особо не заморачивался. Все достаточно просто и интуитивно понятно.

    Из исходного положения проверяем расстояние впереди. Если оно больше 30 сантиметров, то продолжаем двигаться вперед, иначе:

    • останавливаем двигатели
    • поворачиваем сервопривод на углы от 0 до 180 градусов с шагом в 15 градусов и измеряем расстояния на этих углах
    • заносим полученные значения в массив
    • поворачиваем сервопривод на угол 90 градусов (прямо)
    • ищем в массиве позицию с максимальным значением данных
    • если это значение меньше 30 сантиметров, то едем назад
    • если это значение больше 30 сантиметров, то проверяем какому углу поворота сервопривода оно соответствует и в зависимости от этого поворачиваем влево или вправо

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

    Скетч реализации алгоритма объезда препятствий

    //Создаем объекты для двигателей
    AF_DCMotor motor1(1); //канал М1 на Motor Shield — задний левый
    AF_DCMotor motor2(2); //канал М2 на Motor Shield — задний правый
    AF_DCMotor motor3(3); //канал М3 на Motor Shield — передний левый
    AF_DCMotor motor4(4); //канал М4 на Motor Shield — передний правый
    // Создаем объект для сервопривода
    Servo vservo;
    // Прописываем пины используемые модулем Bluetooth
    SoftwareSerial BTSerial(50, 51); // RX, TX
    // Создаем переменную для команд Bluetooth
    char vcmd;
    // Создаем переменные для запоминания скорости левых и правых двигателей
    int vspdL, vspdR;
    /* Создаем переменную, на значение которой будет уменьшаться скорость при плавных поворотах.
    Текущая скорость должна быть больше этого значения. В противном случае двигатели со стороны направления поворота просто не будут вращаться */
    const int vspd = 200;
    // Заносим в массив пины, к которым подключены светодиоды
    const int vledpins[6]= <
    22,23,24,25,26,27>;
    // Создаем переменную для сохранения режима работы
    int vmode;
    // Создаем переменную для сохранения предыдущего режима работы
    int vmodeprev = -1;
    // Заносим в массив пины, к которым подключены кнопки
    const int vbtn[2]= <
    28,29>;
    // Массив для хранения углов поворота сервопривода (шаг 15 градусов)
    const int vservo_array[13]= <
    0,15,30,45,60,75,90,105,120,135,150,165,180>;
    // Массив для хранения данных о расстоянии под различными углами поворота сервопривода
    int vHC_SR04_array[13];
    // Пины, используемые ультразвуковым дальномером
    const int vTrig = 31;
    const int vEcho = 30;
    // Переменные, для хранения данных с дальномера
    unsigned int vtime_us=0;
    unsigned int vdistance_sm=0;
    // Минимальное расстояние в сантиметрах, при котором нужно искать новый маршрут движения
    const int vmindistance = 30;
    // Переменная для циклов перебора значения массивов vservo_array и vHC_SR04_array
    int vservo_int;
    // Переменные для цикла поиска максимального значения в массивах
    int vmaxarrayindex_int;
    int vmaxarrayvalue_int;

    void setup() <
    // Устанавливаем скорость передачи данных по Bluetooth
    BTSerial.begin(9600);
    // Устанавливаем скорость передачи данных по кабелю
    Serial.begin(9600);
    // Выбираем пин к которому подключен сервопривод
    vservo.attach(9); // или 10, если воткнули в крайний разъём
    // Поворачиваем сервопривод в положение 90 градусов при каждом включении
    vservo.write(90);
    // Устанавливаем максимальную скорость вращения двигателей
    vspeed(255,255);
    /* Устанавливаем все выводы, к которым подключены светодиоды,
    в OUTPUT. Зажигаем и гасим светодиоды с интервалом в 0.5 сек
    для проверки */
    for (vmode = 0; vmode 5) <
    vmode = 0;
    vmodeprev = 5;
    >
    vrelease();
    delay (500);
    >
    // Кнопка переключения на предыдущий режим — BTN2
    if (digitalRead(vbtn[1]) == HIGH) <
    vmode = vmode — 1;
    vmodeprev = vmode + 1;
    if (vmode -1) <
    digitalWrite(vledpins[vmodeprev], LOW);
    >
    /* Выбор режима работы */
    switch (vmode) <
    case 0:
    // Режим ожидания
    break;
    case 1:
    // Режим работы с использованием ультразвукового дальномера
    vultrasoundmode();
    break;
    case 2:
    // Режим
    break;
    case 3:
    // Режим управления через Bluetooth
    vbluetoothmode();
    break;
    case 4:
    // Режим
    break;
    case 5:
    // Режим
    break;
    >
    >
    /* Режим работы с использованием ультразвукового дальномера */
    void vultrasoundmode() <
    vservo.write(90);
    delay(200);
    Serial.print(«Now «);
    Serial.println(vHC_SR04());
    // Если расстояние меньше наименьшего, то
    if (vHC_SR04() vmaxarrayvalue_int) <
    vmaxarrayindex_int = vservo_int;
    vmaxarrayvalue_int = vHC_SR04_array[vservo_int];
    >
    >
    Serial.print(«Max index «);
    Serial.println(vmaxarrayindex_int);
    // Проверка — если максимальное значение массива меньше минимального расстояния, то едем назад
    if (vHC_SR04_array[vmaxarrayindex_int] vspd) <
    vspeed(vspdL-vspd,vspdR);
    >
    else
    <
    vspeed(0,vspdR);
    >
    vforwardRL();
    >

    // Вперед и вправо
    void vforwardright() <
    if (vspdR > vspd) <
    vspeed(vspdL,vspdR-vspd);
    >
    else
    <
    vspeed(vspdL,0);
    >
    vforwardRL();
    >

    // Назад и влево
    void vbackwardleft() <
    if (vspdL > vspd) <
    vspeed(vspdL-vspd,vspdR);
    >
    else
    <
    vspeed(0,vspdR);
    >
    vbackwardRL();
    >

    // Назад и вправо
    void vbackwardright() <
    if (vspdR > vspd) <
    vspeed(vspdL,vspdR-vspd);
    >
    else
    <
    vspeed(vspdL,0);
    >
    vbackwardRL();
    >

    // Стоп
    void vrelease() <
    motor1.run(RELEASE);
    motor2.run(RELEASE);
    motor3.run(RELEASE);
    motor4.run(RELEASE);
    >

    // Изменение скорости
    void vspeed(int spdL,int spdR) <
    if (spdL == spdR) <
    vspdL=spdL;
    vspdR=spdR;
    >
    motor1.setSpeed(spdL);
    motor2.setSpeed(spdR);
    motor3.setSpeed(spdL);
    motor4.setSpeed(spdR);
    >

    В строках, на которые будет ругаться компилятор, поменяйте тире на минусы.

    Демонстрация робота на Arduino

    В следующий раз я попробую реализовать алгоритм прохождения лабиринта по правилу правой руки или движение по белой линии.

  • Ссылка на основную публикацию
    ВсеИнструменты
    Adblock
    detector