Sadržaj:

Kanta za sortiranje - Otkrijte i sortirajte otpad: 9 koraka
Kanta za sortiranje - Otkrijte i sortirajte otpad: 9 koraka

Video: Kanta za sortiranje - Otkrijte i sortirajte otpad: 9 koraka

Video: Kanta za sortiranje - Otkrijte i sortirajte otpad: 9 koraka
Video: 🚀 RUTUBE и ТОЧКА. Разработка РУТУБА за 5 часов *БЕЗ ВОДЫ* [Next / React / Nest / PostgreSQL / Redux] 2024, Novembar
Anonim
Image
Image
Kako radi
Kako radi

Jeste li ikada vidjeli nekoga ko ne reciklira ili to radi na loš način?

Jeste li ikada poželjeli mašinu koja bi se reciklirala umjesto vas?

Nastavite čitati naš projekt, nećete požaliti!

Sortir kanta je projekat sa jasnom motivacijom da pomogne recikliranju u svetu. Kao što je poznato, nedostatak recikliranja uzrokuje ozbiljne probleme na našoj planeti, poput nestanka sirovina i zagađenja mora, između ostalih.

Iz tog razloga, naš tim je odlučio razviti projekt u malom opsegu: kantu za sortiranje koja može razdvojiti smeće na različite primatelje ovisno o tome je li materijal metal ili nemetal. U budućim verzijama, ta kanta za razvrstavanje mogla bi se ekstrapolirati u velikoj mjeri, dopuštajući podjelu smeća na sve različite vrste materijala (drvo, plastika, metal, organski …).

Budući da je glavna svrha razlikovati metalne ili nemetalne, kanta za razvrstavanje bit će opremljena induktivnim senzorima, ali i ultrazvučnim senzorima kako bi se otkrilo ima li nešto u kanti. Osim toga, kanti će biti potrebno linearno kretanje za premještanje smeća u dvije kutije, stoga je odabran koračni motor.

U sljedećim odjeljcima ovaj će se projekt objasniti korak po korak.

Korak 1: Kako to funkcionira

Kako radi
Kako radi
Kako radi
Kako radi

Kanta za razvrstavanje dizajnirana je tako da korisniku učini rad relativno lakim: smeće se mora unijeti kroz rupu koja se nalazi na gornjoj ploči, pritisnuti žuto dugme i proces počinje, završavajući smećem u jedno primalaca. Ali pitanje je sada … kako taj proces funkcionira interno?

Kada proces započne, zelena LED lampica se pali. Zatim ultrazvučni senzori, pričvršćeni na gornju ploču kroz nosač, započinju svoj rad kako bi utvrdili ima li predmeta unutar kutije ili ne.

Ako unutar kutije nema objekata, crvena LED lampica se uključuje, a zelena isključuje. Naprotiv, ako postoji objekt, aktivirat će se induktivni senzori kako bi se otkrilo je li objekt metalni ili nemetalni. Nakon što se utvrdi vrsta materijala, uključit će se crvena i žuta LED dioda, a kutija će se pomaknuti prema jednom ili suprotnom smjeru, ovisno o vrsti materijala, pogonjenom koračnim motorom.

Kad kutija stigne do kraja poteza i objekt je pao u ispravnog primatelja, okvir će se vratiti u početni položaj. Konačno, sa kutijom u početnom položaju, žuta LED će se isključiti. Sortirač je spreman za ponovno pokretanje po istoj proceduri. Ovaj proces opisan u posljednjim paragrafima prikazan je i na slici dijagrama toka posla priloženom u Koraku 6: Programiranje.

Korak 2: Opis materijala (BOM)

Mehanički dijelovi:

  • Kupljeni dijelovi za donju konstrukciju

    • Metalna struktura [Link]
    • Siva kutija [Veza]
  • 3D štampač

    PLA za sve štampane delove (mogu se koristiti i drugi materijali, poput ABS -a)

  • Mašina za lasersko rezanje

    • MDF 3 mm
    • Pleksiglas 4 mm
  • Set linearnih ležajeva [veza]
  • Linearni ležaj [veza]
  • Vratilo [Veza]
  • Držač vratila (x2) [Veza]

Elektronski dijelovi:

  • Motor

    Linearni koračni motor Nema 17 [Link]

  • Baterija

    12 v baterija [veza]

  • Senzori

    • 2 Ultrazvučni senzor HC-SR04 [Veza]
    • 2 induktivna senzora LJ30A3-15 [Veza]
  • Mikrokontroler

    1 arduino UNO ploča

  • Dodatne komponente

    • DRV8825 upravljački program
    • 3 LED diode: crvena, zelena i narandžasta
    • 1 dugme
    • Neke žice za preskakanje, žice i ploče za lemljenje
    • Breadboard
    • USB kabel (Arduino-PC veza)
    • Kondenzator: 100uF

Korak 3: Mehanički dizajn

Image
Image
Mehanički dizajn
Mehanički dizajn
Mehanički dizajn
Mehanički dizajn

Na prethodnim slikama su prikazani svi dijelovi sklopa.

Za mehanički dizajn, SolidWorks je korišten kao CAD program. Različiti dijelovi sklopa dizajnirani su uzimajući u obzir način proizvodnje koji će se proizvoditi.

Laserski rezani dijelovi:

  • MDF 3 mm

    • Stubovi
    • Gornja ploča
    • Podrška ultrazvučnim senzorima
    • Podrška za induktivne senzore
    • Kutija za smeće
    • Podrška za baterije
    • Breadboard i Arduino podrška
  • Pleksiglas 4 mm

    Platforma

3D štampani delovi:

  • Baza stubova
  • Element za prijenos linearnog kretanja iz koračnog motora
  • Nosači koračnog motora i ležajeva
  • Dijelovi za pričvršćivanje zidova na kutiju za smeće

Za proizvodnju svakog od ovih dijelova,. STEP datoteke trebaju se uvesti u ispravan format, ovisno o stroju koji će se koristiti u tu svrhu. U ovom slučaju,.dxf datoteke su korištene za laserski stroj za rezanje, a.gcode datoteke za 3D pisač (Ultimaker 2).

Mehanički sklop ovog projekta može se pronaći u. STEP datoteci priloženoj u ovom odjeljku.

Korak 4: Elektronika (izbor komponenti)

U ovom odjeljku bit će dat kratak opis korištenih elektroničkih komponenti i objašnjenje izbora komponenti.

Arduino UNO ploča (kao mikrokontroler):

Hardver i softver otvorenog koda. Jeftino, lako dostupno, lako kodiranje. Ova ploča je kompatibilna sa svim komponentama koje smo koristili i lako ćete pronaći više vodiča i foruma koji su od velike pomoći za učenje i rješavanje problema.

Motor (linearni koračni motor Nema 17):

Je tip koračnog motora koji dijeli potpunu rotaciju u određenom broju koraka. Kao posljedica toga, kontrolira se davanjem određenog broja koraka. Robustan je i precizan i ne trebaju nikakvi senzori za kontrolu njegovog stvarnog položaja. Misija motora je kontrolirati kretanje kutije koja sadrži bačeni predmet i ispustiti ga u desnu korpu.

Da biste odabrali model, napravili ste neke proračune maksimalnog potrebnog zakretnog momenta dodajući sigurnosni faktor. Što se tiče rezultata, kupili smo model koji u velikoj mjeri pokriva izračunatu vrijednost.

DRV8825 Upravljački program:

Ova ploča se koristi za upravljanje bipolarnim koračnim motorom. Ima podesivu kontrolu struje koja vam omogućava da podesite maksimalni izlazni tok pomoću potenciometra, kao i šest različitih rezolucija koraka: u punom koraku, u pola koraka, 1/4 koraka, 1/8 koraka, 1/16- korak i 1/32 koraka (konačno smo koristili potpuni korak jer nismo našli potrebu da idemo na mikrokorake, ali se i dalje može koristiti za poboljšanje kvalitete pokreta).

Ultrazvučni senzori:

To su vrsta akustičkih senzora koji pretvaraju električni signal u ultrazvuk i obrnuto. Koristili su eho odziv zvučnog signala koji je prvo emitovan za izračunavanje udaljenosti do objekta. Koristili smo ih za otkrivanje postoji li objekt u kutiji ili ne. Laki su za upotrebu i pružaju tačne mjere.

Iako je izlaz ovog senzora vrijednost (udaljenost), uspostavljanjem praga za utvrđivanje je li objekt prisutan ili ne, transformiramo

Induktivni senzori:

Na osnovu Faradayevog zakona, spada u kategoriju beskontaktnih elektronskih senzora blizine. Postavili smo ih na dno pokretne kutije, ispod platforme od pleksiglasa koja podržava objekt. Njihov cilj je razlikovati metalne i nemetalne predmete koji daju digitalni izlaz (0/1).

LED diode (zelena, žuta, crvena):

Njihova misija je komunicirati s korisnikom:

-Zelena LED lampica svijetli: robot čeka objekt.

-Crvena LED lampica svijetli: mašina radi, ne možete baciti bilo koji predmet.

-Žuta LED lampica uključena: otkriven je objekt.

12V baterija ili 12V izvor napajanja + 5V USB napajanje:

Za napajanje senzora i koračnog motora potreban je izvor napona. Za napajanje Arduina potreban je izvor napajanja od 5 V. To se može učiniti pomoću baterije od 12 V, ali najbolje je imati zaseban izvor napajanja od 5 V za Arduino (kao što je USB kabel i telefonski adapter spojen na izvor napajanja ili na računalo).

Problemi koje smo pronašli:

  • Detekcijom induktivnog senzora nismo dobili željenu preciznost jer se ponekad ne opaža metalni predmet koji je loše postavljen. To je zbog 2 ograničenja:

    • Područje pokriveno senzorima unutar kvadratne platforme predstavlja manje od 50% površine (tako da se mali objekt ne može otkriti). Da biste to riješili, preporučujemo korištenje 3 ili 4 induktivna senzora kako biste osigurali da je više od 70% površine pokriveno.
    • Udaljenost udaljenosti detekcije senzora ograničena je na 15 mm, pa smo se našli prisiljeni koristiti platformu od pleksiglasa. Ovo također može biti još jedno ograničenje za otkrivanje objekata čudnog oblika.
  • Ultrazvučna detekcija: opet, objekti oblikovani na složen način stvaraju probleme jer se signal koji emitiraju senzori loše reflektira i vraća se senzoru kasnije nego što bi trebao.
  • Baterija: imamo nekih problema s kontrolom struje koju isporučuje baterija i kako bismo je riješili, konačno smo upotrijebili izvor napajanja. Međutim, mogu se izvesti i druga rješenja poput upotrebe diode.

Korak 5: Elektronika (veze)

Elektronika (veze)
Elektronika (veze)
Elektronika (veze)
Elektronika (veze)

Ovaj odjeljak prikazuje ožičenje različitih komponenti stavljenih zajedno. Također pokazuje na koji je pin na Arduinu spojena svaka komponenta.

Korak 6: Programiranje

Programiranje
Programiranje

Ovaj odjeljak objašnjava logiku programiranja koja stoji iza stroja za sortiranje kanti.

Program je podijeljen u 4 koraka, a to su:

  1. Pokrenite sistem
  2. Provjerite prisutnost objekata
  3. Provjerite vrstu prisutnog objekta
  4. Premjesti kutiju

Za detaljan opis svakog koraka pogledajte dolje:

Korak 1 Pokrenite sistem

LED ploča (3) - postavljena Kalibracijska LED (crvena) VISOKA, Spremna LED (zelena) LOW, Objekt prisutan (žuta) LOW

Provjerite je li koračni motor u početnom položaju

  • Pokrenite test ultrazvučnog senzora za mjerenje udaljenosti od strane do zida kutije

    • Početni položaj == 0 >> Ažurirajte vrijednosti Ready LED HIGH i Calibrating LED LOW -> korak 2
    • Početna pozicija! = 0 >> digitalna očitana vrijednost ultrazvučnih senzora i na osnovu vrijednosti senzora:

      • Ažuriranje vrijednosti LED -a u pokretu HIGH.
      • Pokrenite okvir za pomicanje dok vrijednost oba ultrazvučna senzora ne bude <vrijednost praga.

Ažuriranje vrijednosti početnog položaja = 1 >> Ažuriranje vrijednosti LED -a spremno HIGH i motora koji se kreće LOW i kalibrira LOW >> korak 2

Korak 2

Provjerite prisutnost objekata

Pokrenite ultrazvučno otkrivanje objekata

  • Objekt je prisutan == 1 >> Ažuriraj vrijednost objekta koji je prisutan LED HIGH >> Korak 3
  • Objekt je prisutan == 0 >> Ne radite ništa

Korak 3

Provjerite vrstu prisutnog objekta

Pokrenite otkrivanje induktivnog senzora

  • inductiveState = 1 >> Korak 4
  • inductiveState = 0 >> Korak 4

Korak 4

Premjesti kutiju

Pokrenite rad motora

  • inductiveState == 1

    Ažuriranje LED -a u pokretu motora HIGH >> Omogućite da se motor pomakne ulijevo, (ažuriranje početne pozicije = 0) odgodi i pomakne se nazad desno >> Korak 1

  • inductiveState == 0

    Ažuriranje LED -a u pokretu motora HIGH >> Omogućite da se motor pomakne udesno, (ažurirajte početni položaj = 0), odgodite i pomaknite se nazad lijevo >> Korak 1

Funkcije

Kao što se može vidjeti iz programske logike, program radi izvršavanjem funkcija sa određenim ciljem. Na primjer, prvi korak je inicijalizacija sistema koji sadrži funkciju "Provjerite je li koračni motor u početnom položaju". Drugi korak zatim provjerava prisutnost objekta koji je sam po sebi druga funkcija (funkcija "Ultrazvučno otkrivanje objekata"). I tako dalje.

Nakon koraka 4, program je u potpunosti izvršen i vratit će se na korak 1 prije ponovnog izvođenja.

Dolje su definirane funkcije koje se koriste u glavnom tijelu.

Oni su:

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

// Provjerite je li objekt metalni ili nije

bool inductiveTest () {if (digitalRead (inductiveSwitchRight) == 1 || digitalRead (inductiveSwitchLeft == 0)) {return true; else {return false; }} void moveBox (bool inductiveState) {// Okvir ide lijevo kada se otkrije metal i inductiveState = true if (inductiveState == 0) {stepper.moveTo (koraci); // nasumična pozicija na kraju za testiranje stepper.runToPosition (); kašnjenje (1000); stepper.moveTo (0); stepper.runToPosition (); kašnjenje (1000); } else if (inductiveState == 1) {stepper.moveTo (-steps); // nasumična pozicija na kraju za testiranje stepper.runToPosition (); kašnjenje (1000); stepper.moveTo (0); // nasumična pozicija na kraju za testiranje stepper.runToPosition (); kašnjenje (1000); }} boolean ultrasonicObjectDetection () {long duration1, distance1, durationTemp, distanceTemp, averageDistance1, averageDistanceTemp, averageDistanceOlympian1; // Definiranje broja mjerenja za dugo rastojanjeMax = 0; na velike udaljenostiMin = 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"); // Uzmite prosječnu udaljenost od očitanja averageDistance1 = distanceTotal/10; Serial.print ("Sensor1 averageDistance1"); Serial.print (averageDistance1); Serial.println ("mm"); // Uklonite najveću i najnižu vrijednost mjerenja kako biste izbjegli pogrešna očitanja averageDistanceTemp = distanceTotal - (distanceMax+distanceMin); averageDistanceOlympian1 = averageDistanceTemp/8; Serial.print ("Sensor1 averageDistanceOlympian1"); Serial.print (averageDistanceOlympian1); Serial.println ("mm");

// Vraćanje privremenih vrijednosti

distanceTotal = 0; distanceMax = 0; distanceMin = 4000; dugo trajanje2, udaljenost2, prosječna udaljenost2, prosječna udaljenostolimpijca2; // Definiranje broja mjerenja za (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"); // Uzmite prosječnu udaljenost od očitanja averageDistance2 = distanceTotal/10; Serial.print ("Sensor2 averageDistance2"); Serial.print (averageDistance2); Serial.println ("mm"); // Uklonite najveću i najnižu vrijednost mjerenja kako biste izbjegli pogrešna očitanja averageDistanceTemp = distanceTotal - (distanceMax+distanceMin); averageDistanceOlympian2 = averageDistanceTemp/8; Serial.print ("Sensor2 averageDistanceOlympian2"); Serial.print (averageDistanceOlympian2); Serial.println ("mm"); // Vraćanje temp. Vrijednosti distanceTotal = 0; distanceMax = 0; distanceMin = 4000; if (averageDistanceOlympian1 + averageDistanceOlympian2 <emptyBoxDistance) {return true; } else {return false; }}

Glavni dio

Glavno tijelo sadrži istu logiku objašnjenu na vrhu ovog odjeljka, ali napisanu u kodu. Datoteka je dostupna za preuzimanje ispod.

Upozorenje

Mnogi testovi su izvedeni kako bi se pronašle konstante: emptyBoxDistance, koraci i maksimalna brzina te ubrzanje u postavljanju.

Korak 7: Moguća poboljšanja

Moguća poboljšanja
Moguća poboljšanja

- Potrebne su nam povratne informacije o položaju kutije kako bismo bili sigurni da je uvijek na pravim pozicijama za odabir objekta na početku. Dostupne su različite opcije za rješavanje problema, ali jednostavna bi mogla biti kopiranje sistema koji nalazimo u 3D štampačima pomoću prekidača na jednom kraju putanje kutije.

-Zbog problema koje smo otkrili ultrazvučnom detekcijom, možemo potražiti neke alternative za tu funkciju: KY-008 Laser i laserski detektor (slika), kapacitivni senzori.

Korak 8: Ograničavajući faktori

Ovaj projekt funkcionira kako je opisano u uputama, ali se mora voditi računa o sljedećim koracima:

Kalibracija ultrazvučnih senzora

Kut pod kojim se postavljaju ultrazvučni senzori u odnosu na objekt koji moraju otkriti od presudne je važnosti za pravilno funkcioniranje prototipa. Za ovaj projekt, za orijentaciju ultrazvučnih senzora odabran je kut od 12,5 ° u odnosu na normalu, ali najbolji kut treba odrediti eksperimentalno snimanjem očitanja udaljenosti pomoću različitih objekata.

Izvor napajanja

Potrebna snaga za upravljački program koračnog motora DRV8825 je 12V i između 0,2 i 1 Amp. Arduino se također može napajati s maksimalnih 12V i 0,2 Amp pomoću priključka na Arduinu. Međutim, morate biti posebno oprezni ako koristite isti izvor napajanja i za Arduino i za upravljački program koračnog motora. Ako se napaja iz obične utičnice za napajanje, na primjer za napajanje AC/DC adaptera od 12V/2A, u krugu bi trebao biti regulator napona i diode prije nego što se napajanje uključi u arduino i upravljački program koračnog motora.

Homing the Box

Iako ovaj projekt koristi koračni motor koji se u normalnim uvjetima s velikom točnošću vraća u početni položaj, dobra je praksa imati mehanizam za navođenje u slučaju greške. Ovakav projekt nema mehanizam za navođenje, ali ga je vrlo jednostavno implementirati. U tu svrhu treba dodati mehanički prekidač na početnom položaju kutije tako da kada kutija pritisne prekidač, zna da je u svom početnom položaju.

Stepper driver DRV8825 Tuning

Steper drajveru je potrebno podešavanje za rad sa koračnim motorom. To se radi eksperimentalno okretanjem potenciometra (vijka) na čipu DRV8825 tako da se odgovarajućoj količini struje napaja motor. Dakle, lagano okrećite potenciometarski vijak dok motor ne djeluje mršavo.

Korak 9: Krediti

Ovaj projekat je urađen u okviru kursa mehatronike tokom akademske godine 2018-2019 za magistra Brufacea na Univerzitetu Libre de Bruxelles (ULB) - Vrije Universiteit Brussel (VUB).

Autori su:

Maxime Decleire

Lidia Gomez

Markus Poder

Adriana Puentes

Narjisse Snoussi

Posebno se zahvaljujemo našem supervizoru Albertu de Beiru koji nam je pomogao i tokom cijelog projekta.

Preporučuje se: