Indholdsfortegnelse:

Sorter Bin - Find og sorter din papirkurv: 9 trin
Sorter Bin - Find og sorter din papirkurv: 9 trin

Video: Sorter Bin - Find og sorter din papirkurv: 9 trin

Video: Sorter Bin - Find og sorter din papirkurv: 9 trin
Video: Такие секреты уже все забыли, но их стоит знать! Полезные советы на все случаи жизни! 2024, Juli
Anonim
Image
Image
Hvordan det virker
Hvordan det virker

Har du nogensinde set nogen, der ikke genbruger eller gør det på en dårlig måde?

Har du nogensinde ønsket dig en maskine, der kunne genbruges for dig?

Bliv ved med at læse vores projekt, du kommer ikke til at fortryde det!

Sorter bin er et projekt med en klar motivation til at hjælpe genbrug i verden. Som det er kendt, forårsager manglen på genanvendelse alvorlige problemer på vores planet, f.eks. Forsvinden af råvarer og havforurening.

Af denne grund har vores team besluttet at udvikle et projekt i lille skala: en sorteringsbeholder, der er i stand til at adskille affaldet i forskellige modtagere afhængigt af, om materialet er metal eller ikke-metal. I fremtidige versioner kan sorteringsbeholderen ekstrapoleres i stor skala, hvilket gør det muligt at opdele affaldet i alle forskellige slags materialer (træ, plast, metal, organisk …).

Da hovedformålet er at skelne mellem metal eller ikke-metal, vil sorteringsbeholderen være udstyret med induktive sensorer, men også med ultralydssensorer for at detektere, om der er noget i skraldespanden. Desuden har beholderen brug for en lineær bevægelse for at flytte affaldet ind i de to kasser, derfor vælges en stepper motor.

I de næste afsnit vil dette projekt blive forklaret trin for trin.

Trin 1: Sådan fungerer det

Hvordan det virker
Hvordan det virker
Hvordan det virker
Hvordan det virker

Sorteringsbeholderen er designet til at gøre arbejdet relativt let for brugeren: skraldet skal føres gennem hullet, der er anbragt i den øverste plade, den gule knap skal trykkes, og processen starter og slutter med skraldet til et af modtagerne. Men spørgsmålet er nu … hvordan fungerer denne proces internt?

Når processen er startet, lyser den grønne LED. Derefter starter ultralydssensorerne, der er fastgjort til toppladen gennem en støtte, deres arbejde med at afgøre, om der er et objekt inde i kassen eller ej.

Hvis der ikke er nogen genstande inde i boksen, tænder den røde LED og den grønne slukker. Tværtimod, hvis der er et objekt, aktiveres de induktive sensorer for at detektere, om objektet er metal eller ikke-metal. Når først materialetypen er blevet bestemt, tændes de røde og de gule lysdioder, og boksen bevæger sig i den ene eller den modsatte retning afhængigt af materialetypen, der drives af trinmotoren.

Når boksen ankommer til slutningen af slaget, og objektet er faldet ned i den korrekte modtager, går boksen tilbage til udgangspositionen. Endelig med boksen i udgangspositionen, slukkes den gule LED. Sortereren har været klar til at starte igen med den samme procedure. Denne proces, der er beskrevet i de sidste afsnit, er også vist på billedet af arbejdsgangskortet, der er vedlagt i trin 6: Programmering.

Trin 2: Bill of Materials (BOM)

Mekaniske dele:

  • Købte dele til bundkonstruktionen

    • Metallisk struktur [Link]
    • Grå boks [Link]
  • 3D printer

    PLA for alle de udskrevne dele (andre materialer kan også bruges, f.eks. ABS)

  • Laserskæremaskine

    • MDF 3 mm
    • Plexiglas 4 mm
  • Lineær lejesæt [Link]
  • Lineær leje [Link]
  • Skaft [Link]
  • Akselholder (x2) [Link]

Elektroniske dele:

  • Motor

    Lineær trinmotor Nema 17 [Link]

  • Batteri

    12 v batteri [link]

  • Sensorer

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

    1 arduino UNO board

  • Yderligere komponenter

    • Driver til DRV8825
    • 3 lysdioder: rød, grøn og orange
    • 1 knap
    • Nogle springtråde, tråde og loddeplader
    • Brødbræt
    • USB-kabel (Arduino-PC-forbindelse)
    • Kondensator: 100uF

Trin 3: Mekanisk design

Image
Image
Mekanisk design
Mekanisk design
Mekanisk design
Mekanisk design

På de foregående billeder er alle dele af samlingen vist.

Til det mekaniske design er SolidWorks blevet brugt som CAD -program. De forskellige dele af samlingen er designet under hensyntagen til fremstillingsmetoden, hvilken de skal fremstilles.

Laserskårne dele:

  • MDF 3 mm

    • Søjler
    • Topplade
    • Ultralydssensorer understøtter
    • Induktive sensorer understøtter
    • Skraldeboks
    • Batteristøtte
    • Breadboard og Arduino support
  • Plexiglas 4 mm

    Platform

3D -trykte dele:

  • Søjlernes bund
  • Lineær bevægelses transmissionselement fra trinmotoren
  • Stepmotor og lejestøtter
  • Vægfiksering dele til skraldespanden

Ved fremstilling af hver af disse dele skal. STEP -filerne importeres til det korrekte format afhængigt af den maskine, der skal bruges til dette formål. I dette tilfælde er.dxf -filer blevet brugt til laserskåret maskine og.gcode -filer til 3D -printeren (Ultimaker 2).

Den mekaniske samling af dette projekt findes i. STEP -filen vedhæftet i dette afsnit.

Trin 4: Elektronik (komponentvalg)

I dette afsnit vil der blive foretaget en kort beskrivelse af de anvendte elektroniske komponenter og en forklaring af komponentvalgene.

Arduino UNO -kort (som mikrokontroller):

Open-source hardware og software. Billigt, let tilgængeligt, let at kode. Dette bord er kompatibelt med alle de komponenter, vi brugte, og du finder let flere selvstudier og fora meget nyttige til at lære og løse problemer.

Motor (lineær trinmotor Nema 17):

Er en type trinmotor, der deler en fuld rotation i et bestemt antal trin. Som en konsekvens styres den ved at give et bestemt antal trin. Det er robust og præcist og behøver ikke nogen sensorer til at styre dets faktiske position. Motoren har til opgave at styre bevægelsen af kassen, der indeholder den kastede genstand, og tabe den i den rigtige skraldespand.

For at vælge modellen foretog du nogle beregninger af det maksimale drejningsmoment, der kræves, og tilføjede en sikkerhedsfaktor. Med hensyn til resultaterne købte vi den model, der stort set dækker den beregnede værdi.

DRV8825 Driver:

Dette bord bruges til at styre en bipolar stepper motor. Den har en justerbar strømstyring, der giver dig mulighed for at indstille den maksimale strømudgang med et potentiometer samt seks forskellige trinopløsninger: fuld-trin, halv-trin, 1/4-trin, 1/8-trin, 1/16- trin og 1/32-trin (vi brugte endelig fuldtrin, da vi ikke fandt behov for at gå til mikrostegning, men det kan stadig bruges til at forbedre bevægelsens kvalitet).

Ultralydssensorer:

Disse er en type akustiske sensorer, der konverterer et elektrisk signal til ultralyd og omvendt. De brugte ekkosvaret fra et akustisk signal, der først blev udsendt til at beregne afstanden til et objekt. Vi brugte dem til at opdage, om der er et objekt i kassen eller ej. De er lette at bruge og giver et præcist mål.

Selvom output fra denne sensor er en værdi (afstand), transformerer vi ved at etablere en tærskel for at afgøre, om et objekt er til stede eller ej, transformere vi

Induktive sensorer:

Baseret på Faradays lov, tilhører den kategorien berøringsfri elektronisk nærhedssensor. Vi placerede dem i bunden af flyttekassen, under plexiglasplatformen, der understøtter objektet. Deres mål er at skelne mellem metal- og ikke-metalgenstande, der giver et digitalt output (0/1).

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

Deres mission er at kommunikere med brugeren:

-Grøn LED tændt: robotten venter på et objekt.

-Rød LED tændt: maskinen fungerer, du kan ikke smide noget.

-Gul LED tændt: et objekt registreres.

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

En spændingskilde er nødvendig for at drive sensorerne og trinmotoren. En 5V strømkilde er nødvendig for at drive Arduino. Dette kan gøres via 12V batteriet, men det er bedst at have en separat 5V strømkilde til Arduino (f.eks. Med et USB -kabel og telefonadapter tilsluttet en strømkilde eller til en computer).

Problemer, vi fandt:

  • Induktiv sensordetektion, vi fik ikke den ønskede nøjagtighed, da undertiden en metallisk genstand, der er dårligt placeret, ikke opfattes. Dette skyldes 2 begrænsninger:

    • Området dækket af sensorerne inden for den firkantede platform repræsenterer mindre end 50% af det (så lille genstand kan ikke registreres). For at løse det anbefaler vi at bruge 3 eller 4 induktive sensorer for at sikre, at mere end 70% af området er dækket.
    • Sensorernes registreringsafstand er begrænset til 15 mm, så vi fandt os selv tvunget til at bruge en fin plexiglasplatform. Dette kan også være en anden begrænsning, der registrerer objekter med en underlig form.
  • Ultralydsdetektering: igen giver objekter formet på en kompleks måde problemer, da signalet fra sensorerne reflekteres dårligt og vender tilbage senere end det burde til sensoren.
  • Batteri: vi har nogle problemer med at kontrollere strømmen, der leveres af batteriet, og for at løse det brugte vi endelig en strømkilde. Andre løsninger som brug af en diode kan dog udføres.

Trin 5: Elektronik (forbindelser)

Elektronik (forbindelser)
Elektronik (forbindelser)
Elektronik (forbindelser)
Elektronik (forbindelser)

Dette afsnit viser ledninger til de forskellige komponenter, der er sat helt. Det viser også, hvilken pin på Arduino hver komponent er forbundet til.

Trin 6: Programmering

Programmering
Programmering

Dette afsnit vil forklare programmeringslogikken bag bin sorteringsmaskinen.

Programmet er opdelt i 4 trin, som er som følger:

  1. Initialiser systemet
  2. Kontroller tilstedeværelsen af objekter
  3. Kontroller objektets type
  4. Move Box

For en detaljeret beskrivelse af hvert trin, se nedenfor:

Trin 1 Initialiser systemet

LED -panel (3) - indstil Kalibrerings -LED (rød) HØJ, Klar LED (grøn) LAV, Objekt til stede (gul) LAV

Kontroller, at trinmotoren er i udgangsposition

  • Kør ultralydssensortest for at måle afstanden fra side til kassevæg

    • Startposition == 0 >> Opdater værdier for Klar LED HIGH og Kalibrering LED LAV -> trin 2
    • Startposition! = 0 >> digital aflæsningsværdi for ultralydssensorer og baseret på sensorværdier:

      • Opdateringsværdi for motorens bevægelige LED HØJ.
      • Kør flyttekassen, indtil værdien af begge ultralydssensorer er <tærskelværdi.

Opdateringsværdi for udgangsposition = 1 >> Opdateringsværdi for LED Klar HØJ og motor bevæger sig LAV og kalibrerer LAV >> trin 2

Trin 2

Kontroller tilstedeværelsen af objekter

Kør ultralydsobjektdetektering

  • Objekt til stede == 1 >> Opdateringsværdi for objekt til stede LED HIGH >> Trin 3
  • Objekt til stede == 0 >> Gør ingenting

Trin 3

Kontroller objektets type

Kør induktiv sensordetektion

  • inductiveState = 1 >> Trin 4
  • inductiveState = 0 >> Trin 4

Trin 4

Move Box

Kør motordrift

  • inductiveState == 1

    Opdater motorens bevægelige LED HIGH >> Få motoren til at bevæge sig til venstre, (opdater startposition = 0) forsink og gå tilbage til højre >> Trin 1

  • inductiveState == 0

    Opdater motorens bevægelige LED HØJ >> Lad motoren bevæge sig til højre, (opdater startposition = 0), forsink og gå tilbage til venstre >> Trin 1

Funktioner

Som det ses af programmeringslogikken, fungerer programmet ved at udføre funktioner med et specifikt mål. For eksempel er det første trin at initialisere systemet, der indeholder funktionen "Kontroller, at steppermotor er i udgangsposition". Det andet trin kontrollerer derefter tilstedeværelsen af objekt, som i sig selv er en anden funktion ("Ultrasonic Object detection" -funktionen). Og så videre.

Efter trin 4 er programmet fuldt udført og vender tilbage til trin 1, før det kører igen.

De funktioner, der bruges i hoveddelen, er defineret nedenfor.

De er henholdsvis:

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

// Kontroller, om objektet er metallisk eller ej

bool inductiveTest () {if (digitalRead (inductiveSwitchRight) == 1 || digitalRead (inductiveSwitchLeft == 0)) {return true; ellers {return false; }} void moveBox (bool inductiveState) {// Box går til venstre, når metal detekteres og inductiveState = true if (inductiveState == 0) {stepper.moveTo (trin); // tilfældig position til afslutning til test af stepper.runToPosition (); forsinkelse (1000); stepper.moveTo (0); stepper.runToPosition (); forsinkelse (1000); } ellers hvis (inductiveState == 1) {stepper.moveTo (-trin); // tilfældig position til afslutning til test af stepper.runToPosition (); forsinkelse (1000); stepper.moveTo (0); // tilfældig position til afslutning til test af stepper.runToPosition (); forsinkelse (1000); }} boolsk ultrasonicObjectDetection () {lang varighed1, distance1, durationTemp, distanceTemp, averageDistance1, averageDistanceTemp, averageDistanceOlympian1; // Definer antal målinger til at tage langdistanceMax = 0; langdistanceMin = 4000; langdistanceTotal = 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"); // Tag gennemsnitlig afstand fra aflæsninger averageDistance1 = distanceTotal/10; Serial.print ("Sensor1 gennemsnitDistance1"); Serial.print (averageDistance1); Serial.println ("mm"); // Fjern højeste og laveste måleværdier for at undgå fejlagtige aflæsninger averageDistanceTemp = distanceTotal - (distanceMax+distanceMin); averageDistanceOlympian1 = averageDistanceTemp/8; Serial.print ("Sensor1 averageDistanceOlympian1"); Serial.print (averageDistanceOlympian1); Serial.println ("mm");

// Nulstil temp -værdier

distanceTotal = 0; distanceMax = 0; distanceMin = 4000; lang varighed2, afstand2, gennemsnitlig afstand2, gennemsnitsdistanceOlympian2; // Definer antallet af målinger, der skal tages 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"); // Tag gennemsnitlig afstand fra aflæsninger averageDistance2 = distanceTotal/10; Serial.print ("Sensor2 averageDistance2"); Serial.print (averageDistance2); Serial.println ("mm"); // Fjern højeste og laveste måleværdier for at undgå fejlagtige aflæsninger averageDistanceTemp = distanceTotal - (distanceMax+distanceMin); averageDistanceOlympian2 = averageDistanceTemp/8; Serial.print ("Sensor2 averageDistanceOlympian2"); Serial.print (averageDistanceOlympian2); Serial.println ("mm"); // Nulstil temp værdier distanceTotal = 0; distanceMax = 0; distanceMin = 4000; if (averageDistanceOlympian1 + averageDistanceOlympian2 <emptyBoxDistance) {return true; } else {return false; }}

Hovedlegeme

Hoveddelen indeholder den samme logik forklaret øverst i dette afsnit, men skrevet med kode. Filen kan downloades herunder.

Advarsel

Mange test blev udført for at finde konstanterne: emptyBoxDistance, trin og maksimal hastighed og acceleration i opsætningen.

Trin 7: Mulige forbedringer

Mulige forbedringer
Mulige forbedringer

- Vi har brug for feedback om placeringen af kassen for at sikre, at den altid er i de rigtige positioner for at vælge objektet i begyndelsen. Der er forskellige muligheder for at løse problemet, men en let kan være at kopiere det system, som vi finder i 3D -printere ved hjælp af en switch i den ene ende af boksens sti.

-På grund af de problemer, vi fandt med ultralydsdetekteringen, kan vi kigge efter nogle alternativer til den funktion: KY-008 Laser- og laserdetektor (billede), kapacitive sensorer.

Trin 8: Begrænsende faktorer

Dette projekt fungerer som beskrevet i instruktionerne, men der skal udvises særlig forsigtighed under følgende trin:

Kalibrering af ultralydssensorer

Den vinkel, ultralydssensorerne er placeret i forhold til det objekt, de skal detektere, er af afgørende betydning for prototypens korrekte funktion. Til dette projekt blev en vinkel på 12,5 ° til normalen valgt til orientering af ultralydssensorerne, men den bedste vinkel bør bestemmes eksperimentelt ved at registrere afstandsmålingerne ved hjælp af forskellige objekter.

Strømkilde

Den nødvendige effekt til steppermotordriveren DRV8825 er 12V og mellem 0,2 og 1 Amp. Arduinoen kan også drives af maksimalt 12V og 0,2 Amp ved hjælp af jackindgangen på Arduino. Særlig forsigtighed skal dog udvises, hvis du bruger den samme strømkilde til både Arduino og trinmotor driveren. Hvis den drives fra en almindelig stikkontakt ved hjælp af f.eks. En 12V/2A AC/DC adapter strømforsyning, bør der være en spændingsregulator og dioder i kredsløbet, før strømmen føres ind i arduino- og stepper motor driveren.

Homing the Box

Selvom dette projekt bruger en trinmotor, der under normale forhold vender tilbage til sin oprindelige position med høj nøjagtighed, er det god praksis at have en homing -mekanisme, hvis der opstår en fejl. Projektet som det er har ikke en hjemmemekanisme, men det er ganske enkelt at implementere en. Til dette skal der tilføjes en mekanisk kontakt i boksens startposition, så når boksen rammer kontakten, ved den, at den er i sin udgangsposition.

Stepper driver DRV8825 Tuning

Stepper driveren kræver tuning til at fungere med stepmotoren. Dette gøres eksperimentelt ved at dreje potentiometeret (skruen) på DRV8825 -chippen, så den passende mængde strøm tilføres motoren. Så drej potentiometerskruen en anelse, indtil motoren virker magert.

Trin 9: Kreditter

Dette projekt blev udført som en del af et mekatronikkursus i løbet af 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

Særlig tak til vores vejleder Albert de Beir, der også hjalp os gennem hele projektet.

Anbefalede: