Legoteil Zählmaschine 2016

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Legoteilzählmaschine im Überblick

In diesem Projekt ist die Hauptaufgabe die bereits vorhandene Legoteilzählmaschine in Soft- und Hardware so anzupassen, dass es weitere Anforderungen erfüllt. NOCH IN BEARBEITUNG: ZUR HILFE NEHMEN --> Projekt Legoteilzählmaschine_2015

Einleitung

ZIELE UND MEILENSTEINE IST UND SOLL ZUSTÄNDE:::


Bildverarbeitung

Bildverarbeitung: Beispiel
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.
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

GUI: Acquisition-Modus
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 Kommunikation Matlab mit Arduino

SVN

SVN Link zur GUI


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

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.
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

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.
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

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 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

Lichttest: Schwarz / Matt, RGB-LED
Lichttest: Schwarz / Matt, Weiße LED

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

Lichttest: Weiß / Matt, RGB-LED
Lichttest: Weiß / Matt, Weiße LED

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

Lichttest: Reflektorfolie, RGB-LED
Lichttest: Reflektorfolie, Weiße LED

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

Lichttest: Rundumbeleuchtung, Weiße LED

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

SVN Link zu den Lichttests


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

  1. SVN: Checkout URL | https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk