Sisällysluettelo:

Lajittelulaatikko - Tunnista ja lajittele roskakorisi: 9 vaihetta
Lajittelulaatikko - Tunnista ja lajittele roskakorisi: 9 vaihetta

Video: Lajittelulaatikko - Tunnista ja lajittele roskakorisi: 9 vaihetta

Video: Lajittelulaatikko - Tunnista ja lajittele roskakorisi: 9 vaihetta
Video: Tee itse legopöytä 2024, Heinäkuu
Anonim
Image
Image
Kuinka se toimii
Kuinka se toimii

Oletko koskaan nähnyt ketään, joka ei kierrätä tai tekee sitä huonolla tavalla?

Oletko koskaan toivonut konetta, joka kierrättäisi sinulle?

Jatka projektimme lukemista, et tule katumaan sitä!

Sorter bin on projekti, jolla on selkeä motivaatio auttaa kierrätystä maailmassa. Kuten tiedetään, kierrätyksen puute aiheuttaa planeetallamme vakavia ongelmia, kuten raaka -aineiden katoamista ja meren saastumista.

Tästä syystä tiimimme on päättänyt kehittää pienimuotoisen projektin: lajittelulaitteen, joka pystyy erottamaan roskat eri vastaanottajille sen mukaan, onko materiaali metallista vai ei-metallista. Tulevissa versioissa lajittelulaite voitaisiin ekstrapoloida laajamittaiseksi, jolloin roskat voidaan jakaa kaikenlaisiin materiaaleihin (puu, muovi, metalli, orgaaninen …).

Koska päätarkoitus on erottaa metalli tai muu kuin metalli, lajittelulaite on varustettu induktiivisilla antureilla mutta myös ultraääni-antureilla, jotta voidaan havaita, onko säiliössä jotain. Lisäksi säiliö tarvitsee lineaarisen liikkeen roskien siirtämiseksi kahteen laatikkoon, joten mm. Askelmoottori valitaan.

Seuraavissa osissa tätä projektia selitetään askel askeleelta.

Vaihe 1: Näin se toimii

Kuinka se toimii
Kuinka se toimii
Kuinka se toimii
Kuinka se toimii

Lajittelusäiliö on suunniteltu tekemään käyttäjälle suhteellisen helpoksi: roskat on vietävä ylälevyyn asetetun reiän läpi, keltaista painiketta on painettava ja prosessi alkaa ja päättyy roskaan yhdeksi vastaanottajista. Mutta kysymys kuuluu nyt… miten tämä prosessi toimii sisäisesti?

Kun prosessi on alkanut, vihreä LED palaa. Sitten ultraäänianturit, jotka on kiinnitetty ylälevyyn tuen kautta, aloittavat työnsä selvittääkseen, onko laatikon sisällä esine vai ei.

Jos laatikossa ei ole mitään esineitä, punainen LED -valo syttyy ja vihreä sammuu. Päinvastoin, jos esine on olemassa, induktiiviset anturit aktivoidaan havaitsemaan, onko esine metalli vai ei-metalli. Kun materiaalityyppi on määritetty, punaiset ja keltaiset LED -valot syttyvät ja laatikko siirtyy suuntaan tai toiseen suuntaan askelmoottorin vetämän materiaalin mukaan.

Kun laatikko saapuu aivohalvauksen loppuun ja esine on pudotettu oikealle vastaanottajalle, laatikko palaa alkuperäiseen asentoonsa. Lopuksi, kun laatikko on alkuasennossa, keltainen LED sammuu. Lajittelulaite on valmis aloittamaan uudelleen samalla tavalla. Tämä viimeisissä kappaleissa kuvattu prosessi näkyy myös vaiheessa 6: Ohjelmointi liitteenä olevassa työnkulkukaavion kuvassa.

Vaihe 2: Materiaaliluettelo (BOM)

Mekaaniset osat:

  • Ostettiin osat pohjarakenteelle

    • Metallinen rakenne [Linkki]
    • Harmaa laatikko [Linkki]
  • 3D tulostin

    PLA kaikille painetuille osille (voidaan käyttää myös muita materiaaleja, kuten ABS)

  • Laserleikkauskone

    • MDF 3 mm
    • Plexiglass 4mm
  • Lineaarinen laakerisarja [linkki]
  • Lineaarinen laakeri [linkki]
  • Akseli [linkki]
  • Akselin pidike (x2) [Linkki]

Elektroniset osat:

  • Moottori

    Lineaarinen askelmoottori Nema 17 [Linkki]

  • Akku

    12 V akku [linkki]

  • Anturit

    • 2 ultraäänianturia HC-SR04 [linkki]
    • 2 induktiivista anturia LJ30A3-15 [Link]
  • Mikro -ohjain

    1 arduino UNO -levy

  • Lisäkomponentit

    • Kuljettaja DRV8825
    • 3 LEDiä: punainen, vihreä ja oranssi
    • 1 -painiketta
    • Jotkut hyppyjohdot, johdot ja juotoslevyt
    • Leipälauta
    • USB-kaapeli (Arduino-PC-liitäntä)
    • Kondensaattori: 100uF

Vaihe 3: Mekaaninen suunnittelu

Image
Image
Mekaaninen suunnittelu
Mekaaninen suunnittelu
Mekaaninen suunnittelu
Mekaaninen suunnittelu

Edellisissä kuvissa kaikki kokoonpanon osat on esitetty.

Mekaanisessa suunnittelussa SolidWorks on käytetty CAD -ohjelmassa. Kokoonpanon eri osat on suunniteltu ottaen huomioon valmistusmenetelmä, joka valmistetaan.

Laserleikatut osat:

  • MDF 3 mm

    • Pilarit
    • Päällimmäinen lautanen
    • Ultraäänianturit tukevat
    • Induktiiviset anturit tukevat
    • Roskakori
    • Akun tuki
    • Leipälauta ja Arduino -tuki
  • Plexiglass 4mm

    Alusta

3D -painetut osat:

  • Pylväiden pohja
  • Lineaarisen liikkeen voimansiirtoelementti askelmoottorista
  • Askelmoottori ja laakerituet
  • Seinäkiinnitysosat roskakoriin

Näiden osien valmistusta varten. STEP -tiedostot on tuotava oikeaan muotoon, riippuen koneesta, jota aiotaan käyttää tähän tarkoitukseen. Tässä tapauksessa laserleikkauskoneessa on käytetty.dxf -tiedostoja ja 3D -tulostimessa (Ultimaker 2).gcode -tiedostoja.

Tämän projektin mekaaninen kokoonpano löytyy tämän osan liitteenä olevasta. STEP -tiedostosta.

Vaihe 4: Elektroniikka (komponenttivalinnat)

Tässä osassa tehdään lyhyt kuvaus käytetyistä elektronisista komponenteista ja selitys komponenttivalinnoista.

Arduino UNO -levy (mikro -ohjaimena):

Avoimen lähdekoodin laitteisto ja ohjelmisto. Halpa, helposti saatavilla, helppo koodata. Tämä levy on yhteensopiva kaikkien käyttämiemme komponenttien kanssa, ja löydät helposti useita opetusohjelmia ja foorumeita, jotka ovat erittäin hyödyllisiä ongelmien oppimisessa ja ratkaisemisessa.

Moottori (lineaarinen askelmoottori Nema 17):

Onko eräänlainen askelmoottori, joka jakaa täyden kierroksen tietyllä portaalla. Tämän seurauksena sitä hallitaan antamalla tietty määrä vaiheita. Se on vankka ja tarkka eikä vaadi mitään antureita sen todellisen aseman hallitsemiseksi. Moottorin tehtävänä on ohjata heitetyn esineen sisältävän laatikon liikettä ja pudottaa se oikeaan roskakoriin.

Mallin valitsemiseksi teit joitakin laskelmia vaaditusta suurimmasta vääntömomentista lisäämällä varmuuskerroin. Tulosten osalta ostimme mallin, joka kattaa suurelta osin lasketun arvon.

DRV8825 -ohjain:

Tätä korttia käytetään kaksisuuntaisen askelmoottorin ohjaamiseen. Siinä on säädettävä virranhallinta, jonka avulla voit asettaa maksimivirran potentiometrillä sekä kuusi eri askelresoluutiota: täysi askel, puolivaihe, 1/4 askelta, 1/8 askelta, 1/16- vaihe ja 1/32 vaihetta (käytimme lopulta täysvaihetta, koska emme löytäneet tarvetta mennä mikrosteppaukseen, mutta sitä voidaan silti käyttää liikkeen laadun parantamiseen).

Ultraäänianturit:

Nämä ovat eräänlaisia akustisia antureita, jotka muuttavat sähköisen signaalin ultraääneksi ja päinvastoin. He käyttivät ensin lähetetyn äänisignaalin kaiun vastausta etäisyyden laskemiseen kohteeseen. Käytimme niitä havaitsemaan, onko laatikossa esine tai ei. Niitä on helppo käyttää ja ne antavat tarkan mittauksen.

Vaikka tämän anturin lähtö on arvo (etäisyys), muutamme kynnyksen määrittämään, onko kohde läsnä vai ei.

Induktiiviset anturit:

Faradayn lain mukaan se kuuluu kosketuksettoman elektronisen läheisyysanturin luokkaan. Sijoitimme ne liikkuvan laatikon alaosaan, objektia tukevan pleksilasialustan alle. Niiden tavoitteena on erottaa metalli- ja ei-metalliesineet, jolloin saadaan digitaalinen lähtö (0/1).

LEDit (vihreä, keltainen, punainen):

Heidän tehtävänsä on kommunikoida käyttäjän kanssa:

-Vihreä LED palaa: robotti odottaa esinettä.

-Punainen LED palaa: kone toimii, et voi heittää mitään esineitä.

-Keltainen LED palaa: kohde havaitaan.

12V akku tai 12V virtalähde + 5V USB -virta:

Anturien ja askelmoottorin virransyöttöön tarvitaan jännitelähde. Arduinon virransyöttöön tarvitaan 5 V: n virtalähde. Tämä voidaan tehdä 12 V: n akun kautta, mutta on parasta hankkia erillinen 5 V: n virtalähde Arduinolle (kuten USB -kaapelilla ja virtalähteeseen tai tietokoneeseen kytketyllä puhelinsovittimella).

Löysimme ongelmia:

  • Induktiivinen anturin tunnistus, emme saaneet haluttua tarkkuutta, koska joskus väärin sijoitettua metalliesinettä ei havaita. Tämä johtuu kahdesta rajoituksesta:

    • Anturien peittämä pinta -ala neliömäisellä alustalla on alle 50% siitä (joten pieniä esineitä ei voida havaita). Sen ratkaisemiseksi suosittelemme käyttämään 3 tai 4 induktiivista anturia varmistaaksemme, että yli 70% alueesta on peitetty.
    • Anturien tunnistusetäisyys on rajoitettu 15 mm: iin, joten jouduimme käyttämään hienoa pleksilasialustaa. Tämä voi myös olla toinen rajoitus, joka havaitsee outoja muotoja.
  • Ultraäänitunnistus: monimutkaisesti muotoillut esineet aiheuttavat jälleen ongelmia, koska antureiden lähettämä signaali heijastuu huonosti ja palaa anturiin myöhemmin kuin pitäisi.
  • Akku: Meillä on joitain ongelmia akun toimittaman virran ohjaamisessa ja sen ratkaisemiseksi käytimme lopulta virtalähdettä. Kuitenkin muita ratkaisuja, kuten diodin käyttöä, voidaan suorittaa.

Vaihe 5: Elektroniikka (liitännät)

Elektroniikka (liitännät)
Elektroniikka (liitännät)
Elektroniikka (liitännät)
Elektroniikka (liitännät)

Tässä osassa esitetään eri komponenttien johdotus yhteensä. Se näyttää myös mihin Arduinon nastaan jokainen komponentti on kytketty.

Vaihe 6: Ohjelmointi

Ohjelmointi
Ohjelmointi

Tässä osassa selitetään lokerointilaitteen ohjelmointilogiikka.

Ohjelma on jaettu neljään vaiheeseen, jotka ovat seuraavat:

  1. Alusta järjestelmä
  2. Tarkista esineiden läsnäolo
  3. Tarkista läsnä olevan objektin tyyppi
  4. Siirrä laatikko

Alla on yksityiskohtainen kuvaus jokaisesta vaiheesta:

Vaihe 1 Alusta järjestelmä

LED -paneeli (3) - asetettu Kalibroiva LED (punainen) KORKEA, Valmis -LED (vihreä) LOW, Kohde läsnä (keltainen) LOW

Tarkista, että askelmoottori on alkuasennossa

  • Suorita ultraäänianturin testi mitataksesi etäisyyden sivusta laatikon seinään

    • Lähtöasento == 0 >> Päivitä Ready LED HIGH ja Calibrating LED LOW -> vaihe 2
    • Lähtöasento! = 0 >> ultraäänianturien digitaalinen lukuarvo ja anturin arvojen perusteella:

      • Päivitä moottorin liikkuvan LED -arvon arvo KORKEA.
      • Suorita siirtolaatikkoa, kunnes molempien ultraäänianturien arvo on <kynnysarvo.

Päivitys alkuasentoon = 1 >> Päivitä LED Ready HIGH ja moottori liikkuu LOW ja kalibrointi LOW >> vaihe 2

Vaihe 2

Tarkista esineiden läsnäolo

Suorita ultraäänikohteen tunnistus

  • Objekti läsnä == 1 >> Päivitä objektin läsnäolon merkkivalo KORKEA >> Vaihe 3
  • Esillä oleva esine == 0 >> Älä tee mitään

Vaihe 3

Tarkista läsnä olevan objektin tyyppi

Suorita induktiivisen anturin tunnistus

  • induktiivinen tila = 1 >> Vaihe 4
  • induktiivinen tila = 0 >> Vaihe 4

Vaihe 4

Siirrä laatikko

Käynnistä moottori

  • induktiivinen tila == 1

    Päivitä moottorin liikkuva LED KORKEA >> Aseta moottori siirtymään vasemmalle, (päivitä alkuperäinen sijainti = 0) viive ja siirry takaisin oikealle >> Vaihe 1

  • induktiivinen tila == 0

    Päivitä moottorin liikkuva LED KORKEA >> Aseta moottori liikkumaan oikealle, (päivitä alkuperäinen sijainti = 0), viivytä ja siirry taaksepäin vasemmalle >> Vaihe 1

Toiminnot

Kuten ohjelmointilogiikasta voidaan nähdä, ohjelma toimii suorittamalla toimintoja, joilla on tietty tavoite. Esimerkiksi ensimmäinen askel on alustaa järjestelmä, joka sisältää toiminnon "Tarkista askelmoottori on alkuasennossa". Toisessa vaiheessa tarkistetaan kohteen olemassaolo, joka itsessään on toinen toiminto ("Ultraäänikohteen tunnistus" -toiminto). Ja niin edelleen.

Vaiheen 4 jälkeen ohjelma on suoritettu kokonaan ja se palaa vaiheeseen 1 ennen kuin se käynnistyy uudelleen.

Päärungossa käytettävät toiminnot on määritelty alla.

Ne ovat vastaavasti:

  • induktiivinen testi ()
  • moveBox (induktiivinen tila)
  • ultraääniObjectDetection ()

// Tarkista onko esine metallinen vai ei

bool inductiveTest () {if (digitalRead (inductiveSwitchRight) == 1 || digitalRead (inductiveSwitchLeft == 0)) {return true; else {return false; }} void moveBox (bool inductiveState) {// Laatikko siirtyy vasemmalle, kun metalli havaitaan, ja inductiveState = true if (inductiveState == 0) {stepper.moveTo (vaiheet); // satunnainen sijainti loppuun testattavaksi stepper.runToPosition (); viive (1000); stepper.moveTo (0); stepper.runToPosition (); viive (1000); } else if (induktiivinen tila == 1) {stepper.moveTo (-vaiheet); // satunnainen sijainti loppuun testattavaksi stepper.runToPosition (); viive (1000); stepper.moveTo (0); // satunnainen sijainti loppuun testattavaksi stepper.runToPosition (); viive (1000); }} boolean ultraääniObjectDetection () {pitkä kesto1, etäisyys1, kestoTemp, etäisyysLämpötila, keskimääräinenDistance1, keskimääräinenDistanceTemp, keskimääräinenDistanceOlympian1; // Määritä pitkän matkan mittausten määräMax = 0; pitkä matkaMin = 4000; pitkä matkaYhteensä = 0; for (int i = 0; i distanceMax) {distanceMax = etäisyysTemp; } if (distanceTemp <distanceMin) {distanceMin = distanceTemp; } distanceTotal+= distanceTemp; } Serial.print ("Sensor1 maxDistance"); Sarjajälki (etäisyysMax); Sarja.println ("mm"); Serial.print ("Sensor1 minDistance"); Serial.print (distanceMin); Sarja.println ("mm"); // Ota keskimääräinen etäisyys lukemista keskimääräinenDistance1 = distanceTotal/10; Serial.print ("Anturi1 keskimääräinen etäisyys1"); Sarjajälki (keskimääräinen etäisyys1); Sarja.println ("mm"); // Poista mittausten korkeimmat ja pienimmät arvot välttääksesi virheelliset lukemat keskimääräinenDistanceTemp = distanceTotal - (etäisyysMax+etäisyysMin); middleDistanceOlympian1 = keskimääräinenDistanceTemp/8; Serial.print ("Anturi1 keskimääräinen etäisyysOlympialainen1"); Serial.print (keskimääräinen etäisyysOlympialainen1); Sarja.println ("mm");

// Palauta lämpötila -arvot

distanceTotal = 0; etäisyysMax = 0; etäisyysMin = 4000; pitkä kesto2, etäisyys2, keskimääräinenEtäisyys2, keskimääräinen etäisyysOlympialainen2; // Määritä suoritettavien mittausten määrä (int i = 0; i distanceMax) {distanceMax = distanceTemp; } if (distanceTemp <distanceMin) {distanceMin = distanceTemp; } distanceTotal+= distanceTemp; } Serial.print ("Sensor2 maxDistance"); Sarjajälki (etäisyysMax); Sarja.println ("mm"); Serial.print ("Sensor2 minDistance"); Serial.print (distanceMin); Sarja.println ("mm"); // Ota keskimääräinen etäisyys lukemista keskimääräinenDistance2 = distanceTotal/10; Serial.print ("Anturi2 keskimääräinen etäisyys2"); Sarjajälki (keskimääräinen etäisyys2); Sarja.println ("mm"); // Poista mittausten korkeimmat ja alimmat arvot välttääksesi virheelliset lukemat keskimääräinenDistanceTemp = distanceTotal - (etäisyysMax+etäisyysMin); middleDistanceOlympian2 = keskimääräinenDistanceTemp/8; Serial.print ("Sensor2 keskimääräinen etäisyysOlympialainen2"); Sarjajälki (keskimääräinen etäisyysOlympialainen2); Sarja.println ("mm"); // Palauta lämpötila -arvot distanceTotal = 0; etäisyysMax = 0; etäisyysMin = 4000; if (keskimääräinenDistanceOlympian1 + keskimääräinenDistanceOlympian2 <emptyBoxDistance) {return true; } else {return false; }}

Päärunko

Päärungossa on sama logiikka, joka on selitetty tämän osan yläosassa, mutta kirjoitettu koodilla. Tiedosto on ladattavissa alla.

Varoitus

Vakioiden löytämiseksi tehtiin monia testejä: emptyBoxDistance, askeleet ja maksiminopeus ja kiihtyvyys asetuksissa.

Vaihe 7: Mahdolliset parannukset

Mahdolliset parannukset
Mahdolliset parannukset

- Tarvitsemme palautetta laatikon sijainnista varmistaaksemme, että se on aina oikeassa paikassa valitakseen esineen alussa. Ongelman ratkaisemiseksi on saatavilla erilaisia vaihtoehtoja, mutta helppo vaihtoehto voisi olla kopioida 3D -tulostimissa löydetty järjestelmä käyttämällä laatikon polun toisessa päässä olevaa kytkintä.

-Ultraäänitunnistuksessa havaittujen ongelmien vuoksi voimme etsiä vaihtoehtoja tälle toiminnolle: KY-008 laser- ja lasertunnistin (kuva), kapasitiiviset anturit.

Vaihe 8: Rajoittavat tekijät

Tämä projekti toimii ohjeissa kuvatulla tavalla, mutta seuraavien vaiheiden aikana on oltava erityisen varovainen:

Ultraääni -anturien kalibrointi

Kulma, johon ultraäänianturit on sijoitettu suhteessa havaittavaan kohteeseen, on ratkaisevan tärkeä prototyypin oikean toiminnan kannalta. Tässä projektissa ultraäänianturien suuntautumiseen valittiin 12,5 °: n kulma normaaliin nähden, mutta paras kulma on määritettävä kokeellisesti tallentamalla etäisyyslukemat käyttämällä erilaisia esineitä.

Virtalähde

Askelmoottorin DRV8825 vaadittu teho on 12 V ja 0,2 - 1 ampeeria. Arduinoa voidaan myös käyttää enintään 12 V: n ja 0,2 A: n virralla käyttämällä Arduinon jack -tuloa. Erityistä varovaisuutta on kuitenkin noudatettava käytettäessä samaa virtalähdettä sekä Arduinolle että askelmoottorille. Jos virransyöttö tapahtuu tavallisesta pistorasiasta esimerkiksi 12 V/2A AC/DC -sovittimen virtalähteellä, piirissä on oltava jännitesäädin ja diodit, ennen kuin virta syötetään arduino- ja askelmoottoriohjaimeen.

Laatikon kotiuttaminen

Vaikka tässä projektissa käytetään askelmoottoria, joka normaaliolosuhteissa palaa alkuperäiseen asentoonsa suurella tarkkuudella, on hyvä käytäntö käyttää ohjausmekanismia virheen sattuessa. Projektissa ei sellaisenaan ole kohdistusmekanismia, mutta sen toteuttaminen on melko yksinkertaista. Tätä varten on lisättävä mekaaninen kytkin laatikon alkuasentoon siten, että kun laatikko osuu kytkimeen, se tietää olevansa kotiasennossaan.

Askelohjain DRV8825 Tuning

Askelohjain vaatii virityksen askelmoottorin kanssa toimimiseksi. Tämä tehdään kokeellisesti kääntämällä DRV8825 -sirun potentiometriä (ruuvia) niin, että moottoriin syötetään sopiva määrä virtaa. Käännä siis potentiometrin ruuvia hieman, kunnes moottori toimii laihalla tavalla.

Vaihe 9: Lainat

Tämä projekti tehtiin osana mekatroniikan kurssia lukuvuonna 2018-2019 Bruface Masterille Université Libre de Bruxelles (ULB) - Vrije Universiteit Brussel (VUB).

Kirjoittajat ovat:

Maxime Decleire

Lidia Gomez

Markus Poder

Adriana Puentes

Narjisse Snoussi

Erityiset kiitokset esimiehellemme Albert de Beirille, joka auttoi meitä myös koko projektin ajan.

Suositeltava: