Legoteil Zählmaschine 2015: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
 
(18 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 4: Zeile 4:


== 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 ==
Zeile 19: Zeile 43:
5. MATLAB GUI starten und Bildverarbeitung bzw. Förderbandansteuerung über diese grafische Oberfläche durchführen.  
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 />
[https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/06_MATLAB/04_GUI SVN Link zur GUI] <br />
Leitfragen für die Dokumentation von Prof. Schneider:
* Wie wird geflasht?
* Notwendige Tools in welcher Version? Vorraussetzungen?
* Links zu den Startdateien
* Screenshots und Fotos verwenden


=== Matlab Webcam Installation ===
=== Matlab Webcam Installation ===
Zeile 33: 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 ==
Zeile 45: Zeile 79:
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.
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]]
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 ===
=== SVN ===
[https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/SRC/GUI SVN Link zur GUI]
[https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/SRC/GUI SVN Link zur GUI]


== Arduino Servoansteuerung ==
[[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 --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]




Zeile 63: Zeile 89:
=== String zur Ansteuerung der Förderbänder und der Servomotoren ===
=== String zur Ansteuerung der Förderbänder und der Servomotoren ===
Die Kommunikation zwischen Matlab und dem Arduino wird über die serielle Schnittstelle realisiert.  
Die Kommunikation zwischen Matlab und dem Arduino wird über die serielle Schnittstelle realisiert.  
Alles nötigen Informationen werden als String von MATLAB an den Arduino geschickt, wo der String ausgelesen und seinen Variablen zugeordnet wird.<br />
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: S1A010B075C001;<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 diesm Format in Beerührung kommt.<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 dennoch der Tabelle innerhalb diesen Kapitels zu entnehmen.
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 Arduinosoftware Schrittweise erreicht. Sobald das erste Förderband seine Sollgeschwindigkeit erreicht hat, wird das nächste ü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
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.
Legoteile.


Der String ist folgendermaßen Aufgebaut und interpretiert:
Der String wird folgendermaßen aufgebaut und interpretiert:


{| border="1"
{| class="wikitable"
  ! width="5%" | Buchstabe
  ! width="10%" | Buchstabe
  ! width="5%" | Wert
  ! width="10%" | Wert
  ! width="10%" | Beschreibung
  ! width="25%" | Beschreibung
  ! width="15%" | Funktion
  ! width="55%" | Funktion
|-
|-
  |S
  |S
Zeile 105: Zeile 130:
|-
|-


|}<br />
|}


[[Datei:Blockschaltbild Arduino.png|500px|thumb|left|Blockschaltbild des Arduinos]]
=== Arduino MEGA 2560 mit Aufsteckboard ===
=== 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 />
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 />
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 />
'''Inputs'''<br />
Potentiometer 1 -3:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Werden vorerst zur manuellen Geschwindigkeitseinstellung der Bänder genutzt, falls dies in der Arduino Software als '' '#define' '' festgelegt wurde.<br />
Potentiometer 1 - 3:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Werden vorerst zur manuellen Geschwindigkeitseinstellung der Bänder genutzt, falls dies in der Arduino Software als '' '#define' '' festgelegt wurde.<br />
Infrarotsensor 1 & 2:&nbsp;&nbsp; Einer der Sensoren soll als Absicherung der berechneten Öffnungszeit der Sortierschranken dienen. Die Infrarotsensoren sind noch nicht implementiert.<br />
Infrarotsensor 1 & 2:&nbsp;&nbsp; Einer der Sensoren soll als Absicherung der berechneten Öffnungszeit der Sortierschranken dienen. Die Infrarotsensoren sind noch nicht implementiert.<br />
Seriell/USB:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Verbindung zum Laptop muss Aufgrund der seriellen Kommunikation immer bestehen.<br /><br />
Seriell / USB:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Verbindung zum Laptop muss Aufgrund der seriellen Kommunikation immer bestehen.<br /><br />


'''Outputs'''<br />
'''Outputs'''<br />
Motor 1-3:&nbsp;&nbsp;&nbsp; Pulsweitenmodulation zur Transistorschaltung, welche zur Ansteuerung der Förderbandmotoren dient. <br />
Motor 1-3:&nbsp;&nbsp;&nbsp; Pulsweitenmodulation zur Transistorschaltung, welche zur Ansteuerung der Förderbandmotoren dient. <br />
Motor 4&5:&nbsp;&nbsp; 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 /> <br /><br /> <br /><br />
Motor 4&5:&nbsp;&nbsp; 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 ==
== Konstruktion des Auswerfers für Teilesortierung ==
Zeile 125: Zeile 149:
=== Beschreibung ===
=== 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 />
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' '', '' 'Z3' '' oder '' 'Z3' '') auf die serielle Schnittstelle geschrieben 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 ===
=== 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.  
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 />
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.<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]




Zeile 145: Zeile 177:
Tabelle 1: Morphologischer Kasten für Bild-/Videoaufnahmesystem
Tabelle 1: Morphologischer Kasten für Bild-/Videoaufnahmesystem
{| class="wikitable"
{| class="wikitable"
!
! width="16%" |
!Variante 1
! width="14%" | Variante 1
!Variante 2
! width="14%" | Variante 2
!Variante 3
! width="14%" | Variante 3
!Variante 4
! width="14%" | Variante 4
!Variante 5
! width="14%" | Variante 5
!Variante 6
! width="14%" | Variante 6
|-
|-
  | Lichtquelle (Art)
  | Lichtquelle (Art)
Zeile 158: Zeile 190:
  | Halogen
  | Halogen
  | Glühlampe
  | Glühlampe
|
  |  
  |  
|-
|-
Zeile 365: Zeile 398:




== Bildverarbeitung ==
[[Datei:Bildverarbeitung_Beispiel.png|320px|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]


== Gefährdungsbeurteilung ==
== Gefährdungsbeurteilung ==
Zeile 388: Zeile 408:
Die offenen Punkte und Ideen für kommende Semester sind im Nachfolgenden aufgelistet.
Die offenen Punkte und Ideen für kommende Semester sind im Nachfolgenden aufgelistet.


{| border="1"
{| class="wikitable"
  ! width="10%" | Thema
  ! width="11%" | Thema
  ! width="53%" | Beschreibung
  ! width="53%" | Beschreibung
  ! width="22%" | Nähere Informationen
  ! width="22%" | Nähere Informationen
  ! width="15%" | Status benötigter Teile
  ! width="14%" | Status benötigter Teile
|-
|-
  |Neues 24 V Netzteil
  |Neues 24 V Netzteil
Zeile 399: Zeile 419:
  |Netzteil ist bestellt (Frau König)
  |Netzteil ist bestellt (Frau König)
|-
|-
  |Notausschalter
  |Software zur Bildverarbeitung (BV)
  |Notausschalter montieren und verdrahten
  |Die Einbindung einer geeigneten Software zur Teileerkennung steht noch aus
  |Vorschlag: Montage Zentral über Förderband oder auf Montageplatte
|Kommunikation mit Systems sowie Ansteuerung ist fertig.
  |Kabel sowie Notausschalter vorhanden
|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
  |Servo für Teilesortierung
  |Identisches Servo wie bisher gegenüberliegend montieren, um drei Sortierfächer (Erkannt/Nicht Erkannt/Fremdteil) zu sortieren
  |Identisches Servo wie bisher gegenüberliegend montieren, um drei Sortierfächer (Erkannt/Nicht Erkannt/Fremdteil) zu sortieren
  |Konstruktion siehe ''*link* (tbd)''
  |Konstruktion siehe Kapitel ''Konstruktion des Auswerfers für Teilesortierung''
  |Bestellung wurde an Fr. König geleitet
  |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 montieren
Zeile 423: Zeile 453:
  |Ergebnisse sind protokolliert [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/02_Versuchsprotokolle/Lichttests/ SVN Link zu den Lichttests]
  |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
  |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.
|
|-
|-


|}
|}
<br />
 
<!-- == Videos ==
*[https://www.youtube.com/watch?v=xzwTasGUPNc Funktionsbeispiel]
-->


== Siehe auch / Weiterführende Links==
== 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]
# '''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

Legoteilzählmaschine im Überblick

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)

Matlab Webcam Installation


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
  2. Fortsetzung Nr.1 (SS16): | http://193.175.248.52/wiki/index.php/Legoteil_Z%C3%A4hlmaschine_2016
  3. Fortsetzung Nr.2 (WS16/17): | http://193.175.248.52/wiki/index.php/Legoteil_Z%C3%A4hlmaschine_2016_2017