Cuprins:

Coș de sortare - Detectați și sortați coșul de gunoi: 9 pași
Coș de sortare - Detectați și sortați coșul de gunoi: 9 pași

Video: Coș de sortare - Detectați și sortați coșul de gunoi: 9 pași

Video: Coș de sortare - Detectați și sortați coșul de gunoi: 9 pași
Video: Kitul 20 in 1: Cum se programeaza bratul robotic 2024, Iulie
Anonim
Image
Image
Cum functioneaza
Cum functioneaza

Ați văzut vreodată pe cineva care nu reciclează sau o face într-un mod rău?

Ți-ai dorit vreodată o mașină care să recicleze pentru tine?

Continuați să citiți proiectul nostru, nu veți regreta!

Coșul de sortare este un proiect cu o motivație clară de a ajuta reciclarea în lume. După cum se știe, lipsa reciclării provoacă serioase probleme pe planeta noastră, precum dispariția materiilor prime și contaminarea mării, printre altele.

Din acest motiv, echipa noastră a decis să dezvolte un proiect la scară mică: un coș de sortare care este capabil să separe gunoiul în destinatari diferiți în funcție de dacă materialul este metalic sau nemetalic. În versiunile viitoare, acel coș de sortare ar putea fi extrapolat la scară mare, permițând împărțirea gunoiului în toate tipurile diferite de materiale (lemn, plastic, metal, organic …).

Deoarece scopul principal este de a distinge între metal sau nemetal, coșul de sortare va fi echipat cu senzori inductivi, dar și cu senzori cu ultrasunete pentru a detecta dacă există ceva în coș. Mai mult, coșul va avea nevoie de o mișcare liniară pentru a muta gunoiul în cele două cutii, prin urmare se alege un motor pas cu pas.

În secțiunile următoare, acest proiect va fi explicat pas cu pas.

Pasul 1: Cum funcționează

Cum functioneaza
Cum functioneaza
Cum functioneaza
Cum functioneaza

Coșul de sortare a fost conceput pentru a face munca relativ ușoară pentru utilizator: gunoiul trebuie introdus prin orificiul plasat în placa superioară, butonul galben trebuie apăsat și procesul începe, terminând cu gunoiul într-unul. a destinatarilor. Dar întrebarea acum este … cum funcționează acest proces intern?

Odată ce procesul a început, LED-ul verde se aprinde. Apoi senzorii cu ultrasunete, atașați în placa superioară printr-un suport, își încep activitatea pentru a determina dacă există sau nu un obiect în cutie.

Dacă nu există niciun obiect în interiorul cutiei, LED-ul roșu se aprinde și cel verde se stinge. Dimpotrivă, dacă există un obiect, senzorii inductivi vor fi activați pentru a detecta dacă obiectul este metalic sau nemetalic. Odată ce tipul de material a fost determinat, LED-urile roșii și galbene se vor aprinde și cutia se va deplasa către o direcție sau opusă în funcție de tipul de material, propulsat de motorul pas cu pas.

Când cutia ajunge la sfârșitul cursei și obiectul a fost scăpat în destinatarul corect, cutia va reveni la poziția inițială. În cele din urmă, cu caseta în poziția inițială, LED-ul galben se va stinge. Sortatorul sortat va fi gata să înceapă din nou cu aceeași procedură. Acest proces descris în ultimele paragrafe este, de asemenea, prezentat în imaginea diagramei fluxului de lucru atașată la Pasul 6: Programare.

Pasul 2: Lista materialelor (BOM)

Componente mecanice:

  • Părți cumpărate pentru structura inferioară

    • Structură metalică [Link]
    • Cutie gri [Link]
  • imprimantă 3d

    PLA pentru toate piesele imprimate (pot fi utilizate și alte materiale, cum ar fi ABS)

  • Mașină de tăiat cu laser

    • MDF 3mm
    • Plexiglas 4mm
  • Set de rulmenți liniari [Link]
  • Rulment liniar [Link]
  • Ax [Link]
  • Suport arbore (x2) [Link]

Parți electronice:

  • Motor

    Motor liniar pas cu pas Nema 17 [Link]

  • Baterie

    Baterie 12 v [Link]

  • Senzori

    • 2 Senzor cu ultrasunete HC-SR04 [Link]
    • 2 senzori inductivi LJ30A3-15 [Link]
  • Microcontroler

    1 placa arduino UNO

  • Componente suplimentare

    • Driver DRV8825
    • 3 LED-uri: roșu, verde și portocaliu
    • 1 buton
    • Unele fire săritoare, fire și plăci de lipit
    • Pană de pâine
    • Cablu USB (conexiune Arduino-PC)
    • Condensator: 100uF

Pasul 3: Proiectare mecanică

Image
Image
Design mecanic
Design mecanic
Design mecanic
Design mecanic

În imaginile anterioare, sunt prezentate toate părțile ansamblului.

Pentru proiectarea mecanică, SolidWorks a fost folosit ca program CAD. Diferitele părți ale ansamblului au fost proiectate luând în considerare metoda de fabricație pe care urmează să fie fabricată.

Piese tăiate cu laser:

  • MDF 3mm

    • Stâlpi
    • Placă superioară
    • Suport pentru senzori cu ultrasunete
    • Suport senzori inductivi
    • Cutie de gunoi
    • Suport baterie
    • Suport pentru Breadboard și Arduino
  • Plexiglas 4mm

    Platformă

Piese imprimate 3D:

  • Baza stâlpilor
  • Element de transmisie a mișcării liniare de la motorul pas cu pas
  • Suporturi motor și pas cu pas
  • Părți de fixare a pereților pentru cutia de gunoi

Pentru fabricarea fiecăreia dintre aceste părți, fișierele. STEP trebuie importate în formatul corect, în funcție de mașina care urmează să fie utilizată în acest scop. În acest caz, fișierele.dxf au fost utilizate pentru mașina de tăiat cu laser și fișierele.gcode pentru imprimanta 3D (Ultimaker 2).

Ansamblul mecanic al acestui proiect poate fi găsit în fișierul. STEP atașat în această secțiune.

Pasul 4: Electronică (Component Choices)

În această secțiune, se va face o scurtă descriere a componentelor electronice utilizate și o explicație a alegerilor componentelor.

Placa Arduino UNO (ca microcontroler):

Hardware și software open-source. Ieftin, ușor disponibil, ușor de codat. Această placă este compatibilă cu toate componentele pe care le-am folosit și găsiți cu ușurință mai multe tutoriale și forumuri foarte utile pentru a învăța și a rezolva problemele.

Motor (motor pas cu pas liniar Nema 17):

Este un tip de motor pas cu pas care împarte o rotație completă într-un anumit număr de trepte. În consecință, este controlat dând un anumit număr de pași. Este robust și precis și nu are nevoie de senzori pentru a-și controla poziția reală. Misiunea motorului este de a controla mișcarea cutiei care conține obiectul aruncat și de a-l arunca în coșul din dreapta.

Pentru a alege modelul ați făcut câteva calcule ale cuplului maxim necesar adăugând un factor de siguranță. În ceea ce privește rezultatele, am cumpărat modelul care acoperă în mare măsură valoarea calculată.

Driver DRV8825:

Această placă este utilizată pentru a controla un motor pas cu pas bipolar. Are un control de curent reglabil care vă permite să setați curentul maxim de ieșire cu un potențiometru, precum și șase rezoluții de pas diferite: pas complet, jumătate de pas, 1/4-pas, 1/8-pas, 1 / 16- step și 1/32-step (în cele din urmă am folosit full-step deoarece nu am găsit nici o nevoie să mergem la microstepping, dar totuși poate fi folosit pentru a îmbunătăți calitatea mișcării).

Senzori cu ultrasunete:

Acestea sunt un tip de senzori acustici care convertesc un semnal electric în ultrasunete și invers. Ei au folosit răspunsul la ecou al unui semnal acustic emis mai întâi pentru a calcula distanța față de un obiect. Le-am folosit pentru a detecta dacă există sau nu un obiect în cutie. Sunt ușor de utilizat și oferă o măsură precisă.

Deși ieșirea acestui senzor este o valoare (distanță), prin stabilirea unui prag pentru a determina dacă un obiect este prezent sau nu, transformăm

Senzori inductivi:

Bazat pe legea Faraday, acesta aparține categoriei senzorului de proximitate electronic fără contact. Le-am așezat în partea de jos a cutiei mobile, sub platforma de plexiglas care susține obiectul. Scopul lor este de a face diferența dintre obiectele metalice și nemetalice, oferind o ieșire digitală (0/1).

LED-uri (verde, galben, roșu):

Misiunea lor este de a comunica cu utilizatorul:

-LED verde aprins: robotul așteaptă un obiect.

- LED roșu aprins: mașina funcționează, nu puteți arunca niciun obiect.

-LED galben aprins: este detectat un obiect.

Baterie de 12V sau sursă de alimentare de 12V + alimentare de 5V USB:

Este necesară o sursă de tensiune pentru a alimenta senzorii și motorul pas cu pas. Este necesară o sursă de alimentare de 5V pentru a alimenta Arduino. Acest lucru se poate face prin intermediul bateriei de 12V, dar cel mai bine este să aveți o sursă de alimentare separată de 5V pentru Arduino (cum ar fi cu un cablu USB și un adaptor de telefon conectat la o sursă de alimentare sau la un computer).

Probleme pe care le-am găsit:

  • Detectarea senzorului inductiv, nu am obținut acuratețea dorită, deoarece uneori un obiect metalic poziționat prost nu este perceput. Acest lucru se datorează a două limitări:

    • Suprafața acoperită de senzori în cadrul platformei pătrate reprezintă mai puțin de 50% din aceasta (astfel încât obiectul mic nu poate fi detectat). Pentru rezolvare, vă recomandăm să utilizați 3 sau 4 senzori inductivi pentru a vă asigura că peste 70% din suprafață este acoperită.
    • Distanța de detectare a senzorilor este limitată la 15 mm, așa că ne-am trezit forțați să folosim o platformă fină de plexiglas. Aceasta poate fi, de asemenea, o altă limitare care detectează obiecte cu o formă ciudată.
  • Detectarea cu ultrasunete: din nou, obiectele modelate într-un mod complex dau probleme deoarece semnalul emis de senzori este reflectat prost și revine mai târziu decât ar trebui la senzor.
  • Baterie: avem unele probleme care controlează curentul livrat de baterie și pentru a o rezolva am folosit în cele din urmă o sursă de alimentare. Cu toate acestea, pot fi realizate alte soluții, cum ar fi utilizarea unei diode.

Pasul 5: Electronică (Conexiuni)

Electronică (Conexiuni)
Electronică (Conexiuni)
Electronică (Conexiuni)
Electronică (Conexiuni)

Această secțiune arată cablarea diferitelor componente puse în totalitate. De asemenea, arată la ce pin de pe Arduino este conectată fiecare componentă.

Pasul 6: Programare

Programare
Programare

Această secțiune va explica logica de programare din spatele mașinii de sortare a coșurilor.

Programul este împărțit în 4 pași, care sunt după cum urmează:

  1. Inițializați sistemul
  2. Verificați prezența obiectelor
  3. Verificați tipul de obiect prezent
  4. Move Box

Pentru o descriere detaliată a fiecărui pas, consultați mai jos:

Pasul 1 Inițializați sistemul

Panou LED (3) - set LED de calibrare (roșu) HIGH, LED Ready (verde) LOW, obiect prezent (galben) LOW

Verificați dacă motorul pas cu pas este în poziția inițială

  • Rulați testul senzorului cu ultrasunete pentru a măsura distanța de la lateral la peretele cutiei

    • Poziția inițială == 0 >> Actualizați valorile LED-ului Ready HIGH și LED-ului de calibrare LOW -> pasul 2
    • Poziția inițială! = 0 >> valoarea de citire digitală a senzorilor cu ultrasunete și pe baza valorilor senzorului:

      • Actualizați valoarea LED-ului în mișcare al motorului HIGH.
      • Rulați caseta de deplasare până când valoarea ambilor senzori cu ultrasunete este <valoarea prag.

Actualizați valoarea poziției inițiale = 1 >> Actualizați valoarea LED Ready HIGH și motorul se deplasează LOW și Calibrating LOW >> pasul 2

Pasul 2

Verificați prezența obiectelor

Rulați detectarea obiectelor cu ultrasunete

  • Obiect prezent == 1 >> Actualizați valoarea LED-ului Obiect prezent prezent ÎNALT >> Pasul 3
  • Obiect prezent == 0 >> Nu faceți nimic

Pasul 3

Verificați tipul de obiect prezent

Rulați detectarea senzorului inductiv

  • inductiveState = 1 >> Pasul 4
  • inductiveState = 0 >> Pasul 4

Pasul 4

Mutați cutia

Rulați funcționarea motorului

  • inductiveState == 1

    Actualizați LED-ul în mișcare al motorului HIGH >> Faceți motorul să se deplaseze la stânga, (actualizați poziția inițială = 0) întârziați și să vă deplasați înapoi la dreapta >> Pasul 1

  • inductiveState == 0

    Actualizați LED-ul în mișcare al motorului HIGH >> Faceți motorul să se deplaseze la dreapta, (actualizați poziția inițială = 0), întârziați și deplasați-vă înapoi la stânga >> Pasul 1

Funcții

După cum se poate vedea din logica de programare, programul funcționează executând funcții cu un anumit scop. De exemplu, primul pas este inițializarea sistemului care conține funcția „Verificați motorul pas cu pas în poziția inițială”. Al doilea pas verifică apoi prezența obiectului care în sine este o altă funcție (funcția „Detecția obiectelor cu ultrasunete”). Si asa mai departe.

După pasul 4, programul s-a executat complet și va reveni la pasul 1 înainte de a rula din nou.

Funcțiile utilizate în corpul principal sunt definite mai jos.

Acestea sunt, respectiv:

  • test inductiv ()
  • moveBox (inductiveState)
  • ultrasonicObjectDetection ()

// Verificați dacă obiectul este metalic sau nu

bool inductiveTest () {if (digitalRead (inductiveSwitchRight) == 1 || digitalRead (inductiveSwitchLeft == 0)) {return true; else {return false; }} void moveBox (bool inductiveState) {// Caseta merge în stânga când metalul este detectat și inductiveState = true if (inductiveState == 0) {stepper.moveTo (steps); // poziția aleatorie pentru a se termina pentru testarea stepper.runToPosition (); întârziere (1000); stepper.moveTo (0); stepper.runToPosition (); întârziere (1000); } else if (inductiveState == 1) {stepper.moveTo (-steps); // poziția aleatorie pentru a se termina pentru testarea stepper.runToPosition (); întârziere (1000); stepper.moveTo (0); // poziția aleatorie pentru a se termina pentru testarea stepper.runToPosition (); întârziere (1000); }} boolean ultrasonicObjectDetection () {lungă durată1, distanță1, duratăTemp, distanțăTemp, medieDistanță1, medieDistanțăTemp, medieDistanțăOlimpian1; // Definiți numărul de măsurători pentru a lua distanța lungă Max = 0; distanță lungă Min = 4000; distanță mareTotal = 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"); // Ia distanța medie de la citiri averageDistance1 = distanceTotal / 10; Serial.print („Senzor1 Distanță medie1”); Serial.print (averageDistance1); Serial.println ("mm"); // Eliminați cele mai mari și cele mai mici valori ale măsurătorilor pentru a evita citirile eronate averageDistanceTemp = distanceTotal - (distanceMax + distanceMin); averageDistanceOlympian1 = averageDistanceTemp / 8; Serial.print ("Senzor1 mediuDistanțăOlimpian1"); Serial.print (averageDistanceOlympian1); Serial.println ("mm");

// Resetați valorile temp

distanțăTotal = 0; distanceMax = 0; distanceMin = 4000; lungă durată2, distanță2, distanță medie2, distanță medieOlimpian2; // Definiți numărul de măsurători care trebuie luate pentru (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"); // Ia distanța medie de la citiri averageDistance2 = distanceTotal / 10; Serial.print („Sensor2 medieDistanță2”); Serial.print (averageDistance2); Serial.println ("mm"); // Eliminați cele mai mari și cele mai mici valori ale măsurătorilor pentru a evita citirile eronate averageDistanceTemp = distanceTotal - (distanceMax + distanceMin); averageDistanceOlympian2 = averageDistanceTemp / 8; Serial.print ("Sensor2 averageDistanceOlympian2"); Serial.print (averageDistanceOlympian2); Serial.println ("mm"); // Resetați valorile temperaturii distanceTotal = 0; distanceMax = 0; distanceMin = 4000; if (averageDistanceOlympian1 + averageDistanceOlympian2 <emptyBoxDistance) {return true; } else {return false; }}

Corpul principal

Corpul principal conține aceeași logică explicată în partea de sus a acestei secțiuni, dar scrisă în cod. Fișierul este disponibil pentru descărcare mai jos.

Avertizare

Au fost efectuate multe teste pentru a găsi constantele: goalBoxDistance, pași și Maximumspeed și accelerație în configurare.

Pasul 7: Posibile îmbunătățiri

Posibile îmbunătățiri
Posibile îmbunătățiri

- Avem nevoie de feedback despre poziția cutiei pentru a ne asigura că este întotdeauna în pozițiile potrivite pentru a alege obiectul la început. Sunt disponibile diferite opțiuni pentru a rezolva problema, dar una simplă ar putea fi copierea sistemului pe care îl găsim în imprimantele 3D folosind un comutator la un capăt al căii casetei.

-Datorită problemelor pe care le-am găsit cu detectarea cu ultrasunete, putem căuta câteva alternative pentru această funcție: KY-008 Laser și Laser Detector (imagine), senzori capacitivi.

Pasul 8: Factori limitativi

Acest proiect funcționează așa cum este descris în instructabile, dar trebuie acordată o atenție deosebită în următoarele etape:

Calibrarea senzorilor cu ultrasunete

Unghiul la care sunt așezați senzorii cu ultrasunete în raport cu obiectul pe care trebuie să-l detecteze este de o importanță crucială pentru buna funcționare a prototipului. Pentru acest proiect, a fost ales un unghi de 12,5 ° față de normal pentru orientarea senzorilor cu ultrasunete, dar cel mai bun unghi ar trebui determinat experimental prin înregistrarea citirilor la distanță folosind diferite obiecte.

Sursa de putere

Puterea necesară pentru driverul pas cu pas DRV8825 este de 12V și între 0,2 și 1 Amp. Arduino poate fi, de asemenea, alimentat cu maxim 12V și 0,2 Amp utilizând intrarea jack de pe Arduino. Cu toate acestea, trebuie să aveți grijă deosebită dacă utilizați aceeași sursă de alimentare atât pentru Arduino, cât și pentru driverul motorului pas cu pas. Dacă este alimentat de la o priză obișnuită utilizând, de exemplu, o sursă de alimentare de 12V / 2A AC / DC, ar trebui să existe un regulator de tensiune și diode în circuit înainte ca alimentarea să fie introdusă în arduino și în driverul motorului pas cu pas.

Acceptând cutia

Deși acest proiect folosește un motor pas cu pas care, în condiții normale, revine la poziția sa inițială cu o precizie ridicată, este o bună practică să existe un mecanism de reglare în cazul în care apare o eroare. Proiectul, așa cum este, nu are un mecanism de aderare, dar este destul de simplu să îl implementați. Pentru aceasta, ar trebui adăugat un comutator mecanic la poziția inițială a cutiei astfel încât, atunci când cutia lovește comutatorul, să știe că se află în poziția sa de origine.

Driver pas cu pas DRV8825 Tuning

Driverul pas cu pas necesită reglare pentru a funcționa cu motorul pas cu pas. Acest lucru se face experimental prin rotirea potențiometrului (șurubului) pe cipul DRV8825, astfel încât cantitatea corespunzătoare de curent să fie furnizată motorului. Deci, rotind ușor șurubul potențiometrului până când motorul acționează într-un mod slab.

Pasul 9: Credite

Acest proiect a fost realizat ca parte a unui curs de mecatronică în cursul anului universitar 2018-2019 pentru Bruface Master la Université Libre de Bruxelles (ULB) - Vrije Universiteit Brussel (VUB).

Autorii sunt:

Maxime Decleire

Lidia Gomez

Markus Poder

Adriana Puentes

Narjisse Snoussi

Mulțumiri speciale supervizorului nostru Albert de Beir care ne-a ajutat și pe tot parcursul proiectului.

Recomandat: