- Матеріали, необхідні для побудови робота для миття підлоги на основі Arduino
- Портативний пилосос
- HC-SR04 Модуль ультразвукового датчика
- Підлоговий датчик (ІЧ-датчик) для виявлення сходів
- Принципова схема робота для миття підлоги на основі Arduino
- Створення схеми для робота для миття підлоги на основі Arduino
- Ардуїно
У сучасному сценарії ми всі настільки зайняті своєю роботою, що не маємо часу на належне прибирання будинку. Рішення проблеми дуже просте, вам просто потрібно придбати домашнього робота-пилососа, такого як irobot roomba, який очистить ваш будинок натисканням кнопки. Але такі комерційні продукти є загальним питанням, яке є вартістю. Тому сьогодні ми вирішили зробити простого робота-мийника для підлоги, який не тільки простий у виготовленні, але і коштує дуже дешевше порівняно з комерційними продуктами, доступними на ринку. Часті читачі можуть згадати наш робот-пилосос Arduino, який ми створили давно, але той був дуже громіздким і потребував великої свинцево-кислотної батареї для пересування. Новий пилосос Arduino ми збираємось будувати тут, буде компактним та практичнішим. Крім того, у цього робота будуть ультразвукові датчики та ІК-датчик наближення. Ультразвуковий датчик дозволить роботу уникати перешкод, щоб він міг вільно рухатися, поки кімната не буде належним чином прибрана, а датчик наближення допоможе йому уникнути падіння зі сходів. Усі ці функції звучать цікаво, правда? Отже, давайте почнемо.
В одній з наших попередніх статей ми створили багато ботів, таких як Самобалансуючий робот, Автоматизований робот для дезінфекції поверхні та Робот, що уникає перешкод. Перевірте, чи це вам здається цікавим.
Матеріали, необхідні для побудови робота для миття підлоги на основі Arduino
Оскільки ми використовували дуже загальні компоненти для побудови апаратної частини робота пилососа, ви зможете знайти їх у вашому місцевому магазині хобі. Ось повний перелік необхідного матеріалу разом із зображенням усіх компонентів.
- Arduino Pro Mini - 1
- HC-SR04 ультразвуковий модуль - 3
- Драйвер двигуна L293D - 1
- Двигуни та монтажні кронштейни 5Volt N20 - 2
- Моторні колеса N20 - 2
- Перемикач - 1
- LM7805 Регулятор напруги - 1
- 7,4 В літій-іонна батарея - 1
- ІЧ-модуль - 1
- Паркетна дошка - 1
- Касторове колесо - 1
- МДФ
- Загальний портативний пилосос
Портативний пилосос
У розділі вимог до компонентів ми говорили про портативний пилосос, зображення нижче показують саме це. Це портативний пилосос від Amazon. Це поставляється з дуже простим механізмом. Внизу він складається з трьох частин (невелика камера для зберігання пилу, середня частина включає двигун, вентилятор і гніздо акумулятора зверху (є кришка або ковпачок для акумулятора). У нього є двигун постійного струму та вентилятор. Цей двигун безпосередньо підключений до 3 В (2 * 1,5-вольтові батареї типу АА) за допомогою простого перемикача. Оскільки ми живимо нашого робота за допомогою акумулятора 7,4 В. Отже, ми видалили всі непотрібні деталі, і лише двигун із двопровідним затискачем. Ви можете бачити це на зображенні нижче.
HC-SR04 Модуль ультразвукового датчика
Для виявлення перешкод ми використовуємо популярний ультразвуковий датчик відстані HC-SR04 або ми можемо назвати його датчиками уникнення перешкод. Робота дуже проста, по-перше, модуль передавача посилає ультразвукову хвилю, яка рухається по повітрю, потрапляє на перешкоду і відскакує назад, і приймач приймає цю хвилю. Обчисливши час за допомогою Arduino, ми можемо визначити відстань. У попередній статті про проект ультразвукового датчика відстані на базі Arduino ми дуже детально обговорили принцип роботи цього датчика. Ви можете перевірити це, якщо хочете дізнатись більше про модуль ультразвукового датчика відстані HC-SR04.
Підлоговий датчик (ІЧ-датчик) для виявлення сходів
У розділі функцій ми говорили про функцію, коли робот може виявляти сходи і може запобігти падінню. Для цього ми використовуємо ІЧ-датчик. Ми створимо інтерфейс між ІЧ-датчиком та Arduino. Робота ІК-датчика наближення дуже проста, у ньому є ІЧ-світлодіод і фотодіод, ІЧ-світлодіод випромінює ІЧ-світло, і якщо перед цим випромінюваним світлом виникає якась перешкода, він буде відбиватися, а відбите світло буде виявлено фотодіодом. Але генерована напруга від відбиття буде дуже низькою. Щоб збільшити це, ми можемо використовувати компаратор операційного підсилювача, ми можемо посилити і отримати вихід. ІК - модульмає три висновки - Vcc, землю та вихід. Як правило, вихідний сигнал знижується, коли перед датчиком виникає перешкода. Отже, ми можемо використовувати це для виявлення підлоги. Якщо на частку секунди ми виявимо високий рівень з датчика, ми можемо зупинити робота, повернути його назад або зробити все, що завгодно, щоб запобігти його падінню зі сходів. У попередній статті ми зробили макетну версію модуля ІЧ-датчика наближення та детально пояснили принцип роботи, ви можете перевірити це, якщо хочете дізнатись більше про цей датчик.
Принципова схема робота для миття підлоги на основі Arduino
У нас є три ультразвукові датчики, які виявляють перешкоди. Отже, нам потрібно з’єднати всі основи ультразвукових датчиків і підключити їх до спільної землі. Крім того, ми підключаємо всі три Vcc датчика і підключаємо їх до загального штифта VCC. Далі ми підключаємо тригер та ехо-висновки до ШІМ-контактів Arduino. Ми також підключаємо VCC ІЧ-модуля до 5 В і заземлюємо до заземлювального штифта Arduino, вихідний штифт ІЧ-модуля датчика надходить до цифрового виводу D2 Arduino. Для драйвера двигуна ми підключаємо два висновки включення до 5 В, а також контакт напруги драйвера до 5 В, оскільки ми використовуємо двигуни на 5 вольт. У попередній статті ми створили Arduino Motor Driver Shield, ви можете перевірити це, щоб дізнатися більше про мікросхему двигуна L293Dта її операцій. Ардуїно, ультразвукові модулі, драйвер двигуна та двигуни працюють на 5 Вольт, вища напруга вб’є його, і ми використовуємо 7,4-вольтовий акумулятор, щоб перетворити його на 5 Вольт, використовується регулятор напруги LM7805. Підключіть пилосос безпосередньо до основної схеми.
Створення схеми для робота для миття підлоги на основі Arduino
Щоб отримати ідеї про свого робота, я шукав роботів-пилососів в Інтернеті та отримав декілька зображень роботів круглої форми. Отже, я вирішив побудувати робота круглої форми. Для побудови погоні та тіла робота у мене є безліч варіантів, таких як пінопласт, МДФ, картон тощо. Але я вибираю МДФ, оскільки він твердий і має деякі водостійкі властивості. Якщо ви робите це, ви можете вирішити, який матеріал ви оберете для свого бота.
Для побудови робота я взяв аркуш МДФ, потім намалював два кола радіусом 8 см, а всередині цього кола я також намалював інше коло радіусом 4 смдля установки пилососа. Потім я вирізала кола. Крім того, я вирізав і видалив відповідні шматки для колії коліс (зверніться до зображень для кращого розуміння). Нарешті я зробив три маленькі отвори для колеса. Наступним кроком є встановлення двигунів на основі за допомогою його кронштейнів, також встановіть і закріпіть коліщатко в своєму положенні. Після цього розмістіть ультразвукові датчики ліворуч, праворуч і посередині робота. Також підключіть ІЧ-модуль до нижньої сторони робота. Не забудьте додати перемикач зовні. Ось і все про побудову робота, якщо ви заплуталися в цей момент, ви можете звернутися до наступних зображень.
Для верхньої частини я також намалював на пінопластовому листі коло радіусом 11 см і вирізав його. Для відстані між верхньою і нижньою частиною я вирізав три пластикові трубки довжиною 4 см. Після цього я приклеїв пластикові розпірки на нижню частину, а потім приклеїв верхню. Ви можете покрити бічні частини бота пластиком або подібними матеріалами, якщо хочете.
Ардуїно
Повний код цього проекту наведено в кінці документа. Цей код Arduino подібний до коду ультразвукового датчика відстані на основі Arduino, єдина зміна полягає у виявленні підлоги. У наступних рядках я пояснюю, як працює код. У цьому випадку ми не використовуємо додаткові бібліотеки. Нижче ми описали код покроково. Ми не використовуємо додаткові бібліотеки для декодування даних про відстань від датчика HC-SR04, оскільки це дуже просто. У наступних рядках ми описали, як. По-перше, нам потрібно визначити тригерний штифт та ехо-контакт для всіх трьох ультразвукових датчиків відстані, які підключені до плати Arduino. У цьому проекті ми маємо три штифти Echo та три штифти Trigger. Зверніть увагу, що 1 - лівий датчик, 2 - передній, 3 - правий.
const int trigPin1 = 3; const int echoPin1 = 5; const int trigPin2 = 6; const int echoPin2 = 9; const int trigPin3 = 10; const int echoPin3 = 11; int irpin = 2;
Потім ми визначили змінні для відстані, які всі є змінними типу (int), і для тривалості, ми вирішили використовувати (long). Знову ж таки, у нас по три з кожного. Крім того, я визначив ціле число для збереження статусу руху, про це ми поговоримо далі в цьому розділі.
велика тривалість1; тривала тривалість2; тривала тривалість3; int distanceleft; int distancefront; int дистанційно; int a = 0;
Далі, у розділі налаштування, нам потрібно зробити всі перспективні штифти як вхідні чи вихідні за допомогою функції pinModes () . Для надсилання ультразвукових хвиль від модуля нам потрібно встановити високий рівень тригерного штифта, тобто всі тригерні штифти повинні визначатись як ВИХІД. А щоб отримати ехо, нам потрібно прочитати стан ехо-штифтів, тому всі ехо-шпильки повинні визначатись як ВХІД. Крім того, ми вмикаємо послідовний монітор для усунення несправностей. Щоб прочитати стан ІЧ-модулів, я визначив irpin як вхід.
pinMode (trigPin1, OUTPUT); pinMode (trigPin2, OUTPUT); pinMode (trigPin3, OUTPUT); pinMode (echoPin1, INPUT); pinMode (echoPin2, INPUT); pinMode (echoPin3, INPUT); pinMode (irpin, INPUT);
І ці цифрові штифти визначаються як ВИХІД для входу драйвера двигуна.
pinMode (4, ВИХІД); pinMode (7, ВИХІД); pinMode (8, ВИХІД); pinMode (12, ВИХІД);
У основному циклі ми маємо три секції для трьох датчиків. Усі секції працюють однаково, але кожна для різних датчиків. У цьому розділі ми зчитуємо відстань перешкоди від кожного датчика і зберігаємо його у кожному визначеному цілому числу. Щоб прочитати відстань, спочатку ми повинні переконатися, що штифти спускового гачка чисті, для цього нам потрібно встановити штифт спускового гачка на LOW на 2 мкс. Тепер для генерації ультразвукової хвилі нам потрібно повернути тригерний штифт ВИСОКО на 10 мкс. Це надішле ультразвуковий звук і за допомогою функції pulseIn () ми зможемо зчитати час у дорозі та зберегти це значення у змінну “ тривалість ”. Ця функція має 2 параметри, перший - це ім’я ехо-контакту, а для другого - ви можете написати будь-якийВИСОКИЙ або НИЗКИЙ. HIGH означає, що функція pulseIn () буде чекати, поки штифт піде HIGH, викликаний відскоком звукової хвилі, і він почне рахувати, тоді він буде чекати, поки штифт піде LOW, коли звукова хвиля закінчиться, що зупинить підрахунок. Ця функція дає тривалість імпульсу в мікросекундах. Для обчислення відстані ми помножимо тривалість на 0,034 (швидкість звуку в повітрі 340 м / с) і поділимо її на 2 (це пов'язано із зворотною і зворотною подорожзю звукової хвилі). Нарешті, ми зберігаємо відстань кожного датчика у відповідних цілих числах.
digitalWrite (trigPin1, LOW); delayMicroseconds (2); digitalWrite (trigPin1, HIGH); delayMicroseconds (10); digitalWrite (trigPin1, LOW); duration1 = pulseIn (echoPin1, HIGH); distanceleft = тривалість1 * 0,034 / 2;
Отримавши відстань від кожного датчика, ми можемо керувати двигунами за допомогою оператора if, таким чином ми контролюємо рух робота. Це дуже просто, по-перше, ми дали значення відстані перешкоди, в даному випадку воно становить 15 см (змініть це значення за вашим бажанням). Тоді ми дали умови відповідно до цього значення. Наприклад, коли перешкода постає перед лівим датчиком (це означає, що відстань лівого датчика повинна бути нижче або дорівнює 15 см), а інші дві відстані великі (це означає, що перед цим датчиком немає жодної перешкоди), тоді за допомогою функції цифрового запису ми можемо приводити двигуни вправо. Пізніше я перевірив стан ІЧ-датчика. Якщо робот знаходиться на підлозі, значення ІЧ-штиря буде НИЗКИМ, а якщо ні, то значення будеВИСОКО. Потім я зберігав це значення у змінній int s . Ми збираємося керувати роботом відповідно до цього статусу.
Цей розділ коду використовується для переміщення робота вперед і назад :
if (s == HIGH) { digitalWrite (4, LOW); digitalWrite (7, HIGH); digitalWrite (8, LOW); digitalWrite (12, HIGH); затримка (1000); a = 1; }
Але існує проблема з цим методом, коли двигун рухається назад, повертається підлога і бот рухається вперед, і він повторюватиметься, бот застряг. Щоб подолати це, ми зберігаємо значення (1) в int після того, як зрозуміло, що мінімум відсутній. Ми також перевіряємо цю умову для інших рухів.
Виявивши відсутність підлоги, робот не рухатиметься вперед. Натомість він рухатиметься ліворуч, таким чином ми зможемо уникнути проблеми.
if ((a == 0) && (s == LOW) && (distanceleft <= 15 && distancefront> 15 && distanceright <= 15) - (a == 0) && (s == LOW) && (distanceleft> 15 && distancefront> 15 && distanceright> 15))
У вищевказаному стані. Спочатку робот перевірить стан підлоги та ціле значення. Бот рухатиметься вперед лише за умови виконання всіх умов.
Тепер ми можемо написати команди для водія двигуна. Це буде рухати правий двигун назад, а лівий - вперед, тим самим повертаючи робота вправо.
Цей розділ Кодексу використовується для переміщення робота вправо:
digitalWrite (4, HIGH); digitalWrite (7, LOW); digitalWrite (8, HIGH); digitalWrite (12, LOW);
Якщо бот виявить, що підлога відсутня, значення змінюється на 1, і бот переміщається вліво. Після повернення ліворуч значення 'a' змінюється на 0 з 1.
if ((a == 1) && (s == LOW) - (s == LOW) && (distanceleft <= 15 && distancefront <= 15 && distanceright> 15) - (s == LOW) && (distanceleft <= 15 && distancefront <= 15 && distanceright> 15) - (s == LOW) && (distanceleft <= 15 && distancefront> 15 && distanceright> 15) - (distanceleft <= 15 && distancefront> 15 && distanceright> 15)) { digitalWrite (4, HIGH); digitalWrite (7, LOW); digitalWrite (8, LOW); digitalWrite (12, HIGH); затримка (100); a = 0; }
Цей розділ Кодексу використовується для переміщення робота вліво:
if ((s == LOW) && (distanceleft> 15 && distancefront <= 15 && distanceright <= 15) - (s == LOW) && (distanceleft> 15 && distancefront> 15 && distanceright <= 15) - (s == LOW) && (distanceleft> 15 && distancefront <= 15 && distanceright> 15)) { digitalWrite (4, LOW); digitalWrite (7, HIGH); digitalWrite (8, HIGH); digitalWrite (12, LOW); }
Це все для створення розумного робота пилососа на базі Arduino. Повну роботу над проектом можна знайти у відео, на яке посилається внизу цієї сторінки. Якщо у вас є запитання, коментуйте нижче.