Как перемещать посуду по кухонной полке с помощью робота?
Если вы ищете способ резко повысить очарование и функциональность вашей кухни, подумайте о том, чтобы минимизировать человеческие усилия. Человеческие усилия можно свести к минимуму, если создать домашнего робота, который будет присутствовать на кухне и будет переносить грязную посуду к раковине и останавливаться там. Когда человек выгружает посуду из робота, он вернется и принесет еще. Иногда на больших кухнях раковина для мытья посуды находится не так близко к шкафам, поэтому робот будет переносить посуду с одного места полки по направлению к другому. Дорожку для робота сделаем на полке черной лентой. Робот будет использовать два инфракрасных датчика приближения для определения пути, и на основе входных данных, полученных от датчиков, Arduino будет направлять двигатели в движение с помощью драйвера двигателя.
Домашний робот
Программы для Windows, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)
Как подключить всю необходимую периферию при создании домашнего робота?
Теперь нам нужно собрать необходимые компоненты и приступить к созданию робота.
Шаг 1. Используемые компоненты
Шаг 2: Изучение компонентов
Поскольку мы уже составили список компонентов, давайте сделаем шаг вперед и кратко рассмотрим работу каждого компонента.
Arduino UNO – это плата микроконтроллера, которая состоит из микрочипа ATMega 328P и разработана Arduino.cc. Эта плата имеет набор цифровых и аналоговых выводов данных, которые могут быть подключены к другим платам расширения или схемам. Эта плата имеет 14 цифровых контактов, 6 аналоговых контактов и программируется с помощью Arduino IDE (интегрированной среды разработки) через USB-кабель типа B. Для включения требуется 5 В и код C.
Arduino UNO
Драйвер двигателя L298N используется для управления двигателями постоянного тока. L298N – это драйвер двигателя с двойным Н-мостом, который позволяет управлять скоростью и направлением двух двигателей постоянного тока одновременно. Модуль может управлять двигателями постоянного тока с напряжением от 5 до 35 В с пиковым током до 2 А. Это зависит от напряжения, которое используется на клеммах VCC двигателя. В нашем проекте вывод 5V будет использоваться в качестве входа, поскольку нам нужно подключить его к источнику питания 5V для правильной работы IC. Принципиальная схема привода двигателя L298N с подключенными двигателями постоянного тока показана ниже для понимания механизма привода двигателя L298N. Для демонстрации ввод осуществляется от логического состояния вместо ИК-датчиков.
Схема сделана на Proteus 8 Professional
Шаг 3: понимание блок-схемы и принципа работы
Сначала мы рассмотрим блок-схему, разберемся с принципом работы, а затем перейдем к сборке аппаратных компонентов.
Блок-схема
Датчики, которые мы будем использовать, являются цифровыми, и они могут давать выходной сигнал либо 0, либо 1. Эти датчики, которые мы приобрели, дают 1 на белых поверхностях и 0 на черных поверхностях. Датчики, которые мы приобретаем, выдают случайные значения, иногда они дают 0 на белых поверхностях и 1 на черных поверхностях. В этом роботе мы будем использовать пять датчиков. В коде четыре условия для пяти датчиков.
- Вперед по линии: когда средний датчик находится на черной поверхности, а остальные датчики – на белой поверхности, выполняется условие движения вперед, и робот будет двигаться прямо вперед. Если мы начнем с Sensor1 и продолжим до Sensor5, значение, которое каждый из датчиков будет давать соответственно, будет (1 1 0 1 1).
- Крутой поворот направо: когда датчик 1 и датчик 2 находятся на белой поверхности, а остальные датчики находятся на черной поверхности, выполняется условие резкого поворота направо, и робот резко поворачивает направо. Если мы начнем с Sensor1 и продолжим до Sensor5, значение, которое каждый из датчиков будет давать соответственно, будет (1 1 0 0 0).
- Резкий левый поворот: когда датчик 4 и датчик 5 находятся на белой поверхности, а остальные датчики – на черной поверхности, выполняется условие резкого левого поворота, и робот резко поворачивает влево. Если мы начнем с Sensor1 и продолжим до Sensor5, значение, которое каждый из датчиков будет давать соответственно, будет (0 0 0 1 1).
- Стоп: когда все пять датчиков окажутся на черной поверхности, робот остановится и моторы выключатся. Эта точка с пятью черными поверхностями будет рядом с раковиной, чтобы посудомоечная машина могла выгружать тарелки из робота для мытья.
Мы сделаем дорожку на кухонной полке с помощью черной ленты, и эта дорожка закончится возле раковины, поэтому робот остановится возле раковины, посудомоечная машина выгрузит тарелки, а затем робот двинется к дорожке и будет искать посуду. опять таки.
Трек робота
Шаг 4: Начало работы с Arduino
Если вы раньше не знакомы с Arduino IDE, не беспокойтесь, потому что ниже вы можете увидеть четкие шаги записи кода на плату микроконтроллера с использованием Arduino IDE. Вы можете скачать последнюю версию Arduino IDE из здесь и выполните следующие действия:
- Когда плата Arduino подключена к вашему ПК, откройте «Панель управления» и нажмите «Оборудование и звук». Затем щелкните «Устройства и принтеры». Найдите имя порта, к которому подключена ваша плата Arduino. В моем случае это «COM14», но на вашем компьютере он может быть другим.Поиск порта
- Теперь откройте IDE Arduino. В Tools установите для платы Arduino значение Arduino / Genuino UNO.Настольная доска
- В том же меню инструментов установите номер порта, который вы видели на панели управления.Настройка порта
- Загрузите прилагаемый ниже код и скопируйте его в свою среду IDE. Чтобы загрузить код, нажмите кнопку загрузки.
Вы можете скачать код из Здесь
Шаг 5: понимание кода
Код очень простой. Это кратко объясняется ниже:
- В начале кода инициализируются контакты датчика, и вместе с этим инициализируются контакты для драйвера двигателя L298N. Int enable1pin = 10; // Инициализация вывода ШИМ для аналогового входа для двигателя 1 int motor1pin1 = 2; // Инициализация положительного вывода для двигателя 1 int motor1pin2 = 3; // Инициализация отрицательного вывода для двигателя 1 int enable2pin = 11; // Инициализация вывода ШИМ для аналогового входа для двигателя 2 int motor2pin1 = 4; // Инициализация положительного вывода для двигателя 2 int motor2pin2 = 5; // Инициализация отрицательного вывода для двигателя 2 int S1 = 12; // Инициализация вывода 12 для датчика 1 int S2 = 9; // Инициализация вывода 9 для датчика 2 int S3 = 8; // Инициализация вывода 8 для датчика 3 int S4 = 7; // Инициализация вывода 7 для датчика 4 int S5 = 6; // Инициализация контакта 6 для датчика 5
- void setup () – это функция, которая используется для установки контактов как INPUT или OUTPUT. Он также устанавливает скорость передачи данных Arduino. Скорость передачи – это скорость, с которой плата микроконтроллера обменивается данными с другими подключенными компонентами. {pinMode (enable1pin, ВЫХОД); // Включение ШИМ для двигателя 1 pinMode (enable2pin, OUTPUT); // Включение ШИМ для двигателя 2 pinMode (motor1pin1, OUTPUT); // Устанавливаем motor1 pin1 как выходной pinMode (motor1pin2, OUTPUT); // Установка motor1 pin2 в качестве вывода pinMode (motor2pin1, OUTPUT); // Установка мотора 2 pin1 в качестве выхода pinMode (motor2pin2, OUTPUT); // Установка мотора 2 pin2 в качестве выхода pinMode (S1, INPUT); // Установка датчика 1 в качестве входа pinMode (S2, INPUT); // Установка датчика 2 в качестве входа pinMode (S3, INPUT); // Установка датчика 3 в качестве входа pinMode (S4, INPUT); // Установка датчика 4 как входа pinMode (S5, INPUT); // Установка датчика 5 в качестве входа Serial.begin (9600); // Установка скорости передачи данных}
- void loop () – это функция, которая запускается снова и снова в цикле. В этом цикле мы даем инструкции Arduino UNO, какие операции выполнять. Полная скорость двигателей равна 255, и оба двигателя имеют разную скорость. Итак, если мы хотим переместить робота вперед, повернуть направо и т. Д., Нам нужно отрегулировать скорость двигателей. Мы использовали аналоговые выводы в коде, потому что хотим изменять скорость двух двигателей в разных условиях. Вы можете самостоятельно регулировать скорость своих двигателей .void loop () {if (! (DigitalRead (S1)) &&! (DigitalRead (S2)) && (digitalRead (S3)) &&! (DigitalRead (S4)) && ! (digitalRead (S5))) // Вперед по строке {analogWrite (enable1pin, 61); // Скорость двигателя 1 analogWrite (enable2pin, 63); // Скорость двигателя 2 digitalWrite (motor1pin1, HIGH); // Пин 1 двигателя 1 установлен на высокий уровень digitalWrite (motor1pin2, LOW); // Мотор 1 контакт 2 установлен в низкий уровень digitalWrite (motor2pin1, HIGH); // Пин 1 двигателя 2 установлен на высокий уровень digitalWrite (motor2pin2, LOW); // Контакт 2 двигателя 2 установлен на низкий} if (! (DigitalRead (S1)) &&! (DigitalRead (S2)) && (digitalRead (S3)) && (digitalRead (S4)) && (digitalRead (S5))) / / Резкий поворот направо {analogWrite (enable1pin, 60); // Скорость двигателя 1 analogWrite (enable2pin, 80); // Скорость двигателя 2 digitalWrite (motor1pin1, HIGH); // Пин 1 двигателя 1 установлен на высокий уровень digitalWrite (motor1pin2, LOW); // Мотор 1 контакт 2 установлен в низкий уровень digitalWrite (motor2pin1, LOW); // Пин 1 двигателя 2 установлен на низкий уровень digitalWrite (motor2pin2, LOW); // Контакт 2 двигателя 2 установлен на низкий} if ((digitalRead (S1)) && (digitalRead (S2)) && (digitalRead (S3)) &&! (DigitalRead (S4)) &&! (DigitalRead (S5))) / / Резкий поворот влево {analogWrite (enable1pin, 80); // Скорость двигателя 1 analogWrite (enable2pin, 65); // Скорость двигателя 2 digitalWrite (motor1pin1, LOW); // Пин 1 двигателя 1 установлен на низкий уровень digitalWrite (motor1pin2, LOW); // Мотор 1 контакт 2 установлен в низкий уровень digitalWrite (motor2pin1, HIGH); // Пин 1 двигателя 2 установлен на высокий уровень digitalWrite (motor2pin2, LOW); // Мотор 2, контакт 2 установлен на низкий} if ((digitalRead (S1)) && (digitalRead (S2)) && (digitalRead (S3)) && (digitalRead (S4)) && (digitalRead (S5))) // останов {analogWrite (enable1pin, 0); // Скорость двигателя 1 analogWrite (enable2pin, 0); // Скорость двигателя 2 digitalWrite (motor1pin1, LOW); // Пин 1 двигателя 1 установлен на низкий уровень digitalWrite (motor1pin2, LOW); // Мотор 1 контакт 2 установлен в низкий уровень digitalWrite (motor2pin1, LOW); // Мотор 2 для контакта 1 установлен низкий уровень digitalWrite (motor2pin2, LOW); // Пин 2 двигателя 2 установлен на низкий уровень}}
Приложения
- Промышленное применение: эти роботы могут использоваться в качестве автоматизированных носителей оборудования в отраслях, заменяющих традиционные конвейерные ленты.
- Бытовые применения: их также можно использовать в домашних условиях, например, для мытья полов, работы на кухне и т. Д.
- Приложения для навигации: эти роботы могут использоваться в общественных местах, таких как торговые центры, фуд-корты, музеи и т. Д., Для обеспечения навигации по маршруту.
Программы для Windows, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)