Innehållsförteckning:

Sorteringsfack - Upptäck och sortera papperskorgen: 9 steg
Sorteringsfack - Upptäck och sortera papperskorgen: 9 steg

Video: Sorteringsfack - Upptäck och sortera papperskorgen: 9 steg

Video: Sorteringsfack - Upptäck och sortera papperskorgen: 9 steg
Video: Finbin Edge återvinningskärl 2024, November
Anonim
Image
Image
Hur det fungerar
Hur det fungerar

Har du någonsin sett någon som inte återvinner eller gör det på ett dåligt sätt?

Har du någonsin önskat dig en maskin som skulle återvinnas åt dig?

Fortsätt läsa vårt projekt, du kommer inte ångra det!

Sorter bin är ett projekt med en tydlig motivation att hjälpa återvinning i världen. Som det är känt orsakar bristen på återvinning allvarliga problem på vår planet, bland annat försvinnandet av råvaror och havskontaminering.

Av den anledningen har vårt team beslutat att utveckla ett projekt i liten skala: en sorteringsbehållare som kan separera skräpet i olika mottagare beroende på om materialet är metall eller icke-metall. I framtida versioner kan sorteringsfacket extrapoleras i stor skala, vilket möjliggör uppdelning av skräpet i alla olika typer av material (trä, plast, metall, organiskt …).

Eftersom huvudsyftet är att skilja mellan metall eller icke-metall kommer sorteringsfacket att vara utrustat med induktiva sensorer, men också med ultraljudssensorer för att upptäcka om det finns något i papperskorgen. Dessutom kommer behållaren att behöva en linjär rörelse för att flytta skräpet till de två lådorna, varför en stegmotor väljs.

I nästa avsnitt kommer detta projekt att förklaras steg för steg.

Steg 1: Hur det fungerar

Hur det fungerar
Hur det fungerar
Hur det fungerar
Hur det fungerar

Sorteringsbehållaren har utformats för att göra arbetet relativt enkelt för användaren: skräpet måste införas genom hålet som placeras i den övre plattan, den gula knappen måste tryckas in och processen startar och slutar med skräpet till ett av mottagarna. Men frågan är nu … hur fungerar den processen internt?

När processen har börjat lyser den gröna lysdioden. Sedan startar ultraljudssensorerna, fästa i topplattan genom ett stöd, sitt arbete för att avgöra om det finns ett föremål inuti lådan eller inte.

Om det inte finns något föremål i lådan tänds den röda lysdioden och den gröna släcks. Tvärtom, om det finns ett objekt, kommer de induktiva sensorerna att aktiveras för att upptäcka om objektet är metall eller icke-metall. När väl materialtypen har fastställts tänds de röda och de gula lysdioderna och rutan rör sig i en riktning eller motsatt beroende på materialtyp, som drivs av stegmotorn.

När rutan kommer till slutet av stroke och objektet har tappats i rätt mottagare, kommer rutan att gå tillbaka till utgångsläget. Slutligen, med rutan i utgångsläget, slocknar den gula lysdioden. Sorteraren har varit redo att börja igen med samma procedur. Denna process som beskrivs i de sista styckena visas också på bilden av arbetsflödesschemat som bifogades i steg 6: Programmering.

Steg 2: Materiallista (BOM)

Mekaniska delar:

  • Köpte delar till bottenkonstruktionen

    • Metallstruktur [länk]
    • Grå låda [Länk]
  • 3d skrivare

    PLA för alla tryckta delar (andra material kan också användas, som ABS)

  • Laserskärmaskin

    • MDF 3 mm
    • Plexiglas 4 mm
  • Linjär lageruppsättning [Länk]
  • Linjärt lager [länk]
  • Skaft [länk]
  • Axelhållare (x2) [Länk]

Elektroniska delar:

  • Motor

    Linjär stegmotor Nema 17 [Länk]

  • Batteri

    12 v batteri [länk]

  • Sensorer

    • 2 Ultraljudssensor HC-SR04 [Länk]
    • 2 induktiva sensorer LJ30A3-15 [Länk]
  • Mikrokontroller

    1 arduino UNO -bräda

  • Ytterligare komponenter

    • DRV8825 drivrutin
    • 3 lysdioder: rött, grönt och orange
    • 1 knapp
    • Några hopptrådar, trådar och lödplattor
    • Bakbord
    • USB-kabel (Arduino-PC-anslutning)
    • Kondensator: 100uF

Steg 3: Mekanisk design

Image
Image
Mekanisk design
Mekanisk design
Mekanisk design
Mekanisk design

På de föregående bilderna visas alla delar av enheten.

För den mekaniska konstruktionen har SolidWorks använts som CAD -program. De olika delarna av enheten har utformats med hänsyn till tillverkningsmetoden vilken de ska tillverkas.

Laserskurna delar:

  • MDF 3 mm

    • Pelare
    • Topplatta
    • Ultraljudssensorer stöder
    • Induktiva sensorer stödjer
    • Skräplåda
    • Batteristöd
    • Brödbräda och Arduino -stöd
  • Plexiglas 4 mm

    Plattform

3D -tryckta delar:

  • Pelarens bas
  • Linjär rörelseöverföringselement från stegmotorn
  • Stegmotor och lagerstöd
  • Väggfixeringsdelar för soptunnan

För tillverkning av var och en av dessa delar bör. STEP -filerna importeras till rätt format, beroende på vilken maskin som ska användas för detta ändamål. I det här fallet har.dxf -filer använts för laserskuren maskin och.gcode -filer för 3D -skrivaren (Ultimaker 2).

Den mekaniska monteringen av detta projekt finns i. STEP -filen som bifogas i detta avsnitt.

Steg 4: Elektronik (val av komponenter)

I detta avsnitt kommer en kort beskrivning av de elektroniska komponenterna som används och en förklaring av komponentvalen att göras.

Arduino UNO -kort (som mikrokontroller):

Hårdvara och programvara med öppen källkod. Billigt, lättillgängligt, lätt att koda. Denna tavla är kompatibel med alla komponenter vi använde och du hittar lätt flera självstudier och forum som är mycket hjälpsamma för att lära dig och lösa problem.

Motor (linjär stegmotor Nema 17):

Är en typ av stegmotor som delar upp en full rotation i ett visst antal steg. Som en konsekvens styrs den genom att ge ett visst antal steg. Den är robust och exakt och behöver inga sensorer för att styra sin faktiska position. Motorns uppdrag är att styra rörelsen i lådan som innehåller det kastade föremålet och släppa det i den högra papperskorgen.

För att välja modell gjorde du några beräkningar av det maximala vridmoment som krävs för att lägga till en säkerhetsfaktor. När det gäller resultaten köpte vi modellen som till stor del täcker det beräknade värdet.

DRV8825 Driver:

Detta kort används för att styra en bipolär stegmotor. Den har en justerbar strömkontroll som gör att du kan ställa in maximal strömeffekt med en potentiometer samt sex olika stegupplösningar: helsteg, halvsteg, 1/4-steg, 1/8-steg, 1/16- steg och 1/32-steg (vi slutligen använde full-step eftersom vi inte fann något behov av att gå till mikrosteg men det kan fortfarande användas för att förbättra rörelsens kvalitet).

Ultraljudssensorer:

Dessa är en typ av akustiska sensorer som omvandlar en elektrisk signal till ultraljud och vice versa. De använde ekosvaret från en akustisk signal som först avges för att beräkna avståndet till ett objekt. Vi använde dem för att upptäcka om det finns ett föremål i lådan eller inte. De är lätta att använda och ger ett exakt mått.

Även om utsignalen från denna sensor är ett värde (avstånd), genom att fastställa en tröskel för att avgöra om ett objekt är närvarande eller inte, transformerar vi

Induktiva sensorer:

Baserat på Faradays lag tillhör den kategorin beröringsfri elektronisk närhetssensor. Vi placerade dem längst ner i rörlådan, under plexiglasplattformen som stöder föremålet. Deras mål är att skilja mellan metall och icke-metallföremål som ger en digital utgång (0/1).

Lysdioder (grön, gul, röd):

Deras uppdrag är att kommunicera med användaren:

-Grön lysdiod tänd: roboten väntar på ett objekt.

-Röd LED tänd: maskinen fungerar, du kan inte kasta något föremål.

-Gul lysdiod tänd: ett objekt detekteras.

12V batteri eller 12V strömkälla + 5V USB -ström:

En spänningskälla behövs för att driva sensorerna och stegmotorn. En 5V strömkälla behövs för att driva Arduino. Detta kan göras via 12V -batteriet, men det är bäst att ha en separat 5V -strömkälla för Arduino (t.ex. med en USB -kabel och telefonadapter ansluten till en strömkälla eller till en dator).

Problem som vi hittade:

  • Induktiv sensoravkänning, vi fick inte den noggrannhet som önskas eftersom ibland ett metalliskt föremål som är dåligt placerat inte uppfattas. Detta beror på 2 begränsningar:

    • Området som täcks av sensorerna inom den fyrkantiga plattformen representerar mindre än 50% av det (så ett litet objekt kan inte detekteras). För att lösa det rekommenderar vi att du använder 3 eller 4 induktiva sensorer för att säkerställa att mer än 70% av området är täckt.
    • Detekteringsavståndet för sensorerna är begränsat till 15 mm så vi fann oss tvungna att använda en fin plexiglasplattform. Detta kan också vara en annan begränsning som upptäcker objekt med en konstig form.
  • Ultraljudsdetektering: återigen ger föremål som är formade på ett komplext sätt problem då signalen som avges från sensorerna reflekteras dåligt och kommer tillbaka senare än den borde till sensorn.
  • Batteri: vi har några problem med att kontrollera strömmen som levereras av batteriet och för att lösa det använde vi slutligen en strömkälla. Andra lösningar som att använda en diod kan dock utföras.

Steg 5: Elektronik (anslutningar)

Elektronik (anslutningar)
Elektronik (anslutningar)
Elektronik (anslutningar)
Elektronik (anslutningar)

Detta avsnitt visar kablarna för de olika komponenterna helt och hållet. Det visar också till vilken stift på Arduino varje komponent är ansluten till.

Steg 6: Programmering

Programmering
Programmering

Det här avsnittet kommer att förklara programmeringslogiken bakom Bin sorteringsmaskinen.

Programmet är uppdelat i 4 steg, som är följande:

  1. Initiera systemet
  2. Kontrollera förekomsten av föremål
  3. Kontrollera vilken typ av objekt som finns
  4. Flytta låda

För en detaljerad beskrivning av varje steg, se nedan:

Steg 1 Initiera systemet

LED -panel (3) - ställ in Kalibrerings -LED (röd) HIGH, Ready LED (grön) LOW, Objekt närvarande (gul) LOW

Kontrollera att stegmotorn är i utgångsläge

  • Kör ultraljudssensortest för att mäta avståndet från sidan till lådans vägg

    • Utgångsläge == 0 >> Uppdatera värden för Ready LED HIGH och Calibrating LED LOW -> steg 2
    • Utgångsläge! = 0 >> digitalt avläsningsvärde för ultraljudssensorer och baserat på sensorvärden:

      • Uppdateringsvärde för motor rörlig LED HÖG.
      • Kör flyttruta tills värdet på båda ultraljudssensorerna är <tröskelvärde.

Uppdateringsvärde för utgångsläge = 1 >> Uppdateringsvärde för LED Ready HIGH och motor rör sig LOW och kalibrerar LOW >> steg 2

Steg 2

Kontrollera förekomsten av föremål

Kör ultraljudsobjektdetektering

  • Objekt närvarande == 1 >> Uppdateringsvärde för objekt nuvarande LED HÖG >> Steg 3
  • Objekt närvarande == 0 >> Gör ingenting

Steg 3

Kontrollera vilken typ av objekt som finns

Kör induktiv sensoravkänning

  • inductiveState = 1 >> Steg 4
  • inductiveState = 0 >> Steg 4

Steg 4

Flytta låda

Kör motordrift

  • inductiveState == 1

    Uppdatera motor rörlig LED HÖG >> Låt motorn gå åt vänster, (uppdatera utgångsläge = 0) fördröjning och gå tillbaka till höger >> Steg 1

  • inductiveState == 0

    Uppdatera motor rörlig LED HÖG >> Låt motorn gå åt höger, (uppdatera utgångsläge = 0), fördröj och flytta tillbaka vänster >> Steg 1

Funktioner

Som framgår av programmeringslogiken fungerar programmet genom att köra funktioner med ett specifikt mål. Till exempel är det första steget att initiera systemet som innehåller funktionen "Kontrollera stegmotorn är i utgångsläge". Det andra steget kontrollerar sedan närvaron av objekt som i sig är en annan funktion ("Ultrasonic Object detection" -funktionen). Och så vidare.

Efter steg 4 har programmet körts fullt ut och återgår till steg 1 innan det körs igen.

De funktioner som används i huvuddelen definieras nedan.

De är respektive:

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

// Kontrollera om objektet är metalliskt eller inte

bool inductiveTest () {if (digitalRead (inductiveSwitchRight) == 1 || digitalRead (inductiveSwitchLeft == 0)) {return true; annars {return false; }} void moveBox (bool inductiveState) {// Box går till vänster när metall detekteras och inductiveState = true if (inductiveState == 0) {stepper.moveTo (steg); // slumpmässig position till slutet för att testa stepper.runToPosition (); fördröjning (1000); stepper.moveTo (0); stepper.runToPosition (); fördröjning (1000); } annars if (inductiveState == 1) {stepper.moveTo (-steg); // slumpmässig position till slutet för att testa stepper.runToPosition (); fördröjning (1000); stepper.moveTo (0); // slumpmässig position till slutet för att testa stepper.runToPosition (); fördröjning (1000); }} boolean ultrasonicObjectDetection () {long duration1, distance1, durationTemp, distanceTemp, averageDistance1, averageDistanceTemp, averageDistanceOlympian1; // Definiera antalet mätningar för att ta långdistansMax = 0; långdistansMin = 4000; långdistansTotal = 0; för (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 genomsnittligt avstånd från avläsningarna averageDistance1 = distanceTotal/10; Serial.print ("Sensor1 averageDistance1"); Serial.print (genomsnittlig avstånd1); Serial.println ("mm"); // Ta bort högsta och lägsta mätvärden för att undvika felaktiga avläsningar averageDistanceTemp = distanceTotal - (distanceMax+distanceMin); averageDistanceOlympian1 = averageDistanceTemp/8; Serial.print ("Sensor1 averageDistanceOlympian1"); Serial.print (averageDistanceOlympian1); Serial.println ("mm");

// Återställ temp -värden

distanceTotal = 0; distanceMax = 0; distanceMin = 4000; lång varaktighet2, distans2, genomsnittlig avstånd2, genomsnittlig avståndOlympian2; // Definiera antalet mätningar som ska göras för (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 genomsnittligt avstånd från avläsningarna averageDistance2 = distanceTotal/10; Serial.print ("Sensor2 averageDistance2"); Serial.print (averageDistance2); Serial.println ("mm"); // Ta bort högsta och lägsta mätvärden för att undvika felaktiga avläsningar averageDistanceTemp = distanceTotal - (distanceMax+distanceMin); averageDistanceOlympian2 = averageDistanceTemp/8; Serial.print ("Sensor2 averageDistanceOlympian2"); Serial.print (averageDistanceOlympian2); Serial.println ("mm"); // Återställ temp -värden distanceTotal = 0; distanceMax = 0; distanceMin = 4000; if (averageDistanceOlympian1 + averageDistanceOlympian2 <emptyBoxDistance) {return true; } annat {return false; }}

Huvudkropp

Huvuddelen innehåller samma logik som förklaras högst upp i detta avsnitt, men skriven med kod. Filen finns tillgänglig för nedladdning nedan.

Varning

Många tester utfördes för att hitta konstanterna: emptyBoxDistance, steg och Maximal hastighet och acceleration i installationen.

Steg 7: Möjliga förbättringar

Möjliga förbättringar
Möjliga förbättringar

- Vi behöver feedback om lådans position för att säkerställa att den alltid är i rätt position för att välja objektet i början. Olika alternativ finns tillgängliga för att lösa problemet, men ett enkelt kan vara att kopiera systemet som vi hittar i 3D -skrivare med en switch i ena änden av lådans väg.

-På grund av de problem som vi hittade med ultraljudsdetekteringen kan vi leta efter några alternativ för den funktionen: KY-008 Laser- och laserdetektor (bild), kapacitiva sensorer.

Steg 8: Begränsande faktorer

Detta projekt fungerar enligt beskrivningen i instruktionerna men särskild försiktighet måste iakttas under följande steg:

Kalibrering av ultraljudssensorer

Vinkeln vid vilken ultraljudssensorerna är placerade i förhållande till objektet de måste upptäcka är av avgörande betydelse för att prototypen ska fungera korrekt. För detta projekt valdes en vinkel på 12,5 ° mot normalen för orientering av ultraljudssensorerna men den bästa vinkeln bör bestämmas experimentellt genom att registrera avståndsmätningarna med hjälp av olika objekt.

Kraftkälla

Nödvändig effekt för stegmotordrivrutinen DRV8825 är 12V och mellan 0,2 och 1 Amp. Arduino kan också drivas med max 12V och 0,2 Amp genom att använda ingången på Arduino. Särskild försiktighet måste dock iakttas om du använder samma strömkälla för både Arduino och stegmotordrivrutinen. Om den drivs från ett vanligt eluttag med exempelvis en 12V/2A AC/DC -adapter, bör det finnas en spänningsregulator och dioder i kretsen innan strömmen matas in i arduino- och stegmotordrivrutinen.

Homing the Box

Även om detta projekt använder en stegmotor som under normala förhållanden återgår till sin ursprungliga position med hög noggrannhet, är det bra att ha en hemmekanism om ett fel uppstår. Projektet som det har har ingen hemmekanism men det är ganska enkelt att implementera en. För detta bör en mekanisk omkopplare vid lådans utgångsläge läggas till så att när lådan träffar omkopplaren vet den att den är i sitt utgångsläge.

Stepper driver DRV8825 Tuning

Stegdrivrutinen kräver justering för att fungera med stegmotorn. Detta görs experimentellt genom att vrida potentiometern (skruven) på DRV8825 -chipet så att lämplig mängd ström tillförs motorn. Så vrid potentiometerskruven något tills motorn verkar lutande.

Steg 9: Poäng

Detta projekt gjordes som en del av en mekatronikkurs under läsåret 2018-2019 för Bruface Master vid Université Libre de Bruxelles (ULB) - Vrije Universiteit Brussel (VUB).

Författarna är:

Maxime Decleire

Lidia Gomez

Markus Poder

Adriana Puentes

Narjisse Snoussi

Ett särskilt tack till vår handledare Albert de Beir som också hjälpte oss under hela projektet.

Rekommenderad: