Innholdsfortegnelse:

Sorter Bin - Finn og sorter søppelet ditt: 9 trinn
Sorter Bin - Finn og sorter søppelet ditt: 9 trinn

Video: Sorter Bin - Finn og sorter søppelet ditt: 9 trinn

Video: Sorter Bin - Finn og sorter søppelet ditt: 9 trinn
Video: 🚀 AMAZON 2.0 - ИНТЕРНЕТ МАГАЗИН с нуля за 6 часов [Next / React / Nest / PostgreSQL / Prisma / TS] 2024, Juli
Anonim
Image
Image
Hvordan det fungerer
Hvordan det fungerer

Har du noen gang sett noen som ikke resirkulerer eller gjør det på en dårlig måte?

Har du noen gang ønsket deg en maskin som kunne resirkuleres for deg?

Fortsett å lese prosjektet vårt, du kommer ikke til å angre!

Sorter bin er et prosjekt med en klar motivasjon for å hjelpe gjenvinning i verden. Som det er kjent, forårsaker mangelen på resirkulering alvorlige problemer på planeten vår, som blant annet forsvinningen av råvarer og sjøforurensning.

Av den grunn har teamet vårt besluttet å utvikle et prosjekt i liten skala: en sorteringsbøtte som er i stand til å skille søppelet i forskjellige mottakere avhengig av om materialet er metall eller ikke-metall. I fremtidige versjoner kan sorteringsbeholderen ekstrapoleres i stor skala, slik at søppel kan deles inn i alle typer materialer (tre, plast, metall, organisk …).

Siden hovedformålet er å skille mellom metall eller ikke-metall, vil sorteringsbeholderen være utstyrt med induktive sensorer, men også med ultralydsensorer for å oppdage om det er noe i beholderen. Dessuten vil beholderen trenge en lineær bevegelse for å flytte søppelet inn i de to boksene, derfor er en trinnmotor valgt.

I de neste avsnittene vil dette prosjektet bli forklart trinnvis.

Trinn 1: Slik fungerer det

Hvordan det fungerer
Hvordan det fungerer
Hvordan det fungerer
Hvordan det fungerer

Sorteringsbeholderen er designet for å gjøre arbeidet relativt enkelt for brukeren: søppelet må føres gjennom hullet som er plassert i den øvre platen, den gule knappen må trykkes og prosessen starter og slutter med søppelet til en av mottakerne. Men spørsmålet nå er … hvordan fungerer denne prosessen internt?

Når prosessen har startet, lyser den grønne LED -lampen. Deretter starter ultralydsensorene, festet til topplaten gjennom en støtte, arbeidet med å finne ut om det er et objekt inne i esken eller ikke.

Hvis det ikke er noen gjenstander inne i esken, tennes den røde LED -en og den grønne slås av. Tvert imot, hvis det er et objekt, vil de induktive sensorene bli aktivert for å oppdage om objektet er metall eller ikke-metall. Når materialtypen er bestemt, tennes de røde og gule lysdiodene, og boksen beveger seg i en retning eller motsatt avhengig av materialtype, fremdrevet av trinnmotoren.

Når boksen kommer til slutten av slaget og objektet har blitt droppet til riktig mottaker, går boksen tilbake til utgangsposisjonen. Til slutt, med boksen i utgangsposisjonen, slås den gule LED -en av. Sortereren har vært klar til å starte på nytt med samme prosedyre. Denne prosessen beskrevet i de siste avsnittene er også vist på bildet av arbeidsflytdiagrammet som er vedlagt i trinn 6: Programmering.

Trinn 2: Bill of Materials (BOM)

Mekaniske deler:

  • Kjøpte deler til bunnstrukturen

    • Metallstruktur [lenke]
    • Grå boks [lenke]
  • 3D -skriver

    PLA for alle de trykte delene (andre materialer kan også brukes, for eksempel ABS)

  • Laserskjæremaskin

    • MDF 3 mm
    • Plexiglass 4 mm
  • Linear Bearing Set [Link]
  • Lineær peiling [lenke]
  • Aksel [lenke]
  • Akselholder (x2) [Lenke]

Elektroniske deler:

  • Motor

    Lineær trinnmotor Nema 17 [lenke]

  • Batteri

    12 v batteri [lenke]

  • Sensorer

    • 2 Ultralydssensor HC-SR04 [Lenke]
    • 2 Induktive sensorer LJ30A3-15 [Lenke]
  • Mikrokontroller

    1 arduino UNO -brett

  • Ekstra komponenter

    • DRV8825 driver
    • 3 lysdioder: rød, grønn og oransje
    • 1 knapp
    • Noen hoppetråder, ledninger og loddeplater
    • Brødbrett
    • USB-kabel (Arduino-PC-tilkobling)
    • Kondensator: 100uF

Trinn 3: Mekanisk design

Image
Image
Mekanisk design
Mekanisk design
Mekanisk design
Mekanisk design

På de forrige bildene vises alle delene av enheten.

For den mekaniske konstruksjonen har SolidWorks blitt brukt som CAD -program. De forskjellige delene av enheten er designet med tanke på produksjonsmetoden for hvilken de skal produseres.

Laserskårne deler:

  • MDF 3 mm

    • Søyler
    • Topplate
    • Ultralydsensorer støtter
    • Induktive sensorer støtter
    • Søppelboks
    • Batteristøtte
    • Brødbrett og Arduino -støtte
  • Plexiglass 4 mm

    Plattform

3D -trykte deler:

  • Basen til søylene
  • Lineær bevegelsesgirelement fra trinnmotoren
  • Trinnmotor og lagerstøtter
  • Veggfikseringsdeler for søppelboksen

For fremstilling av hver av disse delene, bør. STEP -filene importeres til riktig format, avhengig av maskinen som skal brukes til dette formålet. I dette tilfellet har.dxf -filer blitt brukt for laserskåret maskin og.gcode -filer for 3D -skriveren (Ultimaker 2).

Den mekaniske monteringen av dette prosjektet finnes i. STEP -filen vedlagt i denne delen.

Trinn 4: Elektronikk (valg av komponenter)

I denne delen skal det gjøres en kort beskrivelse av de elektroniske komponentene som brukes og en forklaring på komponentvalgene.

Arduino UNO -kort (som mikrokontroller):

Åpen kildekode maskinvare og programvare. Billig, lett tilgjengelig, enkel å kode. Dette brettet er kompatibelt med alle komponentene vi brukte, og du finner lett flere opplæringsprogrammer og fora som er veldig nyttige for å lære og løse problemer.

Motor (lineær trinnmotor Nema 17):

Er en type trinnmotor som deler en full rotasjon i et visst antall trinn. Som en konsekvens styres den ved å gi et visst antall trinn. Den er robust og presis og trenger ingen sensorer for å kontrollere den faktiske posisjonen. Motorens oppgave er å kontrollere bevegelsen til esken som inneholder objektet som kastes og slippe den i den høyre beholderen.

For å velge modellen har du gjort noen beregninger av det maksimale dreiemomentet som kreves, og du legger til en sikkerhetsfaktor. Når det gjelder resultatene, kjøpte vi modellen som stort sett dekker den beregnede verdien.

DRV8825 Driver:

Dette brettet brukes til å kontrollere en bipolar trinnmotor. Den har en justerbar strømkontroll som lar deg stille maksimal utgangseffekt med et potensiometer samt seks forskjellige trinnoppløsninger: full-trinn, halv-trinn, 1/4 trinn, 1/8 trinn, 1/16- trinn og 1/32-trinn (vi brukte til slutt fulltrinn da vi ikke fant behov for å gå til mikrostepping, men det kan fortsatt brukes til å forbedre kvaliteten på bevegelsen).

Ultralydsensorer:

Dette er en type akustiske sensorer som konverterer et elektrisk signal til ultralyd og omvendt. De brukte ekkosvaret til et akustisk signal som først ble sendt ut for å beregne avstanden til et objekt. Vi brukte dem til å oppdage om det er et objekt i esken eller ikke. De er enkle å bruke og gir et nøyaktig mål.

Selv om utgangen til denne sensoren er en verdi (avstand), transformerer vi ved å etablere en terskel for å bestemme om et objekt er tilstede eller ikke, transformere

Induktive sensorer:

Basert på Faradays lov, tilhører den kategorien berøringsfri elektronisk nærhetssensor. Vi plasserte dem nederst på flyttekassen, under plexiglassplattformen som støtter objektet. Målet deres er å skille mellom metall og ikke-metallgjenstander som gir en digital utgang (0/1).

Lysdioder (grønn, gul, rød):

Oppdraget deres er å kommunisere med brukeren:

-Grønn LED på: roboten venter på et objekt.

-Rød LED på: maskinen fungerer, du kan ikke kaste noen gjenstander.

-Gul LED på: et objekt blir oppdaget.

12V batteri eller 12V strømkilde + 5V USB strøm:

En spenningskilde er nødvendig for å drive sensorene og trinnmotoren. En 5V strømkilde er nødvendig for å drive Arduino. Dette kan gjøres gjennom 12V batteriet, men det er best å ha en egen 5V strømkilde for Arduino (for eksempel med en USB -kabel og telefonadapter koblet til en strømkilde eller til en datamaskin).

Problemer vi fant:

  • Induktiv sensordeteksjon, vi fikk ikke ønsket nøyaktighet, ettersom noen ganger et metallisk objekt som er dårlig plassert ikke oppfattes. Dette skyldes to begrensninger:

    • Området dekket av sensorene på den firkantede plattformen representerer mindre enn 50% av det (så lite objekt kan ikke oppdages). For å løse det anbefaler vi å bruke 3 eller 4 induktive sensorer for å sikre at mer enn 70% av området er dekket.
    • Deteksjonsavstanden til sensorene er begrenset til 15 mm, så vi fant oss tvunget til å bruke en fin plexiglassplattform. Dette kan også være en annen begrensning som oppdager objekter med en rar form.
  • Ultralyddeteksjon: igjen, objekter formet på en kompleks måte gir problemer ettersom signalet fra sensorene reflekteres dårlig og kommer tilbake senere enn det burde til sensoren.
  • Batteri: vi har noen problemer med å kontrollere strømmen som leveres av batteriet, og for å løse det brukte vi endelig en strømkilde. Imidlertid kan andre løsninger som bruk av en diode utføres.

Trinn 5: Elektronikk (tilkoblinger)

Elektronikk (tilkoblinger)
Elektronikk (tilkoblinger)
Elektronikk (tilkoblinger)
Elektronikk (tilkoblinger)

Denne delen viser ledningene til de forskjellige komponentene totalt sett. Den viser også hvilken pinne på Arduino hver komponent er koblet til.

Trinn 6: Programmering

Programmering
Programmering

Denne delen vil forklare programmeringslogikken bak bin -sorteringsmaskinen.

Programmet er delt inn i 4 trinn, som er som følger:

  1. Initialiser systemet
  2. Kontroller tilstedeværelsen av gjenstander
  3. Kontroller typen objekt som er tilstede
  4. Flytteboks

For en detaljert beskrivelse av hvert trinn, se nedenfor:

Trinn 1 Initialiser systemet

LED -panel (3) - sett Kalibrerings -LED (rød) HIGH, Ready LED (grønn) LOW, Object present (yellow) LOW

Kontroller at trinnmotoren er i utgangsposisjon

  • Kjør ultralyd sensortest for å måle avstand fra side til boksvegg

    • Utgangsposisjon == 0 >> Oppdater verdier for Ready LED HIGH og Calibrating LED LOW -> trinn 2
    • Startposisjon! = 0 >> digital leseverdi for ultralydsensorer og basert på sensorens verdier:

      • Oppdater verdi for motor i bevegelse LED HØY.
      • Kjør flytteboksen til verdien av begge ultralydsensorene er <terskelverdi.

Oppdateringsverdi for startposisjon = 1 >> Oppdateringsverdi for LED Ready HIGH og motor som beveger seg LOW og kalibrerer LOW >> trinn 2

Steg 2

Kontroller tilstedeværelsen av gjenstander

Kjør ultralydobjektdeteksjon

  • Object present == 1 >> Oppdater verdi av Object present LED HIGH >> Trinn 3
  • Objekt til stede == 0 >> Gjør ingenting

Trinn 3

Kontroller typen objekt som er tilstede

Kjør induktiv sensordeteksjon

  • inductiveState = 1 >> Trinn 4
  • inductiveState = 0 >> Trinn 4

Trinn 4

Flytt boksen

Kjør motordrift

  • inductiveState == 1

    Oppdater motoren som beveger seg LED HØY >> Få motoren til å bevege seg til venstre, (oppdater utgangsposisjonen = 0) forsink og gå tilbake til høyre >> Trinn 1

  • inductiveState == 0

    Oppdater motoren som beveger seg LED HØY >> Få motoren til å bevege seg til høyre, (oppdater utgangsposisjonen = 0), forsink og gå tilbake til venstre >> Trinn 1

Funksjoner

Som det fremgår av programmeringslogikken, fungerer programmet ved å utføre funksjoner med et bestemt mål. For eksempel er det første trinnet å initialisere systemet som inneholder funksjonen "Kontroller trinnmotoren er i utgangsposisjon". Det andre trinnet kontrollerer deretter tilstedeværelsen av objekt som i seg selv er en annen funksjon ("Ultrasonic Object detection" -funksjonen). Og så videre.

Etter trinn 4 har programmet fullført og vil gå tilbake til trinn 1 før det kjøres igjen.

Funksjonene som brukes i hoveddelen er definert nedenfor.

De er henholdsvis:

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

// Kontroller om objektet er metallisk eller ikke

bool inductiveTest () {if (digitalRead (inductiveSwitchRight) == 1 || digitalRead (inductiveSwitchLeft == 0)) {return true; annet {return false; }} void moveBox (bool inductiveState) {// Box går til venstre når metall oppdages og inductiveState = true if (inductiveState == 0) {stepper.moveTo (trinn); // tilfeldig posisjon til slutt for testing av stepper.runToPosition (); forsinkelse (1000); stepper.moveTo (0); stepper.runToPosition (); forsinkelse (1000); } annet hvis (inductiveState == 1) {stepper.moveTo (-trinn); // tilfeldig posisjon til slutt for testing av stepper.runToPosition (); forsinkelse (1000); stepper.moveTo (0); // tilfeldig posisjon til slutt for testing av stepper.runToPosition (); forsinkelse (1000); }} boolsk ultrasonicObjectDetection () {lang varighet1, distanse1, durationTemp, distanceTemp, averageDistance1, averageDistanceTemp, averageDistanceOlympian1; // Definer antall målinger for å ta lang avstandMax = 0; lang avstandMin = 4000; lang avstandTotal = 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"); // Ta gjennomsnittlig avstand fra avlesningene gjennomsnittlig avstand1 = avstandTotal/10; Serial.print ("Sensor1 gjennomsnittlig avstand1"); Serial.print (gjennomsnittlig avstand1); Serial.println ("mm"); // Fjern høyeste og laveste måleverdier for å unngå feilaktige avlesninger averageDistanceTemp = distanceTotal - (distanceMax+distanceMin); averageDistanceOlympian1 = averageDistanceTemp/8; Serial.print ("Sensor1 averageDistanceOlympian1"); Serial.print (averageDistanceOlympian1); Serial.println ("mm");

// Tilbakestill temp -verdier

distanceTotal = 0; distanceMax = 0; avstandMin = 4000; lang varighet2, distanse2, gjennomsnittlig avstand2, gjennomsnittlig avstandOlympian2; // Definer antall målinger som skal tas for (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"); // Ta gjennomsnittlig avstand fra avlesningene averageDistance2 = distanceTotal/10; Serial.print ("Sensor2 gjennomsnittlig avstand2"); Serial.print (gjennomsnittlig avstand2); Serial.println ("mm"); // Fjern høyeste og laveste måleverdier for å unngå feilaktige avlesninger averageDistanceTemp = distanceTotal - (distanceMax+distanceMin); averageDistanceOlympian2 = averageDistanceTemp/8; Serial.print ("Sensor2 averageDistanceOlympian2"); Serial.print (averageDistanceOlympian2); Serial.println ("mm"); // Tilbakestill temp -verdier distanceTotal = 0; distanceMax = 0; avstandMin = 4000; if (averageDistanceOlympian1 + averageDistanceOlympian2 <emptyBoxDistance) {return true; } annet {return false; }}

Hoveddelen

Hoveddelen inneholder den samme logikken forklart øverst i denne delen, men skrevet med kode. Filen er tilgjengelig for nedlasting nedenfor.

Advarsel

Mange tester ble utført for å finne konstantene: emptyBoxDistance, trinn og maksimal hastighet og akselerasjon i oppsettet.

Trinn 7: Mulige forbedringer

Mulige forbedringer
Mulige forbedringer

- Vi trenger tilbakemelding om posisjonen til boksen for å sikre at den alltid er i de riktige posisjonene for å plukke objektet i begynnelsen. Ulike alternativer er tilgjengelige for å løse problemet, men det er enkelt å kopiere systemet som vi finner i 3D -skrivere ved hjelp av en bryter i den ene enden av boksen.

-På grunn av problemene vi fant med ultralyddeteksjonen, kan vi se etter noen alternativer for den funksjonen: KY-008 Laser- og laserdetektor (bilde), kapasitive sensorer.

Trinn 8: Begrensende faktorer

Dette prosjektet fungerer som beskrevet i instruksjonene, men spesiell forsiktighet må utvises under følgende trinn:

Kalibrering av ultralydsensorer

Vinkelen ultralydsensorene er plassert i i forhold til objektet de må oppdage, er av avgjørende betydning for at prototypen fungerer korrekt. For dette prosjektet ble en vinkel på 12,5 ° til normalen valgt for orientering av ultralydsensorene, men den beste vinkelen bør bestemmes eksperimentelt ved å registrere avstandsmålingene ved hjelp av forskjellige objekter.

Strømkilde

Nødvendig effekt for steppermotordriveren DRV8825 er 12V og mellom 0,2 og 1 Amp. Arduinoen kan også drives av maks 12V og 0,2 Amp ved å bruke inngangen på Arduino. Spesiell forsiktighet må imidlertid utvises hvis du bruker samme strømkilde for både Arduino og trinnmotordriveren. Hvis den drives fra en vanlig stikkontakt med for eksempel en 12V/2A AC/DC adapter strømforsyning, bør det være en spenningsregulator og dioder i kretsen før strømmen mates til arduino- og trinnmotordriveren.

Homing the Box

Selv om dette prosjektet bruker en trinnmotor som under normale forhold går tilbake til sin opprinnelige posisjon med høy nøyaktighet, er det god praksis å ha en hjemmemekanisme i tilfelle det oppstår en feil. Prosjektet som det er har ikke en hjemmemekanisme, men det er ganske enkelt å implementere en. For dette bør en mekanisk bryter ved boksens utgangsposisjon legges til slik at når boksen treffer bryteren, vet den at den er i utgangsposisjonen.

Stepper driver DRV8825 Tuning

Stepperdriveren krever innstilling for å fungere med trinnmotoren. Dette gjøres eksperimentelt ved å dreie potensiometeret (skruen) på DRV8825 -brikken slik at den passende mengden strøm tilføres motoren. Så, vri potensiometerskruen litt til motoren virker på en slank måte.

Trinn 9: studiepoeng

Dette prosjektet ble utført som en del av et mekatronikk -kurs i løpet av studieåret 2018-2019 for Bruface Master ved Université Libre de Bruxelles (ULB) - Vrije Universiteit Brussel (VUB).

Forfatterne er:

Maxime Decleire

Lidia Gomez

Markus Poder

Adriana Puentes

Narjisse Snoussi

Spesiell takk til vår veileder Albert de Beir som også hjalp oss gjennom hele prosjektet.

Anbefalt: