Kazalo:

Koš za razvrščanje - zaznavanje in razvrščanje smeti: 9 korakov
Koš za razvrščanje - zaznavanje in razvrščanje smeti: 9 korakov

Video: Koš za razvrščanje - zaznavanje in razvrščanje smeti: 9 korakov

Video: Koš za razvrščanje - zaznavanje in razvrščanje smeti: 9 korakov
Video: ПРИВОЗ. ОДЕССА МАМА. Рецепт САЛО. ОБЗОР НОЖЕЙ 2024, Julij
Anonim
Image
Image
Kako deluje
Kako deluje

Ste kdaj videli nekoga, ki ne reciklira ali to počne na slab način?

Ste si kdaj zaželeli stroj, ki bi ga recikliral?

Še naprej berite naš projekt, ne bo vam žal!

Sorter bin je projekt z jasno motivacijo za pomoč pri recikliranju po vsem svetu. Kot je znano, pomanjkanje recikliranja povzroča resne težave na našem planetu, med drugim izginotje surovin in onesnaženje morja.

Zato se je naša ekipa odločila, da bo razvila projekt v majhnem obsegu: sortirnik, ki lahko loči smeti na različne prejemnike, odvisno od tega, ali je material kovinski ali nekovinski. V prihodnjih različicah bi ta sortirnik lahko ekstrapolirali v velikem obsegu, kar bi omogočilo delitev smeti na vse različne vrste materialov (les, plastika, kovina, organski …).

Ker je glavni namen razlikovati med kovinskimi in nekovinskimi, bo sortirnik opremljen z indukcijskimi senzorji, pa tudi z ultrazvočnimi senzorji, da odkrijejo, ali je v košu kaj. Poleg tega bo koš potreboval linearno gibanje za premikanje smeti v obe škatli, zato je izbran koračni motor.

V naslednjih razdelkih bo ta projekt opisan korak za korakom.

1. korak: Kako deluje

Kako deluje
Kako deluje
Kako deluje
Kako deluje

Koš za sortiranje je bil zasnovan tako, da uporabniku olajša delo: smeti je treba vnesti skozi luknjo, ki je nameščena na zgornji plošči, pritisniti rumeni gumb in postopek se začne, konča pa se smeti v eno prejemnikov. Vprašanje pa je … kako ta proces deluje interno?

Ko se postopek začne, zasveti zelena LED. Nato ultrazvočni senzorji, pritrjeni na zgornjo ploščo skozi nosilec, začnejo svoje delo, da ugotovijo, ali je v škatli kakšen predmet ali ne.

Če v škatli ni nobenega predmeta, se prižge rdeča LED, zelena pa ugasne. Nasprotno, če obstaja predmet, se bodo induktivni senzorji aktivirali, da bodo ugotovili, ali je predmet kovinski ali nekovinski. Ko je vrsta materiala določena, se prižgeta rdeča in rumena LED dioda, škatla pa se premakne v eno ali nasprotno smer, odvisno od vrste materiala, ki ga poganja koračni motor.

Ko polje prispe do konca poteze in je predmet padel na pravega prejemnika, se bo polje vrnilo v začetni položaj. Nazadnje, ko je polje v začetnem položaju, se rumena LED ugasne. Razvrščevalnik bo pripravljen za ponovni zagon po istem postopku. Ta postopek, opisan v zadnjih odstavkih, je prikazan tudi na sliki diagrama poteka dela, ki je priložen v 6. koraku: Programiranje.

2. korak: Kontrolni material (BOM)

Mehanski deli:

  • Kupljeni deli za spodnjo konstrukcijo

    • Kovinska struktura [Povezava]
    • Siva škatla [Povezava]
  • 3D tiskalnik

    PLA za vse tiskane dele (lahko se uporabljajo tudi drugi materiali, na primer ABS)

  • Stroj za lasersko rezanje

    • MDF 3 mm
    • Pleksi steklo 4 mm
  • Komplet linearnih ležajev [Povezava]
  • Linearni ležaj [povezava]
  • Gred [Povezava]
  • Nosilec gredi (x2) [Povezava]

Elektronski deli:

  • Motor

    Linearni koračni motor Nema 17 [Povezava]

  • Baterija

    12 v baterija [povezava]

  • Senzorji

    • 2 Ultrazvočni senzor HC-SR04 [Povezava]
    • 2 induktivna senzorja LJ30A3-15 [Povezava]
  • Mikrokrmilnik

    1 arduino UNO plošča

  • Dodatne komponente

    • Gonilnik DRV8825
    • 3 LED diode: rdeča, zelena in oranžna
    • 1 gumb
    • Nekaj skakalnih žic, žic in spajkalnih plošč
    • Ogledna plošča
    • USB kabel (povezava z računalnikom Arduino)
    • Kondenzator: 100uF

3. korak: Mehansko oblikovanje

Image
Image
Mehansko oblikovanje
Mehansko oblikovanje
Mehansko oblikovanje
Mehansko oblikovanje

Na prejšnjih slikah so prikazani vsi deli sklopa.

Za mehansko zasnovo je bil SolidWorks uporabljen kot CAD program. Različni deli sklopa so bili oblikovani ob upoštevanju proizvodne metode, katero bodo izdelali.

Laserski rezani deli:

  • MDF 3 mm

    • Stebri
    • Zgornja plošča
    • Podpora ultrazvočnim senzorjem
    • Podpora za induktivne senzorje
    • Škatla za smeti
    • Podpora za baterije
    • Podpora za ploščico in Arduino
  • Pleksi steklo 4 mm

    Platforma

3D natisnjeni deli:

  • Osnova stebrov
  • Element za prenos linearnega gibanja iz koračnega motorja
  • Nosilec koračnega motorja in ležaja
  • Deli za pritrditev sten na škatlo za smeti

Za izdelavo vsakega od teh delov je treba datoteke. STEP uvoziti v pravilni obliki, odvisno od stroja, ki ga boste uporabili v ta namen. V tem primeru so bile datoteke.dxf uporabljene za stroj za lasersko rezanje, datoteke.gcode pa za 3D tiskalnik (Ultimaker 2).

Mehanski sklop tega projekta najdete v datoteki. STEP, priloženi v tem razdelku.

4. korak: Elektronika (izbira komponent)

V tem razdelku bo kratek opis uporabljenih elektronskih komponent in razlaga izbire komponent.

Arduino UNO plošča (kot mikrokrmilnik):

Odprtokodna strojna in programska oprema. Poceni, enostavno dostopni, enostavni za kodiranje. Ta plošča je združljiva z vsemi komponentami, ki smo jih uporabili, in z lahkoto najdete številne vaje in forume, ki so zelo koristni za učenje in reševanje težav.

Motor (linearni koračni motor Nema 17):

Je vrsta koračnega motorja, ki deli polno vrtenje v določenem številu korakov. Posledično se nadzoruje z določenim številom korakov. Je robusten in natančen in ne potrebuje nobenih senzorjev za nadzor njegovega dejanskega položaja. Poslanstvo motorja je nadzorovati gibanje škatle, ki vsebuje vrženi predmet, in ga spustiti v desni koš.

Za izbiro modela ste naredili nekaj izračunov največjega navora, ki je potreben, in dodali varnostni faktor. Kar zadeva rezultate, smo kupili model, ki v veliki meri pokriva izračunano vrednost.

Gonilnik DRV8825:

Ta plošča se uporablja za krmiljenje bipolarnega koračnega motorja. Ima nastavljivo krmiljenje toka, ki vam omogoča nastavitev največjega tokovnega izhoda s potenciometrom, pa tudi šest različnih ločljivosti korakov: celostopenjsko, polstopenjsko, 1/4-stopenjsko, 1/8-stopenjsko, 1/16- korak in 1/32-korak (končno smo uporabili celostopenjski, saj nismo našli potrebe po mikrostopanju, vendar ga je še vedno mogoče uporabiti za izboljšanje kakovosti gibanja).

Ultrazvočni senzorji:

To so vrsta zvočnih senzorjev, ki pretvarjajo električni signal v ultrazvok in obratno. Za izračun razdalje do predmeta so uporabili odmev zvočnega signala, ki se je najprej oddajal. Z njimi smo zaznali, ali je v škatli kakšen predmet ali ne. So enostavni za uporabo in zagotavljajo natančne meritve.

Čeprav je izhod tega senzorja vrednost (razdalja), z določitvijo praga za ugotavljanje, ali je predmet prisoten ali ne, preoblikujemo

Induktivni senzorji:

Na podlagi Faradayjevega zakona spada v kategorijo brezkontaktnih elektronskih senzorjev bližine. Postavili smo jih na dno premične škatle, pod ploščo iz pleksi stekla, ki podpira predmet. Njihov cilj je razlikovati med kovinskimi in nekovinskimi predmeti, ki dajejo digitalni izhod (0/1).

LED (zelena, rumena, rdeča):

Njihovo poslanstvo je komunicirati z uporabnikom:

-Zelena LED sveti: robot čaka na predmet.

-Rdeča LED sveti: stroj deluje, ne morete metati nobenega predmeta.

-Rumena LED sveti: zaznan je predmet.

12V baterija ali 12V vir napajanja + 5V USB napajanje:

Za napajanje senzorjev in koračnega motorja je potreben vir napetosti. Za napajanje Arduina je potreben 5V vir energije. To lahko storite z 12 -voltno baterijo, vendar je najbolje, da imate ločen 5 -voltni vir napajanja za Arduino (na primer s kablom USB in telefonskim vmesnikom, priključenim na vir napajanja ali v računalnik).

Vprašanja, ki smo jih odkrili:

  • Z zaznavanjem induktivnega senzorja nismo dosegli želene natančnosti, saj včasih kovinski predmet, ki je slabo postavljen, ne zazna. To je posledica dveh omejitev:

    • Območje, ki ga zajemajo senzorji znotraj kvadratne ploščadi, predstavlja manj kot 50% površine (zato majhnega predmeta ni mogoče zaznati). Za rešitev tega priporočamo uporabo 3 ali 4 induktivnih senzorjev za zagotovitev, da je več kot 70% površine pokritih.
    • Razdalja zaznavanja senzorjev je omejena na 15 mm, zato smo bili primorani uporabiti platformo iz finega pleksi stekla. To je lahko tudi druga omejitev odkrivanja predmetov čudne oblike.
  • Ultrazvočno zaznavanje: spet zapleteno oblikovani predmeti povzročajo težave, saj se signal, ki ga oddajajo senzorji, slabo odraža in se na senzor vrne pozneje, kot bi moral.
  • Baterija: imamo nekaj težav pri nadzoru toka, ki ga oddaja baterija, in za rešitev tega smo končno uporabili vir energije. Vendar pa je mogoče izvesti druge rešitve, kot je uporaba diode.

5. korak: Elektronika (povezave)

Elektronika (povezave)
Elektronika (povezave)
Elektronika (povezave)
Elektronika (povezave)

V tem razdelku je prikazano ožičenje različnih sestavnih delov. Prav tako prikazuje, na kateri pin na Arduinu je povezana vsaka komponenta.

6. korak: Programiranje

Programiranje
Programiranje

Ta razdelek bo razložil programsko logiko stroja za sortiranje košev.

Program je razdeljen na 4 korake, ki so naslednji:

  1. Inicializirajte sistem
  2. Preverite prisotnost predmetov
  3. Preverite vrsto prisotnega predmeta
  4. Premakni škatlo

Za podroben opis vsakega koraka glejte spodaj:

1. korak Inicializirajte sistem

LED plošča (3) - nastavljena Kalibracijska LED (rdeča) VISOKA, Pripravljena LED (zelena) LOW, Objekt prisoten (rumena) LOW

Preverite, ali je koračni motor v začetnem položaju

  • Zaženite ultrazvočni preskus senzorja za merjenje razdalje od strani do stene škatle

    • Začetni položaj == 0 >> Posodobite vrednosti LED za pripravljenost HIGH in LED za umerjanje LOW -> 2. korak
    • Začetni položaj! = 0 >> digitalna vrednost branja ultrazvočnih senzorjev in na podlagi vrednosti senzorja:

      • Posodobitev vrednosti LED za premikanje motorja HIGH.
      • Zaženite polje za premikanje, dokler vrednost obeh ultrazvočnih senzorjev ne bo <mejna vrednost.

Posodobitev vrednosti začetnega položaja = 1 >> Posodobitev vrednosti LED Pripravljen HIGH in motor se premika LOW in kalibrira LOW >> 2. korak

2. korak

Preverite prisotnost predmetov

Zaženite ultrazvočno zaznavanje predmetov

  • Objekt je prisoten == 1 >> Posodobi vrednost prisotnega objekta LED HIGH >> 3. korak
  • Objekt je prisoten == 0 >> Ne naredi nič

3. korak

Preverite vrsto prisotnega predmeta

Zaženite zaznavanje induktivnega senzorja

  • inductiveState = 1 >> 4. korak
  • inductiveState = 0 >> 4. korak

4. korak

Premakni škatlo

Zaženite delovanje motorja

  • inductiveState == 1

    Posodobi premikajočo se LED -diodo motorja HIGH >> Naj se motor pomakne v levo, (posodobi začetni položaj = 0) zakasnite in se pomaknite nazaj desno >> 1. korak

  • inductiveState == 0

    Posodobi motor v gibanju LED HIGH >> Naj se motor premakne desno (posodobi začetni položaj = 0), zamudi in se pomakni nazaj levo >> 1. korak

Funkcije

Kot je razvidno iz programske logike, program deluje tako, da izvaja funkcije z določenim ciljem. Na primer, prvi korak je inicializacija sistema, ki vsebuje funkcijo "Preverite, ali je koračni motor v začetnem položaju". Drugi korak nato preveri prisotnost predmeta, ki je sam po sebi še ena funkcija (funkcija "Ultrazvočno zaznavanje predmetov"). In tako naprej.

Po 4. koraku je program v celoti izveden in se bo pred ponovnim zagonom vrnil na 1. korak.

Spodaj so opredeljene funkcije, ki se uporabljajo v glavnem telesu.

To so:

  • inductiveTest ()
  • moveBox (induktivno stanje)
  • ultrasonicObjectDetection ()

// Preverite, ali je predmet kovinski ali ne

bool inductiveTest () {if (digitalRead (inductiveSwitchRight) == 1 || digitalRead (inductiveSwitchLeft == 0)) {return true; else {return false; }} void moveBox (bool inductiveState) {// Polje gre levo, ko zaznamo kovino, in inductiveState = true if (inductiveState == 0) {stepper.moveTo (koraki); // naključni položaj do konca za testiranje stepper.runToPosition (); zamuda (1000); stepper.moveTo (0); stepper.runToPosition (); zamuda (1000); } else if (inductiveState == 1) {stepper.moveTo (-steps); // naključni položaj do konca za testiranje stepper.runToPosition (); zamuda (1000); stepper.moveTo (0); // naključni položaj do konca za testiranje stepper.runToPosition (); zamuda (1000); }} boolean ultrasonicObjectDetection () {long duration1, distance1, durationTemp, distanceTemp, averageDistance1, averageDistanceTemp, averageDistanceOlympian1; // Določimo število meritev za dolge razdaljeMax = 0; dolge razdalje Min = 4000; dolga razdaljaSkupaj = 0; for (int i = 0; i distanceMax) {distanceMax = distanceTemp; } if (distanceTemp <distanceMin) {distanceMin = distanceTemp; } distanceTotal+= distanceTemp; } Serial.print ("maxDistance senzorja1"); Serial.print (distanceMax); Serial.println ("mm"); Serial.print ("Sensor1 minDistance"); Serial.print (distanceMin); Serial.println ("mm"); // Vzemite povprečno razdaljo od odčitkov averageDistance1 = distanceTotal/10; Serial.print ("Sensor1 averageDistance1"); Serial.print (averageDistance1); Serial.println ("mm"); // Odstranite najvišje in najnižje vrednosti meritev, da se izognete napačnim odčitkom averageDistanceTemp = distanceTotal - (distanceMax+distanceMin); averageDistanceOlympian1 = averageDistanceTemp/8; Serial.print ("Sensor1 averageDistanceOlympian1"); Serial.print (averageDistanceOlympian1); Serial.println ("mm");

// Ponastavi vrednosti temp

distanceTotal = 0; distanceMax = 0; distanceMin = 4000; dolgo trajanje2, razdalja2, povprečna razdalja2, povprečnarazdaljaOlimpijaca2; // Določimo število meritev za (int i = 0; i distanceMax) {distanceMax = distanceTemp; } if (distanceTemp <distanceMin) {distanceMin = distanceTemp; } distanceTotal+= distanceTemp; } Serial.print ("maxDistance senzorja2"); Serial.print (distanceMax); Serial.println ("mm"); Serial.print ("Senzor 2 minDistance"); Serial.print (distanceMin); Serial.println ("mm"); // Vzemite povprečno razdaljo od odčitkov averageDistance2 = distanceTotal/10; Serial.print ("Sensor2 averageDistance2"); Serial.print (averageDistance2); Serial.println ("mm"); // Odstranite najvišje in najnižje vrednosti meritev, da se izognete napačnim odčitkom averageDistanceTemp = distanceTotal - (distanceMax+distanceMin); averageDistanceOlympian2 = averageDistanceTemp/8; Serial.print ("Sensor2 averageDistanceOlympian2"); Serial.print (averageDistanceOlympian2); Serial.println ("mm"); // Ponastavi temperaturne vrednosti distanceTotal = 0; distanceMax = 0; distanceMin = 4000; if (averageDistanceOlympian1 + averageDistanceOlympian2 <emptyBoxDistance) {vrne true; } else {return false; }}

Glavni del

Glavni del vsebuje isto logiko, razloženo na vrhu tega razdelka, vendar zapisano v kodi. Datoteka je na voljo za prenos spodaj.

Opozorilo

Za iskanje konstant so bili izvedeni številni preskusi: emptyBoxDistance, koraki in največja hitrost ter pospešek pri nastavitvi.

7. korak: Možne izboljšave

Možne izboljšave
Možne izboljšave

- Potrebujemo povratne informacije o položaju škatle, da zagotovimo, da je vedno na pravem mestu, da izbere predmet na začetku. Na voljo so različne možnosti za rešitev težave, vendar je enostavna lahko kopiranje sistema, ki ga najdemo v 3D tiskalnikih, s stikalom na enem koncu poti škatle.

-Zaradi težav, ki smo jih odkrili z ultrazvočnim odkrivanjem, lahko poiščemo nekaj alternativ za to funkcijo: laserski in laserski detektor KY-008 (slika), kapacitivni senzorji.

8. korak: Omejevalni dejavniki

Ta projekt deluje, kot je opisano v navodilih, vendar je treba v naslednjih korakih posebno paziti:

Umerjanje ultrazvočnih senzorjev

Kot, pod katerim so ultrazvočni senzorji postavljeni glede na predmet, ki ga morajo zaznati, je ključnega pomena za pravilno delovanje prototipa. Za ta projekt je bil za orientacijo ultrazvočnih senzorjev izbran kot 12,5 ° glede na normalno vrednost, vendar je treba najboljši kot določiti eksperimentalno s snemanjem odčitkov razdalje z različnimi predmeti.

Vir energije

Potrebna moč za gonilnik koračnega motorja DRV8825 je 12V in med 0,2 in 1 Amp. Arduino lahko napajate tudi z največ 12V in 0,2 Amp z vhodom na Arduinu. Če pa uporabljate isti vir napajanja za Arduino in gonilnik koračnega motorja, morate biti še posebej previdni. Če se napaja iz običajne vtičnice, na primer z napajanjem napajalnika AC/DC 12V/2A, morajo biti v tokokrogu regulator napetosti in diode, preden se napajanje napaja v gonilnik arduino in koračnega motorja.

Pokazovanje škatle

Čeprav ta projekt uporablja koračni motor, ki se v normalnih pogojih z visoko natančnostjo vrne v začetni položaj, je v primeru napake dobra praksa imeti mehanizem za usmerjanje. Projekt v takšnem stanju nima mehanizma za usmerjanje, vendar ga je zelo preprosto izvesti. V ta namen je treba dodati mehansko stikalo na začetnem položaju škatle, tako da ko škatla zadene stikalo, ve, da je v svojem domačem položaju.

Stepper driver DRV8825 Tuning

Koračni gonilnik zahteva nastavitev za delo s koračnim motorjem. To naredimo poskusno z obračanjem potenciometra (vijaka) na čipu DRV8825, tako da se motorju napaja ustrezna količina toka. Zato rahlo zavrtite vijak potenciometra, dokler motor ne deluje vitko.

9. korak: Krediti

Ta projekt je bil opravljen v okviru tečaja mehatronike v študijskem letu 2018–2019 za magistra Brufacea na Univerzi Libre de Bruxelles (ULB) - Vrije Universiteit Brussel (VUB).

Avtorja sta:

Maxime Decleire

Lidia Gomez

Markus Poder

Adriana Puentes

Narjisse Snoussi

Posebno se zahvaljujemo našemu nadzorniku Albertu de Beirju, ki nam je pomagal tudi pri celotnem projektu.

Priporočena: