Sorter Bin - Észlelje és rendezze a szemetet: 9 lépés
Sorter Bin - Észlelje és rendezze a szemetet: 9 lépés
Image
Image
Hogyan működik
Hogyan működik

Láttál már valakit, aki nem dolgozik újra, vagy rosszul csinálja?

Kívántál már olyan gépet, amely újrahasznosítana neked?

Olvassa tovább projektünket, nem fogja megbánni!

A Sorter bin egy olyan projekt, amelynek egyértelmű motivációja az, hogy segítse az újrahasznosítást a világban. Mint köztudott, az újrahasznosítás hiánya komoly problémákat okoz bolygónkon, többek között a nyersanyagok eltűnését és a tengeri szennyeződést.

Emiatt csapatunk úgy döntött, hogy kis méretű projektet dolgoz ki: egy válogatótartályt, amely képes a szemetet különböző befogadókra szétválasztani attól függően, hogy az anyag fém vagy nem fém. A későbbi verziókban ezt a válogatótartályt nagy léptékűvé lehetne extrapolálni, lehetővé téve a szemét felosztását mindenféle anyagra (fa, műanyag, fém, szerves …).

Mivel a fő cél a fém vagy nem fém megkülönböztetése, a válogatótartályt induktív érzékelőkkel, de ultrahangos érzékelőkkel is felszerelik annak érdekében, hogy felismerjék, van-e valami a tartályban. Ezenkívül a szemetesnek lineáris mozgásra lesz szüksége, hogy a szemetet a két dobozba mozgassa, így például a léptetőmotort választja.

A következő szakaszokban ezt a projektet lépésről lépésre ismertetjük.

1. lépés: Hogyan működik?

Hogyan működik
Hogyan működik
Hogyan működik
Hogyan működik

A válogató tartályt úgy tervezték, hogy viszonylag megkönnyítse a munkát a felhasználó számára: a szemetet a felső lemezen lévő lyukon keresztül kell bevezetni, a sárga gombot le kell nyomni, és a folyamat elkezdődik, a szeméttel egybe zárva a címzettek közül. De a kérdés most az, hogyan működik ez a folyamat belsőleg?

Amint a folyamat elindult, a zöld LED világít. Ezután az ultrahangos érzékelők, amelyeket egy tartó segítségével rögzítenek a felső lemezbe, megkezdik munkájukat annak megállapítására, hogy van -e tárgy a dobozban vagy sem.

Ha nincs tárgy a dobozban, a piros LED bekapcsol, a zöld pedig kialszik. Éppen ellenkezőleg, ha van tárgy, akkor az induktív érzékelők aktiválódnak annak megállapítására, hogy a tárgy fém vagy nem fém. Miután meghatározta az anyag típusát, a piros és a sárga LED -ek kigyulladnak, és a doboz az egyik vagy az ellenkező irányba mozdul el, a léptetőmotor által hajtott anyag típusától függően.

Amikor a doboz az ütés végére érkezik, és az objektumot a megfelelő címzettbe ejtette, a doboz visszatér a kiindulási helyzetbe. Végül, amikor a doboz a kezdeti helyzetben van, a sárga LED kialszik. A szortírozó készen áll az újrakezdésre ugyanazzal az eljárással. Ez az utolsó bekezdésekben leírt folyamat a 6. lépésben: Programozás mellékelt munkafolyamat -diagram képén is látható.

2. lépés: Anyagjegyzék (BOM)

Mechanikus alkatrészek:

  • Alkatrészeket vásárolt az alsó szerkezethez

    • Fémszerkezet [link]
    • Szürke doboz [link]
  • 3d nyomtató

    PLA minden nyomtatott részhez (más anyagok is használhatók, például ABS)

  • Lézervágó gép

    • MDF 3 mm
    • Plexi 4 mm
  • Lineáris csapágykészlet [link]
  • Lineáris csapágy [link]
  • Tengely [link]
  • Tengelytartó (x2) [Link]

Elektronikus részek:

  • Motor

    Lineáris léptetőmotor Nema 17 [link]

  • Akkumulátor

    12 V -os akkumulátor [link]

  • Érzékelők

    • 2 ultrahangos érzékelő HC-SR04 [Link]
    • 2 induktív érzékelő LJ30A3-15 [Link]
  • Mikrokontroller

    1 arduino UNO tábla

  • További alkatrészek

    • DRV8825 illesztőprogram
    • 3 LED: piros, zöld és narancssárga
    • 1 gomb
    • Néhány ugráló vezeték, huzal és forrasztólap
    • Kenyeretábla
    • USB kábel (Arduino-PC csatlakozás)
    • Kondenzátor: 100uF

3. lépés: Mechanikai tervezés

Image
Image
Mechanikai tervezés
Mechanikai tervezés
Mechanikai tervezés
Mechanikai tervezés

Az előző képeken a szerelvény összes része látható.

A mechanikai tervezéshez a SolidWorks -t használták CAD programként. A szerelvény különböző részeit úgy tervezték, hogy figyelembe vegyék a gyártási módszert.

Lézerrel vágott alkatrészek:

  • MDF 3 mm

    • Oszlopok
    • Felső lemez
    • Ultrahangos érzékelők támogatása
    • Az induktív érzékelők támogatják
    • Szemétláda
    • Akkumulátor támogatás
    • Breadboard és Arduino támogatás
  • Plexi 4 mm

    Felület

3D nyomtatott alkatrészek:

  • A pillérek alapja
  • Lineáris mozgást továbbító elem a léptetőmotorból
  • Léptetőmotor és csapágytartók
  • Falak rögzítő részei a szemetesládához

Ezen alkatrészek mindegyikének gyártásához a. STEP fájlokat a megfelelő formátumba kell importálni, attól függően, hogy milyen gépet fognak használni erre a célra. Ebben az esetben.dxf fájlokat használtak a lézervágó géphez, és.gcode fájlokat a 3D nyomtatóhoz (Ultimaker 2).

A projekt mechanikai összeszerelése megtalálható az ebben a szakaszban csatolt. STEP fájlban.

4. lépés: Elektronika (komponensválasztás)

Ebben a részben a használt elektronikus alkatrészek rövid leírását és az alkatrészválasztás magyarázatát kell elvégezni.

Arduino UNO kártya (mikrokontrollerként):

Nyílt forráskódú hardver és szoftver. Olcsó, könnyen hozzáférhető, könnyen kódolható. Ez a tábla kompatibilis az összes általunk használt komponenssel, és könnyen megtalálhatja az oktatóanyagokat és a fórumokat, amelyek nagyon hasznosak a problémák elsajátításához és megoldásához.

Motor (lineáris léptetőmotor Nema 17):

Ez egy olyan léptetőmotor, amely bizonyos lépésekben osztja el a teljes forgást. Ennek eredményeképpen bizonyos számú lépés megadásával vezérelhető. Robusztus és pontos, és nincs szükség érzékelőkre a tényleges helyzetének szabályozásához. A motor feladata, hogy ellenőrizze a dobott doboz mozgását, amely tartalmazza a dobott tárgyat, és dobja azt a megfelelő kukába.

A modell kiválasztásához elvégezte a szükséges maximális nyomaték kiszámítását egy biztonsági tényező hozzáadásával. Az eredményeket illetően azt a modellt vásároltuk, amely nagyrészt fedezi a számított értéket.

DRV8825 illesztőprogram:

Ez a tábla egy bipoláris léptetőmotor vezérlésére szolgál. Állítható áramszabályozóval rendelkezik, amely lehetővé teszi a maximális áramkimenet beállítását egy potenciométerrel, valamint hat különböző lépésfelbontást: teljes lépés, fél lépés, 1/4 lépés, 1/8 lépés, 1/16 lépés és 1/32 lépés (végül a teljes lépést használtuk, mivel nem találtuk szükségét a mikrolépésnek, de még mindig használható a mozgás minőségének javítására).

Ultrahangos érzékelők:

Ezek egyfajta akusztikus érzékelők, amelyek elektromos jelet alakítanak át ultrahanggá és fordítva. Az objektumtól való távolság kiszámításához először egy hangjelzés visszhangválaszát használták. Segítségükkel megállapítottuk, hogy van -e tárgy a dobozban vagy sem. Könnyen használhatók és pontos mérést biztosítanak.

Annak ellenére, hogy ennek az érzékelőnek a kimenete érték (távolság), egy küszöbérték meghatározásával meghatározzuk, hogy egy objektum jelen van -e vagy sem, átalakítjuk

Induktív érzékelők:

Faraday törvénye alapján az érintésmentes elektronikus közelségérzékelő kategóriába tartozik. Ezeket a mozgó doboz aljára helyeztük, a tárgyat tartó plexi platform alá. Céljuk, hogy különbséget tegyenek fém és nem fém tárgy között, digitális kimenetet adva (0/1).

LED -ek (zöld, sárga, piros):

Küldetésük, hogy kommunikáljanak a felhasználóval:

-Zöld LED világít: a robot tárgyra vár.

-Piros LED világít: a gép működik, nem dobhat semmilyen tárgyat.

-Sárga LED világít: tárgyat észlel.

12V akkumulátor vagy 12V áramforrás + 5V USB tápellátás:

Feszültségforrás szükséges az érzékelők és a léptetőmotor táplálásához. Az Arduino áramellátásához 5 V -os áramforrás szükséges. Ezt megteheti a 12 V -os akkumulátoron keresztül, de a legjobb, ha külön 5 V -os tápegységgel rendelkezik az Arduino számára (például USB -kábellel és tápegységhez vagy számítógéphez csatlakoztatott telefonadapterrel).

Talált problémák:

  • Induktív érzékelő érzékelés, nem kaptuk meg a kívánt pontosságot, mivel néha egy rosszul elhelyezett fémes tárgyat nem észlelünk. Ez 2 korlátozásnak köszönhető:

    • A szögletes platformon belül az érzékelők által lefedett terület kevesebb mint 50% -át teszi ki (így a kis tárgy nem észlelhető). A megoldáshoz javasoljuk 3 vagy 4 induktív érzékelő használatát, hogy a terület több mint 70% -a le legyen fedve.
    • Az érzékelők észlelési távolsága 15 mm -re korlátozódik, így kénytelenek voltunk finom plexi platformot használni. Ez is lehet egy másik korlátozás a furcsa alakú tárgyak észlelésére.
  • Ultrahangos észlelés: a komplexen megformált tárgyak ismét problémákat okoznak, mivel az érzékelők által kibocsátott jel rosszul tükröződik, és a kelleténél később tér vissza az érzékelőhöz.
  • Akkumulátor: Van néhány problémánk az akkumulátor által szállított áram szabályozásával, és ennek megoldásához végül áramforrást használtunk. Azonban más megoldások is végrehajthatók, például dióda használata.

5. lépés: Elektronika (csatlakozások)

Elektronika (csatlakozók)
Elektronika (csatlakozók)
Elektronika (csatlakozások)
Elektronika (csatlakozások)

Ez a rész a különböző alkatrészek összekötését mutatja be. Azt is megmutatja, hogy az Arduino melyik csapjához van csatlakoztatva az egyes komponensek.

6. lépés: Programozás

Programozás
Programozás

Ez a rész a Bin Sorting Machine programozási logikáját ismerteti.

A program 4 lépésből áll, amelyek a következők:

  1. Inicializálja a rendszert
  2. Ellenőrizze a tárgyak jelenlétét
  3. Ellenőrizze a jelen lévő objektum típusát
  4. Mozgódoboz

Az egyes lépések részletes leírását lásd alább:

1. lépés Inicializálja a rendszert

LED panel (3) - beállított kalibráló LED (piros) HIGH, Ready LED (zöld) LOW, objektum jelen (sárga) LOW

Ellenőrizze, hogy a léptetőmotor a kiindulási helyzetben van -e

  • Futtasson ultrahangos érzékelő tesztet az oldal és a doboz falának közötti távolság méréséhez

    • Kezdeti pozíció == 0 >> A Ready LED HIGH és a Calibrating LED LOW értékek frissítése -> 2. lépés
    • Kezdeti helyzet! = 0 >> az ultrahangos érzékelők digitális olvasási értéke és az érzékelő értékei alapján:

      • Frissítse a motor mozgó LED HIGH értékét.
      • Futtassa a mozgatási mezőt, amíg mindkét ultrahangos érzékelő értéke <küszöbérték.

A kezdeti pozíció értékének frissítése = 1 >> A LED Ready HIGH értékének frissítése és a motor LOW mozgása és LOW kalibrálása >> 2. lépés

2. lépés

Ellenőrizze a tárgyak jelenlétét

Futtassa az ultrahangos objektum -észlelést

  • Objektum jelen == 1 >> Az objektum jelen lévő LED -je HIGH >> frissítése. 3. lépés
  • Jelen tárgy == 0 >> Ne csinálj semmit

3. lépés

Ellenőrizze a jelen lévő objektum típusát

Futtassa az induktív érzékelő észlelését

  • induktív állapot = 1 >> 4. lépés
  • induktív állapot = 0 >> 4. lépés

4. lépés

Mozgódoboz

Futtassa a motor működését

  • induktív állapot == 1

    A motor mozgó LED -jének frissítése HIGH >> Mozgassa a motort balra, (frissítse a kezdeti pozíciót = 0) késleltesse és lépjen vissza jobbra >> 1. lépés

  • induktív állapot == 0

    A motor mozgó LED -jének frissítése MAGAS >> Mozgassa a motort jobbra, (a kezdeti pozíció frissítése = 0), késleltesse és lépjen vissza balra >> 1. lépés

Funkciók

Amint az a programozási logikából is látható, a program úgy működik, hogy meghatározott célú funkciókat hajt végre. Például az első lépés a rendszer inicializálása, amely tartalmazza az "Ellenőrizze, hogy a léptetőmotor kezdeti helyzetben van" funkciót. A második lépés ezután ellenőrzi az objektum jelenlétét, amely önmagában egy másik funkció (az "Ultrahangos objektum észlelés" funkció). És így tovább.

A 4. lépés után a program teljesen végrehajtódott, és visszatér az 1. lépéshez, mielőtt újra futtatná.

A törzsben használt funkciókat az alábbiakban határozzuk meg.

Ezek rendre:

  • induktív teszt ()
  • moveBox (induktív állapot)
  • ultrahangosObjectDetection ()

// Ellenőrizze, hogy a tárgy fémes -e vagy sem

bool inductiveTest () {if (digitalRead (inductiveSwitchRight) == 1 || digitalRead (inductiveSwitchLeft == 0)) {return true; else {return false; }} void moveBox (bool inductiveState) {// A doboz balra megy, amikor fém észlelhető, és inductiveState = true if (induktív állapot == 0) {stepper.moveTo (lépések); // véletlen pozíció a végéig a stepper teszteléséhez.runToPosition (); késleltetés (1000); léptető.moveTo (0); stepper.runToPosition (); késleltetés (1000); } else if (induktív állapot == 1) {stepper.moveTo (-lépések); // véletlen pozíció a végéig a stepper teszteléséhez.runToPosition (); késleltetés (1000); léptető.moveTo (0); // véletlen pozíció a végéig a stepper teszteléséhez.runToPosition (); késleltetés (1000); }} logikai ultrahangosObjectDetection () {long duration1, distance1, durationTemp, distanceTemp, átlagTávolság1, átlagosTávolságTemp, átlagosTávolságOlympian1; // Hosszú távú mérések számának meghatározásaMax = 0; nagy távolságMin = 4000; long distanceTotal = 0; for (int i = 0; i distanceMax) {distanceMax = távolságTemp; } if (távolságTemp <távolságMin) {távolságMin = távolságTemp; } distanceTotal+= távolságTemp; } Serial.print ("Sensor1 maxDistance"); Soros.nyomat (távolságMax); Soros.println ("mm"); Serial.print ("Sensor1 minDistance"); Soros.nyomat (távolságMin); Soros.println ("mm"); // Vegyük az átlagos távolságot a leolvasásoktól átlagosDistance1 = distanceTotal/10; Serial.print ("1. érzékelő átlagos távolság1"); Soros.nyomtatás (átlagosTávolság1); Soros.println ("mm"); // Távolítsa el a mérések legmagasabb és legalacsonyabb értékeit, hogy elkerülje a hibás leolvasást átlagosDistanceTemp = distanceTotal - (távolságMax+távolságMin); átlagosDistanceOlympian1 = átlagosTávolságTemp/8; Serial.print ("1. érzékelő átlagos távolsága olimpiai1"); Serial.print (átlagosTávolságOlympian1); Soros.println ("mm");

// Hőértékek visszaállítása

distanceTotal = 0; távolságMax = 0; távolságMin = 4000; hosszú időtartam2, távolság2, átlagosTávolság2, átlagosTávolságOlympian2; // Határozza meg a mérések számát (int i = 0; i distanceMax) {distanceMax = distanceTemp; } if (távolságTemp <távolságMin) {távolságMin = távolságTemp; } distanceTotal+= távolságTemp; } Serial.print ("Sensor2 maxDistance"); Soros.nyomat (távolságMax); Soros.println ("mm"); Serial.print ("Sensor2 minDistance"); Soros.nyomat (távolságMin); Soros.println ("mm"); // Vegyük az átlagos távolságot a leolvasásoktól átlagosDistance2 = distanceTotal/10; Serial.print ("2. érzékelő átlagos távolsága2"); Soros.nyomat (átlagosTávolság2); Soros.println ("mm"); // Távolítsa el a mérések legmagasabb és legalacsonyabb értékeit, hogy elkerülje a hibás leolvasást átlagosDistanceTemp = distanceTotal - (távolságMax+távolságMin); átlagosDistanceOlympian2 = átlagosTávolságTemp/8; Serial.print ("2. érzékelő átlagos távolságaOlympian2"); Serial.print (átlagosTávolságOlympian2); Soros.println ("mm"); // Hőértékek visszaállítása distanceTotal = 0; távolságMax = 0; távolságMin = 4000; if (átlagosTávolságOlimpiai1 + átlagosTávolságOlimpiai2 <üresBoxTávolság) {return igaz; } else {return false; }}

Főtest

A fő törzs ugyanazt a logikát tartalmazza, amely a szakasz tetején található, de kóddal van megírva. A fájl alább letölthető.

Figyelem

Számos tesztet végeztek az állandók megtalálására: emptyBoxDistance, lépések és maximális sebesség és gyorsítás a beállításban.

7. lépés: Lehetséges fejlesztések

Lehetséges fejlesztések
Lehetséges fejlesztések

- Visszajelzésre van szükségünk a doboz helyzetéről annak biztosítása érdekében, hogy mindig a megfelelő helyzetben legyen a tárgy kiválasztása az elején. A probléma megoldására különböző lehetőségek állnak rendelkezésre, de egyszerű megoldás lehet a 3D nyomtatókban talált rendszer másolása a doboz útvonalának egyik végén található kapcsoló segítségével.

-Az ultrahangos érzékeléssel kapcsolatban talált problémák miatt kereshetünk néhány alternatívát erre a funkcióra: KY-008 lézer- és lézerérzékelő (kép), kapacitív érzékelők.

8. lépés: A tényezők korlátozása

Ez a projekt az utasításokban leírtak szerint működik, de a következő lépések során különös gondossággal kell eljárni:

Ultrahangos érzékelők kalibrálása

A prototípus megfelelő működése szempontjából döntő fontosságú, hogy az ultrahangos érzékelők milyen szögben vannak elhelyezve az érzékelni kívánt tárgyhoz képest. Ehhez a projekthez az ultrahangos érzékelők tájolásához a normálhoz képest 12,5 ° -os szöget választottak, de a legjobb szöget kísérletileg kell meghatározni a távolság leolvasásának rögzítésével különböző tárgyak segítségével.

Áramforrás

A DRV8825 léptetőmotor -meghajtó szükséges teljesítménye 12 V, és 0,2 és 1 A között. Az arduino tápellátása maximum 12 V és 0,2 Amp is lehetséges az Arduino jack bemenetének használatával. Különös óvatossággal kell eljárni, ha ugyanazt az áramforrást használja mind az Arduino, mind a léptetőmotor -meghajtó számára. Ha egy hagyományos hálózati aljzatból táplálják, például 12V/2A AC/DC adapter tápegységgel, feszültségszabályozónak és diódáknak kell lenniük az áramkörben, mielőtt az áramot az arduino és a léptetőmotor meghajtójába táplálják.

A doboz elhelyezése

Bár ez a projekt egy léptetőmotort használ, amely normál körülmények között nagy pontossággal tér vissza a kiindulási helyzetébe, jó gyakorlat, ha hiba esetén van beállító mechanizmus. A projektnek jelenleg nincs hozzárendelési mechanizmusa, de megvalósítása meglehetősen egyszerű. Ehhez egy mechanikus kapcsolót kell hozzáadni a doboz kezdeti helyzetéhez, hogy amikor a doboz megérinti a kapcsolót, tudja, hogy az eredeti helyzetében van.

Léptető DRV8825 Tuning

A léptető meghajtónak hangolásra van szüksége ahhoz, hogy a léptetőmotor működjön. Ezt kísérletileg úgy hajtják végre, hogy a potenciométert (csavart) elforgatják a DRV8825 chipen, hogy a megfelelő mennyiségű áram kerüljön a motorba. Tehát kissé forgassa el a potenciométer csavarját, amíg a motor karcsúan nem működik.

9. lépés: Hitelek

Ez a projekt egy mechatronikai tanfolyam részeként valósult meg a 2018-2019.

A szerzők:

Maxime Decleire

Lidia Gomez

Markus Poder

Adriana Puentes

Narjisse Snoussi

Külön köszönet témavezetőnknek, Albert de Beirnek, aki segített nekünk a projekt során.

Ajánlott: