Legoteil Zählmaschine 2015: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
|||
(41 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
[[Datei:LegoZählmaschine_Wiki_800px.jpg|640px|thumb|top|Legoteilzählmaschine im Überblick]] | |||
In diesem Projekt gilt es eine Maschine aufzubauen, die Legoteile zählt. | In diesem Projekt gilt es eine Maschine aufzubauen, die Legoteile zählt. | ||
== Einleitung == | == Einleitung == | ||
* Aufbau der Maschine | |||
* Beschreibung der Komponenten | Ziel dieses Projektes ist, ein System zu entwerfen, welches Legoteile zählt. Insbesondere sollen Baukästen anhand ihrer Baukastennummer eingegeben werden können, bevor die Teile dieses Baukastens physikalisch in den Bunker der Legoteilzählmaschine gefüllt werden. Alles folgende soll vollautomatisch ablaufen: | ||
* Vereinzelung der Legoteile | |||
* Zentrierung der Legoteile auf dem Band | |||
* Bildverarbeitung der Legoteile. Die erkannten Legoteile sollen in einer Excel Liste anhand ihrer Lego Teilenummer abgeglichen werden, in welcher die Anzahl aller Legoteile in Bezug auf einen Baukasten vermerkt sind. | |||
* Sortierung der Legoteile in drei Kategorien 'Erkannt', 'Nicht erkannt' und 'Erkannt - Fremdteil' <br /> | |||
'''Ergebnis''' | |||
Als Ergebnis soll eine Teileliste ausgegeben werden, in der vermerkt ist ob der Baukasten vollständig ist, also alle Legoteile gezählt wurden, die im Neuzustand des Baukastens darin vorhanden waren.<br /> | |||
Falls dies nicht der Fall ist, soll der Teileliste entnommen werden können, welche und wie viele Teile fehlen. | |||
=== Aufbau der Maschine === | |||
Die Legoteilzaehlmaschine wurde als neues Projekt im SDE Praktikum von Null an geplant, konstruiert, beschafft und aufgebaut. Sie unterteilt sich in drei Förderbänder: <br /> | |||
* Förderband 1: Förderband als Stufenförderer mit 10mm hohen Stollen, um die Legoteile eines gesamten Baukastens aus dem Teilebunker zu befördern. Dieses ist in Höhe und Neigung einstellbar. | |||
* Förderband 2: Förderband zum transportieren der Legoteile und zur ersten Vereinzelung. Durch den Stufenförderer sollen die Teile möglichst in einer Linie hintereinander auf Förderband 2 landen. Verstellbar in der Höhe | |||
* Förderband 3: Durch die höhere Geschwindigkeit im Vergleich zu Förderband 2 soll Förderband 3 die Teile vereinzeln/auseinanderziehen. Dieses Förderband beinhaltet des Weiteren eine simple Zentrierung der Teile sowie die Bildverarbeitungsbox und einen Aussortiermechanismus am Ende des Bandes, um die verarbeiteten Legoteile in drei Gruppen zu unterteilen. Verstellbar in der Höhe. | |||
* Schaltschrank: Der Schaltschrank beinhaltet die gesamte, sonst offen zugängliche, Elektronik und ist vor Förderband 3 auf der Holzplatte fest montiert.<br /><br /> | |||
=== Beschreibung der Komponenten === | |||
Neben den bereits genannten Förderbändern wurden folgenden Komponenten verbaut: <br /> | |||
* Bildverarbeitungsbox: Der Prototyp zur Bildverarbeitungsbox ist noch nicht final montiert, liefert aber bereits sehr gute Ergebnisse. Näheres in Kapitel: '' 'Lichtbox-Tests' '' | |||
* Aussortierung: Vorerst ein Prototyp zur Aussortierung in drei Kategoriegn über zwei Servomotoren am Ende des dritten Bandes. Nähere Erläuterungen in Kapitel '' 'Konstruktion des Auswerfers für Teilesortierung' '' | |||
* Teilezentrierung: Die provisorisch aus Holz konstruierte Aussortierung verhindert, dass Legoteile am Rand des Bandes liegen bleiben oder durch Kontakt mit der Bande in der Bildverarbeitung nicht erkannt werden können. Eine Überarbeitung und Konstruktion aus Aluminium ist hier wünschenswert. | |||
* Schaltschrank: Beinhaltet zwei Spannungswandler sowie einen Arduino MEGA 2560 mit selbst entwickelten Aufsteckboard zur Ansteuerung der Motoren, Servos sowie zum Auslesen von Infrarotsensoren und Potentiometern. Der Arduino dient als Schnittstelle zwischen MATLAB Software und Förderbandsystem und wird über die serielle Schnittstelle angesteuert (USB). | |||
* Laptop: Der Laptop beinhaltet die Software zur Bildverarbeitung und ermöglicht in Zukunft durch Leistungsstarke Komponenten ein Livetracking zum Zählen und Sortieren der Legoeile. | |||
* Webcam: Zur Anwendung kam eine Logitech C920 Webcam. | |||
== Getting Started == | == Getting Started == | ||
===Einschaltreihenfolge=== | |||
Im Folgenden wird der Ablauf zum Starten der Legoteilzählmaschine und einer erfolgreichen Verbindung mit dem PC beschrieben. | |||
Sofern alle Schaltschrank internen Verbindungen wie im Stromlaufplan belassen wurden, ist der Ablauf wie folgt einzuhalten:<br /><br /> | |||
1. PC einschalten und USB Webcam (Logitech C920) sowie die USB Verbindung zum Arduino MEGA mit dem PC Verbinden.<br /> | |||
2. Netzstecker für die Lichtbox einstecken, solange diese noch manuell über den Netzstecker eingeschaltet werden muss.<br /> | |||
3. Netzstecker für den Schaltschrank einstecken.<br /> | |||
4. Hauptschalter (seitlich am Schaltschrank) einschalten.<br /> | |||
5. MATLAB GUI starten und Bildverarbeitung bzw. Förderbandansteuerung über diese grafische Oberfläche durchführen. | |||
[https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/06_MATLAB/04_GUI SVN Link zur GUI] <br /> | |||
=== Matlab Webcam Installation === | === Matlab Webcam Installation === | ||
Zeile 19: | Zeile 49: | ||
[http://de.mathworks.com/help/imaq/installing-the-support-packages-for-image-acquisition-toolbox-adaptors.html Matlab Webcam Installation] | [http://de.mathworks.com/help/imaq/installing-the-support-packages-for-image-acquisition-toolbox-adaptors.html Matlab Webcam Installation] | ||
== Bildverarbeitung == | |||
[[Datei:Bildverarbeitung_Beispiel.png|240px|thumb|right|Bildverarbeitung: Beispiel]] | |||
[[Datei:Programmablaufplan_Bildverarbeitung_(Funktion).png|240px|thumb|right|Bildverarbeitung: Programmablaufplan]] | |||
Die Bildverarbeitung wird mit der Software MatLab verarbeitet. Dazu wurde eine Funktion geschrieben, die von der GUI aufgerufen wird. Dieser wird ein Video-Objekt übergeben und liefert als Rückgabewert das verarbeitete Originalbild, ein Schwarz-Weiß-Bild der als Teile erkannten Flächen, ein daraus berechnetes maskiertes Originalbild und ein Schwarz-Weiß-Bild zur Kantenerkennung. | |||
<br/> | |||
Zu Beginn der Funktion wird ein Snapshot, also eine Momentaufnahme, des übertragenen Live-Videos erstellt. Auf diesen Snapshot wird die Bildverarbeitung angewandt. Zur Rauschunterdrückung wird ein Medianfilter auf den Snapshot angewandt. Anschließend werden Bedingungen definiert, die dafür sorgen, dass das Förderband herausgefiltert wird. Dadurch wird ein Schwarz-Weiß-Bild (Boolean) erzeugt (Weiß = Legoteile, Schwarz = Förderband). Anhand dieses Bildes kann eine Segmentierung durchgeführt werden. Zur Kantenerkennung wird ein Gaussfilter auf das mediangefilterte Bild angewandt. Dadurch wird ein Bild erzeugt, dass die Wahrscheinlichkeit für eine Kante anzeigt. Um daraus ein Schwarz-Weiß_Bild (Boolean) zu erzeugen, wird ein Schwellwert angegeben. | |||
<br/> | |||
Zusätzlich existiert eine Softwareversion die zusätzlich eine Segmentierung und Farberkennung durchführt, jedoch erfordert diese Version enorme Rechenleistung. Deshalb kann die Bildverarbeitung nicht in Echtzeit berechnet werden. | |||
=== SVN === | |||
[https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/SRC/Bildverarbeitung/Tracking/Lego_Projekt SVN Link zur Bildverarbeitungs-Software] | |||
== Matlab GUI == | == Matlab GUI == | ||
[[Datei:GUI_Teach-In-Modus.png|320px|thumb|right|GUI: Acquisition-Modus]] | |||
[[Datei:GUI_Acquisition-Modus.png|320px|thumb|right|GUI: Teach-In-Modus]] | |||
Zur Ansteuerung der Legozählmaschiene wurde eine GUI entwickelt, die die notwendigen Funktionen besitzt, um den Zählprozess zu durchlaufen und um neue Teile einlesen zu können. | |||
=== Aufbau === | |||
Die GUI besitzt zwei grundlegende Modi. Der Modus „Acquisition“ dient zur Erfassung von Legoteilen und ist die Voreinstellung. Über das Dropdown-Menü lässt sich das zu überprüfende Lego-Set auswählen. Die dazugehörigen Informationen werden aus einer Exceltabelle geladen. Das Feld Components zeigt an, wie viele Legoteile bereits erkannt wurden. Das Feld Running zeigt an, ob der Prozess in Betrieb ist. Das Feld Sending zeigt an, ob eine Nachricht an den Arduino Uno gesendet wird. Über die Buttons Load und Save lassen sich Einstellungen, die an den Motorreglern vorgenommen wurden, laden und speichern. Der Button Start startet die Motoren und die Bilderfassung und -verarbeitung. Über die Slider und Edit-Boxen lässt sich die Motorgeschwindigkeit von 0% bis 100% angeben. | |||
Der Modus „Teach-In“ dient zur Erfassung neuer Teile. Über die Edit-Box Component ID wird die ID des zu erfassenden Teils eingetragen. Diese entspricht der offiziellen Nummer. Das Feld Check zeigt an, ob das Teil erfasst wurde oder ob es Probleme bei der Erfassung gab. Das Feld Running zeigt an, ob der Prozess in Betrieb ist. Das Feld Sending zeigt an, ob eine Nachricht an den Arduino Uno gesendet wird. Über die Buttons Load und Save lassen sich Einstellungen, die an den Motorreglern vorgenommen wurden, laden und speichern. Der Button Start startet die Motoren und die Bilderfassung und -verarbeitung. Über den Slider und die Edit-Box Speed Motor 3 lässt sich Motorgeschwindigkeit des letzten Förderbands von 0% bis 100% angeben. Das Feld Flächeninhalt gibt die erkannte Flächengröße in Pixel an. Das Feld Kantenlänge gibt die erkannte Flächengröße der Kanten in Pixel an. Das Feld Farbwerte zeigt die einzelnen Werte in RGB an und zusätzlich ein Beispiel der erkannten Farbe. Zusätzlich werden zwei Felder angezeigt, die den erkannten Flächeninhalt und die erkannten Kanten des Teils anzeigen. | |||
Zur Kommunikation zwischen Matlab und Arduino Uno wird eine serielle Schnittstelle genutzt. Nähere Informationen dazu finden sich im Kapitel [http://193.175.248.52/wiki/index.php/Legoteil_Z%C3%A4hlmaschine_2015#Kommunikation_Matlab_mit_Arduino Kommunikation Matlab mit Arduino] | |||
=== SVN === | |||
[https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/SRC/GUI SVN Link zur GUI] | |||
== Kommunikation Matlab mit Arduino == | == Kommunikation Matlab mit Arduino == | ||
=== String zur Ansteuerung der Förderbänder und der Servomotoren === | |||
Die Kommunikation zwischen Matlab und dem Arduino wird über die serielle Schnittstelle realisiert. | |||
Alle nötigen Informationen werden als String von MATLAB an den Arduino geschickt, wo der String ausgelesen und seinen Variablen zugeordnet wird.<br /> | |||
Ein kompletter Motorstring zum Anschalten der Förderbänder würde beispielsweise wie folgt aussehen: S1A030B075C100;<br /> | |||
Erzeugt wird der benötigte String aus der GUI in MATLAB heraus, sodass der Nutzer nicht direkt mit diesem Format in Berührung kommt.<br /> | |||
Die Interpretation und Bedeutung der Daten ist der Tabelle innerhalb diesen Kapitels zu entnehmen. | |||
Unabhängig von der eingestellten Geschwindigkeit wird diese über eine Anlauffunktion in der Arduino-Software Schrittweise erreicht. Sobald das erste Förderband seine Sollgeschwindigkeit erreicht hat, wird das nächste Band über die Anlauffunktion gestartet. Somit wird verhindert, dass alle drei Motoren gleichzeitig starten, was einen hohen Anlaufstrom von insgesamt etwa 30A zur Folge hätte. Die Reihenfolge der Förderbandanläufe ist durch die Reihenfolge Band 3, Band 2, Band 1 so gewählt, dass nach einem Stillstand des Systems zuerst alle alten Legoteile von den Förderbändern transportiert werden können. Es werden dadurch auch erst neue Teile auf die Bänder 2 und 3 befördert, wenn diese bereits ihre Sollgeschwindigkeit erreicht haben. Das verhindert eine Häufung der Teile und ermöglicht eine Vereinzelung der beförderten Legoteile. | |||
Der String wird folgendermaßen aufgebaut und interpretiert: | |||
{| class="wikitable" | |||
! width="10%" | Buchstabe | |||
! width="10%" | Wert | |||
! width="25%" | Beschreibung | |||
! width="55%" | Funktion | |||
|- | |||
|S | |||
|0 oder 1 | |||
|Status der Förderbänder | |||
|Status gibt an ob die Förderbänder Ein-(1) oder Ausgeschaltet(2) werden sollen | |||
|- | |||
|A | |||
|000-100 | |||
|Geschwindigkeit Band 1 | |||
|Prozentuale Geschwindigkeit des Stufenförderers (Band 1) | |||
|- | |||
|B | |||
|000-100 | |||
|Geschwindigkeit Band 2 | |||
|Prozentuale Geschwindigkeit des mittleren Förderbandes (Band 2) | |||
|- | |||
|C | |||
|000-100 | |||
|Geschwindigkeit Band 3 | |||
|Prozentuale Geschwindigkeit des letzten, kurzen Förderbandes (Band 3) | |||
|- | |||
|Z | |||
|1-3 | |||
|Zuordnung Legoteil | |||
|Öffnet / Schließt Schranken zur Sortierung der durchlaufenden Legoteile <br /> Z1 = Teil erkannt, gehört zum Set -> Durchlauf <br /> Z2 = Teil erkannt, gehört nicht zum Set -> Linke Schranke öffnen <br /> Z3 = Unbekanntes Teil -> Rechte Schranke öffnen | |||
|- | |||
|} | |||
=== Arduino MEGA 2560 mit Aufsteckboard === | |||
[[Datei:Blockschaltbild Arduino.png|500px|thumb|right|Blockschaltbild des Arduinos]] | |||
Zur Ansteuerung der drei Gleichstrommotoren, der zwei Servomotoren und der Verwendung von bis zu zwei Infrarotsensoren über den Arduino wurde ein Aufsteckboard entwickelt und angefertigt.<br /> | |||
Der Link [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/11_MotorShield_MEGA/ SVN Link zur Dokumentation des Aufsteckboards] führt zur ausführlichen Dokumentation des Aufsteckboards mit Stückliste, fertigen Schaltplänen und dem Layout sowie der Pinbelegung zum Arduino MEGA. Zum generellen Verständnis dient das Blockschaltbild des Arduinos.<br /><br /> | |||
'''Inputs'''<br /> | |||
Potentiometer 1 - 3: Werden vorerst zur manuellen Geschwindigkeitseinstellung der Bänder genutzt, falls dies in der Arduino Software als '' '#define' '' festgelegt wurde.<br /> | |||
Infrarotsensor 1 & 2: Einer der Sensoren soll als Absicherung der berechneten Öffnungszeit der Sortierschranken dienen. Die Infrarotsensoren sind noch nicht implementiert.<br /> | |||
Seriell / USB: Verbindung zum Laptop muss Aufgrund der seriellen Kommunikation immer bestehen.<br /><br /> | |||
'''Outputs'''<br /> | |||
Motor 1-3: Pulsweitenmodulation zur Transistorschaltung, welche zur Ansteuerung der Förderbandmotoren dient. <br /> | |||
Motor 4&5: Pulsweitenmodulation für die Servomotoren, die am Ende des Bandes die erkannten Teile in die drei Kategorien '' 'Erkannt' '', '' 'Nicht erkannt' '' und '' 'Erkannt: Fremdteil' ''. <br /> <br /> | |||
== Konstruktion des Auswerfers für Teilesortierung == | |||
[[Datei:Sortierung Legoteilzaehlmaschine.png|240px|thumb|right|Konstruktion der Sortierung]] | |||
=== Beschreibung === | |||
Um in Zukunft die Legoteile in die drei Kategorien "Erkannt", "Nicht erkannt" und "Erkannt - Fremdteil" einteilen zu können, sollen zwei Servos wie in Abbildung 'Konstruktion der Sortierung' zu sehen am Ende des Fürderbandes montiert werden.<br /> | |||
Zur Ansteuerung der Servos muss per Matlab der Zustand des jeweiligen Teiles als String ('' 'Z1' '', '' 'Z2' '' oder '' 'Z3' '') auf die serielle Schnittstelle geschrieben werden. | |||
=== Konstruktion und Ansteuerung === | |||
In dem Bild 'Konstruktion zur Sortierung' ist eine Draufsicht des Endes des letzten Förderbandes zu sehen. Die Idee ist, zwei Servomotoren mit jeweils einer Art 'Schranke' auszustatten und diese im '' 'geschlossenen' '' Zustand weiter als gewöhnliche Bande fungieren zu lassen. | |||
Die Ansteuerung der Servos über den Arduino und die Kommunikation der Information, welcher Speicher bedient werden soll, wurde bereits in dem Kapitel '' 'Kommunikation Matlab mit Arduino ' '' beschrieben.<br /><br /> | |||
Eine Möglichkeit der Montage dieser zwei Servos wäre, 20x20mm Boschprofil als eine Brücke über die Förderbänder zu bauen, um daran über Halterungen die Servos zu befestigen. Optimal wäre eine Einstellmöglichkeit in der Höhe, sodass diverse Schrankenvariationen gestestet werden können. | |||
== Arduino - Steuerung der Förderbänder und Servomotoren == | |||
[[Datei:Programmablaufplan_Arduino.png|240px|thumb|right|Arduino: Programmablaufplan]] | |||
Die Arduino-Software ist dafür zuständig die Förderbandmotoren und Servomotoren zu steuern. Vor der eigentlichen Ausführung der Ansteuerung werden Konstanten, Variablen und die Servomotoren initialisiert. Anschließend, werden die folgenden Schritte als unendliche Schleife ausgeführt. Zuerst wird überprüft, ob eine Nachricht im seriellen Port vorliegt. Ist dies der Fall, wird diese Nachricht analysiert (näheres dazu wird im Kapitel [http://193.175.248.52/wiki/index.php/Legoteil_Z%C3%A4hlmaschine_2015#Kommunikation_Matlab_mit_Arduino Kommunikation Matlab mit Arduino] erläutert). Danach wird überprüft, welche Art der Motorsteuerung vorgesehen ist (GUI über seriellen Port oder Poti-Einstellung). Anschließend werden die Stellungen der Servomotoren berechnet und die Geschwindigkeit der Förderbänder eingestellt. Diese werden in der festen Reihenfolge Bildverarbeitung (Förderband 3) - Segmentierung (Förderband 2) - Trichter (Förderband 1) eingestellt. | |||
=== SVN === | |||
[https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/10_Arduino Software/Gesamtsystem SVN Link zur Arduino-Software] | |||
== Lichtbox-Tests == | |||
=== Beschreibung === | |||
Für das automatisierte Zählen von Legosteinen wird ein System zur Bild-/Videoaufnahme benötigt. Dafür soll eine Box mit eigener Lichtquelle geplant und gebaut werden. Die Box soll die Aufnahme vor Fremdeinwirkungen (z.B. Tageslicht) abschirmen und eine gleichmäßige Aufnahme garantieren. | |||
Für die Auswahlkriterien der Lichtquelle und der Box wurde ein morphologischer Kasten angefertigt, mit dem mögliche Anwendungen und Testfälle generiert werden sollen. Diesen zeigt ''Tabelle 1''. | |||
Tabelle 1: Morphologischer Kasten für Bild-/Videoaufnahmesystem | |||
{| class="wikitable" | |||
! width="16%" | | |||
! width="14%" | Variante 1 | |||
! width="14%" | Variante 2 | |||
! width="14%" | Variante 3 | |||
! width="14%" | Variante 4 | |||
! width="14%" | Variante 5 | |||
! width="14%" | Variante 6 | |||
|- | |||
| Lichtquelle (Art) | |||
| LED | |||
| Neon | |||
| Halogen | |||
| Glühlampe | |||
| | |||
| | |||
|- | |||
|- | |||
| Lichtquelle (Form) | |||
| Punkt(e) | |||
| Streifen | |||
| Fläche | |||
| Ring | |||
| | |||
| | |||
|- | |||
|- | |||
| Bestrahlung (Art) | |||
| Von Oben | |||
| Von Oben (Diffusion) | |||
| Seitlich | |||
| Seitlich (Diffusion) | |||
| Von Unten (Band) | |||
| Rundumbestrahlung | |||
|- | |||
|- | |||
| Bewandung (Farbe) | |||
| Weiß | |||
| Schwarz | |||
| Grau (Bande) | |||
| Grün (Band) | |||
| Reflektierend | |||
| Durchsichtig (Diffusion) | |||
|- | |||
|- | |||
| Bewandung (Struktur) | |||
| Glatt | |||
| Matt | |||
| Strukturiert | |||
| | |||
| | |||
| | |||
|- | |||
|- | |||
| Kamera (Position) | |||
| Von Oben | |||
| Seitlich | |||
| | |||
| | |||
| | |||
| | |||
|- | |||
|} | |||
Bei der Auswahl der zu testenden Varianten wurden einige Varianten im Vorfeld verworfen oder priorisiert. Für die Art der Lichtquelle wurden die Tests auf LED als Lichtquelle beschränkt. Verwendet wurden zwei unterschiedliche Varianten. Einerseits wurden LED-Streifen getestet, deren Lichtpunkte durch eine RGB-Kombination erzeugt werden. Somit war es möglich die Box mit unterschiedlichen Farben auszuleuchten. Die besten Ergebnisse (für das menschliche Auge) konnten durch die Farbeinstellung „Gelb“ erreicht werden. Andererseits werden LED-Streifen verwendet, welche nur weißes Licht erzeugen. Diese können ein „reineres“ und helleres weißes Licht erzeugen als die bereits beschriebenen LED-Streifen. Das Bild-/Videoraster wurde auf 640 Pixel zu 480 Pixel gesetzt. Zur Überprüfung der Ergebnisse wurden mit der Software MATLAB Bild- und Videoaufnahmen erzeugt. | |||
=== Testfall 1 === | |||
[[Datei:Lichttest1_1.png|240px|thumb|right|Lichttest: Schwarz / Matt, RGB-LED]] | |||
[[Datei:Lichttest1_2.png|240px|thumb|right|Lichttest: Schwarz / Matt, Weiße LED]] | |||
Tabelle 2: Auswahl aus dem morphologischen Kasten für Testfall 1 | |||
{| class="wikitable" | |||
!Kriterium | |||
!Variante | |||
|- | |||
| Lichtquelle (Art) | |||
| LED | |||
|- | |||
|- | |||
| Lichtquelle (Form) | |||
| Streifen | |||
|- | |||
|- | |||
| Beleuchtung (Art) | |||
| Von Oben (Diffusion *indirekt) | |||
|- | |||
|- | |||
| Bewandung (Farbe) | |||
| Schwarz | |||
|- | |||
|- | |||
| Bewandung (Struktur) | |||
| Matt | |||
|- | |||
|- | |||
| Kamera (Position) | |||
| Von Oben) | |||
|- | |||
|} | |||
Dieser Testfall zeichnet sich durch die Verwendung einer lichtundurchlässigen Box aus, die von innen mit schwarzen matten Pappkarton verkleidet ist. Die Beleuchtung und die Aufnahme der Bilder findet jeweils von oben statt. | |||
=== Testfall 2 === | |||
[[Datei:Lichttest2_1.png|240px|thumb|right|Lichttest: Weiß / Matt, RGB-LED]] | |||
[[Datei:Lichttest2_2.png|240px|thumb|right|Lichttest: Weiß / Matt, Weiße LED]] | |||
Tabelle 3: Auswahl aus dem morphologischen Kasten für Testfall 2 | |||
{| class="wikitable" | |||
!Kriterium | |||
!Variante | |||
|- | |||
| Lichtquelle (Art) | |||
| LED | |||
|- | |||
|- | |||
| Lichtquelle (Form) | |||
| Streifen | |||
|- | |||
|- | |||
| Beleuchtung (Art) | |||
| Von Oben (Diffusion *indirekt) | |||
|- | |||
|- | |||
| Bewandung (Farbe) | |||
| Weiß | |||
|- | |||
|- | |||
| Bewandung (Struktur) | |||
| Matt | |||
|- | |||
|- | |||
| Kamera (Position) | |||
| Von Oben) | |||
|- | |||
|} | |||
Dieser Testfall zeichnet sich durch die Verwendung einer lichtundurchlässigen Box aus, die von innen mit weißen matten Papier verkleidet ist. Die Beleuchtung und die Aufnahme der Bilder findet jeweils von oben statt. | |||
=== Testfall 3 === | |||
[[Datei:Lichttest3_1.png|240px|thumb|right|Lichttest: Reflektorfolie, RGB-LED]] | |||
[[Datei:Lichttest3_2.png|240px|thumb|right|Lichttest: Reflektorfolie, Weiße LED]] | |||
Tabelle 4: Auswahl aus dem morphologischen Kasten für Testfall 3 | |||
{| class="wikitable" | |||
!Kriterium | |||
!Variante | |||
|- | |||
| Lichtquelle (Art) | |||
| LED | |||
|- | |||
|- | |||
| Lichtquelle (Form) | |||
| Streifen | |||
|- | |||
|- | |||
| Beleuchtung (Art) | |||
| Von Oben (Diffusion *indirekt) | |||
|- | |||
|- | |||
| Bewandung (Farbe) | |||
| Reflektorfolie | |||
|- | |||
|- | |||
| Bewandung (Struktur) | |||
| Glatt | |||
|- | |||
|- | |||
| Kamera (Position) | |||
| Von Oben) | |||
|- | |||
|} | |||
== | Dieser Testfall zeichnet sich durch die Verwendung einer lichtundurchlässigen Box aus, die von innen mit Reflektorfolie verkleidet ist. Die Beleuchtung und die Aufnahme der Bilder findet jeweils von oben statt. ###Tabelle 2 zeigt die Ergebnisse und die dazugehörigen Einstellungen, welche in MATLAB konfiguriert wurden. | ||
=== Testfall 4 === | |||
[[Datei:Lichttest4.png|240px|thumb|right|Lichttest: Rundumbeleuchtung, Weiße LED]] | |||
Tabelle 5: Auswahl aus dem morphologischen Kasten für Testfall 4 | |||
{| class="wikitable" | |||
!Kriterium | |||
!Variante | |||
|- | |||
| Lichtquelle (Art) | |||
| LED | |||
|- | |||
|- | |||
| Lichtquelle (Form) | |||
| Punkte | |||
|- | |||
|- | |||
| Beleuchtung (Art) | |||
| Rundumbestrahlung | |||
|- | |||
|- | |||
| Bewandung (Farbe) | |||
| Durchsichtig (Diffusion) | |||
|- | |||
|- | |||
| Bewandung (Struktur) | |||
| Matt | |||
|- | |||
|- | |||
| Kamera (Position) | |||
| Von Oben) | |||
|- | |||
|} | |||
Dieser Testfall zeichnet sich durch die Verwendung einer doppelwandigen Box aus. Die innere Box ist ein Konstrukt aus Acrylglas-Scheiben, die zur Diffusion des Lichts dient. An der äußeren Box sind die LEDs befestigt. Ferner dient diese zur Abschottung fremder Lichtquellen. Im Gegensatz zu den vorherigen Testfällen wurde die Belichtung des Bandes von den Seiten und von oben realisiert. Außerdem wurde dieser Testfall nur mit einer Art der LEDs ausgeführt, da durch die vorherigen Testfälle bereits eine Präferenz ermittelt werden konnte. Aufgrund zu schwacher Diffusionsverhältnissen kam es zu Reflektionen auf der Oberfläche verschiedener Legoteile. Um diese zu vermeiden, wurde die Belichtung auf die seitliche Bestrahlung reduziert. | |||
=== Ergebnisse und Auswertung === | |||
Das beste Ergebnis lieferte Testfall 2 mit weißer Bewandung und weißen LEDs. Die Farben sind am | |||
deutlichsten zu erkennen und es treten wenige Reflektionen auf den Legoteilen auf. Außerdem entfällt ein maßgeblicher Teil der Schattenbildung, welche durch die Seitenbeleuchtung hervorgerufen wurde. | |||
=== SVN === | |||
[https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/02_Versuchsprotokolle/Lichttests SVN Link zu den Lichttests] | |||
== Gefährdungsbeurteilung == | |||
[https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/13_Gefaehrdungsbeurteilung SVN Link zur Gefährdungsbeurteilung] <br /> | |||
== [[Projekttagebuch Legoteil Zählmaschine 2015| Projekttagebuch]] == | == [[Projekttagebuch Legoteil Zählmaschine 2015| Projekttagebuch]] == | ||
== Liste offener Punkte == | == Liste offener Punkte == | ||
* | Die offenen Punkte und Ideen für kommende Semester sind im Nachfolgenden aufgelistet. | ||
{| class="wikitable" | |||
! width="11%" | Thema | |||
! width="53%" | Beschreibung | |||
! width="22%" | Nähere Informationen | |||
! width="14%" | Status benötigter Teile | |||
|- | |||
|Neues 24 V Netzteil | |||
|24V/10A Netzteil gegen 24V/20A austauschen, um Überlast beim Lauf aller Motoren zu verhindern. | |||
| | |||
|Netzteil ist bestellt (Frau König) | |||
|- | |||
|Software zur Bildverarbeitung (BV) | |||
|Die Einbindung einer geeigneten Software zur Teileerkennung steht noch aus | |||
|Kommunikation mit Systems sowie Ansteuerung ist fertig. | |||
|Bildverarbeitung mit 'String' als Output | |||
|- | |||
|Bauteileliste in Excel | |||
|Die Excel Liste, welche alle Teile eines Baukasten erhält, muss mit dem Ergebnis der BV abgeglichen werden. | |||
|Erkannte Teile in mindestens zwei möglichen Ausrichtungen müssen erkannt und in der Liste vermerkt werden | |||
| | |||
|- | |||
|Servo für Teilesortierung | |||
|Identisches Servo wie bisher gegenüberliegend montieren, um drei Sortierfächer (Erkannt/Nicht Erkannt/Fremdteil) zu sortieren | |||
|Konstruktion siehe Kapitel ''Konstruktion des Auswerfers für Teilesortierung'' | |||
|Bestellung wurde an Fr. König geleitet | |||
|- | |||
|Zeit bis zur Servoöffnung | |||
|Das Delay zwsichen Befehl und öffnen der Servos muss ermittelt und je nach Geschwindigkeit angepasst werden | |||
|Es ist problemlos möglich, einen weiteren 'String' - Befehl als Buchstaben für die Verzögerungszeit einzubinden | |||
|String auslesen und verarbeiten muss in Arduino Software geschehen. | |||
|- | |||
|Kabelkanal montieren | |||
|Kabelkanal zur ordentlichen Verlegung der Leitungen an den Förderbändern montieren | |||
| | |||
| | |||
|- | |||
|Kamerahalterung | |||
|Konstruktion einer Kamerahalterung für die Logitech C920 WebCam | |||
|Vorschlag: Brücke über Förderband | |||
| | |||
|- | |||
|Bildverarbeitungskasten | |||
|Für die Bildverarbeitung muss eine der gebauten Bildverarbeitungsbox-Prototypen ausgewählt und montiert werden. Hierfür wurden Lichttests durchgeführt. | |||
|Ergebnisse sind protokolliert [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/02_Versuchsprotokolle/Lichttests/ SVN Link zu den Lichttests] | |||
|Prototypen der Lichtboxen vorhanden | |||
|- | |||
|Teilezentrierung | |||
|Die provisorisch aus Holz gefertite Teilezentrierung soll in fixierbarer Variante aus Aluminium gefertigt werden | |||
|Ergebnisse zu den Tests der Zentrierungsmethoden sind in [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/02_Versuchsprotokolle/Bauteilzentrierung/ diesem SVN Ordner] protokolliert | |||
|Prototypen der gewählten Teilezentrierung ist vor der Bildverarbeitungsbox verbaut | |||
|- | |||
|Idee Software: Flexible Bildverarbeitungs | |||
|Durch definieren der Schnittstellen könnte in der GUI eine Einbindung frei wählbarer BV Software realisiert werden. | |||
|Optimal geeignet um kleine Projekte dann an der Legoteilzaehlmaschine zu testen. | |||
| | |||
|- | |||
|} | |||
<!-- == Videos == | |||
*[https://www.youtube.com/watch?v=xzwTasGUPNc Funktionsbeispiel] | |||
--> | |||
== Siehe auch / Weiterführende Links== | |||
# '''SVN:''' Checkout URL [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk | https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk] | |||
# '''Fortsetzung Nr.1 (SS16):''' [http://193.175.248.52/wiki/index.php/Legoteil_Z%C3%A4hlmaschine_2016 | http://193.175.248.52/wiki/index.php/Legoteil_Z%C3%A4hlmaschine_2016] | |||
# '''Fortsetzung Nr.2 (WS16/17):''' [http://193.175.248.52/wiki/index.php/Legoteil_Z%C3%A4hlmaschine_2016_2017 | http://193.175.248.52/wiki/index.php/Legoteil_Z%C3%A4hlmaschine_2016_2017] |
Aktuelle Version vom 3. Februar 2017, 09:10 Uhr
In diesem Projekt gilt es eine Maschine aufzubauen, die Legoteile zählt.
Einleitung
Ziel dieses Projektes ist, ein System zu entwerfen, welches Legoteile zählt. Insbesondere sollen Baukästen anhand ihrer Baukastennummer eingegeben werden können, bevor die Teile dieses Baukastens physikalisch in den Bunker der Legoteilzählmaschine gefüllt werden. Alles folgende soll vollautomatisch ablaufen:
- Vereinzelung der Legoteile
- Zentrierung der Legoteile auf dem Band
- Bildverarbeitung der Legoteile. Die erkannten Legoteile sollen in einer Excel Liste anhand ihrer Lego Teilenummer abgeglichen werden, in welcher die Anzahl aller Legoteile in Bezug auf einen Baukasten vermerkt sind.
- Sortierung der Legoteile in drei Kategorien 'Erkannt', 'Nicht erkannt' und 'Erkannt - Fremdteil'
Ergebnis
Als Ergebnis soll eine Teileliste ausgegeben werden, in der vermerkt ist ob der Baukasten vollständig ist, also alle Legoteile gezählt wurden, die im Neuzustand des Baukastens darin vorhanden waren.
Falls dies nicht der Fall ist, soll der Teileliste entnommen werden können, welche und wie viele Teile fehlen.
Aufbau der Maschine
Die Legoteilzaehlmaschine wurde als neues Projekt im SDE Praktikum von Null an geplant, konstruiert, beschafft und aufgebaut. Sie unterteilt sich in drei Förderbänder:
- Förderband 1: Förderband als Stufenförderer mit 10mm hohen Stollen, um die Legoteile eines gesamten Baukastens aus dem Teilebunker zu befördern. Dieses ist in Höhe und Neigung einstellbar.
- Förderband 2: Förderband zum transportieren der Legoteile und zur ersten Vereinzelung. Durch den Stufenförderer sollen die Teile möglichst in einer Linie hintereinander auf Förderband 2 landen. Verstellbar in der Höhe
- Förderband 3: Durch die höhere Geschwindigkeit im Vergleich zu Förderband 2 soll Förderband 3 die Teile vereinzeln/auseinanderziehen. Dieses Förderband beinhaltet des Weiteren eine simple Zentrierung der Teile sowie die Bildverarbeitungsbox und einen Aussortiermechanismus am Ende des Bandes, um die verarbeiteten Legoteile in drei Gruppen zu unterteilen. Verstellbar in der Höhe.
- Schaltschrank: Der Schaltschrank beinhaltet die gesamte, sonst offen zugängliche, Elektronik und ist vor Förderband 3 auf der Holzplatte fest montiert.
Beschreibung der Komponenten
Neben den bereits genannten Förderbändern wurden folgenden Komponenten verbaut:
- Bildverarbeitungsbox: Der Prototyp zur Bildverarbeitungsbox ist noch nicht final montiert, liefert aber bereits sehr gute Ergebnisse. Näheres in Kapitel: 'Lichtbox-Tests'
- Aussortierung: Vorerst ein Prototyp zur Aussortierung in drei Kategoriegn über zwei Servomotoren am Ende des dritten Bandes. Nähere Erläuterungen in Kapitel 'Konstruktion des Auswerfers für Teilesortierung'
- Teilezentrierung: Die provisorisch aus Holz konstruierte Aussortierung verhindert, dass Legoteile am Rand des Bandes liegen bleiben oder durch Kontakt mit der Bande in der Bildverarbeitung nicht erkannt werden können. Eine Überarbeitung und Konstruktion aus Aluminium ist hier wünschenswert.
- Schaltschrank: Beinhaltet zwei Spannungswandler sowie einen Arduino MEGA 2560 mit selbst entwickelten Aufsteckboard zur Ansteuerung der Motoren, Servos sowie zum Auslesen von Infrarotsensoren und Potentiometern. Der Arduino dient als Schnittstelle zwischen MATLAB Software und Förderbandsystem und wird über die serielle Schnittstelle angesteuert (USB).
- Laptop: Der Laptop beinhaltet die Software zur Bildverarbeitung und ermöglicht in Zukunft durch Leistungsstarke Komponenten ein Livetracking zum Zählen und Sortieren der Legoeile.
- Webcam: Zur Anwendung kam eine Logitech C920 Webcam.
Getting Started
Einschaltreihenfolge
Im Folgenden wird der Ablauf zum Starten der Legoteilzählmaschine und einer erfolgreichen Verbindung mit dem PC beschrieben.
Sofern alle Schaltschrank internen Verbindungen wie im Stromlaufplan belassen wurden, ist der Ablauf wie folgt einzuhalten:
1. PC einschalten und USB Webcam (Logitech C920) sowie die USB Verbindung zum Arduino MEGA mit dem PC Verbinden.
2. Netzstecker für die Lichtbox einstecken, solange diese noch manuell über den Netzstecker eingeschaltet werden muss.
3. Netzstecker für den Schaltschrank einstecken.
4. Hauptschalter (seitlich am Schaltschrank) einschalten.
5. MATLAB GUI starten und Bildverarbeitung bzw. Förderbandansteuerung über diese grafische Oberfläche durchführen.
SVN Link zur GUI
Matlab Webcam Installation
Da es bei der Einrichtung der USB-Kamera in MatLab des Öfteren zu Schwierigkeiten kam wird an dieser Stelle eine Anleitung zur Einrichtung dieser bereitgestellt. Bei der Installation handelt es sich um das Support Package OS Generic Video Interface - Windows Video (winvideo)
Bildverarbeitung
Die Bildverarbeitung wird mit der Software MatLab verarbeitet. Dazu wurde eine Funktion geschrieben, die von der GUI aufgerufen wird. Dieser wird ein Video-Objekt übergeben und liefert als Rückgabewert das verarbeitete Originalbild, ein Schwarz-Weiß-Bild der als Teile erkannten Flächen, ein daraus berechnetes maskiertes Originalbild und ein Schwarz-Weiß-Bild zur Kantenerkennung.
Zu Beginn der Funktion wird ein Snapshot, also eine Momentaufnahme, des übertragenen Live-Videos erstellt. Auf diesen Snapshot wird die Bildverarbeitung angewandt. Zur Rauschunterdrückung wird ein Medianfilter auf den Snapshot angewandt. Anschließend werden Bedingungen definiert, die dafür sorgen, dass das Förderband herausgefiltert wird. Dadurch wird ein Schwarz-Weiß-Bild (Boolean) erzeugt (Weiß = Legoteile, Schwarz = Förderband). Anhand dieses Bildes kann eine Segmentierung durchgeführt werden. Zur Kantenerkennung wird ein Gaussfilter auf das mediangefilterte Bild angewandt. Dadurch wird ein Bild erzeugt, dass die Wahrscheinlichkeit für eine Kante anzeigt. Um daraus ein Schwarz-Weiß_Bild (Boolean) zu erzeugen, wird ein Schwellwert angegeben.
Zusätzlich existiert eine Softwareversion die zusätzlich eine Segmentierung und Farberkennung durchführt, jedoch erfordert diese Version enorme Rechenleistung. Deshalb kann die Bildverarbeitung nicht in Echtzeit berechnet werden.
SVN
SVN Link zur Bildverarbeitungs-Software
Matlab GUI
Zur Ansteuerung der Legozählmaschiene wurde eine GUI entwickelt, die die notwendigen Funktionen besitzt, um den Zählprozess zu durchlaufen und um neue Teile einlesen zu können.
Aufbau
Die GUI besitzt zwei grundlegende Modi. Der Modus „Acquisition“ dient zur Erfassung von Legoteilen und ist die Voreinstellung. Über das Dropdown-Menü lässt sich das zu überprüfende Lego-Set auswählen. Die dazugehörigen Informationen werden aus einer Exceltabelle geladen. Das Feld Components zeigt an, wie viele Legoteile bereits erkannt wurden. Das Feld Running zeigt an, ob der Prozess in Betrieb ist. Das Feld Sending zeigt an, ob eine Nachricht an den Arduino Uno gesendet wird. Über die Buttons Load und Save lassen sich Einstellungen, die an den Motorreglern vorgenommen wurden, laden und speichern. Der Button Start startet die Motoren und die Bilderfassung und -verarbeitung. Über die Slider und Edit-Boxen lässt sich die Motorgeschwindigkeit von 0% bis 100% angeben. Der Modus „Teach-In“ dient zur Erfassung neuer Teile. Über die Edit-Box Component ID wird die ID des zu erfassenden Teils eingetragen. Diese entspricht der offiziellen Nummer. Das Feld Check zeigt an, ob das Teil erfasst wurde oder ob es Probleme bei der Erfassung gab. Das Feld Running zeigt an, ob der Prozess in Betrieb ist. Das Feld Sending zeigt an, ob eine Nachricht an den Arduino Uno gesendet wird. Über die Buttons Load und Save lassen sich Einstellungen, die an den Motorreglern vorgenommen wurden, laden und speichern. Der Button Start startet die Motoren und die Bilderfassung und -verarbeitung. Über den Slider und die Edit-Box Speed Motor 3 lässt sich Motorgeschwindigkeit des letzten Förderbands von 0% bis 100% angeben. Das Feld Flächeninhalt gibt die erkannte Flächengröße in Pixel an. Das Feld Kantenlänge gibt die erkannte Flächengröße der Kanten in Pixel an. Das Feld Farbwerte zeigt die einzelnen Werte in RGB an und zusätzlich ein Beispiel der erkannten Farbe. Zusätzlich werden zwei Felder angezeigt, die den erkannten Flächeninhalt und die erkannten Kanten des Teils anzeigen.
Zur Kommunikation zwischen Matlab und Arduino Uno wird eine serielle Schnittstelle genutzt. Nähere Informationen dazu finden sich im Kapitel Kommunikation Matlab mit Arduino
SVN
Kommunikation Matlab mit Arduino
String zur Ansteuerung der Förderbänder und der Servomotoren
Die Kommunikation zwischen Matlab und dem Arduino wird über die serielle Schnittstelle realisiert.
Alle nötigen Informationen werden als String von MATLAB an den Arduino geschickt, wo der String ausgelesen und seinen Variablen zugeordnet wird.
Ein kompletter Motorstring zum Anschalten der Förderbänder würde beispielsweise wie folgt aussehen: S1A030B075C100;
Erzeugt wird der benötigte String aus der GUI in MATLAB heraus, sodass der Nutzer nicht direkt mit diesem Format in Berührung kommt.
Die Interpretation und Bedeutung der Daten ist der Tabelle innerhalb diesen Kapitels zu entnehmen.
Unabhängig von der eingestellten Geschwindigkeit wird diese über eine Anlauffunktion in der Arduino-Software Schrittweise erreicht. Sobald das erste Förderband seine Sollgeschwindigkeit erreicht hat, wird das nächste Band über die Anlauffunktion gestartet. Somit wird verhindert, dass alle drei Motoren gleichzeitig starten, was einen hohen Anlaufstrom von insgesamt etwa 30A zur Folge hätte. Die Reihenfolge der Förderbandanläufe ist durch die Reihenfolge Band 3, Band 2, Band 1 so gewählt, dass nach einem Stillstand des Systems zuerst alle alten Legoteile von den Förderbändern transportiert werden können. Es werden dadurch auch erst neue Teile auf die Bänder 2 und 3 befördert, wenn diese bereits ihre Sollgeschwindigkeit erreicht haben. Das verhindert eine Häufung der Teile und ermöglicht eine Vereinzelung der beförderten Legoteile.
Der String wird folgendermaßen aufgebaut und interpretiert:
Buchstabe | Wert | Beschreibung | Funktion |
---|---|---|---|
S | 0 oder 1 | Status der Förderbänder | Status gibt an ob die Förderbänder Ein-(1) oder Ausgeschaltet(2) werden sollen |
A | 000-100 | Geschwindigkeit Band 1 | Prozentuale Geschwindigkeit des Stufenförderers (Band 1) |
B | 000-100 | Geschwindigkeit Band 2 | Prozentuale Geschwindigkeit des mittleren Förderbandes (Band 2) |
C | 000-100 | Geschwindigkeit Band 3 | Prozentuale Geschwindigkeit des letzten, kurzen Förderbandes (Band 3) |
Z | 1-3 | Zuordnung Legoteil | Öffnet / Schließt Schranken zur Sortierung der durchlaufenden Legoteile Z1 = Teil erkannt, gehört zum Set -> Durchlauf Z2 = Teil erkannt, gehört nicht zum Set -> Linke Schranke öffnen Z3 = Unbekanntes Teil -> Rechte Schranke öffnen |
Arduino MEGA 2560 mit Aufsteckboard
Zur Ansteuerung der drei Gleichstrommotoren, der zwei Servomotoren und der Verwendung von bis zu zwei Infrarotsensoren über den Arduino wurde ein Aufsteckboard entwickelt und angefertigt.
Der Link SVN Link zur Dokumentation des Aufsteckboards führt zur ausführlichen Dokumentation des Aufsteckboards mit Stückliste, fertigen Schaltplänen und dem Layout sowie der Pinbelegung zum Arduino MEGA. Zum generellen Verständnis dient das Blockschaltbild des Arduinos.
Inputs
Potentiometer 1 - 3: Werden vorerst zur manuellen Geschwindigkeitseinstellung der Bänder genutzt, falls dies in der Arduino Software als '#define' festgelegt wurde.
Infrarotsensor 1 & 2: Einer der Sensoren soll als Absicherung der berechneten Öffnungszeit der Sortierschranken dienen. Die Infrarotsensoren sind noch nicht implementiert.
Seriell / USB: Verbindung zum Laptop muss Aufgrund der seriellen Kommunikation immer bestehen.
Outputs
Motor 1-3: Pulsweitenmodulation zur Transistorschaltung, welche zur Ansteuerung der Förderbandmotoren dient.
Motor 4&5: Pulsweitenmodulation für die Servomotoren, die am Ende des Bandes die erkannten Teile in die drei Kategorien 'Erkannt' , 'Nicht erkannt' und 'Erkannt: Fremdteil' .
Konstruktion des Auswerfers für Teilesortierung
Beschreibung
Um in Zukunft die Legoteile in die drei Kategorien "Erkannt", "Nicht erkannt" und "Erkannt - Fremdteil" einteilen zu können, sollen zwei Servos wie in Abbildung 'Konstruktion der Sortierung' zu sehen am Ende des Fürderbandes montiert werden.
Zur Ansteuerung der Servos muss per Matlab der Zustand des jeweiligen Teiles als String ( 'Z1' , 'Z2' oder 'Z3' ) auf die serielle Schnittstelle geschrieben werden.
Konstruktion und Ansteuerung
In dem Bild 'Konstruktion zur Sortierung' ist eine Draufsicht des Endes des letzten Förderbandes zu sehen. Die Idee ist, zwei Servomotoren mit jeweils einer Art 'Schranke' auszustatten und diese im 'geschlossenen' Zustand weiter als gewöhnliche Bande fungieren zu lassen.
Die Ansteuerung der Servos über den Arduino und die Kommunikation der Information, welcher Speicher bedient werden soll, wurde bereits in dem Kapitel 'Kommunikation Matlab mit Arduino ' beschrieben.
Eine Möglichkeit der Montage dieser zwei Servos wäre, 20x20mm Boschprofil als eine Brücke über die Förderbänder zu bauen, um daran über Halterungen die Servos zu befestigen. Optimal wäre eine Einstellmöglichkeit in der Höhe, sodass diverse Schrankenvariationen gestestet werden können.
Arduino - Steuerung der Förderbänder und Servomotoren
Die Arduino-Software ist dafür zuständig die Förderbandmotoren und Servomotoren zu steuern. Vor der eigentlichen Ausführung der Ansteuerung werden Konstanten, Variablen und die Servomotoren initialisiert. Anschließend, werden die folgenden Schritte als unendliche Schleife ausgeführt. Zuerst wird überprüft, ob eine Nachricht im seriellen Port vorliegt. Ist dies der Fall, wird diese Nachricht analysiert (näheres dazu wird im Kapitel Kommunikation Matlab mit Arduino erläutert). Danach wird überprüft, welche Art der Motorsteuerung vorgesehen ist (GUI über seriellen Port oder Poti-Einstellung). Anschließend werden die Stellungen der Servomotoren berechnet und die Geschwindigkeit der Förderbänder eingestellt. Diese werden in der festen Reihenfolge Bildverarbeitung (Förderband 3) - Segmentierung (Förderband 2) - Trichter (Förderband 1) eingestellt.
SVN
Software/Gesamtsystem SVN Link zur Arduino-Software
Lichtbox-Tests
Beschreibung
Für das automatisierte Zählen von Legosteinen wird ein System zur Bild-/Videoaufnahme benötigt. Dafür soll eine Box mit eigener Lichtquelle geplant und gebaut werden. Die Box soll die Aufnahme vor Fremdeinwirkungen (z.B. Tageslicht) abschirmen und eine gleichmäßige Aufnahme garantieren. Für die Auswahlkriterien der Lichtquelle und der Box wurde ein morphologischer Kasten angefertigt, mit dem mögliche Anwendungen und Testfälle generiert werden sollen. Diesen zeigt Tabelle 1.
Tabelle 1: Morphologischer Kasten für Bild-/Videoaufnahmesystem
Variante 1 | Variante 2 | Variante 3 | Variante 4 | Variante 5 | Variante 6 | |
---|---|---|---|---|---|---|
Lichtquelle (Art) | LED | Neon | Halogen | Glühlampe | ||
Lichtquelle (Form) | Punkt(e) | Streifen | Fläche | Ring | ||
Bestrahlung (Art) | Von Oben | Von Oben (Diffusion) | Seitlich | Seitlich (Diffusion) | Von Unten (Band) | Rundumbestrahlung |
Bewandung (Farbe) | Weiß | Schwarz | Grau (Bande) | Grün (Band) | Reflektierend | Durchsichtig (Diffusion) |
Bewandung (Struktur) | Glatt | Matt | Strukturiert | |||
Kamera (Position) | Von Oben | Seitlich |
Bei der Auswahl der zu testenden Varianten wurden einige Varianten im Vorfeld verworfen oder priorisiert. Für die Art der Lichtquelle wurden die Tests auf LED als Lichtquelle beschränkt. Verwendet wurden zwei unterschiedliche Varianten. Einerseits wurden LED-Streifen getestet, deren Lichtpunkte durch eine RGB-Kombination erzeugt werden. Somit war es möglich die Box mit unterschiedlichen Farben auszuleuchten. Die besten Ergebnisse (für das menschliche Auge) konnten durch die Farbeinstellung „Gelb“ erreicht werden. Andererseits werden LED-Streifen verwendet, welche nur weißes Licht erzeugen. Diese können ein „reineres“ und helleres weißes Licht erzeugen als die bereits beschriebenen LED-Streifen. Das Bild-/Videoraster wurde auf 640 Pixel zu 480 Pixel gesetzt. Zur Überprüfung der Ergebnisse wurden mit der Software MATLAB Bild- und Videoaufnahmen erzeugt.
Testfall 1
Tabelle 2: Auswahl aus dem morphologischen Kasten für Testfall 1
Kriterium | Variante |
---|---|
Lichtquelle (Art) | LED |
Lichtquelle (Form) | Streifen |
Beleuchtung (Art) | Von Oben (Diffusion *indirekt) |
Bewandung (Farbe) | Schwarz |
Bewandung (Struktur) | Matt |
Kamera (Position) | Von Oben) |
Dieser Testfall zeichnet sich durch die Verwendung einer lichtundurchlässigen Box aus, die von innen mit schwarzen matten Pappkarton verkleidet ist. Die Beleuchtung und die Aufnahme der Bilder findet jeweils von oben statt.
Testfall 2
Tabelle 3: Auswahl aus dem morphologischen Kasten für Testfall 2
Kriterium | Variante |
---|---|
Lichtquelle (Art) | LED |
Lichtquelle (Form) | Streifen |
Beleuchtung (Art) | Von Oben (Diffusion *indirekt) |
Bewandung (Farbe) | Weiß |
Bewandung (Struktur) | Matt |
Kamera (Position) | Von Oben) |
Dieser Testfall zeichnet sich durch die Verwendung einer lichtundurchlässigen Box aus, die von innen mit weißen matten Papier verkleidet ist. Die Beleuchtung und die Aufnahme der Bilder findet jeweils von oben statt.
Testfall 3
Tabelle 4: Auswahl aus dem morphologischen Kasten für Testfall 3
Kriterium | Variante |
---|---|
Lichtquelle (Art) | LED |
Lichtquelle (Form) | Streifen |
Beleuchtung (Art) | Von Oben (Diffusion *indirekt) |
Bewandung (Farbe) | Reflektorfolie |
Bewandung (Struktur) | Glatt |
Kamera (Position) | Von Oben) |
Dieser Testfall zeichnet sich durch die Verwendung einer lichtundurchlässigen Box aus, die von innen mit Reflektorfolie verkleidet ist. Die Beleuchtung und die Aufnahme der Bilder findet jeweils von oben statt. ###Tabelle 2 zeigt die Ergebnisse und die dazugehörigen Einstellungen, welche in MATLAB konfiguriert wurden.
Testfall 4
Tabelle 5: Auswahl aus dem morphologischen Kasten für Testfall 4
Kriterium | Variante |
---|---|
Lichtquelle (Art) | LED |
Lichtquelle (Form) | Punkte |
Beleuchtung (Art) | Rundumbestrahlung |
Bewandung (Farbe) | Durchsichtig (Diffusion) |
Bewandung (Struktur) | Matt |
Kamera (Position) | Von Oben) |
Dieser Testfall zeichnet sich durch die Verwendung einer doppelwandigen Box aus. Die innere Box ist ein Konstrukt aus Acrylglas-Scheiben, die zur Diffusion des Lichts dient. An der äußeren Box sind die LEDs befestigt. Ferner dient diese zur Abschottung fremder Lichtquellen. Im Gegensatz zu den vorherigen Testfällen wurde die Belichtung des Bandes von den Seiten und von oben realisiert. Außerdem wurde dieser Testfall nur mit einer Art der LEDs ausgeführt, da durch die vorherigen Testfälle bereits eine Präferenz ermittelt werden konnte. Aufgrund zu schwacher Diffusionsverhältnissen kam es zu Reflektionen auf der Oberfläche verschiedener Legoteile. Um diese zu vermeiden, wurde die Belichtung auf die seitliche Bestrahlung reduziert.
Ergebnisse und Auswertung
Das beste Ergebnis lieferte Testfall 2 mit weißer Bewandung und weißen LEDs. Die Farben sind am deutlichsten zu erkennen und es treten wenige Reflektionen auf den Legoteilen auf. Außerdem entfällt ein maßgeblicher Teil der Schattenbildung, welche durch die Seitenbeleuchtung hervorgerufen wurde.
SVN
Gefährdungsbeurteilung
SVN Link zur Gefährdungsbeurteilung
Projekttagebuch
Liste offener Punkte
Die offenen Punkte und Ideen für kommende Semester sind im Nachfolgenden aufgelistet.
Thema | Beschreibung | Nähere Informationen | Status benötigter Teile |
---|---|---|---|
Neues 24 V Netzteil | 24V/10A Netzteil gegen 24V/20A austauschen, um Überlast beim Lauf aller Motoren zu verhindern. | Netzteil ist bestellt (Frau König) | |
Software zur Bildverarbeitung (BV) | Die Einbindung einer geeigneten Software zur Teileerkennung steht noch aus | Kommunikation mit Systems sowie Ansteuerung ist fertig. | Bildverarbeitung mit 'String' als Output |
Bauteileliste in Excel | Die Excel Liste, welche alle Teile eines Baukasten erhält, muss mit dem Ergebnis der BV abgeglichen werden. | Erkannte Teile in mindestens zwei möglichen Ausrichtungen müssen erkannt und in der Liste vermerkt werden | |
Servo für Teilesortierung | Identisches Servo wie bisher gegenüberliegend montieren, um drei Sortierfächer (Erkannt/Nicht Erkannt/Fremdteil) zu sortieren | Konstruktion siehe Kapitel Konstruktion des Auswerfers für Teilesortierung | Bestellung wurde an Fr. König geleitet |
Zeit bis zur Servoöffnung | Das Delay zwsichen Befehl und öffnen der Servos muss ermittelt und je nach Geschwindigkeit angepasst werden | Es ist problemlos möglich, einen weiteren 'String' - Befehl als Buchstaben für die Verzögerungszeit einzubinden | String auslesen und verarbeiten muss in Arduino Software geschehen. |
Kabelkanal montieren | Kabelkanal zur ordentlichen Verlegung der Leitungen an den Förderbändern montieren | ||
Kamerahalterung | Konstruktion einer Kamerahalterung für die Logitech C920 WebCam | Vorschlag: Brücke über Förderband | |
Bildverarbeitungskasten | Für die Bildverarbeitung muss eine der gebauten Bildverarbeitungsbox-Prototypen ausgewählt und montiert werden. Hierfür wurden Lichttests durchgeführt. | Ergebnisse sind protokolliert SVN Link zu den Lichttests | Prototypen der Lichtboxen vorhanden |
Teilezentrierung | Die provisorisch aus Holz gefertite Teilezentrierung soll in fixierbarer Variante aus Aluminium gefertigt werden | Ergebnisse zu den Tests der Zentrierungsmethoden sind in diesem SVN Ordner protokolliert | Prototypen der gewählten Teilezentrierung ist vor der Bildverarbeitungsbox verbaut |
Idee Software: Flexible Bildverarbeitungs | Durch definieren der Schnittstellen könnte in der GUI eine Einbindung frei wählbarer BV Software realisiert werden. | Optimal geeignet um kleine Projekte dann an der Legoteilzaehlmaschine zu testen. |
Siehe auch / Weiterführende Links
- SVN: Checkout URL | https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk
- Fortsetzung Nr.1 (SS16): | http://193.175.248.52/wiki/index.php/Legoteil_Z%C3%A4hlmaschine_2016
- Fortsetzung Nr.2 (WS16/17): | http://193.175.248.52/wiki/index.php/Legoteil_Z%C3%A4hlmaschine_2016_2017