Cuprins:
- Pasul 1: Cum funcționează
- Pasul 2: Lista materialelor (BOM)
- Pasul 3: Proiectare mecanică
- Pasul 4: Electronică (Component Choices)
- Pasul 5: Electronică (Conexiuni)
- Pasul 6: Programare
- Pasul 7: Posibile îmbunătățiri
- Pasul 8: Factori limitativi
- Pasul 9: Credite
Video: Coș de sortare - Detectați și sortați coșul de gunoi: 9 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:44
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ă
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ă
Î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)
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
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ă:
- Inițializați sistemul
- Verificați prezența obiectelor
- Verificați tipul de obiect prezent
- 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
- 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:
Încărcător de telefon Li-ion de la Coșul de gunoi: 4 pași
Încărcător de telefon Li-ion de la Coșul de gunoi: Aceasta este o bancă de alimentare simplă și rapidă din lucruri pe care majoritatea oamenilor le au deja în casă
Perf Board din coșul de gunoi: 4 pași (cu imagini)
Perf Board din coșul de gunoi: Iată o placă perf ușoară și ieftină construită din materiale pe care aproape toată lumea le are în jur. Acest lucru este perfect pentru proiectele Arduino sau doar pentru un circuit de casă. Acest proiect durează aproximativ o jumătate de oră
Generator hidroelectric din coșul de gunoi?!?!: 11 pași
Generator hidroelectric ieșit din coșul de gunoi?!?!: Produsul final ar trebui să arate cam așa, unde mizele metalice ar intra în pământ la râu, structura oului ar acționa ca ventilator, fiind împinsă de apă, provocând grădina tijă să se întoarcă, faceți roțile dințate să se întoarcă. Raportul de transmisie m
Coșul de gunoi „CleanBasket” cu cerc de baschet: 4 pași
Coșul de gunoi „CleanBasket” cu cerc de baschet: Vrei întotdeauna un birou curat? Atunci CleanBasket este cu siguranță pentru dvs. Aruncă întotdeauna totul în coșul de gunoi și câștigă puncte cu el. Încercați să vă rupeți ajunul cu scoruri mari
COȘURI DE gunoi - Eliminați coșul de gunoi nereciclabil: 8 pași
COȘURI - eliminați coșul de gunoi nereciclabil: pentru a crea o piatră de gunoi, un sac este cusut mai întâi din plasă. Este umplut cu coș de gunoi și tencuit cu ciment. Cojile rezultate sunt unice ca formă și arată foarte natural. Pietrele de gunoi sunt un aspect estetic plăcut și constructiv