Робот-пылесос на Arduino своими руками: схема и программа

Робот-пылесос на Arduino своими руками: схема и программа Роботы

Error

Sorry, your request has been denied.

Видео, демонстрирующее работу робота-пылесоса

Источник статьи

3 265 просмотров

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

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

Для изготовления корпуса робота мы вырезали из MDF круг радиусом 8 см, а в нем отверстие радиусом 4 см – в него будет вставляться наш портативный пылесос. Также мы вырезали соответствующие отверстия под колеса и три небольшие отверстия для установки опорного валика (колеса).

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

Для изготовления верхней части робота мы вырезали круг радиусом 11 см. Для скрепления верхней и нижней частей робота и обеспечения необходимого промежутка между ними мы использовали три пластиковых трубы длиной 4 см. Всю конструкцию мы скрепили с помощью клея. При желании боковые стенки робота вы можете изготовить из пластика или какого-нибудь другого материала.

Смотрите про коптеры:  Как выбрать зарядное устройство LiPo для квадрокоптера? Советы и примеры - Все о квадрокоптерах | PROFPV.RU

Инфракрасный датчик для обнаружения лестниц

Для того, чтобы наш робот-пылесос мог обнаруживать лестницы и не падать с них, мы будем использовать инфракрасный датчик (IR Sensor). Принцип его действия достаточно прост – он содержит в своем составе излучающий инфракрасный диод (IR LED) и фотодиод.

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

Инфракрасный датчик содержит 3 контакта – Vcc (питающее напряжение), ground (общий провод, земля) и output (выход). Когда вблизи датчика есть препятствие, то на его выходе формируется напряжение низкого уровня (low). Поэтому данный датчик мы можем использовать для обнаружения пола комнаты.

Если он передвигается по полу, то на выходе датчика будет low. Если же на выходе датчика мы неожиданно обнаружим напряжение высокого уровня, то мы должны либо остановить робота, либо двигать его в обратном направлении, либо сделать что-либо другое чтобы предотвратить его падение с лестницы.

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

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

Для изготовления самодельной конструкции требуются материалы и набор инструментов. Они следующие:

  • Контролер типа Arduino с соответствующими драйверами. Этот элемент можно приобрести в специализированном магазине. Контроллер после установки рекомендуется защитить от воздействия окружающей среды.
  • Лист фанеры применяется для создания основания. В некоторых случаях изготавливается корпус из поливинилхлорида, т. к. этот материал более надежный в применении.
  • Для обеспечения подвижности устанавливается 3 колеса. Они должны быть небольшого размера, поверхность изготавливается из материала с высокой степенью сцепления.
  • Провода сечением 0,75 мм² нужны для соединения отдельных элементов. Компактность конструкции определяет то, что требуется относительно небольшое количество провода.
  • Блок питания представлен 4 аккумуляторами по 18V. Также уделяется внимание тому, какие используются зарядные устройства. На момент работы источник питания может нагреваться до высокой температуры. Поэтому батареи должны быть изолированы от других материалов.
  • 4 инфракрасных и 2 контактных датчика используются для определения положения устройства. Инфракрасные размещаются по периметру, контактные располагаются внутри бампера.
  • Клей, саморезы и другие крепежные элементы.
  • Набор отверток, паяльник, нож, карандаш, шуруповерт и некоторые другие инструменты.

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

  • Bosch 16%, 2276 голосов

  • Samsung 15%, 2134 голоса

  • LG 13%, 1914 голосов

  • Indesit 6%, 918 голосов

  • Atlant 6%, 866 голосов

  • Electrolux 5%, 794 голоса

  • Beko 4%, 514 голосов

  • Philips 3%, 500 голосов

  • Ariston 3%, 476 голосов

  • Xiaomi 3%, 413 голосов

  • Haier 2%, 342 голоса

  • Redmond 2%, 297 голосов

  • Gorenje 2%, 262 голоса

  • Midea 2%, 248 голосов

  • Candy 2%, 243 голоса

  • Karcher 2%, 230 голосов

  • Hansa 2%, 224 голоса

  • Siemens 1%, 216 голосов

  • Whirlpool 1%, 207 голосов

  • Liebherr 1%, 191 голос

  • Zanussi 1%, 190 голосов

  • Vitek 1%, 158 голосов

  • AEG 1%, 117 голосов

  • Dyson 1%, 110 голосов

  • Thomas 1%, 92 голоса

  • Scarlett 1%, 86 голосов

  • Miele 1%, 78 голосов

  • iRobot 1%, 76 голосов

  • Nord 1%, 74 голоса

  • DeLonghi 1%, 73 голоса

  • Zelmer 0%, 70 голосов

  • BBK 0%, 57 голосов

  • Kuppersberg 0%, 49 голосов

  • Smeg 0%, 28 голосов

  • iLife 0%, 20 голосов

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

  1. Плата Arduino Pro Mini (купить на AliExpress).
  2. Ультразвуковой датчик HC-SR04 – 3 шт. (купить на AliExpress).
  3. Драйвер двигателей L293d (купить на AliExpress).
  4. Электродвигатели постоянного тока формата N20, работающие от 5 В, с кронштейнами для их установки – 2 шт. (купить на AliExpress – смог найти только на 6 В, на 5 В почему то не удалось найти).
  5. Переключатель.
  6. Регулятор напряжения LM7805 (купить на AliExpress).
  7. Литий-ионная батарея 7.4V (купить на AliExpress).
  8. Инфракрасный датчик (купить на AliExpress).
  9. Перфорированная плата.
  10. Опорный ролик (колесо) для робота.
  11. MDF (из него будет делаться корпус робота).
  12. Портативный вакуумный пылесос (Vacuum Cleaner).

Внешний вид компонентов, необходимых для сборки данного робота-пылесоса, показан на следующем рисунке:

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

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

Портативный пылесос (portable vacuum cleaner)

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

Сверху пылесоса имеется контакт для подключения питания. Двигатель непосредственно запитывается от напряжения 3V (2 батарейки по 1,5 В формата AA) через простой выключатель. Поскольку мы будем запитывать все наше устройство от литий-ионной батареи 7.

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

Робот пылесос своими руками. часть 2

И, когда она в очередной раз вышла на балкон позвать меня, я услышал как Толька Коршунов выкрикнул: “Гвардеец кардинала на посту!” И я вцепился в него, хотя Тольке было целых одиннадцать лет и он даже уже был влюблен в Таньку, о чем поведал всему двору вырезанным на тополе объявлением “Я люблю тебя”.Имя вырезать не стал, проявив не детскую мудрость.

Толька валялся в пыли, совершенно не сопротивляясь, а только удивленно таращась на меня. Я пытался молотить его, приговаривая: “Гад, гад!” Под очередное “гад” меня подняла в воздух неведомая сила. Мелькнул яркий рукав, бицепс, усы и я оказался за обеденным столом с моей “не моей” бабой Феней.
Мама назвала ее официально — Феодосия Николаевна и всегда повторяла: “Она не твоя бабушка”.Моя бабушка была первая жена деда, баба Женя. Она жила в одном городе с нами, в центре России, а дед с Феней жили у моря.

Оно — море — и стало причиной нашего знакомства. Я был худющим болезненным ребенком, и педиатр убедила мать, что море положительно скажется на моем здоровье. “Но обязательно не меньше месяца,” — повторяла она. Когда мне было почти четыре года, меня повезли знакомить с дедом, морем и Феней. Феодосией Николаевной. Как бы не хотели мама с “моей” бабушкой изъять ее из этого уравнения. В первый раз мама была со мной две недели, натянуто общаясь с дедом и Феней. Убедившись, что старики вполне способны управиться с ее чахлым “цветком” жизни, она начала часто уходить в гости к подругам детства и задерживаться там допоздна.

Я не хотел спать без нее. Ходил по квартире, поднывая. Дед уговаривал спать, а Феня сгребалав охапку, и говорила: “Борык, не куксись. Пойдем встречать маму!” Мы выходили в притихший двор, она сажала меня на качели.

Качелей я боялся, мне казалось, что меня, такого легкого, подхватит ветер и унесет, но Феня мощной фигурой вставала ровно напротив качелей и и заключала подвешенное сиденье в свои уверенные руки, прежде,чем снова толкнуть. “Будешь наверху — смотри маму,” — напутствовала она и легонько толкала качель. “Не виднооо,” — ныл я, а она отвечала: “Значит, надо повыше. Не боишься?” Я мотал головой в разные стороны, и она толкала сильней. И в один день, взлетая до ветки тополя, я понял, что хочу, чтоб мама не торопилась.

И мама, наверное, поняла. Она уехала, оставив меня с дедом и Феней на лето. Мы посадили ее на поезд,помахали в окошко и пошли домой обедать. А вечером мне почему-то захотелось плакать. Я помню ощущение полной опустошенности, и помню, как оно появилось. Оно появилось, когда я думал, что сегодня вечером не надо встречать маму и мы с Феней не пойдем качаться. Но после ужина она объявила:”Борык, не куксись, пойдем смотреть, как мама едет на паровозе.”

Мы ходили качаться каждый вечер. Дед поначалу говорил, что поздно, и “ребенку нужен режим”, но Феня обрывала его на полуслове: “Не гунди, охламон, рыбенку много чего нужно.”
Охламон улыбался внутрь себя и капитулировал. Мы с Феней выходили, когда последние бабульки снимались с лавочек у подъезда, а возвращались к полуночи, покусанные комарами и абсолютно счастливые.
Качели были моим личным раем. Качели которые качала Феня. Она раскачивала меня, а потом притормаживала и влепляла поцелуй в неожиданное место. Когда качели начинали останавливаться, а я просить: “Еще, еще!”, Феня принималась щекотать меня. Я вертелся волчком, заливался на весь тихий гулкий двор, но не слезал с сиденья.

Здоровье мое, несмотря на отсутствие режима, улучшилось. Встретив меня, загоревшего и слегка отъевшегося, на вокзале, бабушка Женя поджала губки. Стройность была одной из основных ее добродетелей, и она весьма боялась жирного и сдобного греха.
Очень скоро после приезда домой я спросил, когда снова поеду к деду и Фене.
— Лен, ты слышала?— крикнула бабушка моей маме, и не дождавшись ответа повторила:
—Ты это слышала?
— Мам, не начинай снова, это ребенок, — мама подошла ко мне и внезапно погладила по голове. Она редко так делала, мне стало так хорошо, и я снова вспомнил качели. Мне хотелось повторить свой вопрос маме, но я не стал. А в конце длинной-длинной зимы, когда я свалился с ужасной ангиной, мама сидя у моей кровати сказала: “Бобка, ну что же ты, выздоравливай!Скоро ведь поедем к деду!”

Я выздоровел и мы поехали. Мама уехала через три дня. Была середина мая. Раз в месяц Феня наряжала нас с дедом “в парадное”, и мы шли в переговорный пункт: попросить маму оставить меня еще на месяц. Вышло три раза.

Дед работал сутки через трое, и в свободные дни старательно просаливал меня в море. А вечера были мои с Феней. И качелями. Взлет— посадка — поцелуй, взлет — посадка — объятия.
— Борык, маму видишь?
— Вижу! В окно! Она спит!
— А Москву видишь?
— Вижу!
— Кремль красный?
— Синий!
— Значит, вечер!
Смех-посадка-поцелуй, тихий подъезд, мы играем в шпионов, и, чтобы не будить деда, укладываемся вместе спать на диване.

Находясь между этим хитросплетением взрослых, я совершал детские ошибки, но учился на них. Однажды я попросил бабушку Женю испечь оладушки как у Фени. “Борис, питаться жареным — вредно!” — выпалила она, но не преминула заметить под нос: “Своих детей сгубила, за моего взялась…”В моем сознании эта фраза повисла вопросом, но я промолчал. Летом меня снова отправили “на море”: у мамы появился перспективный кавалер, и без меня было сподручней.

Вопрос, зародившийся после обмолвки “моей” бабушки терзал меня, и я не знал, как поступить. Мне было уже шесть лет,и я начал ощущать какую-то неловкость в стальных объятиях Фени. К тому же я маялся, гадая, как она сгубила своих детей.Решился однажды спросить у деда. Он вздохнул, но ответил: “Утонули они на лодке с отцом их. Она с тех пор на море и несмотрит.И забудь, что я сказал, и с ней не говори.”Я и не говорил, и даже позабыл, ибо мучивший меня вопрос разрешился. А качели так и были нашими, хоть я и мог уже качаться сам. Но не мог же я сам себя целовать?

К следующему лету у деда начались проблемы со здоровьем, и вместо моря я отправлялся гулять во двор. А после драки с Толькой Коршуновым из-за Фени меня приняли в дворовое сообщество и я даже был частью “живой пирамиды”, на которой стоял Толька, чтобы вырезать на тополе сердце, пронзенное стрелой, под своим “я люблю тебя”. Да что там, и на море мы тоже гоняли, и строили шалаши, и даже пробовали влюбляться, и я еще не раз подрался из-за женщин. Было не до качелей.

Феня ухаживала за дедом, и в квартире поселился тонкий, но устойчивый запах лекарств. А мама вышла замуж. За Толика. За другого, конечно, но вроде он тоже намекал, что “я люблю тебя”. Эту новость мне сообщила Феня и, глядя на меня, добавила: “Не куксись! Это хорошо. Вы подружитесь.” Я подумал:”Никогда!”, а она оказалась права.

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

Больше выездов “на море” не было, потому что началась другая жизнь. Мы приехали к деду через четыре года. На похороны.Я помню, как зашел в ту самую квартиру, а посреди большой комнаты стоял гроб. Феня провела нас с мамой мимо него в спальню и уложила спать с дороги. Назавтра была суета, похороны, поминки, и во всем этом я затерялся и чувствовал себя лишним.

Я потихоньку вышел из-за поминального стола и пошел в маленькую комнату. Сел на кровать, уставился в стену. Не знаю, сколько так просидел, но зашла Феня. Она обняла меня, и внезапно я разрыдался. Феня гладила меня по голове, а затем внимательно посмотрев в глаза, сказала: “Борык, деда все равно тебя любит. Ну, не куксись…”

Мы с мамой уехали после девятого дня. Феня предлагала мне остаться. Я выжидательно посмотрел на мать, рассчитывая, что она заявит о полной невозможности оставить меня…Но она молчала… Я отрицательно мотнул головой.
— Ну поезжайте, поезжайте, выберете время еще приехать… — Феня была тише, чем обычно, да и понятно почему.

А потом жизнь меня закружила. Это был, наверное, не тот танец, который я хотел, но отказаться не получалось. Свадьбы, рождения, болезни, похороны, встречи, расставания… Жизненное колесо неслось все быстрей, пока не застопорилось о диагноз моего собственного сына. Лейкоз. Помню глаза жены как провалы в ад и ее же бесстрастный голос, когда она перечисляла, что нужно купить в больницу. Еще доктора помню, который сказал, что “большинство случаев разрешаются благоприятно”. В интернете писали, что большинство — это семьдесят процентов. И наш ребенок должен был в них попасть. Должен! И не должен в тридцать… Пусть не он…Мы стали командой по попаданию в семьдесят процентов: жена взяла на себя всё, связанное с сыном, а я должен был зарабатывать. Общение превратилось в сводки анализов. Лучше, хуже, хуже, лучше, лучше, немного хуже, немного лучше, еще немного лучше.

Мы победили. Мы попали в семьдесят. А я понял, что не чувствую ничего.
Я боялся посмотреть в глаза сыну и жене, потому что они бы это поняли. На работе подвернулась командировка, поехал. И вдруг как током дернуло: “А ведь Феня еще может быть жива! Есть шанс!”Не сама собой, конечно, эта мысль пришла, я рядом с теми местами оказался. Сделал крюк, нашел тот двор… Дверь в квартиру никто не открыл. Значит, не выпал шанс. Она бы точно дома была.

Вышел из подъезда — на лавочке тип алкоголического вида сидит. Аккуратно у него поинтересовался, не знает ли он, кто в шестьдесят четвертой квартире живет.
А он как заорет:
— Боб, ты? Точно ты! Ну ты же!
Друган детства оказался. В квартире пара молодая живет, дальние родственники Фени. А она сама давно уж померла. А до того как будто с ума сошла немного. Выходила вечерами гулять до ночи. На качелях раскачивалась и улыбалась. А потом соседи по запаху нашли ее.

— Боб, на пиво не подкинешь? Давай за встречу, — закончил он свой рассказ вполне ожидаемо.Я подкинул, а “за встречу” не стал. Он сразу побежал отовариваться, и я оглядываясь, как шпион, подошел к качелям. Всё те же. Вечная металлоконструкция. Сел боком, оттолкнулся ногой. Тополь тот же, вон на нем вырезано “Я люблю тебя” и сердце, пронзенное стрелой… Только еще что-то сверху накарябали, раньше не было. “Не куксись”. “Не куксись. Я люблю тебя”…Нет, не может быть… Точно: “Не куксись”.

Я уперлся лбом в ствол дерева,а потом обхватил руками. Меня трясло. Нет, меня “типало”. Так говорила Феня в минуты особого волнения: “Меня типает”. Внезапно с утробным рыком я набрал полную грудь воздуха и разрыдался.
Я тоже люблю тебя, Феня. Я люблю тебя, дед. Я люблю жену и сына. И маму, и отчима, и сестру. И даже когда меня не станет, эта любовь останется. Но еще рано, я еще должен сказать им всем об этом хотя бы раз.

Самодельный робот-пылесос

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

Под катом — картинки

Робот-пылесос на Arduino своими руками: схема и программа

Робот был впервые представлен в 2023 году на roboforum.ru как один из прототипов. Возможно кому-то интересно будет собрать подобного к Новому году.

Для управления роботом можно использовать дешевый микроконтроллер AVR и драйвер мотора. Этот робот управляется AVR ATMega48 и драйвером L293D, собранными на макетной плате. Микросхема L293D во время работы может довольно сильно нагреваться, поэтому на нее установлен алюминиевый радиатор.
Для питания используется 6 вольтовый свинцовый аккумулятор. 5-ти вольтовый регулятор L7805 обеспечивает необходимые для питания МК 5 вольт.
Контроллер может иметь меньше контактов — эта плата была собрана для прототипирования.
ATMega запрограммирована на бейсике — используя BascomBasic.

Робот-пылесос на Arduino своими руками: схема и программа

Робот-пылесос на Arduino своими руками: схема и программа

На плате контроллера также собран step-up конвертер напряжения, поскольку компьютерному кулеру требуется 12 вольт, а напряжение аккумулятора 6 вольт.
Конвертер собран на микросхеме MC34063A. Схема подключения и параметры компонент можно подобрать по одному из онлайн калькуляторов (например этому)

Робот-пылесос на Arduino своими руками: схема и программа

Все соединения сделаны на обратной стороне платы проводками (предпочитаю использовать провода во второпластовой изоляции, которая не плавится при пайке). Резисторы 180 Ом ограничивают ток на входах МК, к которым подключены контакты бамперов.

Робот-пылесос на Arduino своими руками: схема и программа

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

Робот-пылесос на Arduino своими руками: схема и программа

Из металлической ленты (купленной в строительном магазине) по размеру корпуса собран каркас робота. Моторы, редукторы и колеса взяты от игрушечной машинки-«перевертыша».

Робот-пылесос на Arduino своими руками: схема и программа

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

Маленькое мебельное колесико смонтировано свободно вращающимся на оси.

Робот-пылесос на Arduino своими руками: схема и программа

Робот-пылесос на Arduino своими руками: схема и программа

Робот-пылесос на Arduino своими руками: схема и программа

Бамперы вырезаны в корпусе робота. При столкновении с препятствием бампер нажимает своей поверхностью на контакты, сделанные из обрезков медной проволоки, замыкая из на металлическую раму. Рама подключена к минусу питания («земля»,«общий»), контакт подключен через резисторы 180 Ом к входам МК (входы подтянуты внутренними резисторами к питанию).

Робот-пылесос на Arduino своими руками: схема и программа

Самодельный робот-пылесос на базе arduino – robocraft

Робот-пылесос на Arduino своими руками: схема и программа
Диаметр робота 30 сантиметров, высота 9 сантиметров. Корпус сделал из вспененного ПВХ толщиной 6 мм. ПВХ легко режется ножом, гнется над паром, или феном, клеится обычным суперклеем намертво.

Робот-пылесос на Arduino своими руками: схема и программа
В бампере у робота установил 4 инфракрасных датчика препятствия и два переключателя на случай столкновения, а так-же наклеил резиновые утеплители для окон, чтобы при столкновении с углами мебели, не превратил ее в труху.

Робот-пылесос на Arduino своими руками: схема и программа
Контейнер для пыли и мусора сделан из 4 мм. ПВХ. Фильтр из двух слоев тряпичной салфетки (продается в любом магазине, где торгуют чистящими средствами для дома) и вклеил их в рамку из плотного картона. Крышка контейнера держится на магнитах.
Турбина склеена из тонкого пластика, компакт-дисков и ПВХ.

Робот-пылесос на Arduino своими руками: схема и программа
Контейнер со снятым фильтром. Видны лопасти турбины. Турбину сделал не разборной поэтому не смогу показать ее внутренности.

Робот-пылесос на Arduino своими руками: схема и программа
Верхняя крышка склеена супер-клеем.

Робот-пылесос на Arduino своими руками: схема и программа
Сердце, кишки и прочие внутренности робота-пылесоса.

Робот-пылесос на Arduino своими руками: схема и программа
Контроллер инфракрасных датчиков с регуляторами расстояния до препятствия. Имеет 4 выхода для подключения к Ардуино. В обычном режиме выдает на выходе логическую единицу, если срабатывает любой из четырех датчиков, выдает ноль.

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

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

Робот-пылесос на Arduino своими руками: схема и программа
Турбину вращает высокооборотный моторчик. Маркировки на нем нет и откуда вытащил не помню.

Робот-пылесос на Arduino своими руками: схема и программа
Питается все это хозяйство от четырех литий-ионных аккумуляторов формата 18650, через понижающий DC-DC преобразователь. Подключены две пары последовательно.

Робот-пылесос на Arduino своими руками: схема и программа
В белой трубке находится контроллер заряда — разряда аккумуляторов. Когда АКБ подходит к минимально допустимому разряду, контроллер отключает пылесос, когда заряжается и достигает полной зарядки, то отключает зарядное устройство.

Робот-пылесос на Arduino своими руками: схема и программа
Колеса и мотор-редукторы всем знакомы. Пришлось их немного подшаманить. Разобрал редукторы, промыл от силиконовой смазки, обильно намазал солидолом и собрал обратно. Мне показалось, что на пластмассовых осях выглядит это не надежно и как-то совсем по китайски. Пришлось укреплять.

Робот-пылесос на Arduino своими руками: схема и программа
Основание робота сделал из водостойкой фанеры, а точнее из разделочной доски.

Робот-пылесос на Arduino своими руками: схема и программа
Третье колесико пришлось углублять на 2,5 сантиметра. Надо было сразу заказывать шариковое колесико. Но как говорится, если бы бабушке бороду, то она будет дедушкой.

Робот-пылесос на Arduino своими руками: схема и программа
Щетку сделал из лески.

Список деталей:
Arduino Pro Mini — мозги.
L298N — драйвер моторов.
Понижающий DC -DC преобразователь.
Модуль с Мосфетом для управления передней щеткой.
4 инфракрасных датчика препятствия с контроллером.
Два переключателя для бампера.
Два колеса с мотор-редукторами.
Третье колесо, лучше шариковое не высокое.
Мотор для щетки.
Высокооборотный мотор для турбины.
4 аккумулятора 18650 и контроллер для них.
Фанера, ПВХ, куча проводов, выключатель, гнездо для зарядки, магнитики, шурупы.

Видео уборки.

Видео робота без корпуса.

#define in1 4 //пин правого мотора
#define in2 5 //пин правого мотора

#define in3 7 //пин левого мотора
#define in4 8 //пин левого мотора

#define lev_vik 2 //пин левого выключателя
#define pra_vik 3 //пин правого выключателя

boolean lev = true; //переменная состояния левого выключателя
boolean pra = true; //переменная состояния правого выключателя

boolean ir1 = true; //переменная состояния первого ик датчика
boolean ir2 = true; //переменная состояния второго ик датчика
boolean ir3 = true; //переменная состояния третьего ик датчика
boolean ir4 = true; //переменная состояния четвертого ик датчика

void setup() {

  randomSeed(analogRead(19));

  // пины для левого и правого моторов на выход

  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);

  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
  //---------------------------------------------

  //пин веника на выход
  pinMode(11, OUTPUT);
  //--------------------

  //пины левого и правого выключателя на вход
  pinMode(lev_vik, INPUT);
  pinMode(pra_vik, INPUT);
  //-----------------------------------------------

  //пины ик датчиков на вход
  pinMode(14, INPUT);
  pinMode(15, INPUT);
  pinMode(16, INPUT);
  pinMode(17, INPUT);
  //------------------------------------------
  venikmin(); // медленное вращение веника
  delay(4000);

  vpered(); // езда вперед
}

void loop() {

  lev = digitalRead(lev_vik); //считывание состояния левого выключателя
  if (!lev) {  //если срабатывает левый выключатель то
    stopm();//стоп
    venikmax(); // быстрое вращение веника
    delay(300);
    nazad(); //едем назад
    delay(300);
    stopm();//стоп
    delay(300);
    vpravo(); //поворот на месте вправо
    delay(random(500, 1000));
    stopm();//стоп
    delay(300);
    vpered();  // езда вперед
    venikmin(); // медленное вращение веника
  }

  pra = digitalRead(pra_vik); //считывание состояния правого выключателя
  if (!pra) {  //если срабатывает правый выключатель то
    stopm();//стоп
    venikmax(); // быстрое вращение веника
    delay(300);
    nazad();  //едем назад
    delay(300);
    stopm();//стоп
    delay(300);
    vlevo();  //поворот на месте влево
    delay(random(500, 1000));
    stopm();//стоп
    delay(300);
    vpered();   // езда вперед
    venikmin();   // медленное вращение веника
  }

  //------------------------------
  ir1 = digitalRead(14); // считывание показания первого ик датчика
  if (!ir1) { // если срабатывает первый ик датчик то
    stopm();//стоп
    venikmax(); // быстрое вращение веника
    delay(300);
    vpravo(); //поворот на месте вправо
    delay(random(400, 900));
    stopm();//стоп
    delay(300);
    vpered();   // езда вперед
    venikmin();   // медленное вращение веника
  }
  //-----------------------------

  //------------------------------
  ir2 = digitalRead(15); // считывание показания второго ик датчика
  if (!ir2) { // если срабатывает второй ик датчик то
    stopm();//стоп
    venikmax(); // быстрое вращение веника
    delay(300);
    vpravo(); //поворот на месте вправо
    delay(random(400, 900));
    stopm();//стоп
    delay(300);
    vpered();   // езда вперед
    venikmin();   // медленное вращение веника
  }
  //-----------------------------

  //------------------------------
  ir3 = digitalRead(16); // считывание показания третьего ик датчика
  if (!ir3) { // если срабатывает третий ик датчик то
    stopm();//стоп
    venikmax(); // быстрое вращение веника
    delay(300);
    vlevo(); //поворот на месте влево
    delay(random(400, 900));
    stopm(); //стоп
    delay(300);
    vpered();   // езда вперед
    venikmin();   // медленное вращение веника
  }
  //-----------------------------

  //------------------------------
  ir4 = digitalRead(17); // считывание показания четвертого ик датчика
  if (!ir4) { // если срабатывает четвертый ик датчик то
    stopm(); //стоп
    venikmax(); // быстрое вращение веника
    delay(300);
    vlevo(); //поворот на месте влево
    delay(100);     // ------------------------
    stopm(); //стоп
    delay(300);
    vpered(); // езда вперед
    venikmin();   // медленное вращение веника
  }
  //-----------------------------
}

//функция езды вперед
void vpered() {
  //вращение левого мотора вперед
  digitalWrite(in4, LOW);
  digitalWrite(in3, HIGH);
  //-----------------------------
  //вращение правого мотора вперед
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  //-----------------------------
}

//функция езды назад
void nazad() {
  //вращение левого мотора назад
  digitalWrite(in4, HIGH);
  digitalWrite(in3, LOW);
  //-----------------------------
  //вращение правого мотора назад
  digitalWrite(in2, HIGH);
  digitalWrite(in1, LOW);
  //----------------------------
}

//функция езды на месте влево
void vlevo() {
  //вращение левого мотора назад
  digitalWrite(in4, HIGH);
  digitalWrite(in3, LOW);
  //-----------------------------
  //вращение правого мотора вперед
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  //-----------------------------
}

//функция езды на месте вправо
void vpravo() {
  //вращение правого мотора назад
  digitalWrite(in2, HIGH);
  digitalWrite(in1, LOW);
  //----------------------------
  //вращение левого мотора вперед
  digitalWrite(in4, LOW);
  digitalWrite(in3, HIGH);
  //-----------------------------
}

//функция стоп
void stopm() {
  //стоп правого мотора назад
  digitalWrite(in2, HIGH);
  digitalWrite(in1, HIGH);
  //----------------------------
  //стоп левого мотора вперед
  digitalWrite(in4, HIGH);
  digitalWrite(in3, HIGH);
  //-----------------------------
}

//функция вращения веника медленно
void venikmin() {
  analogWrite(11, 90); // скорость вращения веника

}

//функция вращения веника быстро
void venikmax() {
  analogWrite(11, 220); // скорость вращения веника
}


p. s. Начал делать версию 2.0.
Предполагаемые улучшения:
Колеса будут на независимой подвеске (покупал в radiocopter.ru) со встроенными энкодерами и датчиками отрыва от пола.
Диаметр робота-пылесоса будет 34-35 сантиметров, а высота 8 сантиметров.
Ик-датчики препятствия будут другие и будет их не 4, а 6 штук.
Турбину сделаю мощнее.
Третье колесико будет шариковое, невысокое.
Пульт управления.
Четыре программы уборки: вдоль стен, ёлочка, от центра по спирали, и свободное блуждание.
Вторую щетку с другой стороны.
Более емкие аккумуляторы.

Хотелось бы сделать, но пока не решил нужно, или нет:
1. Щетку снизу.
2. Базовую станцию, для возвращения на подзарядку.
3. Ик-барьер.

Сборка

После подготовки всех требуемых материалов и инструментов можно провести непосредственную сборку робота-пылесоса. Инструкция выглядит следующим образом:

Сборка конструкции робота

Для спайки компонентов между собой мы использовали перфорированную плату. Эта часть работы очень проста, но к ней все равно необходимо отнестись с тщательностью. Для подключения платы Arduino pro mini мы использовали два контакта типа “мама” (female headers).

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

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

Теория

Самодельный робот-пылесос должен соответствовать различным требованиям. Основными можно назвать:

  • Рекомендуется изготавливать конструкцию в форме небольшого цилиндра. Она исключает вероятность того, что устройство зацепится за различные объекты в помещении.
  • Устройство должно разворачиваться на одном месте. Для этого нужно сделать колеса по периметру: 2 ведущих и 1 управляющий.
  • Внутри конструкции должен располагаться приемник для мусора. Его форма и крепление должны обеспечивать легкое извлечение. При изготовлении контейнера часто применяется картон, верхняя крышка крепится магнитами. Предусматривается наличие фильтрующего элемента.
  • Контактный бампер требуется для защиты пылесоса от ударов. Внутри этого элемента располагается датчик, срабатывающий при соприкосновении. Бампер изготавливается из поливинилхлорида, с наружной части может крепиться упругий материал.
  • По периметру размещены ИК-датчики. Они предназначены для определения препятствий на пути.
  • Зарядка устройства должна проводиться без разбора конструкции. Контроллер заряда позволяет исключить вероятность повреждения аккумулятора.
  • Наилучшим местом для размещения центра тяжести являются колеса.
  • Больше всего внимания уделяется выбору требуемого мотора. Он должен потреблять небольшое количество энергии, быть надежным.

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

  • Подготовка требующихся материалов и инструментов.
  • Изготовление основных частей.
  • Монтаж датчиков, мотора, аккумулятора и других элементов.
  • Выполняется электрическое подключение.
  • Вводится требуемая программа, согласуется работа всех установленных датчиков.

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

Тестирование

После сборки самодельной конструкции можно приступить к ее тестированию. На этом этапе уделяется внимание нижеприведенным моментам:

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

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

Ультразвуковой датчик hc-sr04

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

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

Оцените статью
Радиокоптер.ру
Добавить комментарий