Turinys:

Rūšiavimo dėžė - aptikti ir rūšiuoti šiukšles: 9 žingsniai
Rūšiavimo dėžė - aptikti ir rūšiuoti šiukšles: 9 žingsniai

Video: Rūšiavimo dėžė - aptikti ir rūšiuoti šiukšles: 9 žingsniai

Video: Rūšiavimo dėžė - aptikti ir rūšiuoti šiukšles: 9 žingsniai
Video: How To Find Best Stable Diffusion Generated Images By Using DeepFace AI - DreamBooth / LoRA Training 2024, Lapkritis
Anonim
Image
Image
Kaip tai veikia
Kaip tai veikia

Ar kada matėte žmogų, kuris neperdirba arba daro tai blogai?

Ar kada nors norėjote mašinos, kuri jums būtų perdirbama?

Skaitykite mūsų projektą, nesigailėsite!

Sorter bin yra projektas, turintis aiškią motyvaciją padėti perdirbti pasaulyje. Kaip žinoma, perdirbimo trūkumas mūsų planetoje sukelia rimtų problemų, pavyzdžiui, žaliavų išnykimą ir jūros užterštumą.

Dėl šios priežasties mūsų komanda nusprendė sukurti nedidelio masto projektą: rūšiavimo šiukšliadėžę, galinčią suskirstyti šiukšles į skirtingus gavėjus, atsižvelgiant į tai, ar medžiaga yra metalinė, ar nemetalinė. Būsimose versijose ši rūšiavimo šiukšliadėžė gali būti ekstrapoliuota dideliu mastu, leidžiant šiukšles suskirstyti į įvairias medžiagas (medieną, plastiką, metalą, organines …).

Kadangi pagrindinis tikslas yra atskirti metalinį ar nemetalinį, rūšiavimo dėžėje bus įrengti indukciniai jutikliai, taip pat ultragarso jutikliai, kad būtų galima nustatyti, ar šiukšliadėžėje yra kažkas. Be to, šiukšliadėžę reikės tiesiškai judėti, kad šiukšlės būtų perkeltos į dvi dėžes, todėl pasirinktas žingsninis variklis.

Tolesniuose skyriuose šis projektas bus aprašytas žingsnis po žingsnio.

1 žingsnis: kaip tai veikia

Kaip tai veikia
Kaip tai veikia
Kaip tai veikia
Kaip tai veikia

Rūšiavimo šiukšliadėžė sukurta taip, kad vartotojui darbas būtų gana lengvas: šiukšlės turi būti įvestos per skylę, esančią viršutinėje plokštėje, paspaustas geltonas mygtukas ir procesas prasideda, baigiant šiukšlėmis į vieną gavėjų. Tačiau dabar kyla klausimas … kaip šis procesas veikia viduje?

Kai procesas prasideda, užsidega žalias šviesos diodas. Tada ultragarso jutikliai, pritvirtinti prie viršutinės plokštės per atramą, pradeda savo darbą, kad nustatytų, ar dėžutės viduje yra daiktas, ar ne.

Jei dėžutėje nėra jokių objektų, raudonas šviesos diodas įsijungia, o žalias - išsijungia. Priešingai, jei yra objektas, indukciniai jutikliai bus įjungti, kad būtų galima nustatyti, ar objektas yra metalinis, ar nemetalinis. Nustačius medžiagos tipą, raudonos ir geltonos šviesos diodai įsijungs, o dėžė pasislinks viena kryptimi arba priešinga kryptimi, priklausomai nuo medžiagos, varomos žingsniniu varikliu.

Kai dėžutė pasiekia smūgio pabaigą ir objektas nukrito į tinkamą gavėją, dėžutė grįš į pradinę padėtį. Galiausiai, kai dėžutė yra pradinėje padėtyje, geltonas šviesos diodas išsijungs. Rūšiavimo priemonė bus pasirengusi vėl pradėti tą pačią procedūrą. Šis procesas, aprašytas paskutinėse pastraipose, taip pat parodytas 6 žingsnyje: Programavimas pridėtoje darbo eigos diagramos nuotraukoje.

2 veiksmas: medžiagų sąrašas (BOM)

Mechaninės dalys:

  • Nupirktos dalys apatinei konstrukcijai

    • Metalinė struktūra [Nuoroda]
    • Pilka dėžutė [nuoroda]
  • 3D spausdintuvas

    PLA visoms spausdintoms dalims (taip pat gali būti naudojamos kitos medžiagos, pvz., ABS)

  • Pjovimo lazeriu mašina
    • MDF 3 mm
    • Plexiglass 4mm
  • Linijinių guolių rinkinys [nuoroda]
  • Linijinis guolis [nuoroda]
  • Velenas [nuoroda]
  • Veleno laikiklis (x2) [Nuoroda]

Elektroninės dalys:

  • Variklis

    Linijinis žingsninis variklis Nema 17 [nuoroda]

  • Baterija

    12 V baterija [nuoroda]

  • Jutikliai

    • 2 ultragarso jutiklis HC-SR04 [Nuoroda]
    • 2 indukciniai jutikliai LJ30A3-15 [Nuoroda]
  • Mikrovaldiklis

    1 arduino UNO lenta

  • Papildomi komponentai

    • DRV8825 vairuotojas
    • 3 šviesos diodai: raudona, žalia ir oranžinė
    • 1 mygtukas
    • Kai kurie šokinėjantys laidai, laidai ir litavimo plokštės
    • Bandomoji Lenta
    • USB kabelis („Arduino“kompiuterio ryšys)
    • Kondensatorius: 100uF

3 žingsnis: mechaninis dizainas

Image
Image
Mechaninis dizainas
Mechaninis dizainas
Mechaninis dizainas
Mechaninis dizainas

Ankstesnėse nuotraukose parodytos visos surinkimo dalys.

Mechaniniam projektavimui „SolidWorks“buvo naudojama kaip CAD programa. Skirtingos agregato dalys buvo sukurtos atsižvelgiant į gamybos metodą, kurį iš jų ketinama gaminti.

Lazeriu supjaustytos dalys:

  • MDF 3 mm

    • Stulpai
    • Viršutinė plokštė
    • Ultragarso jutiklių palaikymas
    • Indukcinių jutiklių palaikymas
    • Šiukšlių dėžė
    • Baterijos palaikymas
    • „Breadboard“ir „Arduino“palaikymas
  • Plexiglass 4mm

    Platforma

3D spausdintos dalys:

  • Stulpų pagrindas
  • Linijinio judesio perdavimo elementas iš žingsninio variklio
  • Žingsninis variklis ir guolių atramos
  • Sienų tvirtinimo dalys šiukšlių dėžei

Gaminant kiekvieną iš šių dalių,. STEP failai turėtų būti importuoti tinkamu formatu, atsižvelgiant į mašiną, kuri bus naudojama šiam tikslui. Šiuo atveju.dxf failai buvo naudojami lazerio pjovimo mašinai, o.gcode failai - 3D spausdintuvui („Ultimaker 2“).

Mechaninį šio projekto surinkimą galima rasti šiame skyriuje pridėtame. STEP faile.

4 žingsnis: elektronika (komponentų pasirinkimas)

Šiame skyriuje bus trumpas naudojamų elektroninių komponentų aprašymas ir komponentų pasirinkimo paaiškinimas.

„Arduino UNO“plokštė (kaip mikrovaldiklis):

Atvirojo kodo aparatinė ir programinė įranga. Pigu, lengvai prieinama, lengva koduoti. Ši lenta yra suderinama su visais mūsų naudojamais komponentais ir lengvai rasite daugybę vadovėlių ir forumų, kurie labai padeda mokytis ir spręsti problemas.

Variklis (linijinis žingsninis variklis Nema 17):

Tai žingsninio variklio tipas, padalijantis visą sukimąsi tam tikru žingsnių skaičiumi. Dėl to jis kontroliuojamas atliekant tam tikrą žingsnių skaičių. Jis yra tvirtas ir tikslus ir jam nereikia jokių jutiklių, kad būtų galima kontroliuoti jo faktinę padėtį. Variklio misija yra valdyti dėžutės, kurioje yra išmestas daiktas, judėjimą ir numesti jį į dešinę.

Norėdami pasirinkti modelį, apskaičiavote maksimalų reikiamą sukimo momentą, pridėdami saugos koeficientą. Kalbant apie rezultatus, mes nusipirkome modelį, kuris iš esmės apima apskaičiuotą vertę.

DRV8825 tvarkyklė:

Ši plokštė naudojama valdyti bipolinį žingsninį variklį. Jis turi reguliuojamą srovės valdiklį, kuris leidžia jums nustatyti maksimalią srovės galią naudojant potenciometrą, taip pat šešias skirtingas žingsnių rezoliucijas: viso žingsnio, pusės žingsnio, 1/4 žingsnio, 1/8 žingsnio, 1/16- žingsnis ir 1/32 žingsnis (pagaliau panaudojome visą žingsnį, nes neradome jokio reikalo pereiti prie mikroskopo, tačiau jį vis tiek galima panaudoti judesio kokybei pagerinti).

Ultragarsiniai jutikliai:

Tai yra akustinių jutiklių tipas, kuris elektros signalą paverčia ultragarsu ir atvirkščiai. Norėdami apskaičiuoti atstumą iki objekto, jie panaudojo akustinio signalo aido atsaką. Mes juos panaudojome, norėdami nustatyti, ar dėžutėje yra objektas, ar ne. Juos lengva naudoti ir jie pateikia tikslų matavimą.

Nors šio jutiklio išvestis yra reikšmė (atstumas), tačiau nustatę slenkstį nustatyti, ar yra objektas, ar ne, mes transformuojame

Indukciniai jutikliai:

Remiantis Faradėjaus įstatymu, jis priklauso nekontaktinio elektroninio artumo jutiklio kategorijai. Mes padėjome juos judančios dėžutės apačioje, po organinio stiklo platforma, kuri palaiko objektą. Jų tikslas yra atskirti metalinį ir nemetalinį objektą, suteikiantį skaitmeninį išėjimą (0/1).

Šviesos diodai (žalia, geltona, raudona):

Jų misija yra bendrauti su vartotoju:

-dega žalias šviesos diodas: robotas laukia objekto.

-dega raudonas šviesos diodas: mašina veikia, negalima mesti jokių daiktų.

-Įjungtas geltonas šviesos diodas: aptiktas objektas.

12 V baterija arba 12 V maitinimo šaltinis + 5 V USB maitinimas:

Jutikliams ir žingsniniam varikliui maitinti reikalingas įtampos šaltinis. Norint maitinti „Arduino“, reikalingas 5 V maitinimo šaltinis. Tai galima padaryti naudojant 12 V bateriją, tačiau geriausia turėti atskirą 5 V maitinimo šaltinį „Arduino“(pvz., Naudojant USB kabelį ir telefono adapterį, prijungtą prie maitinimo šaltinio arba prie kompiuterio).

Problemos, kurias radome:

  • Indukcinio jutiklio aptikimas, mes negavome norimo tikslumo, nes kartais netinkamas metalinis objektas nėra suvokiamas. Taip yra dėl 2 apribojimų:

    • Plotas, kurį apima jutikliai kvadratinėje platformoje, sudaro mažiau nei 50% jo (todėl negalima aptikti mažo objekto). Norėdami tai išspręsti, rekomenduojame naudoti 3 arba 4 indukcinius jutiklius, kad būtų užtikrinta daugiau nei 70% ploto padengimas.
    • Jutiklių aptikimo atstumas ribojamas iki 15 mm, todėl mes buvome priversti naudoti ploną organinio stiklo platformą. Tai taip pat gali būti dar vienas apribojimas aptikti keistos formos objektus.
  • Ultragarsinis aptikimas: vėlgi, sudėtingai suformuoti objektai sukelia problemų, nes jutiklių skleidžiamas signalas blogai atsispindi ir grįžta vėliau nei turėtų.
  • Baterija: turime tam tikrų problemų, susijusių su akumuliatoriaus tiekiamos srovės valdymu, ir norėdami ją išspręsti, pagaliau panaudojome energijos šaltinį. Tačiau galima atlikti kitus sprendimus, tokius kaip diodo naudojimas.

5 žingsnis: Elektronika (jungtys)

Elektronika (jungtys)
Elektronika (jungtys)
Elektronika (jungtys)
Elektronika (jungtys)

Šiame skyriuje pateikiami skirtingų komponentų laidai. Tai taip pat rodo, prie kurio „Arduino“kaiščio yra prijungtas kiekvienas komponentas.

6 žingsnis: programavimas

Programavimas
Programavimas

Šiame skyriuje bus paaiškinta „Bin Sorting“mašinos programavimo logika.

Programa suskirstyta į 4 veiksmus, kurie yra tokie:

  1. Inicijuoti sistemą
  2. Patikrinkite objektų buvimą
  3. Patikrinkite esamo objekto tipą
  4. Perkelti langelį

Išsamų kiekvieno žingsnio aprašymą rasite žemiau:

1 veiksmas Inicijuokite sistemą

LED skydelis (3) - nustatykite kalibravimo šviesos diodą (raudonas) AUKŠTAS, parengties šviesos diodas (žalias) LOW, esantis objektas (geltonas) LOW

Patikrinkite, ar žingsninis variklis yra pradinėje padėtyje

  • Atlikite ultragarso jutiklio testą, kad išmatuotumėte atstumą nuo šono iki dėžės sienos

    • Pradinė padėtis == 0 >> Atnaujinkite „Ready LED HIGH“ir „LOW Calibrating LED“reikšmes -> 2 veiksmas
    • Pradinė padėtis! = 0 >> ultragarso jutiklių skaitmeninė skaitymo vertė ir pagrįsta jutiklio reikšmėmis:

      • Atnaujinkite variklio judančio šviesos diodo AUKŠTĄ vertę.
      • Vykdykite perkėlimo laukelį, kol abiejų ultragarso jutiklių vertė bus <slenkstinė vertė.

Pradinės padėties vertės atnaujinimas = 1 >> Atnaujinkite paruoštą šviesos diodą HIGH ir variklis juda LOW ir kalibruoja LOW >> 2 veiksmas

2 žingsnis

Patikrinkite objektų buvimą

Paleiskite ultragarso objekto aptikimą

  • Esamas objektas == 1 >> Atnaujinkite esamo objekto šviesos diodo AUKŠTĄ >> 3 žingsnis
  • Esamas objektas == 0 >> Nieko nedaryti

3 žingsnis

Patikrinkite esamo objekto tipą

Vykdyti indukcinio jutiklio aptikimą

  • indukcinė būsena = 1 >> 4 žingsnis
  • indukcinė būsena = 0 >> 4 žingsnis

4 žingsnis

Perkelti langelį

Vykdyti variklio veikimą

  • indukcinė būsena == 1

    Atnaujinkite variklio judantį šviesos diodą AUKŠTAS >> Pasukite variklį į kairę, (atnaujinkite pradinę padėtį = 0) atidėkite ir judėkite atgal į dešinę >> 1 žingsnis

  • indukcinė būsena == 0

    Atnaujinkite variklio judantį šviesos diodą AUKŠTU >> Pasukite variklį į dešinę, (atnaujinkite pradinę padėtį = 0), atidėkite ir pasukite atgal į kairę >> 1 žingsnis

Funkcijos

Kaip matyti iš programavimo logikos, programa veikia vykdydama konkretaus tikslo funkcijas. Pavyzdžiui, pirmiausia reikia inicijuoti sistemą, kurioje yra funkcija „Patikrinkite, ar žingsninis variklis yra pradinėje padėtyje“. Antrame etape patikrinamas objekto buvimas, kuris pats savaime yra kita funkcija („ultragarso objekto aptikimo“funkcija). Ir taip toliau.

Po 4 veiksmo programa buvo visiškai įvykdyta ir prieš vėl paleisdama grįš į 1 veiksmą.

Pagrindiniame korpuse naudojamos funkcijos yra apibrėžtos toliau.

Jie atitinkamai yra:

  • indukcinis testas ()
  • „moveBox“(indukcinė būsena)
  • ultragarsasObjectDetection ()

// Patikrinkite, ar objektas metalinis, ar ne

bool inductiveTest () {if (digitalRead (inductiveSwitchRight) == 1 || digitalRead (inductiveSwitchLeft == 0)) {return true; else {return false; }} void moveBox (bool inductiveState) {// Dėžė eina į kairę, kai aptinkamas metalas, ir inductiveState = true if (inductiveState == 0) {stepper.moveTo (žingsniai); // atsitiktinė padėtis iki pabaigos stepper.runToPosition (); vėlavimas (1000); stepper.moveTo (0); stepper.runToPosition (); vėlavimas (1000); } else if (indukcinė būsena == 1) {stepper.moveTo (-steps); // atsitiktinė padėtis iki pabaigos stepper.runToPosition (); vėlavimas (1000); stepper.moveTo (0); // atsitiktinė padėtis iki pabaigos stepper.runToPosition (); vėlavimas (1000); }} loginis ultragarsinisObjectDetection () {ilga trukmė1, atstumas1, trukmėTempas, atstumasTempas, vidutinis atstumas1, vidutinis atstumasTempas, vidutinis atstumasOlympian1; // Apibrėžkite matavimų, kuriuos reikia atlikti dideliu atstumu, skaičiųMax = 0; ilgas atstumasMin = 4000; ilgas atstumas Iš viso = 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"); // Paimkite vidutinį atstumą nuo rodmenų vidurkisDistance1 = distanceTotal/10; Serial.print („Sensor1 mediumDistance1“); Serijinis atspaudas (vidutinis atstumas1); Serial.println ("mm"); // Pašalinkite aukščiausias ir žemiausias matavimų vertes, kad išvengtumėte klaidingų rodmenų vidurkisDistanceTemp = distanceTotal - (distanceMax+distanceMin); averageDistanceOlympian1 = keskmineDistanceTemp/8; Serial.print („Sensor1 mediumDistanceOlympian1“); Serial.print (vidutinisDistanceOlympian1); Serial.println ("mm");

// Iš naujo nustatyti temp reikšmes

distanceTotal = 0; distanceMax = 0; atstumasMin = 4000; ilga trukmė2, atstumas2, vidutinisAtstumas2, vidutinis AtstumasOlimpietis2; // Nustatykite matavimų, kuriuos reikia atlikti, skaičių (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"); // Paimkite vidutinį atstumą nuo rodmenų vidurkisDistance2 = distanceTotal/10; Serial.print („Sensor2 mediumDistance2“); Serijinis atspaudas (vidutinis atstumas2); Serial.println ("mm"); // Pašalinkite aukščiausias ir žemiausias matavimų vertes, kad išvengtumėte klaidingų rodmenų vidurkisDistanceTemp = distanceTotal - (distanceMax+distanceMin); mediumDistanceOlympian2 = keskmineDistanceTemp/8; Serial.print („Sensor2 mediumDistanceOlympian2“); Serial.print (vidurkisDistanceOlympian2); Serial.println ("mm"); // Iš naujo nustatyti temp reikšmes distanceTotal = 0; distanceMax = 0; atstumasMin = 4000; if (averageDistanceOlympian1 + averageDistanceOlympian2 <emptyBoxDistance) {return true; } else {return false; }}

Pagrindinis korpusas

Pagrindiniame tekste yra ta pati logika, paaiškinta šio skyriaus viršuje, tačiau parašyta kodu. Failą galima atsisiųsti žemiau.

Įspėjimas

Norint rasti konstantas, buvo atlikta daug bandymų: emptyBoxDistance, žingsniai ir maksimalus greitis bei pagreitis sąrankoje.

7 žingsnis: galimi patobulinimai

Galimi patobulinimai
Galimi patobulinimai

- Mums reikia grįžtamojo ryšio apie dėžutės padėtį, kad būtų užtikrinta, jog pradžioje ji visada yra tinkamoje padėtyje, kad pasirinktų objektą. Galimi įvairūs problemos sprendimo būdai, tačiau paprasta būtų nukopijuoti sistemą, kurią randame 3D spausdintuvuose, naudodami jungiklį viename dėžutės kelio gale.

-Dėl problemų, kurias radome su ultragarso aptikimu, galime ieškoti tam šiai funkcijai alternatyvų: KY-008 lazerio ir lazerio detektoriaus (vaizdo), talpinių jutiklių.

8 žingsnis: ribojantys veiksniai

Šis projektas veikia taip, kaip aprašyta instrukcijose, tačiau atliekant šiuos veiksmus reikia būti ypač atsargiems:

Ultragarso jutiklių kalibravimas

Ultragarso jutiklių išdėstymo kampas objekto atžvilgiu, kurį jie turi aptikti, yra labai svarbus tinkamam prototipo veikimui. Šiam projektui ultragarso jutiklių orientacijai buvo pasirinktas 12,5 ° kampas į normalų, tačiau geriausias kampas turėtų būti nustatytas eksperimentiškai, įrašant atstumo rodmenis naudojant įvairius objektus.

Maitinimo šaltinis

Žingsninio variklio DRV8825 reikiama galia yra 12 V ir nuo 0,2 iki 1 ampero. „Arduino“taip pat gali būti maitinamas ne daugiau kaip 12 V ir 0,2 Amp, naudojant „Arduino“lizdo įvestį. Tačiau ypač atsargiai reikia naudotis tuo pačiu maitinimo šaltiniu tiek „Arduino“, tiek žingsninio variklio vairuotojui. Jei maitinama iš įprasto maitinimo lizdo, naudojant, pavyzdžiui, 12V/2A kintamosios/nuolatinės srovės adapterio maitinimo šaltinį, prieš tiekiant energiją į arduino ir žingsninio variklio tvarkyklę, grandinėje turi būti įtampos reguliatorius ir diodai.

Dėžutės išdėstymas

Nors šiame projekte naudojamas žingsninis variklis, kuris normaliomis sąlygomis labai tiksliai grįžta į pradinę padėtį, gera praktika yra nustatyti nukreipimo mechanizmą, jei įvyktų klaida. Projektas nėra toks, kaip jis yra, tačiau jį įgyvendinti yra gana paprasta. Tam reikia pridėti mechaninį jungiklį, esantį pradinėje dėžutės padėtyje, kad dėžutė paspaudus jungiklį žinotų, kad yra pradinėje padėtyje.

Stepper vairuotojas DRV8825 Tuning

Stepper vairuotojui reikia sureguliuoti, kad jis veiktų su žingsniniu varikliu. Tai daroma eksperimentiškai, sukant DRV8825 mikroschemos potenciometrą (varžtą) taip, kad į variklį būtų tiekiamas tinkamas srovės kiekis. Taigi, šiek tiek pasukite potenciometro varžtą, kol variklis veikia liesai.

9 žingsnis: kreditai

Šis projektas buvo atliktas kaip mechatronikos kurso dalis 2018–2019 mokslo metais, skirtas Bruface magistrui Briuselio universitete (ULB) - Vrije Universiteit Brussel (VUB).

Autoriai yra:

Maksimas Decleire'as

Lidia Gomez

Markus Poder

Adriana Puentes

Narjisse Snoussi

Ypatingas ačiū mūsų vadovui Albertui de Beirui, kuris taip pat padėjo mums viso projekto metu.

Rekomenduojamas: