- Материалы, необходимые для создания робота для мытья полов на базе Arduino
- Портативный пылесос
- Модуль ультразвукового датчика HC-SR04
- Датчик пола (ИК-датчик) для обнаружения лестницы
- Принципиальная схема робота-уборщика пола на базе Arduino
- Создание схемы для робота-уборщика пола на базе Arduino
- Ардуино
В современных условиях мы все так заняты своей работой, что у нас нет времени на то, чтобы как следует убирать свой дом. Решение проблемы очень простое, вам просто нужно купить бытового робота-пылесоса, такого как irobot roomba, который уберет ваш дом одним нажатием кнопки. Но у таких коммерческих продуктов общая проблема - это стоимость. Поэтому сегодня мы решили создать простого робота-уборщика пола, который не только прост в изготовлении, но и стоит намного дешевле по сравнению с коммерческими продуктами, доступными на рынке. Постоянные читатели могут вспомнить нашего робота-пылесоса Arduino, который мы построили много лет назад, но он был очень громоздким и для передвижения требовался большой свинцово-кислотный аккумулятор. Новый пылесос Arduino мы собираемся построить здесь будет компактнее и практичнее. Кроме того, у этого робота будут ультразвуковые датчики и инфракрасный датчик приближения. Ультразвуковой датчик позволит роботу избегать препятствий, чтобы он мог свободно перемещаться, пока комната не будет должным образом очищена, а датчик приближения поможет ему избежать падения с лестницы. Все это звучит интересно, правда? Итак, приступим.
В одной из наших предыдущих статей мы создали множество ботов, таких как самобалансирующийся робот, робот для автоматизированной дезинфекции поверхности и робот для обхода препятствий. Проверьте их, если это звучит для вас интересно.
Материалы, необходимые для создания робота для мытья полов на базе Arduino
Поскольку мы использовали очень общие компоненты для создания аппаратной части робота-пылесоса, вы сможете найти все они в своем местном магазине для хобби. Вот полный список необходимых материалов вместе с изображениями всех компонентов.
- Ардуино Про Мини - 1
- Ультразвуковой модуль HC-SR04 - 3
- L293D Драйвер двигателя - 1
- Двигатели 5В N20 и монтажные кронштейны - 2
- Моторные колеса N20 - 2
- Переключатель - 1
- Регулятор напряжения LM7805 - 1
- Литий-ионный аккумулятор 7,4 В - 1
- ИК-модуль - 1
- Перфорированный - 1
- Колесо с роликом - 1
- МДФ
- Универсальный портативный пылесос
Портативный пылесос
В разделе требований к компонентам мы говорили о портативном пылесосе, изображения ниже показывают именно это. Это портативный пылесос от Amazon. Это происходит с очень простым механизмом. Он состоит из трех частей внизу (небольшая камера для хранения пыли, средняя часть включает двигатель, вентилятор и гнездо для аккумулятора сверху (есть крышка или крышка для аккумулятора). Он имеет двигатель постоянного тока и вентилятор. Этот двигатель напрямую подключается к 3 В (2 батарейки АА по 1,5 В) через простой переключатель. Поскольку мы питаем нашего робота от батареи 7,4 В, мы отключим соединение от внутренней батареи и запитаем его от 5 В. Блок питания.Итак, мы удалили все ненужные детали и только мотор с двухпроводными перьями, это вы можете увидеть на изображении ниже.
Модуль ультразвукового датчика HC-SR04
Для обнаружения препятствий мы используем популярный ультразвуковой датчик расстояния HC-SR04 или мы можем назвать его датчиками предотвращения препятствий. Работа очень проста: во-первых, модуль передатчика посылает ультразвуковую волну, которая проходит по воздуху, ударяется о препятствие и отражается обратно, а приемник принимает эту волну. Посчитав время с помощью Arduino, мы можем определить расстояние. В предыдущей статье о проекте ультразвукового датчика расстояния на базе Arduino мы очень подробно обсудили принцип работы этого датчика. Вы можете проверить это, если хотите узнать больше о модуле ультразвукового датчика расстояния HC-SR04.
Датчик пола (ИК-датчик) для обнаружения лестницы
В разделе функций мы говорили о функции, с помощью которой робот может обнаруживать лестницы и предотвращать их падение. Для этого мы используем ИК-датчик. Мы сделаем интерфейс между ИК-датчиком и Arduino. Работа ИК-датчика приближения очень проста, в нем есть ИК-светодиод и фотодиод, ИК-светодиод излучает ИК-свет, и если перед этим излучаемым светом появится какое-либо препятствие, оно будет отражено, и отраженный свет будет обнаружен. фотодиодом. Но напряжение, генерируемое отражением, будет очень низким. Чтобы увеличить это, мы можем использовать компаратор операционного усилителя, мы можем усилить и получить выходной сигнал. ИК - модульимеет три контакта - Vcc, землю и выход. Обычно выходной сигнал становится низким, когда перед датчиком появляется препятствие. Итак, мы можем использовать это, чтобы обнаружить пол. Если на долю секунды мы обнаруживаем кайф от датчика, мы можем остановить робота, повернуть его назад или сделать все, что мы хотим, чтобы он не упал с лестницы. В предыдущей статье мы сделали макетную версию модуля ИК-датчика приближения и подробно объяснили принцип работы, вы можете проверить это, если хотите узнать больше об этом датчике.
Принципиальная схема робота-уборщика пола на базе Arduino
У нас есть три ультразвуковых датчика, которые обнаруживают препятствия. Итак, нам нужно соединить все земли ультразвуковых датчиков и соединить их с общей землей. Кроме того, мы подключаем все три Vcc датчика и подключаем их к общему выводу VCC. Затем мы подключаем контакты триггера и эха к контактам PWM Arduino. Мы также подключаем VCC ИК-модуля к 5 В и заземление к контакту заземления Arduino, выходной контакт модуля ИК-датчика идет к цифровому контакту D2 Arduino. Для драйвера двигателя мы подключаем два контакта включения к 5 В, а также вывод напряжения драйвера к 5 В, потому что мы используем двигатели на 5 В. В предыдущей статье мы сделали Arduino Motor Driver Shield, вы можете проверить это, чтобы узнать больше о L293D Motor Driver IC.и его операции. Arduino, ультразвуковые модули, драйвер двигателя и двигатели работают от 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 distanceright; int a = 0;
Затем в разделе настройки нам нужно сделать все выводы перспективы как входные или выходные, используя функцию pinModes () . Чтобы отправить ультразвуковые волны от модуля, нам нужно включить триггерный контакт в высокий уровень, т.е. все триггерные контакты должны быть определены как ВЫХОД. И чтобы получить эхо, нам нужно прочитать состояние выводов эха, поэтому все выводы должны быть определены как INPUT. Кроме того, мы включаем серийный монитор для устранения неполадок. Чтобы прочитать статус ИК-модулей, я определил ирпень как вход.
pinMode (trigPin1, ВЫХОД); pinMode (trigPin2, ВЫХОД); pinMode (trigPin3, ВЫХОД); pinMode (echoPin1, ВХОД); pinMode (echoPin2, ВХОД); pinMode (echoPin3, ВХОД); pinMode (Ирпень, ВХОД);
И эти цифровые контакты определены как ВЫХОД для входа драйвера двигателя.
pinMode (4, ВЫХОД); pinMode (7, ВЫХОД); pinMode (8, ВЫХОД); pinMode (12, ВЫХОД);
В основном цикле у нас есть три секции для трех датчиков. Все разделы работают одинаково, но для разных датчиков. В этом разделе мы считываем расстояние до препятствия от каждого датчика и сохраняем его в каждом заданном целом числе. Чтобы считать расстояние, во-первых, мы должны убедиться, что триггерные контакты свободны, для этого нам нужно установить триггерный контакт в положение LOW на 2 мкс. Теперь, чтобы генерировать ультразвуковую волну, нам нужно повернуть триггер в ВЫСОКОЕ положение на 10 мкс. Это отправит ультразвуковой звук, и с помощью функции pulseIn () мы можем прочитать время прохождения и сохранить это значение в переменной « duration ». Эта функция имеет 2 параметра, первый - это имя вывода эха, а для второго вы можете написать либоВЫСОКИЙ или НИЗКИЙ. ВЫСОКИЙ означает, что функция pulseIn () будет ждать, пока вывод перейдет в ВЫСОКИЙ уровень, вызванный отраженной звуковой волной, и начнет отсчет, а затем будет ждать, пока вывод перейдет в НИЗКИЙ уровень, когда звуковая волна закончится, что остановит счет. Эта функция дает длину импульса в микросекундах. Для вычисления расстояния мы умножим продолжительность на 0,034 (скорость звука в воздухе составляет 340 м / с) и разделим на 2 (это связано с движением звуковой волны вперед и назад). Наконец, мы сохраняем расстояние до каждого датчика в соответствующих целых числах.
digitalWrite (trigPin1, LOW); delayMicroseconds (2); digitalWrite (trigPin1, HIGH); delayMicroseconds (10); digitalWrite (trigPin1, LOW); duration1 = pulseIn (echoPin1, HIGH); distanceleft = duration1 * 0,034 / 2;
Получив расстояние от каждого датчика, мы можем управлять двигателями с помощью оператора if, таким образом, мы контролируем движение робота. Это очень просто, во-первых, мы дали значение расстояния до препятствия, в данном случае это 15 см (измените это значение по своему желанию). Затем мы дали условия в соответствии с этим значением. Например, когда перед левым датчиком появляется препятствие (это означает, что расстояние от левого датчика должно быть меньше или равно 15 см), а два других расстояния большие (это означает, что перед датчиком нет препятствия), затем с помощью функции цифровой записи мы можем повернуть двигатели вправо. Позже я проверил состояние ИК-датчика. Если робот находится на полу, значение пина IR будет НИЗКОЕ, а если нет, то значение будетВЫСОКИЙ. Затем я сохранил это значение в переменной int s . Мы собираемся управлять роботом в соответствии с этим статусом.
Этот раздел кода используется для перемещения робота вперед и назад :
если (s == HIGH) { digitalWrite (4, LOW); digitalWrite (7, ВЫСОКИЙ); digitalWrite (8, LOW); digitalWrite (12, ВЫСОКИЙ); задержка (1000); а = 1; }
Но у этого метода есть проблема, когда мотор движется назад, пол возвращается в исходное положение, и бот будет двигаться вперед, и он будет повторять, заставляя бота застрять. Чтобы преодолеть это, мы сохраняем значение (1) в int после того, как понимаем, что floor отсутствует. Мы также проверяем это условие для других движений.
Обнаружив отсутствие пола, робот не двинется вперед. Вместо этого он переместится влево, таким образом мы сможем избежать проблемы.
if ((a == 0) && (s == LOW) && (distanceleft <= 15 && distancefront> 15 && distanceright <= 15) - (a == 0) && (s == LOW) && (distanceleft> 15 && distancefront> 15 && distanceright> 15))
В указанном выше состоянии. Сначала робот проверит статус этажа и целочисленное значение. Бот будет двигаться вперед только при соблюдении всех условий.
Теперь мы можем написать команды для драйвера двигателя. Это заставит правый двигатель двигаться назад, а левый - вперед, тем самым повернув робота вправо.
Этот раздел кода используется для перемещения робота вправо:
digitalWrite (4, ВЫСОКИЙ); digitalWrite (7, LOW); digitalWrite (8, ВЫСОКИЙ); digitalWrite (12, НИЗКИЙ);
Если бот обнаруживает, что этажа отсутствует, значение меняется на 1, и бот перемещается влево. После поворота налево значение «а» изменится на 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, ВЫСОКИЙ); digitalWrite (7, LOW); digitalWrite (8, LOW); digitalWrite (12, ВЫСОКИЙ); задержка (100); а = 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, ВЫСОКИЙ); digitalWrite (8, ВЫСОКИЙ); digitalWrite (12, НИЗКИЙ); }
Вот и все, что касается создания умного робота-пылесоса на базе Arduino. Полную работу над проектом можно найти в видео по ссылке внизу этой страницы. Если у вас есть какие-либо вопросы, оставьте комментарий ниже.