Inhaltsverzeichnis:
- Schritt 1: Wie es funktioniert
- Schritt 2: Stückliste (BOM)
- Schritt 3: Mechanisches Design
- Schritt 4: Elektronik (Komponentenauswahl)
- Schritt 5: Elektronik (Anschlüsse)
- Schritt 6: Programmierung
- Schritt 7: Mögliche Verbesserungen
- Schritt 8: Limitierende Faktoren
- Schritt 9: Credits
Video: Sortierbehälter - Ihren Müll erkennen und sortieren - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:19
Haben Sie schon einmal jemanden gesehen, der nicht oder schlecht recycelt?
Haben Sie sich jemals eine Maschine gewünscht, die für Sie recycelt?
Lesen Sie unser Projekt weiter, Sie werden es nicht bereuen!
Sortierbehälter ist ein Projekt mit einer klaren Motivation, das Recycling in der Welt zu unterstützen. Der Mangel an Recycling verursacht bekanntlich ernsthafte Probleme auf unserem Planeten, wie unter anderem das Verschwinden von Rohstoffen und die Verschmutzung der Meere.
Aus diesem Grund hat unser Team beschlossen, ein Projekt im kleinen Maßstab zu entwickeln: einen Sortierbehälter, der den Müll in verschiedene Behälter aufteilen kann, je nachdem, ob es sich um Metall oder Nichtmetall handelt. In zukünftigen Versionen könnte dieser Sortierbehälter in großem Maßstab hochgerechnet werden, um den Müll in alle möglichen Arten von Materialien (Holz, Kunststoff, Metall, organisches Material…) aufzuteilen.
Da der Hauptzweck darin besteht, zwischen Metall und Nichtmetall zu unterscheiden, wird der Sortierbehälter mit induktiven Sensoren, aber auch mit Ultraschallsensoren ausgestattet, um zu erkennen, ob sich etwas im Behälter befindet. Darüber hinaus benötigt der Behälter eine lineare Bewegung, um den Müll in die beiden Kästen zu befördern, daher wird ua ein Schrittmotor gewählt.
In den nächsten Abschnitten wird dieses Projekt Schritt für Schritt erklärt.
Schritt 1: Wie es funktioniert
Der Sortierbehälter ist so konzipiert, dass er dem Benutzer die Arbeit relativ leicht macht: Der Müll wird durch das Loch in der oberen Platte eingeführt, der gelbe Knopf muss gedrückt werden und der Vorgang beginnt und endet mit dem Müll in einem der Empfänger. Aber die Frage ist jetzt… wie funktioniert dieser Prozess intern?
Sobald der Vorgang gestartet ist, leuchtet die grüne LED. Dann beginnen die Ultraschallsensoren, die durch eine Halterung in der oberen Platte befestigt sind, ihre Arbeit, um festzustellen, ob sich ein Objekt in der Box befindet oder nicht.
Befindet sich kein Gegenstand in der Box, leuchtet die rote LED auf und die grüne erlischt. Im Gegenteil, wenn ein Objekt vorhanden ist, werden die induktiven Sensoren aktiviert, um zu erkennen, ob es sich um ein Metall oder ein Nichtmetall handelt. Sobald die Materialart bestimmt wurde, leuchten die rote und die gelbe LED auf und die Box bewegt sich je nach Materialart in eine oder die entgegengesetzte Richtung, angetrieben durch den Schrittmotor.
Wenn die Box das Ende des Hubs erreicht und das Objekt in den richtigen Empfänger geworfen wurde, geht die Box in die Ausgangsposition zurück. Wenn sich die Box schließlich in der Ausgangsposition befindet, erlischt die gelbe LED. Der Sortierer ist nach dem gleichen Verfahren wieder startbereit. Dieser in den letzten Absätzen beschriebene Prozess wird auch in dem Bild des Workflow-Diagramms gezeigt, das in Schritt 6:Programmierung angehängt ist.
Schritt 2: Stückliste (BOM)
Mechanische Teile:
-
Zukaufteile für den Unterbau
- Metallstruktur [Link]
- Grauer Kasten [Link]
-
3D Drucker
PLA für alle gedruckten Teile (andere Materialien können auch verwendet werden, wie ABS)
-
Laser-Schneide-Maschine
- MDF 3 mm
- Plexiglas 4mm
- Linearlagersatz [Link]
- Linearlager [Link]
- Welle [Link]
- Wellenhalter (x2) [Link]
Elektronische Teile:
-
Motor
Linearer Schrittmotor Nema 17 [Link]
-
Batterie
12-V-Batterie [Link]
-
Sensoren
- 2 Ultraschallsensor HC-SR04 [Link]
- 2 Induktive Sensoren LJ30A3-15 [Link]
-
Mikrocontroller
1 Arduino UNO-Board
-
Zusätzliche Komponenten
- DRV8825-Treiber
- 3 LEDs: rot, grün und orange
- 1 Taste
- Einige springende Drähte, Drähte und Lötplatten
- Steckbrett
- USB-Kabel (Arduino-PC-Verbindung)
- Kondensator: 100uF
Schritt 3: Mechanisches Design
In den vorherigen Bildern sind alle Teile der Baugruppe gezeigt.
Für die mechanische Konstruktion wurde SolidWorks als CAD-Programm verwendet. Die verschiedenen Teile der Baugruppe wurden unter Berücksichtigung des Herstellungsverfahrens, das sie herstellen werden, entworfen.
Lasergeschnittene Teile:
-
MDF 3 mm
- Säulen
- Deckplatte
- Unterstützung von Ultraschallsensoren
- Unterstützung von induktiven Sensoren
- Mülleimer
- Batterieunterstützung
- Breadboard- und Arduino-Unterstützung
-
Plexiglas 4mm
Plattform
3D-gedruckte Teile:
- Säulenbasis
- Linearbewegungsübertragungselement vom Schrittmotor
- Schrittmotor und Lagerstützen
- Wandbefestigungsteile für den Mülleimer
Für die Herstellung jedes dieser Teile sollten die. STEP-Dateien in das richtige Format importiert werden, abhängig von der Maschine, die für diesen Zweck verwendet wird. In diesem Fall wurden.dxf-Dateien für die Laserschneidmaschine und.gcode-Dateien für den 3D-Drucker (Ultimaker 2) verwendet.
Die mechanische Montage dieses Projekts finden Sie in der in diesem Abschnitt angehängten. STEP-Datei.
Schritt 4: Elektronik (Komponentenauswahl)
In diesem Abschnitt erfolgt eine kurze Beschreibung der verwendeten elektronischen Komponenten und eine Erläuterung der Komponentenauswahl.
Arduino UNO-Board (als Mikrocontroller):
Open-Source-Hardware und -Software. Günstig, leicht verfügbar, einfach zu codieren. Dieses Board ist mit allen von uns verwendeten Komponenten kompatibel und Sie finden leicht mehrere Tutorials und Foren, die sehr hilfreich sind, um zu lernen und Probleme zu lösen.
Motor (Linearer Schrittmotor Nema 17):
Ist eine Art Schrittmotor, der eine volle Umdrehung in eine bestimmte Anzahl von Schritten aufteilt. Infolgedessen wird es durch die Angabe einer bestimmten Anzahl von Schritten gesteuert. Er ist robust und präzise und benötigt keine Sensoren, um seine aktuelle Position zu kontrollieren. Die Aufgabe des Motors besteht darin, die Bewegung der Kiste, die das geworfene Objekt enthält, zu steuern und in den richtigen Behälter zu werfen.
Um das Modell auszuwählen, haben Sie einige Berechnungen des maximal erforderlichen Drehmoments durchgeführt, das einen Sicherheitsfaktor hinzufügt. In Bezug auf die Ergebnisse haben wir das Modell gekauft, das den berechneten Wert weitgehend abdeckt.
DRV8825-Treiber:
Diese Platine wird verwendet, um einen bipolaren Schrittmotor zu steuern. Es verfügt über einen einstellbaren Stromregler, mit dem Sie die maximale Stromabgabe mit einem Potentiometer sowie sechs verschiedene Schrittauflösungen einstellen können: Vollschritt, Halbschritt, 1/4-Schritt, 1/8-Schritt, 1/16- Schritt und 1/32-Schritt (wir haben schließlich den Vollschritt verwendet, da wir keine Notwendigkeit für Mikroschritte fanden, aber es kann immer noch verwendet werden, um die Qualität der Bewegung zu verbessern).
Ultraschallsensoren:
Dies sind akustische Sensoren, die ein elektrisches Signal in Ultraschall umwandeln und umgekehrt. Sie nutzten die Echoantwort eines zuerst ausgesendeten akustischen Signals, um die Entfernung zu einem Objekt zu berechnen. Wir haben sie verwendet, um zu erkennen, ob sich ein Objekt in der Box befindet oder nicht. Sie sind einfach zu bedienen und liefern ein genaues Maß.
Obwohl die Ausgabe dieses Sensors ein Wert (Entfernung) ist, transformieren wir, indem wir einen Schwellenwert festlegen, um zu bestimmen, ob ein Objekt vorhanden ist oder nicht
Induktive Sensoren:
Nach dem Faradayschen Gesetz gehört er zur Kategorie der berührungslosen elektronischen Näherungssensoren. Wir haben sie unten im Umzugskarton platziert, unter der Plexiglasplattform, die das Objekt trägt. Ihr Ziel ist es, zwischen Metall- und Nichtmetallobjekten zu unterscheiden und einen digitalen Ausgang (0/1) zu geben.
LEDs (grün, gelb, rot):
Ihre Mission ist es, mit dem Benutzer zu kommunizieren:
-Grüne LED an: Der Roboter wartet auf ein Objekt.
-Rote LED an: Maschine funktioniert, Sie können keine Gegenstände werfen.
-Gelbe LED an: ein Objekt wurde erkannt.
12V Batterie oder 12V Stromquelle + 5V USB Strom:
Zur Stromversorgung der Sensoren und des Schrittmotors wird eine Spannungsquelle benötigt. Für die Stromversorgung des Arduino wird eine 5V-Stromquelle benötigt. Dies kann über die 12-V-Batterie erfolgen, aber es ist am besten, eine separate 5-V-Stromquelle für den Arduino zu haben (z. B. mit einem USB-Kabel und einem Telefonadapter, der an eine Stromquelle oder einen Computer angeschlossen ist).
Probleme, die wir gefunden haben:
-
Induktive Sensorerkennung, wir haben nicht die gewünschte Genauigkeit erreicht, da manchmal ein falsch positioniertes metallisches Objekt nicht wahrgenommen wird. Dies ist auf 2 Einschränkungen zurückzuführen:
- Der von den Sensoren abgedeckte Bereich innerhalb der quadratischen Plattform beträgt weniger als 50% davon (dadurch können kleine Objekte nicht erkannt werden). Zur Lösung empfehlen wir die Verwendung von 3 oder 4 induktiven Sensoren, um sicherzustellen, dass mehr als 70 % der Fläche abgedeckt werden.
- Der Erfassungsabstand der Sensoren ist auf 15 mm begrenzt, sodass wir uns gezwungen sahen, eine feine Plexiglasplattform zu verwenden. Dies kann auch eine weitere Einschränkung beim Erkennen von Objekten mit einer seltsamen Form sein.
- Ultraschallerkennung: Auch komplex geformte Objekte geben Probleme, da das von den Sensoren ausgesendete Signal schlecht reflektiert wird und später zum Sensor zurückkommt, als es sollte.
- Batterie: Wir haben einige Probleme mit der Steuerung des von der Batterie gelieferten Stroms und um dies zu lösen, haben wir schließlich eine Stromquelle verwendet. Es können jedoch auch andere Lösungen wie die Verwendung einer Diode durchgeführt werden.
Schritt 5: Elektronik (Anschlüsse)
Dieser Abschnitt zeigt die Verdrahtung der verschiedenen Komponenten zusammen. Es zeigt auch, mit welchem Pin des Arduino jede Komponente verbunden ist.
Schritt 6: Programmierung
Dieser Abschnitt erklärt die Programmierlogik hinter der Bin Sorting Maschine.
Das Programm ist in 4 Schritte unterteilt, die wie folgt lauten:
- System initialisieren
- Anwesenheit von Objekten prüfen
- Überprüfen Sie die Art des vorhandenen Objekts
- Umzugskarton
Eine detaillierte Beschreibung der einzelnen Schritte finden Sie unten:
Schritt 1System initialisieren
LED-Panel (3) - Einstellen Kalibrieren LED (rot) HIGH, Ready LED (grün) LOW, Objekt vorhanden (gelb) LOW
Überprüfen Sie, ob sich der Schrittmotor in der Ausgangsposition befindet
-
Führen Sie einen Ultraschallsensortest durch, um den Abstand von der Seite zur Kastenwand zu messen
- Ausgangsposition == 0 >> Werte von Ready LED HIGH und Calibrating LED LOW aktualisieren -> Schritt 2
-
Ausgangsposition != 0 >> digitaler Lesewert der Ultraschallsensoren und basierend auf den Werten des Sensors:
- Aktualisieren Sie den Wert der Motorbewegungs-LED HIGH.
- Bewegen Sie die Box, bis der Wert beider Ultraschallsensoren < Schwellenwert ist.
Aktualisierungswert der Ausgangsposition = 1 >> Aktualisierungswert der LED Ready HIGH und Motor bewegt sich LOW und Calibrating LOW >> Schritt 2
Schritt 2
Anwesenheit von Objekten prüfen
Ultraschall-Objekterkennung ausführen
- Objekt vorhanden == 1 >> Wert von Objekt vorhanden LED aktualisieren HIGH >> Schritt 3
- Objekt vorhanden == 0 >> Nichts tun
Schritt 3
Überprüfen Sie die Art des vorhandenen Objekts
Induktive Sensorerkennung ausführen
- induktiver Zustand = 1 >> Schritt 4
- induktiver Zustand = 0 >> Schritt 4
Schritt 4
Umzugskarton
Motorbetrieb ausführen
-
induktiver Zustand == 1
LED für Motorbewegung aktualisieren HIGH >> Motor nach links bewegen, (Ausgangsposition aktualisieren = 0) verzögern und nach rechts zurückfahren >> Schritt 1
-
induktiver Zustand == 0
Aktualisieren Sie die Motorbewegungs-LED HIGH >> Motor nach rechts bewegen (Ausgangsposition aktualisieren = 0), verzögern und nach links zurückfahren >> Schritt 1
Funktionen
Wie aus der Programmierlogik ersichtlich, arbeitet das Programm, indem es Funktionen mit einem bestimmten Ziel ausführt. Zum Beispiel ist der erste Schritt die Initialisierung des Systems, das die Funktion "Schrittmotor auf Ausgangsposition prüfen" enthält. Im zweiten Schritt wird dann das Vorhandensein von Objekten überprüft, was an sich eine weitere Funktion ist (die Funktion "Ultraschallobjekterkennung"). Und so weiter.
Nach Schritt 4 wurde das Programm vollständig ausgeführt und kehrt zu Schritt 1 zurück, bevor es erneut ausgeführt wird.
Die im Hauptteil verwendeten Funktionen sind unten definiert.
Sie sind jeweils:
- induktiverTest()
- moveBox(induktiverZustand)
- UltraschallObjekterkennung()
// Überprüfen Sie, ob das Objekt metallisch ist oder nicht
bool inductiveTest () { if (digitalRead (inductiveSwitchRight) == 1 || digitalRead (inductiveSwitchLeft == 0)) { return true; else{ return false; aufrechtzuerhalten. aufrechtzuerhalten. aufrechtzuerhalten. // zufällige Position zum Testen stepper.runToPosition(); Verzögerung (1000); stepper.moveTo(0); stepper.runToPosition(); Verzögerung (1000); aufrechtzuerhalten. Sonst if (inductiveState == 1) { stepper.moveTo (-steps); // zufällige Position zum Testen stepper.runToPosition(); Verzögerung (1000); stepper.moveTo(0); // zufällige Position zum Testen stepper.runToPosition(); Verzögerung (1000); } } Boolescher UltraschallObjectDetection () { lange Dauer1, Distanz1, DauerTemp, DistanzTemp, AverageDistance1, AverageDistanceTemp, AverageDistanceOlympian1; // Definieren Sie die Anzahl der Messungen, um lange Distanz zu nehmenMax = 0; LangstreckeMin = 4000; lange DistanzGesamt = 0; for (int i=0; i distanceMax) { distanceMax = distanceTemp; } if (AbstandTemp <AbstandMin) {AbstandMin =AbstandTemp; } DistanzGesamt+= DistanzTemp; } Serial.print ("Sensor1 maxDistance"); Seriendruck (AbstandMax); Serial.println("mm"); Serial.print ("Sensor1 minDistance"); Seriendruck (AbstandMin); Serial.println("mm"); // Durchschnittliche Entfernung aus den Messwerten nehmen AverageDistance1 = distanceTotal/10; Serial.print ("Sensor1 AverageDistance1"); Serial.print (averageDistance1); Serial.println("mm"); // Entfernen Sie die höchsten und niedrigsten Werte der Messungen, um fehlerhafte Messwerte zu vermeiden. AverageDistanceTemp = distanceTotal - (distanceMax + DistanceMin); AverageDistanceOlympian1 = AverageDistanceTemp/8; Serial.print ("Sensor1 AverageDistanceOlympian1 "); Serial.print (averageDistanceOlympian1); Serial.println("mm");
// Temperaturwerte zurücksetzen
DistanzGesamt = 0; AbstandMax = 0; AbstandMin = 4000; lange Dauer2, Distanz2, DurchschnittDistanz2, DurchschnittDistanzOlympian2; // Definiere die Anzahl der Messungen für (int i=0; i distanceMax) { distanceMax = distanceTemp; } if (AbstandTemp <AbstandMin) {AbstandMin =AbstandTemp; } DistanzGesamt+= DistanzTemp; } Serial.print ("Sensor2 maxDistance"); Seriendruck (AbstandMax); Serial.println("mm"); Serial.print ("Sensor2 minDistance"); Seriendruck (AbstandMin); Serial.println("mm"); // Durchschnittliche Entfernung aus den Messwerten nehmen AverageDistance2 = distanceTotal/10; Serial.print ("Sensor2 AverageDistance2"); Serial.print (averageDistance2); Serial.println("mm"); // Entfernen Sie die höchsten und niedrigsten Werte der Messungen, um fehlerhafte Messwerte zu vermeiden. AverageDistanceTemp = distanceTotal - (distanceMax + DistanceMin); AverageDistanceOlympian2 = AverageDistanceTemp/8; Serial.print ("Sensor2 AverageDistanceOlympian2 "); Serial.print (averageDistanceOlympian2); Serial.println("mm"); // Temperaturwerte zurücksetzen DistanceTotal = 0; AbstandMax = 0; AbstandMin = 4000; if (averageDistanceOlympian1 + AverageDistanceOlympian2 < emptyBoxDistance) { return true; aufrechtzuerhalten. Sonst { false zurückgeben; } }
Hauptkörper
Der Hauptteil enthält dieselbe Logik, die oben in diesem Abschnitt erläutert wurde, jedoch in Code geschrieben. Die Datei steht unten zum Download bereit.
Warnung
Viele Tests wurden durchgeführt, um die Konstanten zu finden: emptyBoxDistance, Schritte und Maximumspeed und Beschleunigung im Setup.
Schritt 7: Mögliche Verbesserungen
- Wir benötigen Feedback über die Position der Box, um sicherzustellen, dass sie immer in der richtigen Position ist, um das Objekt zu Beginn zu greifen. Es stehen verschiedene Optionen zur Verfügung, um das Problem zu lösen, aber eine einfache Möglichkeit könnte darin bestehen, das System, das wir in 3D-Druckern finden, mithilfe eines Schalters an einem Ende des Pfads der Box zu kopieren.
-Aufgrund der Probleme, die wir bei der Ultraschallerkennung festgestellt haben, können wir nach Alternativen für diese Funktion suchen: KY-008 Laser und Laserdetektor (Bild), kapazitive Sensoren.
Schritt 8: Limitierende Faktoren
Dieses Projekt funktioniert wie in den Anleitungen beschrieben, aber bei den folgenden Schritten ist besondere Vorsicht geboten:
Kalibrierung von Ultraschallsensoren
Der Winkel, in dem die Ultraschallsensoren zum zu detektierenden Objekt platziert werden, ist von entscheidender Bedeutung für die korrekte Funktion des Prototyps. Für dieses Projekt wurde für die Ausrichtung der Ultraschallsensoren ein Winkel von 12,5° zur Normalen gewählt, der beste Winkel sollte jedoch experimentell durch Aufnahme der Entfernungsmesswerte an verschiedenen Objekten ermittelt werden.
Energiequelle
Die erforderliche Leistung für den Schrittmotortreiber DRV8825 beträgt 12 V und liegt zwischen 0,2 und 1 Ampere. Das Arduino kann auch mit maximal 12V und 0,2 Ampere betrieben werden, indem der Klinkeneingang des Arduino verwendet wird. Besondere Vorsicht ist jedoch geboten, wenn sowohl für den Arduino als auch für den Schrittmotortreiber dieselbe Stromquelle verwendet wird. Wenn die Stromversorgung über eine normale Steckdose mit beispielsweise einem 12V / 2A AC / DC-Netzteil erfolgt, sollten ein Spannungsregler und Dioden im Stromkreis vorhanden sein, bevor der Strom in den Arduino- und Schrittmotortreiber eingespeist wird.
Die Box ansteuern
Obwohl dieses Projekt einen Schrittmotor verwendet, der unter normalen Bedingungen mit hoher Genauigkeit in seine Ausgangsposition zurückkehrt, ist es eine gute Praxis, einen Referenzierungsmechanismus zu verwenden, falls ein Fehler auftritt. Das Projekt hat in seiner jetzigen Form keinen Homing-Mechanismus, aber es ist recht einfach, einen zu implementieren. Dazu sollte ein mechanischer Schalter an der Ausgangsposition der Box hinzugefügt werden, damit die Box beim Auftreffen auf den Schalter weiß, dass sie sich in ihrer Ausgangsposition befindet.
Schrittmotortreiber DRV8825 Tuning
Der Schritttreiber erfordert eine Abstimmung, um mit dem Schrittmotor zu arbeiten. Dies geschieht experimentell durch Drehen des Potentiometers (Schraube) auf dem DRV8825-Chip, so dass der Motor mit der entsprechenden Strommenge versorgt wird. Drehen Sie also die Potentiometerschraube leicht, bis der Motor schlank wirkt.
Schritt 9: Credits
Dieses Projekt wurde im Rahmen eines Mechatronikkurses im akademischen Jahr 2018-2019 für den Bruface Master an der Université Libre de Bruxelles (ULB) - Vrije Universiteit Brussel (VUB) durchgeführt.
Die Autoren sind:
Maxime Decleire
Lidia Gomez
Markus Poder
Adriana Puentes
Narjisse Snoussi
Besonderer Dank gilt unserem Betreuer Albert de Beir, der uns auch während des gesamten Projekts unterstützt hat.
Empfohlen:
Pflanzenkrankheiten mit maschinellem Lernen erkennen – wikiHow
Wie man Pflanzenkrankheiten mit maschinellem Lernen erkennt: Der Prozess des Erkennens und Erkennens erkrankter Pflanzen war schon immer ein manueller und mühsamer Prozess, bei dem Menschen den Pflanzenkörper visuell untersuchen müssen, was oft zu einer falschen Diagnose führen kann. Es wurde auch vorhergesagt, dass als globaler W