Мазмуну:

Сорттоочу бин - Таштандыңызды аныктоо жана иреттөө: 9 кадам
Сорттоочу бин - Таштандыңызды аныктоо жана иреттөө: 9 кадам

Video: Сорттоочу бин - Таштандыңызды аныктоо жана иреттөө: 9 кадам

Video: Сорттоочу бин - Таштандыңызды аныктоо жана иреттөө: 9 кадам
Video: Жапониядағы мысықтар аралы, мұнда ұшатын мысықтарды көретін арал тұрғындарына қарағанда мысықтар көп 2024, Июль
Anonim
Image
Image
Бул кантип иштейт
Бул кантип иштейт

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

Сиз үчүн кайра иштетиле турган машинаны кааладыңыз беле?

Биздин долбоорду окууну улантыңыз, өкүнбөйсүз!

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

Ушул себептен улам, биздин команда кичинекей масштабда долбоорду иштеп чыгууну чечти: таштанды материалдын металл же металл эместигине жараша ар кандай кабыл алуучуга бөлүп бере турган сорттоочу урна. Келечектеги версияларда, сорттоочу урнаны чоң өлчөмдө экстраполяциялоого болот, бул таштандыларды ар кандай материалдарга (жыгач, пластмасса, металл, органикалык …) бөлүүгө мүмкүндүк берет.

Негизги максат металл же металл эместигин айырмалоо болгондуктан, сорттоочу урна индуктивдүү сенсорлор менен, ошондой эле урнада бир нерсе бар экендигин аныктоо үчүн УЗИ сенсорлору менен жабдылат. Мындан тышкары, таштандыларды эки кутуга жылдыруу үчүн челекке сызыктуу кыймыл керек болот, демек, тепкичтүү мотор тандалат.

Кийинки бөлүмдөрдө бул долбоор этап -этабы менен түшүндүрүлөт.

1 -кадам: Бул кантип иштейт

Бул кантип иштейт
Бул кантип иштейт
Бул кантип иштейт
Бул кантип иштейт

Сорттоочу идиш колдонуучунун ишин салыштырмалуу жеңилдетүү үчүн иштелип чыккан: таштандыларды үстүнкү табакка салынган тешик аркылуу киргизүү керек, сары баскычты басып, процессти баштоо керек, ал таштанды менен бүтөт алуучулардын. Бирок азыр суроо … бул процесс ички иштөөдө кандай?

Процесс башталгандан кийин жашыл LED жарык берет. Андан кийин таяныч аркылуу үстүңкү табакка бекитилген УЗИ сенсорлору кутунун ичинде бир нерсенин бар же жок экенин аныктоо үчүн өз ишин башташат.

Эгерде кутунун ичинде эч кандай объект болбосо, кызыл LED күйүп, жашыл өчөт. Тескерисинче, эгерде объект бар болсо, индуктивдүү сенсорлор объектинин металл же металл эместигин аныктоо үчүн иштетилет. Материалдын түрү аныкталгандан кийин, кызыл жана сары LED диоддору күйөт жана куту бир кадамга же карама -каршы багытка карай жылат, материалдын түрүнө жараша.

Куту штрихтин аягына келгенде жана объект туура алуучуга түшүрүлгөндө, кутуча баштапкы абалына кайтат. Акыр -аягы, кутуча баштапкы абалында, сары LED өчөт. Сорттоочу ошол эле жол -жобо менен кайра баштоого даяр болот. Акыркы абзацтарда сүрөттөлгөн бул процесс 6 -кадамга тиркелген жумуш схемасынын сүрөтүндө да көрсөтүлөт: Программалоо.

2 -кадам: Билл материалдар (БОМ)

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

  • Түбүнүн структурасы үчүн тетиктер сатып алынды

    • Металл түзүлүшү [Шилтеме]
    • Боз куту [Шилтеме]
  • 3D принтер

    Бардык басылган бөлүктөр үчүн PLA (ABS сыяктуу башка материалдарды да колдонсо болот)

  • Лазердик кесүүчү машина

    • MDF 3мм
    • Plexiglass 4мм
  • Сызыктуу подшипниктер топтому [Шилтеме]
  • Сызыктуу подшипник [Шилтеме]
  • Shaft [Шилтеме]
  • Билик кармагыч (x2) [Шилтеме]

Электрондук бөлүктөр:

  • Мотор

    Сызыктуу Step Motor Nema 17 [Шилтеме]

  • Батарея

    12 v Батарея [Шилтеме]

  • Сенсорлор

    • 2 УЗИ сенсор HC-SR04 [Шилтеме]
    • 2 Индуктивдүү сенсорлор LJ30A3-15 [Шилтеме]
  • Микроконтроллер

    1 arduino UNO тактасы

  • Кошумча компоненттер

    • DRV8825 айдоочу
    • 3 LED: кызыл, жашыл жана кызгылт сары
    • 1 баскыч
    • Кээ бир секирүүчү зымдар, зымдар жана ширетүүчү плиталар
    • Breadboard
    • USB кабели (Arduino-PC туташуусу)
    • Конденсатор: 100uF

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

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

Мурунку сүрөттөрдө жыйындын бардык бөлүктөрү көрсөтүлгөн.

Механикалык дизайн үчүн SolidWorks CAD программасы катары колдонулган. Жыйындын ар кандай бөлүктөрү кайсы өндүрүштү жасоо керектигин эске алуу менен иштелип чыккан.

Лазердик кесилген бөлүктөр:

  • MDF 3мм

    • Мамычалар
    • Top plate
    • УЗИ сенсорлору колдойт
    • Индуктивдүү сенсорлор колдойт
    • Таштанды кутуча
    • Батареяны колдоо
    • Breadboard жана Arduino колдоосу
  • Plexiglass 4мм

    Платформа

3D басылган бөлүктөр:

  • Мамычалардын негизи
  • Stepper моторунан сызыктуу кыймыл берүү элементи
  • Stepper мотору жана подшипниктери
  • Таштанды кутучасы үчүн дубалдарды бекитүүчү бөлүктөр

Бул бөлүктөрдүн ар бирин өндүрүү үчүн. STEP файлдары ошол максатта колдонула турган машинага жараша туура форматта импорттолушу керек. Бул учурда,.dxf файлдары лазердик кесүүчү машина үчүн жана 3D принтери үчүн.gcode файлдары үчүн колдонулган (Ultimaker 2).

Бул долбоордун механикалык курамын бул бөлүмдө тиркелген. STEP файлынан тапса болот.

4 -кадам: Электроника (компоненттерди тандоо)

Бул бөлүмдө колдонулган электрондук компоненттердин кыскача сүрөттөлүшү жана компоненттердин тандоолорунун түшүндүрмөсү жасалат.

Arduino UNO башкармалыгы (микроконтроллер катары):

Ачык булак аппараттык жана программалык камсыздоо. Арзан, оңой жеткиликтүү, коду оңой. Бул такта биз колдонгон бардык компоненттерге шайкеш келет жана сиз көйгөйлөрдү үйрөнүү жана чечүү үчүн абдан пайдалуу болгон бир нече окуу куралдарын жана форумдарды таба аласыз.

Motor (сызыктуу Step Motor Nema 17):

Белгилүү бир сандагы толук айланууну бөлүүчү тепкич мотордун бир түрү. Натыйжада, ал белгилүү бир кадамдарды берүү менен көзөмөлдөнөт. Бул күчтүү жана так жана анын чыныгы абалын көзөмөлдөө үчүн эч кандай сенсорлордун кереги жок. Мотордун миссиясы - ыргытылган нерсени камтыган кутучанын кыймылын көзөмөлдөө жана аны туура таштанды челегине түшүрүү.

Моделди тандоо үчүн коопсуздук факторун кошуу менен максималдуу моментти эсептеп чыктыңыз. Жыйынтыктарга келсек, биз негизинен эсептелген маанини камтыган моделди сатып алдык.

DRV8825 айдоочу:

Бул такта биполярдык тепкич моторун башкаруу үчүн колдонулат. Бул потенциометр менен максималдуу учурдагы өндүрүштү, ошондой эле алты түрдүү кадам токтомдорун коюуга мүмкүндүк берген жөнгө салынуучу учурдагы көзөмөлгө ээ: толук кадам, жарым кадам, 1/4 кадам, 1/8 кадам, 1/16- кадам жана 1/32-кадам (биз акыры толук кадамды колдондук, анткени микро кадамга баруунун кажети жок болчу, бирок аны кыймылдын сапатын жакшыртуу үчүн дагы деле колдонсо болот).

УЗИ сенсорлору:

Бул электр сигналын УЗИге жана тескерисинче айландыруучу акустикалык сенсорлордун бир түрү. Алар объектке чейинки аралыкты эсептөө үчүн алгач чыгарылган акустикалык сигналдын жаңырык жоопторун колдонушкан. Биз аларды кутуда объект бар же жок экенин аныктоо үчүн колдондук. Алар колдонууга оңой жана так өлчөөнү камсыз кылат.

Бул сенсордун чыгышы чоңдук (аралык) болсо да, объекттин бар же жок экенин аныктоо үчүн босогону орнотуу менен биз өзгөртөбүз

Индуктивдүү сенсорлор:

Фарадей мыйзамына негизделген, ал байланышсыз электрондук жакындык сенсорунун категориясына кирет. Биз аларды кыймылдуу кутунун түбүнө, объектти колдогон plexiglass платформасынын астына койдук. Алардын максаты-санарип өндүрүштү (0/1) берүүчү металл жана металл эместерди айырмалоо.

Светодиоддор (жашыл, сары, кызыл):

Алардын миссиясы колдонуучу менен баарлашуу:

-Жашыл LED күйүп турат: робот бир нерсени күтүп жатат.

-Кызыл LED күйгүзүлгөн: машина иштеп жатат, сиз эч нерсени ыргыта албайсыз.

-Сары LED күйүк: объект табылды.

12V Батарея же 12В кубат булагы + 5V USB кубаты:

Сенсорлорду жана тепкич моторун иштетүү үчүн чыңалуу булагы керек. Ардуинону иштетүү үчүн 5В кубат булагы керек. Муну 12В батарейка аркылуу жасаса болот, бирок Arduino үчүн өзүнчө 5В кубат булагына ээ болуу эң жакшы (мисалы, USB кабели жана кубат булагына же компьютерге туташкан телефон адаптери менен).

Биз тапкан маселелер:

  • Индуктивдүү сенсорду аныктоо, биз каалаган тактыкты ала алган жокпуз, анткени кээде начар жайгашкан металлдык объект кабыл алынбайт. Бул 2 чектөө менен шартталган:

    • Квадрат платформанын ичиндеги сенсорлор менен капталган аймак анын 50% дан азын түзөт (андыктан кичинекей объект табылбайт). Муну чечүү үчүн, аянттын 70% дан ашыгын камсыздоо үчүн 3 же 4 индуктивдүү сенсорлорду колдонууну сунуштайбыз.
    • Сенсорлордун аныктоо аралыгы 15 мм менен чектелген, ошондуктан биз өзүбүздү жакшы plexiglass платформасын колдонууга мажбур болдук. Бул ошондой эле кызыктай формадагы объекттерди табууга дагы бир чектөө болушу мүмкүн.
  • УЗИ аныктоо: дагы, комплекстүү түрдө калыптанган нерселер көйгөйлөрдү жаратат, анткени сенсорлор чыгарган сигнал начар чагылат жана сенсорго керек болгон убакыттан кеч кайтат.
  • Батарея: бизде батареянын жеткирген агымын көзөмөлдөөчү кээ бир маселелер бар жана аны чечүү үчүн акыры кубат булагын колдондук. Бирок, диодду колдонуу сыяктуу башка чечимдерди аткарса болот.

5 -кадам: Электроника (туташуулар)

Электроника (туташуулар)
Электроника (туташуулар)
Электроника (туташуулар)
Электроника (туташуулар)

Бул бөлүмдө ар кандай компоненттердин зымдары толугу менен көрсөтүлгөн. Ал ошондой эле ар бир компоненттин Arduino кайсы пинге туташканын көрсөтөт.

6 -кадам: Программалоо

Программалоо
Программалоо

Бул бөлүмдө Bin Sorting машинасынын артындагы программалоо логикасы түшүндүрүлөт.

Программа 4 баскычка бөлүнгөн, алар төмөндөгүдөй:

  1. Системаны баштоо
  2. Объекттердин бар экендигин текшерүү
  3. Бар объектинин түрүн текшериңиз
  4. Move Box

Ар бир кадамдын деталдуу сүрөттөмөсү үчүн төмөндө караңыз:

1 -кадам Системаны баштоо

LED панели (3) - калибрлөөчү LED (кызыл) ЖОГОРУ, даяр LED (жашыл) LOW, объект бар (сары) LOW

Step мотору баштапкы абалда экенин текшериңиз

  • Капталдан дубалга чейинки аралыкты өлчөө үчүн УЗИ сенсорун текшериңиз

    • Баштапкы позиция == 0 >> Даяр LED HIGH жана Calibrating LED LOW маанилерин жаңыртуу -> 2 -кадам
    • Баштапкы абал! = 0 >> УЗИ сенсорлорунун санарип окуу мааниси жана сенсордун баалуулуктарына негизделген:

      • LED кыймылдаткычынын маанисин жаңыртуу HIGH.
      • Эки УЗИ сенсорунун мааниси <босого мааниге жеткенге чейин жылдыруу кутучасын иштетүү.

Баштапкы абалдын маанисин жаңыртуу = 1 >> LED Ready HIGHдун жана мотордун LOW жана LOW калибрлөөсүнүн жаңыртуусу >> кадам 2

2-кадам

Объекттердин бар экендигин текшерүү

Ultrasonic объект аныктоону иштетүү

  • Объект бар == 1 >> Объекттин азыркы наркы жаңыртуусу ЖОГОРУ >> 3 -кадам
  • Объект бар == 0 >> Эч нерсе кылба

3 -кадам

Бар объектинин түрүн текшериңиз

Индуктивдүү сенсор аныктоону иштетүү

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

4 -кадам

Move Box

Моторду иштетүү

  • inductiveState == 1

    Кыймылдаткычтын кыймылдаткычын жаңыртыңыз LED HIGH >> Моторду солго жылдырыңыз, (баштапкы абалын жаңыртыңыз = 0) кечигүү жана оңго артка жылуу >> 1 -кадам

  • inductiveState == 0

    Кыймылдаткычтын кыймылдаткычын жаңыртыңыз LED HIGH >> Моторду оңго жылдырыңыз, (баштапкы абалын жаңыртыңыз = 0), кечигип солго артка жылыңыз >> 1 -кадам

Функциялар

Программалоо логикасынан көрүнүп тургандай, программа белгилүү бир максат менен функцияларды аткаруу менен иштейт. Мисалы, биринчи кадам - "Step step мотору баштапкы абалда" функциясын камтыган системаны инициализациялоо. Экинчи кадам анда башка функция ("Ультрадыбыштуу объекттерди аныктоо" функциясы) болгон объектинин бар экендигин текшерет. Жана башкалар.

4 -кадамдан кийин программа толугу менен аткарылды жана кайра иштетүүдөн мурун 1 -кадамга кайтып келет.

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

Алар тиешелүү түрдө:

  • inductiveTest ()
  • moveBox (inductiveState)
  • ultrasonicObjectDetection ()

// Объект металлдык экенин текшериңиз

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 (-адамдар); // stepper.runToPosition сыноо үчүн аягына чейин туш келди позиция (); кечигүү (1000); stepper.moveTo (0); // stepper.runToPosition сыноо үчүн аягына чейин туш келди позиция (); кечигүү (1000); }} логикалык ultrasonicObjectDetection () {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 ("мм"); Serial.print ("Sensor1 minDistance"); Serial.print (distanceMin); Serial.println ("мм"); // Окуулардан орточо аралыкты алгыла averageDistance1 = distanceTotal/10; Serial.print ("Sensor1 averageDistance1"); Serial.print (averageDistance1); Serial.println ("мм"); // Туура эмес окуулардан качуу үчүн өлчөөлөрдүн эң жогорку жана эң төмөнкү маанилерин алып салыңыз. averageDistanceOlympian1 = averageDistanceTemp/8; Serial.print ("Sensor1 averageDistanceOlympian1"); Serial.print (averageDistanceOlympian1); Serial.println ("мм");

// Темп маанилерин баштапкы абалга келтирүү

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 ("мм"); Serial.print ("Sensor2 minDistance"); Serial.print (distanceMin); Serial.println ("мм"); // Окуулардан орточо аралыкты алгыла averageDistance2 = distanceTotal/10; Serial.print ("Sensor2 averageDistance2"); Serial.print (averageDistance2); Serial.println ("мм"); // Туура эмес окуулардан качуу үчүн өлчөөлөрдүн эң жогорку жана эң төмөнкү маанилерин алып салыңыз. averageDistanceOlympian2 = averageDistanceTemp/8; Serial.print ("Sensor2 averageDistanceOlympian2"); Serial.print (averageDistanceOlympian2); Serial.println ("мм"); // Температуранын маанилерин баштапкы абалга келтирүү distanceTotal = 0; distanceMax = 0; distanceMin = 4000; if (averageDistanceOlympian1 + averageDistanceOlympian2 <emptyBoxDistance) {return true; } else {return false; }}

Негизги дене

Негизги бөлүк ушул бөлүмдүн жогору жагында түшүндүрүлгөн, бирок код менен жазылган логиканы камтыйт. Файлды төмөндө жүктөө үчүн жеткиликтүү.

Эскертүү

Туруктууларды табуу үчүн көптөгөн тесттер өткөрүлдү: emptyBoxDistance, кадамдар жана Maximumspeed жана орнотууда ылдамдануу.

7 -кадам: Мүмкүн болгон жакшыртуулар

Мүмкүн болгон жакшыртуулар
Мүмкүн болгон жакшыртуулар

- Бизге объекттин башында дайыма туура абалда болушун камсыз кылуу үчүн кутунун абалы жөнүндө пикирлер керек. Маселени чечүү үчүн ар кандай варианттар бар, бирок кутучанын жолунун бир четиндеги коммутатордун жардамы менен 3D принтерлерден тапкан системаны көчүрүү оңой.

-УЗИ аныктоо менен тапкан маселелерибизге байланыштуу, биз бул функцияга башка альтернативаларды издей алабыз: KY-008 Laser and Laser Detector (image), емкостный сенсорлор.

8 -кадам: Чектөөчү факторлор

Бул долбоор көрсөтмөлөрдө сүрөттөлгөндөй иштейт, бирок төмөнкү кадамдарда өзгөчө этият болуу керек:

УЗИ сенсорлорун калибрлөө

Прототиптин туура иштеши үчүн УЗИ сенсорлору алар табууга тийиш болгон объектиге карата жайгаштырылган бурчтун чечүүчү мааниси бар. Бул долбоор үчүн УЗИ сенсорлорунун багыты үчүн нормалдуу 12,5 ° бурч тандалды, бирок эң жакшы бурч ар кандай объектилерди колдонуу менен аралыкты окууну жазуу менен эксперименталдык түрдө аныкталышы керек.

Кубат булагы

DRV8825 тепкичтүү мотор айдоочусу үчүн керектүү күч 12В жана 0,2 менен 1 Ампердин ортосунда. Arduino да Arduino джек киргизүү аркылуу максималдуу 12V жана 0.2 Amp менен иштесе болот. Өзгөчө этият болуу керек, эгерде Arduino үчүн да, тепкичтүү мотор айдоочусу үчүн да бирдей энергия булагын колдонсоңуз. Эгерде 12V/2A AC/DC адаптер кубаттуулугун колдонуу менен кадимки электр розеткасынан кубатталса, анда кубаттуулук arduino жана stepper моторунун айдоочусуна берилээр алдында схемада чыңалуу жөндөгүчү жана диоддор болушу керек.

Кутуга Homing

Бул долбоор кадимки шарттарда баштапкы абалына жогорку тактык менен кайтып келген тепкич моторду колдонгону менен, ката кетирилген учурда хостинг механизминин болушу жакшы практика. Долбоордун мурунку механизми жок, бирок аны ишке ашыруу өтө жөнөкөй. Бул үчүн, кутунун баштапкы абалындагы механикалык которуштуруучу кошулушу керек, кутуча которгучка тийгенде, анын үй абалында экенин билет.

Stepv айдоочу DRV8825 тюнинг

Кадам айдоочу тепкич мотору менен иштөө үчүн тюнингди талап кылат. Бул эксперименталдык түрдө DRV8825 чипиндеги потенциометрди (бураманы) буруп, моторго керектүү көлөмдөгү ток жеткирилет. Ошентип, потенциометрдин бурамасын бир аз буруп, мотор арык кыймылга келмейинче.

9 -кадам: Кредиттер

Бул долбоор Мехатроника курсунун алкагында 2018-2019 окуу жылында Bruface Master үчүн Université Libre de Bruxelles (ULB) - Vrije Universiteit Brussel (VUB) окуу жылында аткарылган.

Авторлор:

Maxime Decleire

Лидия Гомес

Markus Poder

Adriana Puentes

Narjisse Snoussi

Долбоордун жүрүшүндө бизге жардам берген жетекчибиз Альберт де Бейрге өзгөчө рахмат.

Сунушталууда: