10 просмотров
Рейтинг статьи
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

Arduino — отличная платформа для робототехники. Микроконтроллер предлагает множество входов, выходов и легко разработать код для работы с ними.

Этот урок является первым из серии «Роботы Arduino» и мы начнем с движения робота — путем управления двумя двигателями постоянного тока. Спасибо за данный урок нашим друзьям из проекта darkbluebit.com.

Шаг 1: Список комплектующих

Нам понадобятся для создания первого робота некоторые комплектующие.

  • Комплект-шасси для создания робота (на фото выше) — можно купить отдельными деталями или в наборе
  • Драйвер-мост двигателя H-Bridge TB6612FNG
  • 4x — Диод 1N4001
  • 4x — 1,5 В AA батарея
  • 1x — 9 В батарея
  • Макет и провода

Шаг 2: Шасси

Есть много шасси для роботов, мы купили на Amazon.com комплект шасси для автомобиля Smart Robot от Ardokit, потому что это очень простой и довольно дешевый вариант. Он поставляется с двумя колесами, управляемыми двумя двигателями постоянного тока (3 — 6 В).

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

Читать еще:  Масляный электрообогреватель ремонт своими руками

Шаг 3: H-мост (H-Bridge)

Arduino может обеспечить только очень ограниченный ток непосредственно от выходных контактов — около 20 — 40 мА. Этого достаточно для светодиода, но нам нужен еще один способ питания двигателей.

Контроллер H-Bridge (H-мост) — это схема, используемая для управления скоростью и направлением двигателя. В этом случае нам нужен двойной H-мост (H-Bridge) для управления двумя из них. В цепи используется внешнее питание для обеспечения тока для двигателей. Батарейный блок 4x AA (держатель, входящий в комплект корпуса) предназначен только для этой цели — таким образом, источник питания Arduino (батарея 9 В) можно разделить для защиты нашей платы.

Мы выбрали MOSFET на основе TB6612FNG от Pololu, вы также можете купить почти то же самое от SparkFun (с другим цветом и распиновкой). Эти H-мосты способны управлять двигателями в диапазоне от 4,5 В до 13,5 В и обеспечивать непрерывный ток 1 А (с пиками 3 А).

Распиновка Pololu TB6612FNG и SparkFun TB6612FNG

Шаг 4: Обратное подавление EMF

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

Мы можем подавить это поведение, подключив диод как на схеме ниже:

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

Шаг 5: Цепь

Наше финальное подключение можно посмотреть на схеме ниже:

Шаг 6: Код

Номера выводов в приведенном ниже коде соответствуют схеме с SparkFun H-Bridge (см.выше), номера контактов в видео на последнем шаге отличаются друг от друга, поскольку там использовался Pololu H-Bridge.

Шаг 7: Итоговый результат

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

Спасибо, что прошли этот урок с нами до конца! Желаем вам отличных проектов и до встречи в ближайших уроках.

Опубликовал: Константин Александров / 26.11.2017

Урок 33. Обучаем Arduino робота ездить по линии

Введение:

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

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

Видео:

Нам понадобится:

  • Arduino Uno х 1шт.
  • Motor Shield (на 2 канала) x 1шт.
  • Аналоговый датчик линии x 3шт.
  • Машинка (базовый комплект)

Для реализации проекта нам необходимо установить библиотеку:

  • iarduino_HC_SR04_int для работы с ультразвуковыми датчиками расстояния по внешним прерываниям.

О том как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki — Установка библиотек в Arduino IDE .

Схема подключения:

Моторчики подключаются к клеммам M1 (левый мотор) и M2 (правый мотор) расположенным на Motor Sield. Аналоговые датчики линии подключаются к любым аналоговым входам Arduino Uno, в нашем примере используются входы A5 (для правого датчика), A4 (для центрального датчика) и A3 (для левого датчика). Вывод TRIG ультразвукового датчика расстояния подключается к любому выводу Arduino Uno, в нашем случае вывод D2. Вывод ECHO, при использовании библиотеки iarduino_HC_SR04_int, может подключаться только к тем выводам Arduino Uno, которые используют внешние прерывания, в нашем случае это вывод D3. Все датчики запитаны от напряжения 5 В. Напряжение питания на Arduino Unoподаётся через Motor Shield (клеммник Vin), для чего нужно установить перемычку, рядом с клеммником, в позицию «Общ. Пит.». Входы Motor Shield H1 (направление 1 мотора), E1 (ШИМ 1 мотора), E2 (ШИМ 2 мотора), H2 (направление 2 мотора), по умолчанию, подключены к выводам D7, D6, D5 и D4 соответственно, но их можно поменять, сняв перемычку и соединив вывод Motor Shield с нужным выводом Arduino Uno.

Алгоритм работы:

  • Если центральный датчик находится на линии, а боковые вне линии, то машинка едет прямо.
  • Если левый датчик находится на линии, а правый вне линии, то машинка поворачивает налево (независимо от показаний центрального датчика)
  • Если правый датчик находится на линии, а левый вне линии, то машинка поворачивает направо (независимо от показаний центрального датчика)
  • Если правый и левый датчики находятся на линии (вне зависимости от показаний центрального датчика), то такое состояние является неопределённым, машинка продолжает предыдущее движение (прямо или с поворотом) в течении 2 секунд (можно менять в скетче). Если в течении этого времени состояние не изменится, то она остановится.
  • Если все три датчика находятся вне линии, то такое состояние является неопределённым (потеря линии). Если этому состоянию предшествовал поворот, то машинка продолжит поворот в течении 2 секунд (можно менять в скетче). Если в течении этого времени состояние не изменится, то она остановится. Если этому состоянию не предшествовал поворот (машинка ехала прямо и линия оборвалась), то машинка сразу остановится.
  • Если перед машинкой появилось препятствие, на расстоянии менее 10 см (можно менять в скетче), то машинка остановится и продолжит движение, как только препятствие исчезнет.
Читать еще:  Открытие пельменного цеха пошаговая инструкция

Скорость движения задаётся в константе valSpeed, от 1 до 255. Крутизна поворотов задаётся в константе valTurning, от 1 до 255. Время продолжения движения, при неопределённом состоянии, задаётся в константе tmrDelay, в микросекундах. Направление движения моторов указывается логическими значениями элементов массива arrRoute (0 элемент — правый мотор, 1 элемент — левый мотор), по умолчанию все элементы равны «1». Если вы перепутали полярность при подключении мотора, то измените значение соответствующего элемента этого массива на «0».

Калибровка для светлых, слабоконтрастных или цветных линий:

Машинка настроена на движение по темной линии, но она может ездить по светлым, слабоконтрастным или цветным линиям. Для этого её нужно откалибровать, указав значения для констант valSensor1 (показание датчика находящегося на линии) и valSensor0 (показание датчика находящегося вне линии). Для чего, в коде setup скетча, предусмотрен вывод показаний центрального датчика в монитор последовательного порта.

  • Поместите машинку так, чтобы центральный датчик находился над линией.
  • Подключите Arduino Uno по USB кабелю.
  • Откройте монитор последовательного порта. В мониторе высветится показание датчика на линии.
  • Поместите машинку так, чтобы центральный датчик находился вне линии.
  • Нажмите кнопку reset на Motor Shield. В мониторе высветится показание датчика вне линии.
  • Укажите первое значение константе valSensor1, а второе значение константе valSensor0 и повторно загрузите скетч.

Как сделать робот-пылесос своими руками на Ардуино

Робот-пылесос своими руками Ардуино изготавливается из подручных материалов. Оборудование способно перемещаться по комнате, изменять направление движения после контакта с посторонними предметами и удалять пыль с поверхности пола.

Требуемые компоненты

Для сборки пылесоса на Ардуино потребуются компоненты:

  • блок управления;
  • отдельный контроллер для управления работой электродвигателей (обозначается на схемах как H-Bridge);
  • электрические двигатели постоянного тока с редукторами для привода боковых колес;
  • комплект колес;
  • источник питания (аккумуляторы или батарейки, суммарное напряжение 5 В);
  • турбина (используется узел, предназначенный для охлаждения процессоров или чипов видеокарт);
  • адаптер питания (при использовании компонентов, рассчитанных на напряжение 12 В);
  • комплект магнитов;
  • коммутационный шнур USB;
  • комплект кабелей для подключения блока Ардуино к цепям оборудования;
  • листовой плотный картон;
  • термический клей в тубе;
  • пистолет для нанесения клея;
  • резервуар для сбора пыли (готовый пластиковый или металлический контейнер);
  • пластиковые хомуты;
  • металлическая банка от напитков (для изготовления крепежных элементов).

Процесс сборки

Пошаговый процесс сборки робота-пылесоса Ардуино:

  1. Разложить компоненты конструкции будущего изделия на ровной поверхности для определения взаимного расположения и габаритов корпуса.
  2. Вырезать из картона круглое основание.
  3. Выполнить на детали прорези для боковых колес, которые располагаются по поперечной оси симметрии.
  4. Закрепить электрические приводы колес пластиковыми хомутами к корпусу.
  5. Прорезать канал для забора воздуха и зафиксировать клеем турбину над полученным окном. Узел крепится на противоположной от двигателей ходовой части стороне поддона.
  6. Разметить зону установки контейнера для пыли, который размещается над окном с роторным рабочим колесом.
  7. Установить и закрепить термическим клеем на внутренней части магниты (по предварительно размеченному контуру резервуара для пыли). Ответные магнитные элементы размещаются через лист бумаги на противоположной стороне поддона. Емкость для пыли приклеивается к магнитам, которые плотно прижимаются к боковой поверхности резервуара. Лист бумаги удаляется, коробка удерживается на запланированной монтажной точке взаимным притяжением магнитов.
  8. Закрепить на верхней плоскости поддона аккумуляторную батарею и контроллер Ардуино. Допускается установка элементов в направляющие узлы, изготовленные из древесины или пластика. Пользователи используют стандартные блоки управления Ардуино, часть владельцев самостоятельно корректирует прошивку микропроцессора путем подключения изделия к компьютеру.
  9. Разместить блок H-Bridge поверх контроллера и соединить электронику пылесоса с аккумулятором. Для соединения кабелей применяется пайка и установка коммутационных штекеров.
  10. Подключить электрические двигатели к выводам блоков управления.
  11. Вырезать картонные заготовки для фронтального бампера. Детали монтируются на передней части корпуса, точка соединения допускает перемещение бампера после столкновения робота с препятствием.
  12. Припаять отрезки кабеля к прямоугольным жестяным пластинам (требуется изготовить 2 элемента). Металлические пластинки устанавливаются на расстоянии от внутренней стороны импровизированных бамперов. На внутренней поверхности бампера наклеивается фольга, на которую подается положительное напряжение от батареи. При столкновении пластинка соединяется с фольгой и работает как датчик препятствия. В сигнальной цепи от пластины устанавливается дополнительное сопротивление, снижающее риск ложных срабатываний.

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

Ссылка на основную публикацию
Adblock
detector