Мазмұны:

Сұрыптау қорабы - қоқысты анықтап, сұрыптау: 9 қадам
Сұрыптау қорабы - қоқысты анықтап, сұрыптау: 9 қадам

Бейне: Сұрыптау қорабы - қоқысты анықтап, сұрыптау: 9 қадам

Бейне: Сұрыптау қорабы - қоқысты анықтап, сұрыптау: 9 қадам
Бейне: Төтенше жертөледегі деклеттер / өте қажет трансформация / 1 бөлім 2024, Қараша
Anonim
Image
Image
Ол қалай жұмыс істейді
Ол қалай жұмыс істейді

Сіз кәдеге жаратпайтын немесе оны нашар жүргізетін адамды көрдіңіз бе?

Сіз үшін қайта өңделетін машина алғыңыз келді ме?

Біздің жобаны оқуды жалғастырыңыз, өкінбейсіз!

Сортер бин - бұл әлемде кәдеге жаратуға көмектесетін нақты мотивациясы бар жоба. Белгілі болғандай, қайта өңдеудің болмауы біздің планетамызда шикізаттың жоғалуы мен теңіздің ластануы сияқты күрделі мәселелерді тудыруда.

Осы себепті біздің команда шағын көлемде жобаны әзірлеуге шешім қабылдады: қоқысты материалдың металл немесе металл еместігіне қарай әр түрлі қабылдаушыларға бөлуге қабілетті сұрыптау жәшігі. Келешектегі нұсқаларда қоқысты әр түрлі материалға (ағаш, пластмасса, металл, органикалық …) бөлуге мүмкіндік беретін үлкен көлемде экстраполяциялауға болады.

Негізгі мақсат металл немесе металл емес екенін ажырату болғандықтан, контейнерде индуктивті датчиктер орнатылады, сонымен қатар контейнерде бірдеңе бар-жоғын анықтау үшін ультрадыбыстық датчиктер орнатылады. Сонымен қатар, қоқысты екі қорапқа жылжыту үшін қоқыс жәшігіне сызықтық қозғалыс қажет болады, сондықтан қадамдық қозғалтқыш таңдалады.

Келесі бөлімдерде бұл жоба кезең -кезеңімен түсіндіріледі.

1 -қадам: Бұл қалай жұмыс істейді

Ол қалай жұмыс істейді
Ол қалай жұмыс істейді
Ол қалай жұмыс істейді
Ол қалай жұмыс істейді

Сұрыптау жәшігі пайдаланушыға жұмысты салыстырмалы түрде жеңілдету үшін жасалған: қоқысты үстіңгі тақтаға салынған тесік арқылы енгізу керек, сары түймені басу керек және процесс қоқыспен аяқталады. алушылардың. Бірақ қазір мәселе … бұл процесс ішкі жүйеде қалай жұмыс істейді?

Процесс басталғаннан кейін жасыл жарық диоды жанып тұрады. Содан кейін үстіңгі тақтаға тірек арқылы бекітілген ультрадыбыстық датчиктер қораптың ішінде зат бар -жоғын анықтау үшін өз жұмысын бастайды.

Егер қораптың ішінде ешқандай зат болмаса, қызыл жарық диоды жанады, светодиод сөнеді. Керісінше, егер объект болса, индуктивті датчиктер объектінің металл немесе металл емес екенін анықтау үшін іске қосылады. Материалдың түрі анықталғаннан кейін, қызыл және сары жарық диодтары қосылады және қорап қадамдық қозғалтқышпен қозғалатын материалдың түріне байланысты бір бағытқа немесе қарама -қарсы бағытта қозғалады.

Қорап инсульттің соңына жеткенде және объект дұрыс алушыға түсірілгенде, қорап бастапқы күйіне оралады. Ақырында, қорап бастапқы күйде болғанда, сары жарық диоды өшеді. Сұрыптаушы дәл осы процедурамен қайтадан бастауға дайын болады. Соңғы параграфтарда сипатталған бұл процесс 6 -қадамда бағдарламалауға қосылған жұмыс процесінің диаграммасында көрсетілген.

2 -қадам: Билл материалдары (BOM)

Механикалық бөлшектер:

  • Төменгі құрылым үшін бөлшектер сатып алынды

    • Металл құрылымы [Сілтеме]
    • Сұр қорап [Сілтеме]
  • 3D принтері

    Барлық басылған бөліктерге арналған PLA (ABS сияқты басқа материалдарды да қолдануға болады)

  • Лазерлік кесу машинасы

    • МДФ 3 мм
    • Плексиглас 4 мм
  • Сызықтық мойынтіректер жиынтығы [Сілтеме]
  • Сызықтық мойынтірек [сілтеме]
  • Білік [Сілтеме]
  • Білік ұстағыш (x2) [Сілтеме]

Электронды бөлшектер:

  • Мотор

    Сызықтық қадамдық қозғалтқыш Nema 17 [Сілтеме]

  • Батарея

    12 в аккумулятор [Сілтеме]

  • Сенсорлар

    • 2 ультрадыбыстық сенсор HC-SR04 [Сілтеме]
    • 2 LJ30A3-15 индуктивті сенсорлары [Сілтеме]
  • Микроконтроллер

    1 arduino UNO тақтасы

  • Қосымша компоненттер

    • DRV8825 драйвері
    • 3 жарық диоды: қызыл, жасыл және қызғылт сары
    • 1 түйме
    • Кейбір секіретін сымдар, сымдар мен дәнекерлеу табақтары
    • Нан тақтасы
    • USB кабелі (Arduino-PC қосылымы)
    • Конденсатор: 100uF

3 -қадам: Механикалық дизайн

Image
Image
Механикалық дизайн
Механикалық дизайн
Механикалық дизайн
Механикалық дизайн

Алдыңғы суреттерде құрастырудың барлық бөліктері көрсетілген.

Механикалық дизайн үшін SolidWorks CAD бағдарламасы ретінде қолданылды. Құрастырудың әр түрлі бөліктері олардың қайсысы өндірілетінін ескере отырып жасалған.

Лазерлік кесу бөліктері:

  • МДФ 3 мм

    • Тіректер
    • Үстіңгі тақта
    • Ультрадыбыстық сенсорларды қолдайды
    • Индуктивті сенсорларды қолдайды
    • Қоқыс жәшігі
    • Батареяны қолдау
    • Breadboard және Arduino қолдау
  • Плексиглас 4 мм

    Платформа

3D басып шығарылған бөлшектер:

  • Бағаналардың негізі
  • Қадамдық қозғалтқыштан сызықты қозғалыстың берілу элементі
  • Қадамдық қозғалтқыш пен мойынтіректерге арналған тіректер
  • Қоқыс жәшігіне қабырғаларды бекіту бөлшектері

Осы бөліктердің әрқайсысын жасау үшін. STEP файлдары осы мақсатта қолданылатын машинаға байланысты дұрыс форматта импортталуы керек. Бұл жағдайда.dxf файлдары лазерлік кесу машинасы үшін және 3D принтерге арналған.gcode файлдары үшін пайдаланылды (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В аккумулятор арқылы жасауға болады, бірақ Arduino үшін бөлек 5В қуат көзі болған дұрыс (мысалы, қуат көзіне немесе компьютерге қосылған USB кабелі мен телефон адаптері).

Біз тапқан мәселелер:

  • Индуктивті датчиктерді анықтау кезінде біз дәлдікке қол жеткізе алмадық, себебі кейде нашар орналасқан металл зат қабылданбайды. Бұл 2 шектеулерге байланысты:

    • Квадрат платформадағы датчиктермен жабылған аумақ оның 50% -дан азын құрайды (сондықтан ұсақ объектіні анықтау мүмкін емес). Бұл мәселені шешу үшін аумақтың 70% -дан астамын қамту үшін 3 немесе 4 индуктивті датчиктерді қолдануды ұсынамыз.
    • Датчиктерді анықтау қашықтығы 15 мм -ге дейін шектелген, сондықтан біз плексигласс платформасын қолдануға мәжбүр болдық. Бұл сонымен қатар біртүрлі пішіндегі объектілерді анықтайтын тағы бір шектеу болуы мүмкін.
  • Ультрадыбыстық анықтау: тағы да күрделі түрде жасалған нысандар проблемалар туғызады, себебі сенсорлар шығаратын сигнал нашар шағылады және сенсорға қарағанда кешірек келеді.
  • Батарея: бізде аккумулятор беретін токты бақылайтын кейбір мәселелер бар және оны шешу үшін біз ақырында қуат көзін қолдандық. Дегенмен, диодты қолдану сияқты басқа шешімдерді орындауға болады.

5 -қадам: электроника (қосылымдар)

Электроника (қосылымдар)
Электроника (қосылымдар)
Электроника (қосылымдар)
Электроника (қосылымдар)

Бұл бөлімде әр түрлі компоненттердің сымдары көрсетілген. Ол сонымен қатар әрбір компоненттің Arduino -ның қай түйреуішіне қосылғанын көрсетеді.

6 -қадам: Бағдарламалау

Бағдарламалау
Бағдарламалау

Бұл бөлімде Bin Sorting машинасының бағдарламалау логикасы түсіндіріледі.

Бағдарлама 4 кезеңге бөлінеді, олар келесідей:

  1. Жүйені инициализациялау
  2. Объектілердің болуын тексеру
  3. Бар объектінің түрін тексеріңіз
  4. Жылжыту қорабы

Әр қадамның толық сипаттамасын төменде қараңыз:

1 -қадам Жүйені іске қосыңыз

Жарықдиодты панель (3) - калибрлеуші жарықдиодты (қызыл) ЖОҒАРЫ, дайын жарықдиодты (жасыл) LOW, объектіде (сары) LOW орнату

Қозғалтқыштың бастапқы күйінде екенін тексеріңіз

  • Бүйірден қорапқа дейінгі қашықтықты өлшеу үшін ультрадыбыстық сенсорлық тестті іске қосыңыз

    • Бастапқы позиция == 0 >> Дайын жарық диодты ЖОҒАРЫ және калибрлейтін жарықдиодты LOW мәндерін жаңарту -> 2 -қадам
    • Бастапқы позиция! = 0 >> ультрадыбыстық датчиктердің цифрлық оқу мәні және сенсордың мәндеріне негізделген:

      • Қозғалтқыштың қозғалтқыш светодиодының мәнін жаңарту.
      • Екі ультрадыбыстық датчиктердің мәні <шекті мәнге жеткенше жылжыту қорабын іске қосыңыз.

Бастапқы позицияның жаңарту мәні = 1 >> LED Ready HIGH және қозғалтқыштың LOW және LOW калибрлеуінің жаңарту мәні >> 2 -қадам

2 -қадам

Объектілердің болуын тексеру

Ультрадыбыстық нысанды анықтауды іске қосыңыз

  • Нысан бар == 1 >> Объектінің жарық диодты шамасының жаңарту мәні ЖОҒАРЫ >> 3 -қадам
  • Нысан бар == 0 >> Ештеңе жасамаңыз

3 -қадам

Бар объектінің түрін тексеріңіз

Индуктивті сенсорды анықтауды іске қосыңыз

  • inductiveState = 1 >> 4 -қадам
  • inductiveState = 0 >> 4 -қадам

4 -қадам

Жылжыту қорабы

Мотор жұмысын іске қосыңыз

  • индуктивті мемлекет == 1

    Қозғалтқыштың жылжымалы жарықдиодты жоғарылату ЖОҒАРЫ >> Қозғалтқышты солға жылжытыңыз, (бастапқы позицияны = 0) кешіктіріп, оңға қарай жылжытыңыз >> 1 -қадам

  • индуктивті мемлекет == 0

    Қозғалтқыштың жылжымалы жарық диодын жаңартыңыз ЖОҒАРЫ >> Қозғалтқышты оңға жылжытыңыз, (бастапқы позицияны = 0 жаңартыңыз), кейінге қалдырыңыз және артқа қарай жылжытыңыз >> 1 -қадам

Функциялар

Бағдарламалау логикасынан көрініп тұрғандай, бағдарлама белгілі бір мақсатқа ие функцияларды орындау арқылы жұмыс істейді. Мысалы, бірінші қадам - «Қадамдық қозғалтқышты бастапқы күйде тексеру» функциясы бар жүйені инициализациялау. Екінші қадам, басқа функция болып табылатын объектінің болуын тексереді («Ультрадыбыстық объектілерді анықтау» функциясы). Және т.б.

4 -қадамнан кейін бағдарлама толығымен орындалды және қайтадан іске қосылмас бұрын 1 -қадамға оралады.

Негізгі корпуста қолданылатын функциялар төменде анықталған.

Олар сәйкесінше:

  • inductiveTest ()
  • moveBox (индуктивті мемлекет)
  • ultrasonicObjectDetection ()

// Нысанның металл екенін тексеріңіз

bool inductiveTest () {if (digitalRead (inductiveSwitchRight) == 1 || digitalRead (inductiveSwitchLeft == 0)) {ақиқатты қайтару; else {false false; }} void moveBox (bool inductiveState) {// Металл табылғанда қорап солға қарай кетеді және inductiveState = true if (inductiveState == 0) {stepper.moveTo (steps); // stepper.runToPosition () тексеру үшін аяқталатын кездейсоқ позиция; кешіктіру (1000); stepper.moveTo (0); stepper.runToPosition (); кешіктіру (1000); } else if (inductiveState == 1) {stepper.moveTo (-адамдар); // stepper.runToPosition () тексеру үшін аяқталатын кездейсоқ позиция; кешіктіру (1000); stepper.moveTo (0); // stepper.runToPosition () тексеру үшін аяқталатын кездейсоқ позиция; кешіктіру (1000); }} логикалық ультрадыбыстықObjectDetection () {ұзақ уақыт1, қашықтық1, ұзақтығыТемп, қашықтықТемп, орташаҚашықтық1, орташаҚашықтықТемп, орташаҚашықтықОлимпиадалық1; // Ұзақ қашықтықты өлшеудің санын анықтаңызMax = 0; ұзақ қашықтық Мин = 4000; ұзақ қашықтықTotal = 0; for (int i = 0; i distanceMax) {distanceMax = distanceTemp; } if (distanceTemp <distanceMin) {distanceMin = distanceTemp; } қашықтықTotal+= қашықтықTemp; } Serial.print («Sensor1 maxDistance»); Serial.print (distanceMax); Serial.println («мм»); Serial.print («Sensor1 minDistance»); Serial.print (distanceMin); Serial.println («мм»); // Орташа қашықтықты оқудан орташа қашықтықты алыңыз Дистанция1 = қашықтықТотал/10; Serial.print («Sensor1 averageDistance1»); Serial.print (орташаҚашықтық1); Serial.println («мм»); // Қате оқуды болдырмау үшін өлшеулердің ең жоғары және ең төменгі мәндерін алып тастаңыз: averageDistanceOlympian1 = averageDistanceTemp/8; Serial.print («Sensor1 averageDistanceOlympian1»); Serial.print (averageDistanceOlympian1); Serial.println («мм»);

// Уақытша мәндерді қалпына келтіру

қашықтықTotal = 0; қашықтықMax = 0; қашықтықMin = 4000; ұзақ уақыт2, қашықтық2, орташаҚашықтық2, орташаҚашықтықОлимпиадашы2; // Өлшемдер санын анықтаңыз (int i = 0; i distanceMax) {distanceMax = distanceTemp; } if (distanceTemp <distanceMin) {distanceMin = distanceTemp; } distanceTotal+= қашықтықTemp; } Serial.print («Sensor2 maxDistance»); Serial.print (distanceMax); Serial.println («мм»); Serial.print («Sensor2 minDistance»); Serial.print (distanceMin); Serial.println («мм»); // көрсеткіштерден орташа қашықтықты алыңыз Serial.print («Sensor2 averageDistance2»); Serial.print (орташаҚашықтық2); Serial.println («мм»); // Қате оқуды болдырмау үшін өлшеулердің ең жоғары және ең төменгі мәндерін алып тастаңыз: averageDistanceOlympian2 = averageDistanceTemp/8; Serial.print («Sensor2 averageDistanceOlympian2»); Serial.print (averageDistanceOlympian2); Serial.println («мм»); // Уақытша мәндерді resetTotal = 0; қашықтықMax = 0; қашықтықMin = 4000; if (averageDistanceOlympian1 + averageDistanceOlympian2 <emptyBoxDistance) {қайтару ақиқат; } else {return false; }}

Негізгі дене

Негізгі бөлімде осы бөлімнің жоғарғы жағында түсіндірілген, бірақ кодпен жазылған логика бар. Файл төменде жүктеу үшін қол жетімді.

Ескерту

Тұрақтыларды табу үшін көптеген сынақтар жүргізілді: emptyBoxDistance, қадамдар мен Максималды жылдамдық және орнатудағы үдеу.

7 -қадам: Мүмкін болатын жақсартулар

Мүмкін болатын жақсартулар
Мүмкін болатын жақсартулар

- Бізге объектінің басында әрқашан дұрыс позицияда болуын қамтамасыз ету үшін қораптың орналасуы туралы кері байланыс қажет. Мәселені шешудің әр түрлі нұсқалары бар, бірақ біз 3D принтерлерде табылған жүйені қорап жолының бір шетіндегі қосқышты пайдаланып көшіру оңай.

-Ультрадыбыстық анықтау арқылы тапқан мәселелерге байланысты, біз бұл функцияға бірнеше балама іздей аламыз: KY-008 лазерлік және лазерлік детектор (сурет), сыйымдылық сенсорлары.

8 -қадам: шектеуші факторлар

Бұл жоба нұсқаулықтарда сипатталғандай жұмыс істейді, бірақ келесі қадамдар кезінде ерекше назар аудару қажет:

Ультрадыбыстық датчиктерді калибрлеу

Прототиптің дұрыс жұмыс істеуі үшін ультрадыбыстық сенсорлардың объектіге қатысты орналасу бұрышы өте маңызды. Бұл жоба үшін ультрадыбыстық датчиктерді бағдарлау үшін қалыптыға 12,5 ° бұрышы таңдалды, бірақ ең жақсы бұрышты эксперимент арқылы әр түрлі объектілердің көмегімен қашықтық көрсеткіштерін тіркеу арқылы анықтау керек.

Қуат көзі

DRV8825 сатылы мотор драйвері үшін қажетті қуат 12 В және 0,2 мен 1 Ампер арасында. Arduino сонымен қатар Arduino ұясының кірісін қолдана отырып максималды 12 В және 0,2 Ампермен қоректенуі мүмкін. Егер Arduino үшін де, сатылы қозғалтқыш үшін де бірдей қуат көзі пайдаланылса, ерекше сақ болу керек. Егер кәдімгі розеткадан 12В/2А айнымалы/тұрақты ток адаптерінің қорек көзі арқылы қуат алатын болса, онда қуатты arduino мен сатылы қозғалтқыш драйверіне бермес бұрын тізбекте кернеу реттегіші мен диодтар болуы керек.

Қорапты паналау

Бұл жобада қалыпты жағдайда жоғары дәлдікпен бастапқы күйіне оралатын қадамдық қозғалтқыш қолданылғанымен, қате пайда болған жағдайда тіркеу механизмінің болуы жақсы тәжірибе. Жобаның бастапқы механизмі жоқ, бірақ оны іске асыру өте қарапайым. Ол үшін қораптың бастапқы күйіндегі механикалық қосқышты қосу керек, осылайша қорап қосқышқа тиген кезде ол өзінің бастапқы күйінде екенін біледі.

Қадамдық драйвер DRV8825 тюнинг

Қадамдық драйвер қадамдық қозғалтқышпен жұмыс істеу үшін баптауды қажет етеді. Бұл экспериментальды түрде қозғалтқышқа тиісті мөлшерде ток берілетін етіп DRV8825 чипіндегі потенциометрді (бұранданы) бұру арқылы жүзеге асады. Сонымен, потенциометр бұрандасын қозғалтқыш жұмсақ әрекет еткенше сәл бұраңыз.

9 -қадам: Несие

Бұл жоба Мехатроника курсының аясында 2018-2019 оқу жылында Libre de Bruxelles Université (ULB) - Vrije Universiteit Brussel (VUB) университетінің Bruface Master бағдарламасы бойынша жасалды.

Авторлары:

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

Лидия Гомес

Маркус Подер

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

Narjisse Snoussi

Жоба барысында бізге көмектескен біздің жетекшіміз Альберт де Бейрге ерекше алғыс.

Ұсынылған: