Оглавление:
- Шаг 1. Как это работает
- Шаг 2: ведомость материалов (BOM)
- Шаг 3: Механический дизайн
- Шаг 4: Электроника (выбор компонентов)
- Шаг 5: Электроника (подключения)
- Шаг 6: программирование
- Шаг 7: Возможные улучшения
- Шаг 8: ограничивающие факторы
- Шаг 9: кредиты
Видео: Сортировочная корзина - обнаружение и сортировка мусора: 9 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:52
Вы когда-нибудь видели кого-нибудь, кто не перерабатывает или делает это плохо?
Вы когда-нибудь мечтали о машине, которая перерабатывала бы за вас?
Продолжайте читать наш проект, вы не пожалеете!
Сортировочная корзина - это проект с четкой мотивацией помочь переработке отходов во всем мире. Как хорошо известно, отсутствие рециркуляции вызывает серьезные проблемы на нашей планете, такие как исчезновение сырья и загрязнение моря, среди прочего.
По этой причине наша команда решила разработать проект небольшого масштаба: сортировочную корзину, которая может разделять мусор по разным получателям в зависимости от того, металлический или неметаллический материал. В будущих версиях этот сортировочный бункер можно будет экстраполировать в крупном масштабе, что позволит разделить мусор на все виды материалов (дерево, пластик, металл, органические…).
Поскольку основная цель состоит в том, чтобы различать металл и неметалл, бункер сортировщика будет оснащен индуктивными датчиками, а также ультразвуковыми датчиками, чтобы определить, есть ли что-то в бункере. Кроме того, мусорному ведру необходимо линейное движение, чтобы переместить мусор в два ящика, поэтому выбирается, в частности, шаговый двигатель.
В следующих разделах этот проект будет объяснен шаг за шагом.
Шаг 1. Как это работает
Бункер сортировщика был разработан, чтобы упростить работу для пользователя: мусор должен быть введен через отверстие, которое находится в верхней пластине, должна быть нажата желтая кнопка, и процесс начнется, и весь мусор будет помещен в один получателей. Но теперь вопрос в том … как этот процесс работает внутри компании?
Как только процесс начнется, загорится зеленый светодиод. Затем ультразвуковые датчики, прикрепленные к верхней пластине через опору, начинают свою работу, чтобы определить, есть ли объект внутри коробки или нет.
Если внутри коробки нет никаких предметов, загорается красный светодиод, а зеленый гаснет. Напротив, если есть объект, индуктивные датчики будут активированы, чтобы определить, является ли объект металлическим или неметаллическим. Как только тип материала будет определен, загорятся красный и желтый светодиоды, и ящик будет двигаться в одном или противоположном направлении в зависимости от типа материала, приводимого в движение шаговым двигателем.
Когда коробка дойдет до конца штриха и объект будет брошен в правильного получателя, коробка вернется в исходное положение. Наконец, когда ящик находится в исходном положении, желтый светодиод погаснет. Сортировщик будет готов к повторному запуску с той же процедурой. Этот процесс, описанный в последних абзацах, также показан на изображении диаграммы рабочего процесса, приложенной к Шагу 6: Программирование.
Шаг 2: ведомость материалов (BOM)
Механических частей:
-
Куплены запчасти на нижнюю конструкцию
- Металлическая структура [Ссылка]
- Серый ящик [Ссылка]
-
3д принтер
PLA для всех печатных деталей (также могут использоваться другие материалы, например, ABS)
-
Станок для лазерной резки
- МДФ 3мм
- Оргстекло 4мм
- Комплект линейных подшипников [ссылка]
- Линейный подшипник [ссылка]
- Вал [ссылка]
- Держатель вала (x2) [Ссылка]
Электронные части:
-
Мотор
Линейный шаговый двигатель Nema 17 [Ссылка]
-
Аккумулятор
Аккумулятор 12 В [Ссылка]
-
Датчики
- 2 Ультразвуковой датчик HC-SR04 [Ссылка]
- 2 индуктивных датчика LJ30A3-15 [Ссылка]
-
Микроконтроллер
1 плата arduino UNO
-
Дополнительные компоненты
- Драйвер DRV8825
- 3 светодиода: красный, зеленый и оранжевый
- 1 кнопка
- Некоторые прыгающие провода, провода и паяльные пластины
- Макетная плата
- USB-кабель (соединение Arduino-PC)
- Конденсатор: 100 мкФ
Шаг 3: Механический дизайн
На предыдущих картинках показаны все части сборки.
Для механического проектирования в качестве программы CAD использовалась SolidWorks. Различные части сборки были спроектированы с учетом метода изготовления, по которому они будут изготавливаться.
Детали, вырезанные лазером:
-
МДФ 3мм
- Столбы
- Верхняя пластина
- Поддержка ультразвуковых датчиков
- Поддержка индуктивных датчиков
- Ящик для мусора
- Поддержка батареи
- Макетная плата и поддержка Arduino
-
Оргстекло 4мм
Платформа
Детали, напечатанные на 3D-принтере:
- Основание столбов
- Элемент передачи линейного движения от шагового двигателя
- Шаговый двигатель и подшипниковые опоры
- Детали крепления стен для мусорного ящика
Для изготовления каждой из этих частей файлы. STEP должны быть импортированы в правильный формат, в зависимости от машины, которая будет использоваться для этой цели. В данном случае файлы.dxf использовались для станка для лазерной резки, а файлы.gcode - для 3D-принтера (Ultimaker 2).
Механическую сборку этого проекта можно найти в файле. STEP, прилагаемом к этому разделу.
Шаг 4: Электроника (выбор компонентов)
В этом разделе мы сделаем краткое описание используемых электронных компонентов и объяснение выбора компонентов.
Плата Arduino UNO (как микроконтроллер):
Аппаратное и программное обеспечение с открытым исходным кодом. Дешево, легко доступно, легко кодировать. Эта плата совместима со всеми используемыми нами компонентами, и вы легко найдете множество руководств и форумов, очень полезных для изучения и решения проблем.
Двигатель (линейный шаговый двигатель Nema 17):
Тип шагового двигателя, который делит полный оборот на определенное количество шагов. Как следствие, он управляется заданием определенного количества шагов. Он прочен и точен и не требует никаких датчиков для контроля его фактического положения. Задача мотора - контролировать движение ящика, в котором находится брошенный объект, и бросать его в правый контейнер.
Чтобы выбрать модель, вы выполнили некоторые расчеты необходимого максимального крутящего момента с добавлением запаса прочности. Что касается результатов, мы купили модель, которая в значительной степени покрывает рассчитанную стоимость.
Драйвер DRV8825:
Эта плата используется для управления биполярным шаговым двигателем. Он имеет регулируемый регулятор тока, который позволяет вам установить максимальный выходной ток с помощью потенциометра, а также шесть различных шагов разрешения: полный шаг, полушаг, 1/4 шага, 1/8 шага, 1/16 шага. шаг и 1/32 шага (мы, наконец, использовали полный шаг, поскольку мы не обнаружили необходимости переходить к микрошагу, но его все еще можно использовать для улучшения качества движения).
Ультразвуковые датчики:
Это тип акустических датчиков, которые преобразуют электрический сигнал в ультразвуковой и наоборот. Они использовали эхо-отклик акустического сигнала, издаваемого первым, для расчета расстояния до объекта. Мы использовали их, чтобы определить, есть ли объект в коробке. Они просты в использовании и обеспечивают точное измерение.
Хотя выходной сигнал этого датчика представляет собой значение (расстояние), устанавливая порог, чтобы определить, присутствует ли объект или нет, мы преобразуем
Индуктивные датчики:
По закону Фарадея он относится к категории бесконтактных электронных датчиков приближения. Мы разместили их в нижней части движущегося ящика, под платформой из оргстекла, которая поддерживает объект. Их цель - различать металлические и неметаллические предметы, давая цифровой выход (0/1).
Светодиоды (зеленый, желтый, красный):
Их миссия - общаться с пользователем:
-Зеленый светодиод горит: робот ждет объект.
-Красный светодиод горит: машина работает, вы не можете бросить какой-либо предмет.
-Желтый светодиод горит: обнаружен объект.
Аккумулятор 12 В или источник питания 12 В + 5 В Питание от USB:
Источник напряжения необходим для питания датчиков и шагового двигателя. Для питания Arduino необходим источник питания 5 В. Это можно сделать через аккумулятор 12 В, но лучше всего иметь отдельный источник питания 5 В для Arduino (например, с помощью кабеля USB и телефонного адаптера, подключенного к источнику питания или к компьютеру).
Проблемы, которые мы обнаружили:
-
Индуктивное обнаружение датчика, мы не достигли желаемой точности, так как иногда металлический объект, расположенный неправильно, не воспринимается. Это связано с двумя ограничениями:
- Площадь, покрываемая датчиками на квадратной платформе, составляет менее 50% от нее (поэтому небольшой объект не может быть обнаружен). Чтобы решить эту проблему, мы рекомендуем использовать 3 или 4 индуктивных датчика, чтобы обеспечить покрытие более 70% площади.
- Расстояние обнаружения датчиков ограничено 15 мм, поэтому мы оказались вынуждены использовать прекрасную платформу из оргстекла. Это также может быть еще одним ограничением при обнаружении объектов странной формы.
- Ультразвуковое обнаружение: опять же, объекты сложной формы создают проблемы, поскольку сигнал, излучаемый датчиками, плохо отражается и возвращается к датчику позже, чем должен.
- Аккумулятор: у нас есть некоторые проблемы с контролем тока, подаваемого аккумулятором, и для их решения мы наконец использовали источник питания. Однако могут быть реализованы и другие решения, такие как использование диода.
Шаг 5: Электроника (подключения)
В этом разделе показано подключение различных компонентов вместе. Он также показывает, к какому выводу на Arduino подключен каждый компонент.
Шаг 6: программирование
В этом разделе объясняется логика программирования, лежащая в основе машины для сортировки корзин.
Программа разделена на 4 шага, а именно:
- Инициализировать систему
- Проверить наличие предметов
- Проверить тип присутствующего объекта
- Переместить коробку
Подробное описание каждого шага см. Ниже:
Шаг 1: инициализация системы
Светодиодная панель (3) - установите светодиод калибровки (красный) ВЫСОКИЙ, светодиод готовности (зеленый) НИЗКИЙ, объект присутствует (желтый) НИЗКИЙ
Убедитесь, что шаговый двигатель находится в исходном положении.
-
Запустите ультразвуковой тест датчика, чтобы измерить расстояние от стороны до стенки коробки.
- Исходное положение == 0 >> Обновите значения светодиода готовности ВЫСОКИЙ и светодиода калибровки НИЗКИЙ -> шаг 2
-
Исходное положение! = 0 >> цифровое считываемое значение ультразвуковых датчиков и основано на значениях датчика:
- Обновите значение светодиода движения двигателя ВЫСОКОЕ.
- Запустите поле перемещения, пока значение обоих ультразвуковых датчиков не станет <порогового значения.
Обновить значение исходного положения = 1 >> Обновить значение светодиода Ready HIGH и двигателя, перемещающегося в LOW и калибрующего LOW >> шаг 2
Шаг 2
Проверить наличие предметов
Запустить ультразвуковое обнаружение объектов
- Объект присутствует == 1 >> Обновить значение светодиода "Объект присутствует" ВЫСОКИЙ >> Шаг 3
- Объект присутствует == 0 >> Ничего не делать
Шаг 3
Проверить тип присутствующего объекта
Запуск обнаружения индуктивного датчика
- индуктивное состояние = 1 >> Шаг 4
- индуктивное состояние = 0 >> Шаг 4
Шаг 4
Переместить коробку
Запуск двигателя
-
индуктивное состояние == 1
Обновить светодиодный индикатор движения двигателя ВЫСОКИЙ >> Заставить двигатель двигаться влево (обновить исходное положение = 0) задержать и вернуться вправо >> Шаг 1
-
индуктивное состояние == 0
Обновить светодиодный индикатор движения двигателя ВЫСОКИЙ >> Заставить двигатель двигаться вправо (обновить исходное положение = 0), задержать и вернуться влево >> Шаг 1
Функции
Как видно из логики программирования, программа работает, выполняя функции с определенной целью. Например, первым шагом является инициализация системы, которая содержит функцию «Проверить, находится ли шаговый двигатель в исходном положении». На втором этапе проверяется наличие объекта, который сам по себе является другой функцией (функция «Ультразвуковое обнаружение объекта»). И так далее.
После шага 4 программа полностью выполнится и вернется к шагу 1 перед повторным запуском.
Функции, используемые в основной части, определены ниже.
Это соответственно:
- индуктивный тест ()
- moveBox (индуктивное состояние)
- ultrasonicObjectDetection ()
// Проверяем, металлический объект или нет
bool InductionTest () {если (digitalRead (индуктивныйSwitchRight) == 1 || digitalRead (индуктивныйSwitchLeft == 0)) {return true; else {return false; }} void moveBox (bool InductiveState) {// Поле перемещается влево, когда обнаруживается металл, и InductionState = true if (InductiveState == 0) {stepper.moveTo (steps); // случайное конечное положение для тестирования stepper.runToPosition (); задержка (1000); stepper.moveTo (0); stepper.runToPosition (); задержка (1000); } иначе, если (индуктивное состояние == 1) {stepper.moveTo (-steps); // случайное конечное положение для тестирования stepper.runToPosition (); задержка (1000); stepper.moveTo (0); // случайное конечное положение для тестирования stepper.runToPosition (); задержка (1000); }} логическое значение ultrasonicObjectDetection () {long duration1, distance1, durationTemp, distanceTemp, averageDistance1, averageDistanceTemp, averageDistanceOlympian1; // Определяем количество измерений для большого расстоянияMax = 0; long distanceMin = 4000; long distanceTotal = 0; для (int i = 0; i distanceMax) {distanceMax = distanceTemp; } если (distanceTemp <distanceMin) {distanceMin = distanceTemp; } distanceTotal + = distanceTemp; } Serial.print ("Sensor1 maxDistance"); Serial.print (distanceMax); Serial.println («мм»); Serial.print («Sensor1 minDistance»); Serial.print (distanceMin); Serial.println («мм»); // Взять среднее расстояние по показаниям averageDistance1 = distanceTotal / 10; Serial.print ("Sensor1 averageDistance1"); Serial.print (averageDistance1); Serial.println («мм»); // Удаляем самые высокие и самые низкие значения измерений, чтобы избежать ошибочных показаний averageDistanceTemp = distanceTotal - (distanceMax + distanceMin); meanDistanceOlympian1 = averageDistanceTemp / 8; Serial.print ("Sensor1 averageDistanceOlympian1"); Serial.print (averageDistanceOlympian1); Serial.println («мм»);
// Сброс значений температуры
distanceTotal = 0; distanceMax = 0; distanceMin = 4000; long duration2, distance2, averageDistance2, meanDistanceOlympian2; // Определение количества измерений для (int i = 0; i distanceMax) {distanceMax = distanceTemp; } если (distanceTemp <distanceMin) {distanceMin = distanceTemp; } distanceTotal + = distanceTemp; } Serial.print ("Sensor2 maxDistance"); Serial.print (distanceMax); Serial.println («мм»); Serial.print ("Sensor2 minDistance"); Serial.print (distanceMin); Serial.println («мм»); // Взять среднее расстояние по показаниям averageDistance2 = distanceTotal / 10; Serial.print ("Sensor2 averageDistance2"); Serial.print (averageDistance2); Serial.println («мм»); // Удаляем самые высокие и самые низкие значения измерений, чтобы избежать ошибочных показаний averageDistanceTemp = distanceTotal - (distanceMax + distanceMin); meanDistanceOlympian2 = averageDistanceTemp / 8; Serial.print ("Sensor2 averageDistanceOlympian2"); Serial.print (averageDistanceOlympian2); Serial.println («мм»); // Сбрасываем временные значения distanceTotal = 0; distanceMax = 0; distanceMin = 4000; если (averageDistanceOlympian1 + averageDistanceOlympian2 <emptyBoxDistance) {return true; } else {вернуть ложь; }}
Основной корпус
Основная часть содержит ту же логику, которая описана в верхней части этого раздела, но написана в коде. Файл доступен для скачивания ниже.
Предупреждение
Было проведено множество тестов, чтобы найти константы: emptyBoxDistance, steps и Maximumspeed, а также ускорение в настройке.
Шаг 7: Возможные улучшения
- Нам нужна обратная связь о положении коробки, чтобы гарантировать, что она всегда находится в правильном положении для выбора объекта в начале. Доступны разные варианты решения проблемы, но самым простым может быть копирование системы, которую мы находим в 3D-принтерах, с помощью переключателя на одном конце пути коробки.
-Из-за проблем, которые мы обнаружили с ультразвуковым обнаружением, мы можем поискать некоторые альтернативы для этой функции: лазер и лазерный детектор KY-008 (изображение), емкостные датчики.
Шаг 8: ограничивающие факторы
Этот проект работает, как описано в инструкциях, но необходимо соблюдать особую осторожность при выполнении следующих шагов:
Калибровка ультразвуковых датчиков
Угол, под которым ультразвуковые датчики размещаются по отношению к объекту, который они должны обнаруживать, имеет решающее значение для правильного функционирования прототипа. Для этого проекта для ориентации ультразвуковых датчиков был выбран угол 12,5 ° к нормали, но наилучший угол должен быть определен экспериментально путем записи показаний расстояния с использованием различных объектов.
Источник питания
Требуемая мощность для драйвера шагового двигателя DRV8825 составляет 12 В и от 0,2 до 1 А. Arduino также может питаться максимум от 12 В и 0,2 А, используя вход jack на Arduino. Однако следует проявлять особую осторожность при использовании одного и того же источника питания как для Arduino, так и для драйвера шагового двигателя. При питании от обычной розетки с использованием, например, блока питания адаптера переменного / постоянного тока 12 В / 2 А, перед подачей питания на Arduino и драйвер шагового двигателя в цепи должен быть регулятор напряжения и диоды.
Приведение коробки в исходное положение
Хотя в этом проекте используется шаговый двигатель, который в нормальных условиях возвращается в исходное положение с высокой точностью, рекомендуется иметь механизм самонаведения на случай возникновения ошибки. Сам проект не имеет механизма самонаведения, но его довольно просто реализовать. Для этого необходимо добавить механический переключатель в исходное положение коробки, чтобы, когда коробка ударяет по переключателю, она знала, что находится в исходном положении.
Драйвер шагового двигателя DRV8825 Tuning
Драйвер шагового двигателя требует настройки для работы с шаговым двигателем. Это делается экспериментально путем поворота потенциометра (винта) на микросхеме DRV8825, чтобы на двигатель подавалось соответствующее количество тока. Итак, слегка поворачивая винт потенциометра, пока двигатель не начнет работать в режиме обедненной смеси.
Шаг 9: кредиты
Этот проект был выполнен в рамках курса мехатроники в течение 2018-2019 учебного года для магистра Bruface в Université Libre de Bruxelles (ULB) - Vrije Universiteit Brussel (VUB).
Авторы:
Максим Деклер
Лидия Гомес
Маркус Подер
Адриана Пуэнтес
Нарджисс Снусси
Особая благодарность нашему руководителю Альберту де Бейру, который также помогал нам на протяжении всего проекта.
Рекомендуемые:
Автоматическая корзина для мусора: 7 шагов
Автоматическая корзина для мусора: это мусорная корзина с автоматическим открытием с обнаружением движения. Он имеет подключение к Wi-Fi и отправляет текстовое сообщение, когда он заполнен. Это сделано для ECE-297DP в Массачусетском университете в Амхерсте. Основная цель этого курса - получить опыт
Умная корзина для мусора Arduino: 5 шагов
Arduino Smart Trashcan: эта корзина для мусора вдохновлена DIY Smart Dustbin With Arduino от AhsanQureshi Я последовал его шагу, но главное отличие в том, что я добавил кнопку в корзину. Это интеллектуальная корзина для мусора Arduino. Когда вы руки с мусором приближаетесь к
Умная корзина для мусора своими руками с Arduino: 6 шагов (с изображениями)
Сделай сам умный мусорный контейнер с Arduino: здесь мы создадим умный мусорный ящик, используя Arduino и ультразвуковой датчик. Надеюсь, вам понравится изучать этот проект
Интеллектуальная корзина для мусора IDC2018 IOT: 8 шагов
Интеллектуальная корзина для мусора IDC2018 IOT: Надлежащее управление отходами стало важной проблемой для нашей планеты. В общественных и природных пространствах многие не обращают внимания на отходы, которые они оставляют после себя. Когда нет сборщика мусора, легче оставить мусор на месте, чем принести
UCL-IIoT-Автоматическая корзина для мусора: 6 шагов
UCL-IIoT-Automatic Trashcan: Я учусь на 3-м семестре факультета технологий автоматизации в UCL. В этом руководстве я стремлюсь перенести свой предыдущий проект на индустрию 4.0. Https://www.instructables.com/id/UCL-Automatic-Tra… Arduino был заменен на nodemcu - esp8266, чтобы