Как перемещать посуду по кухонной полке с помощью робота?

Если вы ищете способ значительно повысить очарование и функциональность своей кухни, постарайтесь свести к минимуму человеческие усилия. Человеческие усилия можно свести к минимуму, если создать домашнего робота, который будет присутствовать на кухне и будет переносить грязную посуду к раковине и останавливаться там. Когда человек выгружает посуду из робота, он вернется и принесет еще. Иногда на больших кухнях раковина для мытья посуды находится не так близко к шкафам, поэтому робот будет переносить посуду с одного места полки по направлению к другому. Дорожку для робота сделаем на полке черной лентой. Робот будет использовать два инфракрасных датчика приближения для определения пути, и на основе входных данных, полученных от датчиков, Arduino будет направлять двигатели в движение с помощью драйвера двигателя.



Домашний робот

Как подключить всю необходимую периферию при создании домашнего робота?

Теперь нам нужно собрать необходимые компоненты и приступить к созданию робота.



Шаг 1. Используемые компоненты

  • Arduino uno
  • ИК-датчик (x5)
  • Двигатели постоянного тока
  • Автомобильные погони за колесами
  • Черная лента
  • Перемычки
  • Батарея постоянного тока
  • Клей-пистолет
  • Набор отверток

Шаг 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 на черных поверхностях. В этом роботе мы будем использовать пять датчиков. В коде четыре условия для пяти датчиков.

  1. Вперед на линии: Когда средний датчик находится на черной поверхности, а остальные датчики - на белой поверхности, выполняется условие движения вперед, и робот будет двигаться прямо вперед. Если мы начнем с Датчик1 и продолжайте до Датчик5, значение, которое каждый из датчиков будет давать соответственно, равно (1 1 0 1 1) .
  2. Резкий поворот направо: Когда Датчик 1 и Датчик 2 находятся на белой поверхности, а остальные датчики - на черной поверхности, выполняется условие резкого поворота направо, и робот резко поворачивает направо. Если мы начнем с Датчик1 и продолжайте до Датчик5, значение, которое каждый из датчиков будет давать соответственно, равно (1 1 0 0 0).
  3. Резкий левый поворот: Когда Датчик 4 и Датчик 5 находятся на белой поверхности, а остальные датчики - на черной поверхности, выполняется условие резкого левого поворота, и робот резко поворачивает влево. Если мы начнем с Датчик1 и продолжайте до Датчик5, значение, которое каждый из датчиков будет давать соответственно, равно (0 0 0 1 1) .
  4. Стоп: Когда все пять датчиков окажутся на черной поверхности, робот остановится и моторы начнут вращаться. ВЫКЛ. Эта точка с пятью черными поверхностями будет рядом с раковиной, чтобы посудомоечная машина могла выгружать тарелки из робота для мытья.

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

След робота

Шаг 4: Начало работы с Arduino

Если вы раньше не знакомы с Arduino IDE, не волнуйтесь, потому что ниже вы можете увидеть четкие шаги записи кода на плату микроконтроллера с использованием Arduino IDE. Вы можете скачать последнюю версию Arduino IDE из Вот и выполните следующие действия:

  1. Когда плата Arduino подключена к вашему ПК, откройте «Панель управления» и нажмите «Оборудование и звук». Затем щелкните «Устройства и принтеры». Найдите имя порта, к которому подключена ваша плата Arduino. В моем случае это «COM14», но на вашем ПК он может быть другим.

    Поиск порта

  2. Теперь откройте IDE Arduino. В Tools установите для платы Arduino значение Arduino / Genuino UNO.

    Доска настроек

  3. В том же меню инструментов установите номер порта, который вы видели на панели управления.

    Настройка порта

  4. Загрузите прилагаемый ниже код и скопируйте его в свою среду IDE. Чтобы загрузить код, нажмите кнопку загрузки.

Вы можете скачать код из Вот

Шаг 5: понимание кода

Код очень простой. Это кратко объясняется ниже:

  1. В начале кода инициализируются контакты датчика, и вместе с этим инициализируются контакты для драйвера двигателя 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
  2. установка void () это функция, которая используется для установки контактов как 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); // Установка скорости передачи данных}
  3. пустой цикл () это функция, которая запускается снова и снова в цикле. В этом цикле мы даем инструкции 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); // Мотор 2 для контакта 1 установлен низкий уровень 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 установлен на низкий уровень}}

Приложения

  1. Промышленное применение : Эти роботы могут использоваться в качестве автоматизированных носителей оборудования в отраслях, заменяющих традиционные конвейерные ленты.
  2. Внутренние приложения : Их также можно использовать в домашних условиях, например, для мытья полов, работы на кухне и т. Д.
  3. Приложения для навигации : Эти роботы могут использоваться в общественных местах, таких как торговые центры, фуд-корты, музеи и т. Д., Чтобы указывать путь.