Съдържание:

Кошче за сортиране - Открийте и сортирайте кошчето си: 9 стъпки
Кошче за сортиране - Открийте и сортирайте кошчето си: 9 стъпки

Видео: Кошче за сортиране - Открийте и сортирайте кошчето си: 9 стъпки

Видео: Кошче за сортиране - Открийте и сортирайте кошчето си: 9 стъпки
Видео: RAID SHADOW LEGENDS LIVE FROM START 2024, Ноември
Anonim
Image
Image
Как работи
Как работи

Виждали ли сте някога някой, който не рециклира или го прави по лош начин?

Искали ли сте някога машина, която да се рециклира вместо вас?

Продължавайте да четете нашия проект, няма да съжалявате!

Сортиращият кош е проект с ясна мотивация да помага за рециклирането в света. Както е добре известно, липсата на рециклиране причинява сериозни проблеми на нашата планета, като изчезването на суровини и замърсяването на морето, наред с други.

Поради тази причина нашият екип реши да разработи проект в малък мащаб: контейнер за сортиране, който е в състояние да раздели боклука на различни получатели в зависимост от това дали материалът е метален или неметален. В бъдещите версии този контейнер за сортиране може да бъде екстраполиран в голям мащаб, което позволява разделянето на боклука на всички различни видове материали (дърво, пластмаса, метал, органични …).

Тъй като основната цел е да се прави разлика между метални или неметални, контейнерът за сортиране ще бъде оборудван с индуктивни сензори, но също така и с ултразвукови сензори, за да открие дали има нещо в контейнера. Освен това контейнерът ще се нуждае от линейно движение, за да премести боклука в двете кутии, поради което е избран ia стъпков двигател.

В следващите раздели този проект ще бъде обяснен стъпка по стъпка.

Стъпка 1: Как работи

Как работи
Как работи
Как работи
Как работи

Кошчето за сортиране е проектирано така, че да улесни работата на потребителя: боклукът трябва да се вкарва през отвора, поставен в горната плоча, жълтият бутон трябва да се натисне и процесът започва, завършвайки с боклука в едно на получателите. Но въпросът сега е … как работи този процес вътрешно?

След като процесът започне, зеленият светодиод светва. След това ултразвуковите сензори, прикрепени към горната плоча през опора, започват своята работа, за да определят дали има предмет в кутията или не.

Ако в кутията няма обекти, червеният светодиод се включва, а зеленият се изключва. Напротив, ако има обект, индуктивните сензори ще бъдат активирани, за да се установи дали обектът е метален или неметален. След като този тип материал е определен, червеният и жълтият светодиод ще се включат и кутията ще се движи към една или друга посока в зависимост от вида на материала, задвижван от стъпковия двигател.

Когато кутията стигне до края на удара и обектът е пуснат в правилния получател, кутията ще се върне в първоначалната позиция. И накрая, с кутията в първоначалното положение, жълтият светодиод ще се изключи. Сортиращият апарат ще бъде готов да започне отново със същата процедура. Този процес, описан в последните параграфи, е показан и на снимката на диаграмата на работния процес, приложена в Стъпка 6: Програмиране.

Стъпка 2: Сметка за материали (BOM)

Механични части:

  • Закупени части за долната конструкция

    • Метална структура [Връзка]
    • Сива кутия [Връзка]
  • 3D принтер

    PLA за всички отпечатани части (могат да се използват и други материали, като ABS)

  • Машина за лазерно рязане

    • MDF 3 мм
    • Плексиглас 4 мм
  • Комплект линейни лагери [Връзка]
  • Линеен лагер [Връзка]
  • Вал [Връзка]
  • Поставка за вал (x2) [Връзка]

Електронни части:

  • Мотор

    Линеен стъпков двигател Nema 17 [Връзка]

  • Батерия

    12 v батерия [Връзка]

  • Сензори

    • 2 Ултразвуков сензор HC-SR04 [Връзка]
    • 2 индуктивни сензора LJ30A3-15 [Връзка]
  • Микроконтролер

    1 дъска arduino UNO

  • Допълнителни компоненти

    • DRV8825 драйвер
    • 3 светодиода: червен, зелен и оранжев
    • 1 бутон
    • Някои скачащи проводници, проводници и запояващи плочи
    • Платка
    • USB кабел (Arduino-PC връзка)
    • Кондензатор: 100uF

Стъпка 3: Механичен дизайн

Image
Image
Механичен дизайн
Механичен дизайн
Механичен дизайн
Механичен дизайн

На предишните снимки са показани всички части на монтажа.

За механичния дизайн SolidWorks е използван като CAD програма. Различните части на монтажа са проектирани, като се вземе предвид производственият метод кой от тях ще бъде произведен.

Лазерно изрязани части:

  • MDF 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).

Светодиоди (зелено, жълто, червено):

Тяхната мисия е да комуникират с потребителя:

-Зелен светодиод свети: роботът чака обект.

-Червен светодиод свети: машината работи, не можете да хвърляте никакви предмети.

-Жълт светодиод свети: открит е обект.

12V батерия или 12V източник на захранване + 5V USB захранване:

Необходим е източник на напрежение за захранване на сензорите и стъпковия двигател. За захранване на Arduino е необходим 5V източник на захранване. Това може да стане чрез 12V батерия, но най -добре е да имате отделен 5V източник на захранване за Arduino (например с USB кабел и адаптер за телефон, свързани към източник на захранване или към компютър).

Проблеми, които открихме:

  • Откриване на индуктивен сензор, не постигнахме желаната точност, тъй като понякога метален обект, който е лошо разположен, не се възприема. Това се дължи на 2 ограничения:

    • Областта, покрита от сензорите в квадратната платформа, представлява по -малко от 50% от нея (така че малък обект не може да бъде открит). За да го разрешите, препоръчваме да използвате 3 или 4 индуктивни сензора, за да сте сигурни, че повече от 70% от площта е покрита.
    • Разстоянието на откриване на сензорите е ограничено до 15 мм, така че се оказахме принудени да използваме фина платформа от плексиглас. Това също може да бъде друго ограничение за откриване на обекти със странна форма.
  • Ултразвуково откриване: отново обектите, оформени по сложен начин, създават проблеми, тъй като излъченият от сензорите сигнал се отразява зле и се връща по -късно към сензора, отколкото трябва.
  • Батерия: имаме някои проблеми с контрола на тока, доставен от батерията и за решаването й най -накрая използвахме източник на захранване. Въпреки това, могат да се изпълнят и други решения като използване на диод.

Стъпка 5: Електроника (Връзки)

Електроника (Връзки)
Електроника (Връзки)
Електроника (Връзки)
Електроника (Връзки)

Този раздел показва свързването на различните компоненти, поставени заедно. Той също така показва към кой щифт на Arduino е свързан всеки компонент.

Стъпка 6: Програмиране

Програмиране
Програмиране

Този раздел ще обясни логиката на програмиране зад машината за сортиране на контейнери.

Програмата е разделена на 4 стъпки, които са както следва:

  1. Инициализирайте системата
  2. Проверете наличието на обекти
  3. Проверете типа на обекта
  4. Преместване на кутията

За подробно описание на всяка стъпка вижте по -долу:

Стъпка 1 Инициализирайте системата

LED панел (3) - настроен Калибриращ светодиод (червен) ВИСОК, готов светодиод (зелен) НИСКИ, обект наличен (жълт) НИСКИ

Проверете стъпковия двигател в първоначално положение

  • Изпълнете ултразвуков тест на сензора, за да измерите разстоянието отстрани до стената на кутията

    • Начална позиция == 0 >> Актуализирайте стойностите на Ready LED HIGH и Calibrating LED LOW -> стъпка 2
    • Начална позиция! = 0 >> цифрова стойност на четене на ултразвукови сензори и въз основа на стойностите на сензора:

      • Актуализирайте стойността на движещия се LED двигател HIGH.
      • Пуснете полето за преместване, докато стойността на двата ултразвукови сензора е <прагова стойност.

Актуализираща стойност на първоначалната позиция = 1 >> Актуализираща стойност на LED Готов HIGH и двигателят се движи LOW и калибрира LOW >> стъпка 2

Стъпка 2

Проверете наличието на обекти

Стартирайте откриване на ултразвуков обект

  • Обект присъства == 1 >> Актуализиране на стойността на обект присъства LED HIGH >> Стъпка 3
  • Наличен обект == 0 >> Не правете нищо

Стъпка 3

Проверете типа на обекта

Стартирайте откриване на индуктивен сензор

  • inductiveState = 1 >> Стъпка 4
  • inductiveState = 0 >> Стъпка 4

Стъпка 4

Преместване на кутията

Стартирайте работа на двигателя

  • inductiveState == 1

    Актуализиране на движещия се светодиод HIGH >> Накарайте двигателя да се движи наляво, (актуализирайте първоначалната позиция = 0) забавяне и да се върнете назад надясно >> Стъпка 1

  • inductiveState == 0

    Актуализиране на движещия се светодиод HIGH >> Накарайте двигателя да се движи надясно, (актуализирайте началната позиция = 0), забавете и се върнете наляво >> Стъпка 1

Функции

Както се вижда от програмната логика, програмата работи чрез изпълнение на функции с конкретна цел. Например, първата стъпка е да се инициализира системата, която съдържа функцията "Проверете стъпковия мотор в първоначално положение". След това втората стъпка проверява наличието на обект, който сам по себе си е друга функция (функцията "ултразвуково откриване на обект"). И така нататък.

След стъпка 4 програмата е напълно изпълнена и ще се върне към стъпка 1, преди да стартира отново.

Функциите, използвани в основното тяло, са дефинирани по -долу.

Те са съответно:

  • inductiveTest ()
  • moveBox (inductiveState)
  • ултразвуковObjectDetection ()

// Проверете дали обектът е метален или не

bool inductiveTest () {if (digitalRead (inductiveSwitchRight) == 1 || digitalRead (inductiveSwitchLeft == 0)) {return true; else {return false; }} void moveBox (bool inductiveState) {// Кутията отива наляво при откриване на метал и inductiveState = true if (inductiveState == 0) {stepper.moveTo (стъпки); // произволна позиция до край за тестване stepper.runToPosition (); забавяне (1000); stepper.moveTo (0); stepper.runToPosition (); забавяне (1000); } else if (inductiveState == 1) {stepper.moveTo (-steps); // произволна позиция до край за тестване stepper.runToPosition (); забавяне (1000); stepper.moveTo (0); // произволна позиция до край за тестване stepper.runToPosition (); забавяне (1000); }} булев ултразвуковObjectDetection () {long duration1, distance1, durationTemp, distanceTemp, averageDistance1, averageDistanceTemp, averageDistanceOlympian1; // Определете броя на измерванията, които да се вземат на голямо разстояниеMax = 0; дълги разстоянияMin = 4000; long distanceTotal = 0; for (int i = 0; i distanceMax) {distanceMax = distanceTemp; } if (distanceTemp <distanceMin) {distanceMin = distanceTemp; } distanceTotal+= distanceTemp; } Serial.print ("Sensor1 maxDistance"); Serial.print (distanceMax); Serial.println ("mm"); Serial.print ("Sensor1 minDistance"); Serial.print (distanceMin); Serial.println ("mm"); // Вземете средно разстояние от показанията averageDistance1 = distanceTotal/10; Serial.print ("Sensor1 averageDistance1"); Serial.print (averageDistance1); Serial.println ("mm"); // Премахване на най -високите и най -ниските стойности на измерванията, за да се избегнат грешни показания averageDistanceTemp = distanceTotal - (distanceMax+distanceMin); averageDistanceOlympian1 = averageDistanceTemp/8; Serial.print ("Sensor1 averageDistanceOlympian1"); Serial.print (averageDistanceOlympian1); Serial.println ("mm");

// Нулиране на временните стойности

distanceTotal = 0; distanceMax = 0; distanceMin = 4000; дълга продължителност2, разстояние2, средноразстояние2, средноразстояниеОлимпиец2; // Определя броя на измерванията, които трябва да се направят за (int i = 0; i distanceMax) {distanceMax = distanceTemp; } if (distanceTemp <distanceMin) {distanceMin = distanceTemp; } distanceTotal+= distanceTemp; } Serial.print ("Sensor2 maxDistance"); Serial.print (distanceMax); Serial.println ("mm"); Serial.print ("Sensor2 minDistance"); Serial.print (distanceMin); Serial.println ("mm"); // Вземете средно разстояние от показанията averageDistance2 = distanceTotal/10; Serial.print ("Sensor2 averageDistance2"); Serial.print (averageDistance2); Serial.println ("mm"); // Премахване на най -високите и най -ниските стойности на измерванията, за да се избегнат грешни показания averageDistanceTemp = distanceTotal - (distanceMax+distanceMin); averageDistanceOlympian2 = averageDistanceTemp/8; Serial.print ("Sensor2 averageDistanceOlympian2"); Serial.print (averageDistanceOlympian2); Serial.println ("mm"); // Нулиране на временните стойности distanceTotal = 0; distanceMax = 0; distanceMin = 4000; if (averageDistanceOlympian1 + averageDistanceOlympian2 <emptyBoxDistance) {връщане true; } else {return false; }}

Основно тяло

Основното тяло съдържа същата логика, обяснена в горната част на този раздел, но написана в код. Файлът е достъпен за изтегляне по -долу.

Внимание

Бяха извършени много тестове за намиране на константи: emptyBoxDistance, стъпки и максимална скорост и ускорение в настройката.

Стъпка 7: Възможни подобрения

Възможни подобрения
Възможни подобрения

- Нуждаем се от обратна връзка относно позицията на кутията, за да гарантираме, че тя винаги е в правилните позиции, за да избере обекта в началото. Налични са различни опции за решаване на проблема, но една лесна би могла да бъде да копирате системата, която намираме в 3D принтерите, като използвате превключвател в единия край на пътя на кутията.

-Поради проблемите, които открихме с ултразвуковото откриване, можем да потърсим някои алтернативи за тази функция: KY-008 Лазерен и лазерен детектор (изображение), капацитивни сензори.

Стъпка 8: Ограничаващи фактори

Този проект работи, както е описано в инструкциите, но трябва да се обърне специално внимание по време на следните стъпки:

Калибриране на ултразвукови сензори

Ъгълът, под който се поставят ултразвуковите сензори спрямо обекта, който трябва да открият, е от решаващо значение за правилното функциониране на прототипа. За този проект ъгъл от 12,5 ° спрямо нормата беше избран за ориентация на ултразвуковите сензори, но най -добрият ъгъл трябва да бъде определен експериментално чрез записване на показанията на разстоянието с помощта на различни обекти.

Източник на захранване

Необходимата мощност за драйвера на стъпков двигател DRV8825 е 12V и между 0.2 и 1 Amp. Arduino може също да се захранва от максимум 12V и 0.2 Amp чрез използване на жак вход на Arduino. Трябва обаче да се обърне специално внимание, ако се използва един и същ източник на захранване както за Arduino, така и за драйвера на стъпковия двигател. Ако се захранва от обикновен контакт, като се използва например 12V/2A AC/DC адаптер, трябва да има регулатор на напрежението и диоди във веригата, преди захранването да се подаде към драйвера на arduino и стъпков двигател.

Набиране на кутията

Въпреки че този проект използва стъпков двигател, който при нормални условия се връща в първоначалното си положение с висока точност, добра практика е да има механизъм за самонасочване в случай на грешка. Проектът такъв, какъвто е, няма механизъм за насочване, но е доста лесен за изпълнение. За тази цел трябва да се добави механичен превключвател в началната позиция на кутията, така че когато кутията удари превключвателя, да знае, че е в началната си позиция.

Стъпков драйвер DRV8825 Tuning

Стъпковият драйвер изисква настройка за работа със стъпковия двигател. Това се прави експериментално чрез завъртане на потенциометъра (винт) върху чипа DRV8825, така че подходящото количество ток да бъде подадено към двигателя. И така, леко завъртете винта на потенциометъра, докато двигателят действа по постно.

Стъпка 9: Кредити

Този проект е направен като част от курс по мехатроника през учебната 2018-2019 г. за магистър Bruface в Université Libre de Bruxelles (ULB) - Vrije Universiteit Brussel (VUB).

Авторите са:

Максим Деклер

Лидия Гомес

Маркус Подер

Адриана Пуентес

Нарджисе Сноуси

Специални благодарности на нашия ръководител Albert de Beir, който ни помогна и по време на проекта.

Препоръчано: