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

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

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

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

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

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

  1. Вперед по линии: когда средний датчик находится на черной поверхности, а остальные датчики — на белой поверхности, выполняется условие движения вперед, и робот будет двигаться прямо вперед. Если мы начнем с Sensor1 и продолжим до Sensor5, значение, которое каждый из датчиков будет давать соответственно, будет (1 1 0 1 1).
  2. Крутой поворот направо: когда датчик 1 и датчик 2 находятся на белой поверхности, а остальные датчики находятся на черной поверхности, выполняется условие резкого поворота направо, и робот резко поворачивает направо. Если мы начнем с Sensor1 и продолжим до Sensor5, значение, которое каждый из датчиков будет давать соответственно, будет (1 1 0 0 0).
  3. Резкий левый поворот: когда датчик 4 и датчик 5 находятся на белой поверхности, а остальные датчики — на черной поверхности, выполняется условие резкого левого поворота, и робот резко поворачивает влево. Если мы начнем с Sensor1 и продолжим до Sensor5, значение, которое каждый из датчиков будет давать соответственно, будет (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 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); // Установка скорости передачи данных}
  3. 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 установлен на низкий уровень}}

Приложения

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

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован.