SmartFarm: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
 
(262 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 12: Zeile 12:


== Einleitung ==
== Einleitung ==
Diese Arbeit wurde im Rahme der Veranstaltung "Angewandte Elektronik" im Masterstudiengang "Business and Systems Engineering" (BSE/BaSE) angefertigt.  
Diese Arbeit wurde im Rahmen der Veranstaltung "Angewandte Elektronik" im Masterstudiengang "Business and Systems Engineering" (BSE/BaSE) angefertigt.  
Es werden folgende Ziele verfolgt:  
Es werden folgende Ziele verfolgt:  
* Auswertung von Sensorinformationen
* Auswertung von Sensorinformationen
Zeile 24: Zeile 24:
* Projektdemonstration, -abnahme und -dokumentation
* Projektdemonstration, -abnahme und -dokumentation


Heutzutage spielt das Kozept "SMART" eine wichtige Rolle in zahlreichen alltäglichen Bereichen. In der Landwirtschaft gewinnt der Einsatz moderner Techniken, genauer gesagt Informations- und Kommunikationssysteme, immer mehr an Bedeutung. Diese Revolution wird in dem Bereich als Landwirtschaft 4.0 bezeichnet. Im Rahmen des Moduls "Angewandte Elektrotechnik" ist das Projekt SmartFarm entstanden.
Heutzutage spielt das Konzept "SMART" eine wichtige Rolle in zahlreichen alltäglichen Bereichen. In der Landwirtschaft gewinnt der Einsatz moderner Techniken, genauer gesagt Informations- und Kommunikationssysteme, immer mehr an Bedeutung. Diese Revolution wird in dem Bereich als Landwirtschaft 4.0 bezeichnet. Im Rahmen des Moduls "Angewandte Elektrotechnik" ist das Projekt SmartFarm entstanden.


Das Projekt SmartFarm verfolgt das Ziel, mit Sensorsystemen und Aktuatoren die Tierhaltung im Einklang mit den Tieren zu erleichtern und zu optimieren. Sie lassen sich zu den fünf Oberpunkten SmartLight, SmartDoor, SmartTracking, SmartFeed, SmartWater und SmartClimate zusammenfassen. SmartLight bezieht sich auf die Helligkeitssteuerung im Stall und SmartDoor auf die Türsteuerung. SmartTracking umfasst die Positionserfassung der Tiere. SmartFeed und SmartWater beziehen sich auf die Versorgung der Tiere. Klimatische Daten werden im Gebiet SmartClimate sowohl für den Stall als auch für die Legenester zur Überwachnung des Lege- und Brutverhaltens ermittelt. Ein perfektes System erfordert die Zusammenarbeit zwischen den verschiedenen Bereichen. Verschiedene Möglichkeiten für die Umsetzung des Gesamtsystems mit den Teilsystemen sind in dem Brainstorming in Abbildung 2 und 3visualisiert.
Das Projekt SmartFarm verfolgt das Ziel, mit Sensorsystemen und Aktuatoren die Tierhaltung im Einklang mit den Tieren zu erleichtern und zu optimieren. Sie lassen sich zu den fünf Oberpunkten SmartLight, SmartDoor, SmartTracking, SmartFeed, SmartWater und SmartClimate zusammenfassen. '''SmartLight''' bezieht sich auf die Helligkeitssteuerung im Stall und '''SmartDoor''' auf die Türsteuerung. '''SmartTracking''' umfasst die Positionserfassung der Tiere. '''SmartFeed''' und '''SmartWater''' beziehen sich auf die Versorgung der Tiere. Klimatische Daten werden im Gebiet '''SmartClimate''' sowohl für den Stall als auch für die Legenester zur Überwachung des Lege- und Brutverhaltens ermittelt. Ein perfektes System erfordert die Zusammenarbeit zwischen den Bereichen. Verschiedene Möglichkeiten für die Umsetzung des Gesamtsystems mit den Teilsystemen sind in dem Brainstorming in Abbildung 2 visualisiert.


[[Datei:SmartFarm_Brainstorming.png|500px|thumb|right|Absatz|'''Abb. 2''': SmartFarm - Möglichkeiten]]
[[Datei:SmartFarm_Brainstorming_Möglichkeiten2.png|800px|mini|left|'''Abb. 2''': SmartFarm - Brainstorming]]
<br clear=all>
<br clear=all>


[[Datei:SmartFarm_Brainstorming_Möglichkeiten.png|800px|thumb|right|Absatz|'''Abb. 3''': SmartFarm - Brainstorming]]
Der Fokus dieses mechatronischen Projekts liegt auf den Teilsystemen der Tür- (s. SmartDoor) und Helligkeitssteuerung (s. SmartLight) in einem Hühnerstall (s. Abbildung 3). Zudem besteht die Möglichkeit, sowohl die Tür als auch die Lampe manuell anzusteuern. Ein geschlossener Stall schützt die Hühner über Nacht vor Raubtieren. Die Türsteuerung verschafft dem Tierhalter Unabhängigkeit und Flexibilität beim Öffnen und Schließen der Tür. Aus der Lampensteuerung resultiert eine erhöhte Legeleistung in der dunklen Jahreszeit durch einen künstlich verlängerten Tag.
 
[[Datei:SmartFarm_Brainstorming.png|600px|mini|left|'''Abb. 3''': Fokus auf die Subsysteme "SmartDoor" und "SmartLight"]]
<br clear=all>
<br clear=all>
Der Fokus dieses mechatronischen Projekts liegt auf den Teilsystemen der Tür- (s. SmartDoor)und Helligkeitssteuerung (s. SmartLight) in einem Hühnerstall. Zudem besteht die Möglichkeit, sowohl die Tür als auch die Lampe manuell anzusteuern.
Ein geschlossener Stall schützt die Hühner über Nacht vor Raubtieren. Die Türsteuerung verschafft dem Tierhalter Unabhängigkeit und Flexibilität beim Öffnen und Schließen der Tür. Aus der Lampensteuerung resultiert eine erhöhte Legeleistung in der dunklen Jahreszeit durch einen künstlich verlängerten Tag.


===Istsituation===
===Istsituation===


Als Istsituation existiert ein Stromanschluss und eine Tür, die manuellen geöffnet und geschlossen werden kann (s. Abbildung).
Für einen ersten Eindruck ist der Stall (Istsituation) in den folgenden Bilder 4 und 5 dargestellt.


 
<gallery class="left" caption=" " widths="400" heights="400">
[[Datei:Istsituation - Tür.png|500px|thumb|right|Absatz|'''Abb. 2''': Istsituation - Tür]]
Datei:Hühnerstall vorne.png|'''Abb. 4: Hühnerstall hinten'''
<br clear=all>
Datei:Hühnerstall hinten.png|'''Abb. 5: Hühnerstall hinten'''
</gallery>


= V-Modell als Vorgehensmodell =
= V-Modell als Vorgehensmodell =
[[Datei:V_Modell_Gruppe_G.png|thumb|700px|rechts|'''Abb.3''': Das V-Modell (eigene Abbildung in Anlehnung an <ref name="Datendankverstehen"/>)]]
[[Datei:V_Modell_Gruppe_G.png|thumb|700px|rechts|'''Abb.6''': Das V-Modell (eigene Abbildung in Anlehnung an <ref name="Datendankverstehen"/>)]]
Das [https://www.datenbanken-verstehen.de/datenbankentwicklung/vorgehensmodelle/v-modell/ V-Modell] ist ein Prozessmodell zur Systementwicklung. Dieses Modell wird für die Entwicklung des Projekts "SmartFarm" verwendet und gliedert sich schwerpunktmäßig in die Entwurfsphase, Implementierung und Testphase. Das Ergebnis bzw. Ziel ist ein fertiges Produkt (s. Abbildung 3). Das V-Modell wird für die Entwicklung aus den folgenden Gründe ausgewählt <ref name="ionos_VModell"/>:  
Das [https://www.datenbanken-verstehen.de/datenbankentwicklung/vorgehensmodelle/v-modell/ V-Modell] ist ein Prozessmodell zur Systementwicklung. Dieses Modell wird für die Entwicklung des Projekts "SmartFarm" verwendet und gliedert sich schwerpunktmäßig in die Entwurfsphase, Implementierung und Testphase. Das Ergebnis bzw. Ziel ist ein fertiges Produkt (s. Abbildung 6). Das V-Modell wird für die Systementwicklung aus den folgenden Gründen ausgewählt <ref name="ionos_VModell"/>:  
* Klare Projektstruktur mit Qualitätsgewährleistung
* Klare Projektstruktur mit Qualitätsgewährleistung
* bessere Planbarkeit durch fest vorgegebene Rollen, Strukturen und Ergebnisse
* bessere Planbarkeit durch fest vorgegebene Rollen, Strukturen und Ergebnisse
Zeile 66: Zeile 65:
* Abnahmetest
* Abnahmetest


= Anforderungsmanement =
= Anforderungsmanagement =
== Allgemeine Projektanforderungen ==
== Allgemeine Projektanforderungen ==
* Entwurf eines mechatronischen Systems für die Helligkeit- und Türsteuerung eines Hühnerstalls
* Entwurf eines mechatronischen Systems für die Helligkeit- und Türsteuerung eines Hühnerstalls
Zeile 73: Zeile 72:
* Erarbeiten einer alternativen Lösung für die manuelle Türsteuerung (unabhängig von der Helligkeit)
* Erarbeiten einer alternativen Lösung für die manuelle Türsteuerung (unabhängig von der Helligkeit)
* Vorstellung und Erarbeiten eines Konzepts für eine geregelte Bewegung der Tür
* Vorstellung und Erarbeiten eines Konzepts für eine geregelte Bewegung der Tür
* Erarbeitung einer Energieversorgungssystem für das System
* Erarbeitung eines Systems für die Energieversorgung
* Softwareentwicklung nach HSHL Standard in SVN
* Softwareentwicklung nach HSHL Standard in SVN


== Lastenheft ==
== Lastenheft ==


Detaillierte Anforderung werden in einem Lastenheft in Form einer Excel-Tabelle zusammengefasst. Diese gliedert sich entsprechend des SysML-Standards in die folgenden Punkte:
Detaillierte Anforderungen werden in einem Lastenheft in Form einer Excel-Tabelle zusammengefasst. Diese gliedert sich entsprechend des SysML-Standards in die folgenden Punkte:
# Projektziel
# Projektziel
# Functional Requirements
# Functional Requirements
Zeile 108: Zeile 107:
! style="font-weight: bold;"| A
! style="font-weight: bold;"| A
! style="font-weight: bold;"| 0.1
! style="font-weight: bold;"| 0.1
|Mit Sensorsystemen und Aktuatoren die Tierhaltung im Einklang mit den Tieren erleichtern und optimieren.
|Mit Sensorsystemen und Aktuatoren wird die Tierhaltung im Einklang mit den Tieren erleichtert und optimiert.
| I. Mpidi Bita & D. Hermelingmeier
| I. Mpidi Bita & D. Hermelingmeier
| 20.10.2020
| 20.10.2020
Zeile 124: Zeile 123:
! style="font-weight: bold;"| A
! style="font-weight: bold;"| A
! style="font-weight: bold;"| 1.1
! style="font-weight: bold;"| 1.1
|Ein mechatronisches System für die Helligkeit- und die Türsteuerung muss entworfen werden.  
|Ein mechatronisches System für die Helligkeits- und die Türsteuerung muss entworfen werden.  
| I. Mpidi Bita & D. Hermelingmeier
| I. Mpidi Bita & D. Hermelingmeier
| 20.10.2020
| 20.10.2020
Zeile 132: Zeile 131:
! style="font-weight: bold;"| A
! style="font-weight: bold;"| A
! style="font-weight: bold;"| 1.3
! style="font-weight: bold;"| 1.3
|Der Zustand der Tür und der Lampe müssen nur an bestimmsten Zeiten im Automatik-Betrieb geändert werden.
|Der Zustand der Tür und der Lampe darf nur an bestimmten Zeiten im Automatik-Betrieb geändert werden.
| I. Mpidi Bita & D. Hermelingmeier
| I. Mpidi Bita & D. Hermelingmeier
| 20.10.2020
| 20.10.2020
Zeile 140: Zeile 139:
! style="font-weight: bold;"| A
! style="font-weight: bold;"| A
! style="font-weight: bold;"| 1.4
! style="font-weight: bold;"| 1.4
|Die Tür muss bei ausreichende Außenhelligkeit aufgehen, andersfalls muss es zu sein.
|Die Tür muss bei ausreichender Außenhelligkeit aufgehen und bei Dunkelheit wieder schließen.
| I. Mpidi Bita & D. Hermelingmeier
| I. Mpidi Bita & D. Hermelingmeier
| 20.10.2020
| 20.10.2020
Zeile 172: Zeile 171:
! style="font-weight: bold;"| A
! style="font-weight: bold;"| A
! style="font-weight: bold;"| 2.3
! style="font-weight: bold;"| 2.3
|Die Masse der Tür muss auf keinen Fall ein Wert von 5 Kg überschreiten.  
|Die Masse der Tür darf ein Gewicht von 5 kg nicht überschreiten.  
| I. Mpidi Bita & D. Hermelingmeier
| I. Mpidi Bita & D. Hermelingmeier
| 20.10.2020
| 20.10.2020
Zeile 180: Zeile 179:
! style="font-weight: bold;"| A
! style="font-weight: bold;"| A
! style="font-weight: bold;"| 2.4
! style="font-weight: bold;"| 2.4
|Die Länge des Seils muss eine komplette Öffnung bzw. Schließung der Tür ermöglichen  
|Die Länge des Seils muss eine komplette Öffnung bzw. Schließung der Tür ermöglichen.
| I. Mpidi Bita & D. Hermelingmeier
| I. Mpidi Bita & D. Hermelingmeier
| 20.10.2020
| 20.10.2020
Zeile 204: Zeile 203:
! style="font-weight: bold;"| A
! style="font-weight: bold;"| A
! style="font-weight: bold;"| 3.1
! style="font-weight: bold;"| 3.1
|Eine alternative Lösung zur manuelle Ansteuerung muss angeboten werden.
|Eine alternative Lösung zur manuellen Ansteuerung muss angeboten werden.
| I. Mpidi Bita & D. Hermelingmeier
| I. Mpidi Bita & D. Hermelingmeier
| 20.10.2020
| 20.10.2020
Zeile 212: Zeile 211:
! style="font-weight: bold;"| A
! style="font-weight: bold;"| A
! style="font-weight: bold;"| 3.1
! style="font-weight: bold;"| 3.1
|Es muss eine Möglichkeit bestehen, jeder Zeit die Tür zu öffnen bzw. zu schließen.
|Es muss eine Möglichkeit bestehen, jederzeit die Tür zu öffnen bzw. zu schließen.
| I. Mpidi Bita & D. Hermelingmeier
| I. Mpidi Bita & D. Hermelingmeier
| 20.10.2020
| 20.10.2020
Zeile 220: Zeile 219:
! style="font-weight: bold;"| A
! style="font-weight: bold;"| A
! style="font-weight: bold;"| 3.2
! style="font-weight: bold;"| 3.2
|Es muss eine Möglichkeit bestehen, jeder Zeit die Beleuchtung an- bzw. auszuschalten.
|Es muss eine Möglichkeit bestehen, jederzeit die Beleuchtung an- bzw. auszuschalten.
| I. Mpidi Bita & D. Hermelingmeier
| I. Mpidi Bita & D. Hermelingmeier
| 20.10.2020
| 20.10.2020
Zeile 245: Zeile 244:
! style="font-weight: bold;"| A
! style="font-weight: bold;"| A
! style="font-weight: bold;"| 5.2
! style="font-weight: bold;"| 5.2
|Der Motor darf sich maximal mit einer Geschwindigkeit von 9 RPM drehen.
|Der Motor darf sich maximal mit einer Geschwindigkeit von 9 rpm (rounds per minute) drehen.
| I. Mpidi Bita & D. Hermelingmeier
| I. Mpidi Bita & D. Hermelingmeier
| 20.10.2020
| 20.10.2020
Zeile 285: Zeile 284:
! style="font-weight: bold;"| A
! style="font-weight: bold;"| A
! style="font-weight: bold;"| 6.2
! style="font-weight: bold;"| 6.2
|Qualitätsicherung
|Qualitätssicherung
| I. Mpidi Bita & D. Hermelingmeier
| I. Mpidi Bita & D. Hermelingmeier
| 20.10.2020
| 20.10.2020
Zeile 296: Zeile 295:
geeignete Tests erstellt werden:  
geeignete Tests erstellt werden:  
* Unittests zum Testen der Komponenten
* Unittests zum Testen der Komponenten
* Integrationstests zum Testen von Module
* Integrationstests zum Testen der Module
* Systemtests zum Testen des gesamten Modells
* Systemtests zum Testen des gesamten Modells
* Abnahmetests für die Endabnahme des gesamten Projektes
* Abnahmetests für die Endabnahme des gesamten Projektes
Zeile 314: Zeile 313:
! style="font-weight: bold;"| A
! style="font-weight: bold;"| A
! style="font-weight: bold;"| 7.2
! style="font-weight: bold;"| 7.2
|Die echte Uhrzeit muss für den Ansteuerung erfasst werden.
|Die echte Uhrzeit muss für die Ansteuerung erfasst werden.
| I. Mpidi Bita & D. Hermelingmeier
| I. Mpidi Bita & D. Hermelingmeier
| 20.10.2020
| 20.10.2020
Zeile 362: Zeile 361:
! style="font-weight: bold;"| A
! style="font-weight: bold;"| A
! style="font-weight: bold;"| 4.5
! style="font-weight: bold;"| 4.5
|Komponentetest in der Form eines Unittestberichts
|Komponententest in der Form eines Unittestberichts
| I. Mpidi Bita & D. Hermelingmeier
| I. Mpidi Bita & D. Hermelingmeier
| 20.10.2020
| 20.10.2020
Zeile 403: Zeile 402:


== Gesamtsystem ==
== Gesamtsystem ==
Wie in Abbildung 2 zu sehen ist, gliedert sich das Projekt "SmartFarm" in mehrere Bestandteile. Bei diesem Entwurf ist das Ziel das System in der Funktionalität abzugrenzen und <br>
Das Projekt "SmartFarm" gliedert sich gemäß Abbildung 7 in mehrere Bestandteile. Bei diesem Entwurf ist das Ziel das System in der Funktionalität abzugrenzen und <br>
einen Rahmen für das Uni-Projekt aufzustellen. Das Stallsystem/Gesamtsystem besteht aus zwei Subsystemen bzw. Teilsystemen. In diesem Projekt wird die Helligkeits- und die Türsteuerung betrachtet (s. Abbildung unten) <br>.  
einen Projektrahmen zu definieren. Das Stallsystem/Gesamtsystem besteht aus zwei Subsystemen/Teilsystemen. In diesem Projekt wird die Helligkeits- und die Türsteuerung betrachtet (s. Abbildung 7 unten).  


Bei der Helligkeitssteuerung wird eine Tageslichtlampe für ausreichend Helligkeit im Stall sorgen, wenn die Sonne gerade nicht scheint. Wesentliche Anforderungen der Helligkeitssteuerung sind in der REQ-140 beschrieben. Das zweite Subsystem ist die Türsteuerung. Hier soll die Tür automatisch entsprechend REQ-110, <br> 
Bei der Helligkeitssteuerung wird eine Tageslichtlampe bei Dunkelheit für ausreichend Helligkeit im Stall sorgen. Wesentliche Anforderungen der Helligkeitssteuerung sind in der REQ-140 beschrieben. Das zweite Subsystem ist die Türsteuerung. Hier soll die Tür automatisch entsprechend REQ-110, REQ-230, REQ-240, REQ-250 und REQ-520 hoch und runterfahren. Beide Systeme sind sowohl abhängig von der realen Zeit als auch von Außenhelligkeit.  
REQ-230, REQ-240, REQ-250 und REQ-520 hoch und runterfahren. Beide Systeme sind sowohl von der Zeit- als auch von Außenhelligkeit abhängig.  


 
[[Datei:FE_System_AE_Gruppe_1_8.png|mini|800px|links|'''Abb. 7''': Funktionaler Entwurf - Projekt SmartFarm (Funktionalität)]]
[[Datei:FE_System_AE_Gruppe_1_8.png|mini|800px|links|'''Abb.4''': Funktionaler Entwurf - Projekt SmartFarm (Funktionalität)]]
<br clear=all>
<br clear=all>


== Softwarearchitektur ==
== Softwarearchitektur ==


Im Folgende wird die Softwarearchitektur des Systems beschrieben. Die Software spielt bei Embedded-Systemen eine wesentliche Rolle. Das Ziel hierbei ist die klare <br>
Im Folgenden wird die Softwarearchitektur des Systems beschrieben. Die Software spielt bei Embedded (eingebetteten) -Systemen eine wesentliche Rolle. Das Ziel hierbei ist die klare <br>
und funktionsbasierte Abgrenzung von verschiedenen Softwarekomponenten. Diese Anforderungen basieren auf dem Einsatz von objektorientierter Programmierung. <br> Änderungen im Laufe des Projekts lassen sich einfach und schnell in die Software einbringen.
und funktionsbasierte Abgrenzung von verschiedenen Softwarekomponenten. Diese Anforderungen basieren auf dem Einsatz von objektorientierter Programmierung. <br> Änderungen im Laufe des Projekts lassen sich einfach und schnell in die Software einbringen.
Die Softwarearchitektur besteht aus folgenden Elementen:  
Die Softwarearchitektur besteht aus folgenden Elementen:  
Zeile 424: Zeile 421:
* Helligkeitssteuerung
* Helligkeitssteuerung


Die Klasse "Signalaufbereitung" bezieht sich auf die Sensoren das System. Hier werden die verschiedenen Sensoren beim Systemstart initialisiert. Während des Systembetriebs <br>
Die Klasse "Signalaufbereitung" bezieht sich auf die Sensoren des Systems. Hier werden die verschiedenen Sensoren beim Systemstart initialisiert. Während des Systembetriebs <br>
werden alle Sensorsignale aufgenommen und zur Verfügung gestellt. Die Klasse "Aktuatorausgabe" leitet die Befehle an den Aktuatoren weiter. Die eigentliche Automatisierungs- <br>
werden alle Sensorsignale aufgenommen und zur Verfügung gestellt. Die Klasse "Aktuatorausgabe" leitet die Befehle an die Aktuatoren weiter. Die eigentlichen Automatisierungs- <br>
funktionen werden in der jeweiligen Klasse "Tür- und Helligkeitssteuerung" zusammen gebracht. Die Main-Funktion ist das Herzstück des Programms. Hier wird der Programmabfluss durch Verweise <br>  
funktionen werden in der jeweiligen Klasse "Tür- und Helligkeitssteuerung" zusammen gebracht. Die Main-Funktion ist das Herzstück des Programms. Hier wird der Programmabfluss durch Verweise <br>  
und verschiedene Funktionsaufrufe gesteuert.  
und verschiedene Funktionsaufrufe gesteuert.  


[[Datei:FE_Software_AE_Gruppe_1_8.png|mini|600px|links|'''Abb.5''': Softwarearchitektur - Projekt SmartFarm]]
[[Datei:FE_Software_AE_Gruppe_1_8.png|mini|600px|links|'''Abb. 8''': Softwarearchitektur - Projekt SmartFarm]]
<br clear=all>
<br clear=all>


Zeile 449: Zeile 446:
* Motor: öffnet oder schließt die Tür
* Motor: öffnet oder schließt die Tür


[[Datei:Funktionaler_Entwurf_EA_AE_Gruppe_1_8.png|mini|600px|links|'''Abb.6''': Funktionaler Entwurf - Projekt SmartFarm]]
[[Datei:Funktionaler_Entwurf_EA_AE_Gruppe_1_8.png|mini|600px|links|'''Abb. 9''': Funktionaler Entwurf - Projekt SmartFarm]]
<br clear=all>
<br clear=all>


Zeile 513: Zeile 510:
|}
|}


== Technischer Systementwurf ==
= Technischer Systementwurf =
Im technischen Systementwurf wird der Systemplan entworfen. Dabei werden die Komponenten und Schnittstellen in den einzelnen Modulen festgelegt.
Im technischen Systementwurf (s. Abbildung 10) wird der Systemplan entworfen. Dabei werden die Komponenten und Schnittstellen in den einzelnen Modulen festgelegt. Der Entwurf lässt sich weiter in Hardware (s. Abbildung 10) und Software (s. Abbilung 11) unterteilen.


=== TE-Software ===
== TE-Software ==


[[Datei:TE_Software_AE_Gruppe_1_8.png|mini|600px|links|'''Abb.7''': Funktionaler Entwurf - Projekt SmartFarm]]
[[Datei:TE_Software_AE_Gruppe_1_8.png|mini|600px|links|'''Abb. 10''': Funktionaler Entwurf - Projekt SmartFarm]]
<br clear=all>
<br clear=all>


=== TE-Hardware ===
== TE-Hardware ==
[[Datei:TE_Hardware_AE_Gruppe_1_8.png|mini|600px|links|'''Abb.8''': Funktionaler Entwurf - Projekt SmartFarm]]
[[Datei:TE_Hardware_AE_Gruppe_1_8.png|mini|600px|links|'''Abb. 11''': Funktionaler Entwurf - Projekt SmartFarm]]
<br clear=all>
<br clear=all>


=== Software-Hardware-Schnittstelle  ===
== Software-Hardware-Schnittstelle  ==
Die Hardware-Software-Schnittstellen sind die Module "Sensor-Signalaufbereitung" und "Aktuatorausgabe". Damit die Software das richtige Element steuert, wird eine sogenannte Parameter-Datei erstellt. <br>
Die Hardware-Software-Schnittstellen sind die Module "Sensorsignalaufbereitung" und "Aktuatorausgabe". Damit die Software das richtige Element steuert, wird eine sogenannte Parameter-Datei erstellt. <br>
In dieser ist festgelegt, an welche Pins welche Bauteile angeschlossen sind.  
In dieser ist der Anschluss der Pins an die Bauteile festgelegt.  


<div style="width:820px; height:870px; overflow:auto; border: 1px solid #000">
<div style="width:820px; height:880px; overflow:auto; border: 1px solid #000">
<pre>
<pre>
#ifndef Parameter_h
#ifndef Parameter_h
Zeile 579: Zeile 576:
</pre>
</pre>
</div>
</div>
=== Entwicklung eines Prototypen ===
Das System wird anhand des V-Modells entwickelt. Um die Entwurf-, Implementierungs- und Testphase bestmöglich umzusetzen, wurde ein Prototyp entwickelt. Dies bietet die Möglichkeit viele Dinge auszuprobieren, bevor die finale Version im Stall eingebaut wird. Der Protoyp wurde erst in Abbildung skizziert und dann aufgebaut (s. ).
[[Datei:Prototyp_Skizze.png|mini|300px|links|'''Abb.8''': Skizze Prototyp]]
<br clear=all>


= Komponentenspezifikation =
= Komponentenspezifikation =
Bei der Komponentenspezifikation werden die Aufgaben und das Verhalten jeder Komponenten definiert. Darüber hinaus wird der innere Aufbau mit den Schnittstelle jeder Komponente festgestellt. <br>
Bei der Komponentenspezifikation werden die Aufgaben und das Verhalten jeder Komponente definiert. Darüber hinaus wird der innere Aufbau mit den Schnittstellen jeder Komponente festgestellt. <br>
Der Aufbau gliedert sich in die Software- und Hardwarespezifikationen auf.
Der Aufbau gliedert sich in die Software- und Hardwarespezifikationen.


== Softwarespezifikationen ==
== Softwarespezifikationen ==
Zeile 596: Zeile 585:
=== Betriebsmodis - Stallsystem ===
=== Betriebsmodis - Stallsystem ===


Wird das System mit Spannung versorgt und eingeschaltet, so befindet sich das System im Betriebszustand. Es kann zwischen einem automatischen und manuellen Betrieb gewählt werden. Der Zustandsübergang wird durch <br>
Wird das System mit Spannung versorgt und eingeschaltet, befindet sich das System im Betriebszustand. Es kann zwischen einem automatischen und manuellen Betrieb gewählt werden. Der Zustandsübergang wird durch <br>
einen Kippschalter gewährleistet. Beide Systeme sind unabhängig voneinander implementiert. Das heißt, dass die Tür auch manuell runtergefahren werden kann, wenn sich die Lichtsteuerung im automatischen Zustand befindet. Leuchtet das Lämpchen am Kippschalter, befindet sich das jeweilige Subsystem im Modus "Automatik".
einen Kippschalter gewährleistet. Beide Systeme sind unabhängig voneinander implementiert. Das heißt, dass die Tür auch manuell runtergefahren werden kann, wenn sich die Lichtsteuerung im automatischen Zustand befindet. Leuchtet das Lämpchen am Kippschalter, befindet sich das jeweilige Subsystem im Modus "Automatik". Dies ist in Abbildung 47 im Ergebnis dargestellt.


[[Datei:Automatik_Manuell.jpg|mini|400px|links|'''Abb.9''': Kippschalter Automatik]]
[[Datei:KompSpec_Betriebsmodus_AE_Gruppe_1_8.png|mini|600px|links|'''Abb. 12''': State Machine - Betriebsmodis des Stall-Systems]]
<br clear=all>
 
=== Tageslichtabfrage mit Hysterese ===
Die Tageslichtabfrage gibt den Status der Außenhelligkeit an. Als Status existiert "Hell" [1] oder "Dunkel" [0] in Abhängigkeit von einem Schwellwert.


[[Datei:KompSpec_Betriebsmodus_AE_Gruppe_1_8.png|mini|600px|links|'''Abb.9''': State Machine - Betriebsmodis des Stall-Systems]]
[[Datei:KompSpec_Tageslichtabfrage_AE_Gruppe_1_8.png|mini|600px|links|'''Abb. 13''': State Machine - Tageslichtabfrage mit Hysterese]]
<br clear=all>
<br clear=all>


=== Tageslichtabfrage mit Hysterese ===
Zur Schwellwertbildung wurden mehrere Helligkeitsmessungen direkt im Stall ausgeführt. Der Helligkeitswert ist abhängig vom Wetter (Sonnenstand, Bewölkung etc.).  In dem Diagramm 14 unten sieht man die Helligkeitswerte über die Zeit  an einem bewölkten Tag aufgetragen. Für einen perfekten Schwellwert werde die Werte der verschiedenen Tage verglichen. Bei diesen Systemanforderungen liegt ein geeigneter Schwellwert bei 300 mit einer Hysterese (Offset) von 50.
Die Tageslichtabfrage gibt den Status der Außenhelligkeit an. Diese gibt entweder "Hell" oder "Dunkel" in der Abhängigkeit von einem Schwellwert aus.


[[Datei:KompSpec_Tageslichtabfrage_AE_Gruppe_1_8.png|mini|600px|links|'''Abb.1''': State Machine - Betriebsmodis des Stall-Systems]]
[[Datei:Helligkeitsdiagramm_AE_Gruppe_1_8.png|mini|600px|links|'''Abb. 14:''' Messdaten von der Helligkeit über den Tag: ]]
<br clear=all>
<br clear=all>


Zeile 615: Zeile 607:
==== Türstatus - Manuell-Betrieb ====
==== Türstatus - Manuell-Betrieb ====


Hier handelt es sich um die Türsteuerung im manuellen Betrieb. Der Zustandswechsel wird anhand des Tür-Touch-Sensors gewährleistet.  
Hier handelt es sich um die Türsteuerung im manuellen Betrieb. Der Zustandswechsel wird anhand des Tür-Touch-Sensors ausgeführt.  
    
    
[[Datei:KompSpec_Tuersteuerung_Manuell_AE_Gruppe_1_8.png|mini|600px|links|'''Abb.1''': State Machine - Betriebsmodis des Stall-Systems]]
[[Datei:KompSpec_Tuersteuerung_Manuell_AE_Gruppe_1_8.png|mini|600px|links|'''Abb. 15''': State Machine - manueller Betrieb der Türsteuerung]]
<br clear=all>
<br clear=all>


==== Zeiterfassung für die Türsteuerung ====
==== Zeiterfassung für die Türsteuerung ====
Im Automatikbetrieb darf sich die Tür nur an bestimmten Zeiten bewegen. Eine Bewegung der Tür ist nur zwischen 5 Uhr und 23 Uhr möglich. Außerhalb dieser Zeitspanne
Im Automatikbetrieb darf sich die Tür nur an bestimmten Zeiten bewegen. Eine Bewegung der Tür ist ausschließlich zwischen 5 Uhr und 23 Uhr möglich. Außerhalb dieser Zeitspanne
darf sich die Tür im Automatikbetrieb nicht bewegen.  
darf sich die Tür im Automatikbetrieb nicht bewegen.  


[[Datei:KompSpec_ZeiterfassungTuersteuerung_AE_Gruppe_1_8.png|mini|600px|links|'''Abb.1''': State Machine - Betriebsmodis des Stall-Systems]]
[[Datei:KompSpec_ZeiterfassungTuersteuerung_AE_Gruppe_1_8.png|mini|600px|links|'''Abb. 16''': State Machine - Zeiterfassung für die Zustimmung der Türsteuerung]]
<br clear=all>
<br clear=all>


==== Türstatus - Automatikbetrieb ====
==== Türstatus - Automatikbetrieb ====
Im Automatikbetrieb muss die Tür bei ausreichender Dunkelheit zufahren und bei ausreichender Helligkeit wieder auffahren. Die unteren bzw. oberen Position der Tür wird anhand eines Ultraschallsensors erkannt. <br>
Im Automatikbetrieb muss die Tür bei ausreichender Dunkelheit zufahren und bei ausreichender Helligkeit wieder auffahren. Die (untere bzw. obere) Position der Tür wird anhand eines Ultraschallsensors erkannt. <br>
Der Zustand der Tür wird anhand der folgenden Definitionen bestimmt:
Der Zustand der Tür wird anhand der folgenden Definition bestimmt:
* 40 ± 1 cm [[Datei:Ezgif-3-aa149494be25.gif|10px]] Tür ist zu
* 40 ± 1 cm [[Datei:Ezgif-3-aa149494be25.gif|10px]] Tür ist zu
* 10 ± 1 cm [[Datei:Ezgif-3-aa149494be25.gif|10px]] Tür ist auf   
* 10 ± 1 cm [[Datei:Ezgif-3-aa149494be25.gif|10px]] Tür ist auf   
Zeile 661: Zeile 653:
|}
|}


[[Datei:KompSpec_Tuersteuerung_Automatik_AE_Gruppe_1_8.png|mini|600px|links|'''Abb.1''': State Machine - Betriebsmodis des Stall-Systems]]
[[Datei:KompSpec_Tuersteuerung_Automatik_AE_Gruppe_1_8.png|mini|600px|links|'''Abb. 17''': State Machine - Türsteuerung im Automatikbetrieb]]
<br clear=all>
<br clear=all>


=== Spezifikation  der Lampensteuerung ===  
=== Spezifikation  der Lampensteuerung ===  
Im Folgenden werden das Zustandsverhalten der Helligkeitssteuerung dargestellt.  
Im Folgenden wird das Zustandsverhalten der Helligkeitssteuerung dargestellt.  
==== Lampenstatus - Manuell-Betrieb ====
==== Lampenstatus - manueller Betrieb ====


Hier handelt es sich, um die Helligkeitssteuerung im manuellen Betrieb. Der Zustandswechsel wird mit dem Lampe-Touch-Sensors gewährleistet.  
Hier handelt es sich um die Helligkeitssteuerung im manuellen Betrieb. Der Zustandswechsel wird mit dem Lampe-Touch-Sensor ausgeführt.  


[[Datei:KompSpec_Helligkeitssteuerung_Manuell_AE_Gruppe_1_8.png|mini|600px|links|'''Abb.1''': State Machine - Betriebsmodis des Stall-Systems]]
[[Datei:KompSpec_Helligkeitssteuerung_Manuell_AE_Gruppe_1_8.png|mini|600px|links|'''Abb. 18''': State Machine - manueller Betrieb der Lampensteuerung]]
<br clear=all>
<br clear=all>


==== Zeiterfassung für die Helligkeitssteuerung ====
==== Zeiterfassung für die Helligkeitssteuerung ====
Im Automatikbetrieb darf die Lampe sich ebenfalls nicht willkürlich an- und ausgehen. Die Lampe darf im ersten Schicht zwischen 5 Uhr und 8 Uhr und im zweiten SChicht zwischen 17 Uhr und 20 Uhr angehen. <br>
Im Automatikbetrieb geht das Licht nur zu bestimmten Zeiten an. Im Stall muss es ganzjährig von mindestens 7 Uhr bis mindestens 19 Uhr hell sein (s. REQ 141).
Anderfalls darf es aus bleiben.


[[Datei:KompSpec_ZeiterfassungHelligkeitssterung_AE_Gruppe_1_8.png|mini|600px|links|'''Abb.1''': State Machine - Betriebsmodis des Stall-Systems]]
[[Datei:KompSpec_ZeiterfassungHelligkeitssterung_AE_Gruppe_1_8.png|mini|600px|links|'''Abb. 19''': State Machine - Zeiterfassung für die Zustimmung der Lampensteuerung]]
<br clear=all>
<br clear=all>


==== Lampenstatus - Automatikbetrieb ====
==== Lampenstatus - Automatikbetrieb ====
Die Lampensteuerung bzw. Helligkeitssteuerung im Automatikbetrieb ergibt sich folgenden Zustände. Die Lampe darf nur angehen, falls es dunkel ist, und falls das Lampenflag auf dem vorherigen Zustandsdiagramm 1 ist.   
Die Lampensteuerung bzw. Helligkeitssteuerung im Automatikbetrieb ergibt die folgenden Zustände. Die Lampe darf nur angehen, wenn es dunkel genug ist (s. Schwellwert) und das Lampenflag auf dem vorherigen Zustandsdiagramm ist.   


{| class="wikitable"
{| class="wikitable"
Zeile 710: Zeile 701:
|}
|}


[[Datei:KompSpec_Helligkeitssteuerung_Automatik_AE_Gruppe_1_8.png|mini|600px|links|'''Abb.1''': State Machine - Betriebsmodis des Stall-Systems]]
[[Datei:KompSpec_Helligkeitssteuerung_Automatik_AE_Gruppe_1_8.png|mini|600px|links|'''Abb. 20''': State Machine - Lampensteuerung im Automatikbetrieb]]
<br clear=all>
<br clear=all>


== Hardwarespezifikationen ==
== Hardwarespezifikationen ==
In folgenden werden die Hardware-Komponentenspezifikationen von einigen wichtigen Hardware-Komponenten.
In den folgenden Tabellen werden die Hardware-Komponentenspezifikationen von einigen wichtigen Hardware-Komponenten aufgeführt.


=== DC Motor ===
=== DC Motor ===
Zeile 731: Zeile 722:
|   
|   
|  
|  
| Öffnen der Schließen der Tür über eine Seilwinde
| Öffnen und Schließen der Tür über eine Seilwinde


|-
|-
Zeile 761: Zeile 752:
|  
|  
|  
|  
| Geschwindigkeit: 6 RPM
| Geschwindigkeit: 6 rpm


|-
|-
Zeile 770: Zeile 761:
|}
|}


=== Ultrashallsensor ===
=== Ultraschallsensor ===


{| class="wikitable"
{| class="wikitable"
Zeile 785: Zeile 776:
|   
|   
|  
|  
| Misst der Abstand zu Tür und muss bestätigen, ob die Tür zu oder auf ist.
| Abstandsmessung zur Tür und Bestätigung der Türposition


|-
|-
Zeile 835: Zeile 826:
|  
|  
|  
|  
| Laufzeit messung mittel Schallgeschwindigkeit
| Messung der Entfernung über Ultraschallwellen


|}
|}


=== LDR-Fotowiderstand ===
=== LDR-Fotowiderstand ===
Zeile 880: Zeile 870:
|  
|  
|  
|  
| Spannungszteiler gleichung aufstellen.
| Gleichung des Spannungsteilers aufstellen


|}
|}
Zeile 899: Zeile 889:
|   
|   
|  
|  
| Messung der echten Uhrzeit in Stunden.
| Messung der echten Uhrzeit in Stunden


|-
|-
Zeile 939: Zeile 929:


= Implementierung =
= Implementierung =
In diesem Abschnitt erfolgt die Softwareumsetzung. Hierfür wird zunächst das Programmablaufplan erstellt. Des Weiteren wird das Gesamtsystem im MATLAB/Simulink modelliert. Anschließend erfolgt <br>
In diesem Abschnitt erfolgt die Softwareumsetzung. Hierfür wird zunächst ein Programmablaufplan erstellt. Des Weiteren wird das Gesamtsystem im MATLAB/Simulink modelliert. Abschließend erfolgt <br>
das Codieren mittels einen Hochsprache C/C++.
das Codieren mit der Hochsprache C/C++.
 
== Mechanik und Konstruktion ==


== Programmablaufplan ==
Das Gesamtsystem wird direkt im Hühnerstall implementiert. Diese Umweltbedingungen bestimmen die Anforderungen an das System. Die verwendeten Aktoren und Sensoren müssen für eine lange Lebensdauer und eine fehlerfreie Funktionalität vor Staub und Schmutz geschützt werden. Diesbezüglich wurde ein Gehäuse konstruiert, dass die verwendete Schaltung und die Bauteile schützt (s. Anhang). Die additive Fertigung erfolgte in einem 3D-Drucker vom Hersteller AnyCubic der Hochschule Hamm-Lippstadt.
Der Programmablaufplan wird mittels eines Activity-Diagramms nach SysML-Standard ermittelt.  


=== Türsteuerung im Automatik-Betrieb ===
=== Gesamtsystem ===


Sensor-Signale werden für die Tageslichtaufnahme und die Uhrzeit werden jeweils von der Funktionen '''GetHelligkeit''' und '''GetZeit'''. Das Signal wird dann in der [https://wiki.hshl.de/wiki/index.php/SmartFarm#Tageslichtabfrage_mit_Hysterese Helligkeitszustand]-Statediagramm weitergegeben,<br>
Alle Bauteile werden in einem schützenden Gehäuse an der Stallwand positioniert. Dazu zählen der Arduino, die Platinen, der RTC-Sensor, das Relais und die H-Bridge. Der Deckel ist durch Stifte mit der Boxunterseite verbunden und kann schnell und flexibel abgenommen werden, um am System zu operieren. Öffnungen am Gehäuse dienen zum Anschluss der außen liegenden Sensoren und Aktoren (Schnittstelle).
Der Statediagramm wird dann Auskunft geben, ob es Hell oder Dunkel draußen ist. Das Zeitsignal wird in dem Zustand "[https://wiki.hshl.de/wiki/index.php/SmartFarm#Zeiterfassung_f.C3.BCr_die_T.C3.BCrsteuerung Zeiterfassung für die Tür]"-Statediagramm geführt. Dieser wird dann sagen, ob die <br>
die Tür in diesem Tageszeit sich steuern lassen kann. Anhand beide Signale wird dann die durchzuführende Aktion gemäß [https://wiki.hshl.de/wiki/index.php/SmartFarm#T.C3.BCrstatus_-_Automatikbetrieb Türstatus]-Statediamme entschieden. Die Funktion '''Türsteuerung''' sammelt <br>
zusätlich Daten aus dem Ultraschall-Sensor, damit er an der Motor rechtzeitig einen Stopp-befehl schicken kann.  


<gallery class="left" caption=" " widths="300" heights="300">
Datei:Konstruktion_Gehäuse_Gesamtsystem.png|'''Abb. 21''': Konstruktion: Gehäuse für das Gesamtsystem
Datei: Gehäuse_Gesamtsystem_Blackbox.png|'''Abb. 22''': Gehäuse für das Gesamtsystem
</gallery>


[[Datei:PAP_Tuersteuerung_AE_Gruppe_1_8.png|mini|600px|links|'''Abb.1''': State Machine - Betriebsmodis des Stall-Systems]]
=== Arduino ===
<br clear=all>


=== Helligkeitssteuerung im Automatik-Betrieb ===
Auch der Arduino wird durch ein Gehäuse<ref name="Gehäuse Arduino Uno"/> (s. Abbildung 23) geschützt. Alle verwendeten Anschlüsse liegen frei, sodass der Arduino einfach angeschlossen werden kann. Durch den modularen Aufbau kann ein defekter oder anderer Arduino schnell gewechselt bzw. neu angeschlossen werden.
Analog wird es bei Lampensteuerung aufgestellt.


[[Datei:PAP_Helligkeitssteuerung_AE_Gruppe_1_8.png|mini|600px|links|'''Abb.1''': State Machine - Betriebsmodis des Stall-Systems]]
[[Datei:Gehäuse_Arduino.png|mini|500px|links|'''Abb. 23''': Gehäuse für den Arduino]]
<br clear=all>
<br clear=all>


== Modellierung und Simulation des Stall-Systems in MATLAB-Simulink ==
=== Ultraschallsensor ===
Modelle werden verwendet, um die Idee darzustellen. Das Modell ist ein Abbild der Realität. Modelle helfen dabei:
* ein System zu visualisieren,
* ein System zu dokumentieren und
* Programmcode oder einen Coderahmen aus den Modelldaten zu generieren.


Hierfür wird MATLAB/Simulink verwendet für die Modellierung. Zu sehen sind die verschiedenen Teile der Softwarearchitektur mit der Sensorsignalaufbereitung, hier den "Sensoren"-Block, beide Steuerungsfunktionen und <br>
Das folgende Gehäuse positioniert und schützt den Ultraschallsensor im Hühnerstall (s. Abbildung 24 und 25). Er befindet sich links vom DC Motor. Der innen liegende Sensor wird durch zwei Löcher zum Emittieren der Ultraschallwellen fixiert. Der Deckel ist mit vier Schrauben befestigt.
die Aktuatorausgabe. Aktuatorausgabe wurde auf der ersten Ebene Modelliert um die Bedienung des Modells zu vereinfachen. In der C/C++-Code wird es in einer eigenen Klasse programmiert. Aufgrund der Benutzerfreundlichkeit <br>
wurde die Sensoreingabe mittels MATLAB-Dashboards realisiert. Dadurch kann der Entwickler den Code mühelos programmieren und ganz wichtig verschiedene Zustände simulieren, damit sinnvolle Use-Cases erstellt und getestet<br>
werden können


[[Datei:Simulinkmodell_AE_Gruppe_1_8.png|mini|800px|links|'''Abb.1''': Modellierung des Stallsystems mit MATLAB/Simulink]]
<gallery class="left" caption=" " widths="300" heights="300">
<br clear=all>
Datei:Konstruktion_Gehäuse_Ultraschallsensor.png|'''Abb. 24''': Konstruktion: Gehäuse für den Ultraschallsensor
Datei:Gehäuse_Ultraschallsensor.png|'''Abb. 25''': Gehäuse für den Ultraschallsensor
</gallery>


=== Lichtsensor ===


[[Datei:TursteuerungSimulinkmodell_AE_Gruppe_1_8.png|mini|800px|links|'''Abb.1''': Modellierung der Türsteuerung entsprechend Programmablaufplan ]]
Für eine perfekte Funktionsausführung muss der Fotowiderstand (LDR) außen am Stallangebracht werden. Dies wird durch die folgende Konstruktion in Abbildung 26 und den fertigen 3D-Druck in Abbildung 27 ermöglicht. Die durchsichtige Plastikkuppe schützt den Sensor vor Staub ohne das Messergebnis zu verfälschen.
<br clear=all>


<gallery class="left" caption=" " widths="300" heights="300">
Datei:Konstruktion_Gehäuse_Ultraschallsensor2.png|'''Abb. 26''': Konstruktion: Gehäuse für den Lichtsensor
Datei:Gehäuse_Lichtsensor.png|'''Abb. 27''': Konstruktion: Gehäuse für den Lichtschallsensor
</gallery>


[[Datei:HelligkeitsteuerungSimulinkmodell_AE_Gruppe_1_8.png|mini|800px|links|'''Abb.1''': Modellierung der Helligkeitssteuerung entsprechend Programmablaufplan]]
=== Stromversorgung im Stall ===
<br clear=all>


== Implementierung des Stall-Systems in C/C++ ==
Für die Funktionsausführung des Gesamtsystems bedarf es einer Spannungsversorgung der einzelnen Komponenten. Dafür wurden mehrere Steckdosen im Stall angebracht. In Abbildung 28 ist die Verkabelung dargestellt.


=== Bibliotheken-Einbindung und Variablen definition ===
[[Datei:Stromanschluss_Stall.png|mini|500px|links|'''Abb. 28''': Stromanschluss im Stall]]
<div style="width:820px; height:390px; overflow:auto; border: 1px solid #000">
<br clear=all>
<pre>
 
// ********************************************************************************************
=== DC Motor ===
// Bibliotheken einbinden
 
// ********************************************************************************************
Um die Tür bestmöglich anzuheben wurde ein DC-Motor mit einem Schneckengetriebe ausgewählt. Diese Getriebeart verfügt über ein starkes Drehmoment. Die vergleichsweise langsame Drehgeschwindigkeit beträgt 5 rpm (rounds per minute), damit die Tiere beim Schließen der Tür nicht verletzt werden können. Die Funktionsweise ist mit einer Seilwinde zu vergleichen. Der Motor wird mit 12 V von der Hauptplatine betrieben. Die Anbringung und Konstruktion sind in der folgenden Abbildung 29 dargestellt.
#include "Parameter.h"
#include "Sensor_Signalaufbereitung.h"
#include "Tuersteuerung.h"
#include "Helligkeitssteuerung.h"
#include "Aktuator_Signalausgabe.h"
#include "Wire.h"


// ********************************************************************************************
[[Datei:Konstruktion_Motor.png|mini|500px|links|'''Abb. 29''': Anbringung und Konstruktion Motor]]
// Variablen Definition
<br clear=all>
// ********************************************************************************************
hSENSOR_SIGNAL SenSig;
hAKTUATOR_AUSGABE AktSig;
hHELLIGKEITSSTEUERUNG Helligkeitssteuerung;
hTUERSTEUERUNG Tuersteuerung;


</pre>
=== Tageslichtlampe ===
</div>


=== Main-Funktion ===
Die Tageslichtlampe sorgt für die Helligkeit im Stall. Mit einer Wellenlänge von 550 nm wir der Tag künstlich verlängert. Die Lame wird über 230 V von der Hauptplatine betrieben.
<div style="width:820px; height:580px; overflow:auto; border: 1px solid #000">
<pre>
//*********************************************************************************************
// SETUP-Funktion:
// the setup function runs once when you press reset or power the board
//*********************************************************************************************
void setup(){
    Serial.begin(9600);
    Wire.begin();
}


//*********************************************************************************************
[[Datei:Tageslichtlampe.png|mini|500px|links|'''Abb. 30''': Anbringung der Tageslichtlampe]]
// LOOP-Funktion:  
<br clear=all>
// the loop function runs over and over again forever
//*********************************************************************************************
void loop(){
   
    // *************************************************************
    // Start - Helligkeitssteuerung


    Helligkeitssteuerung.StartHS(SenSig, AktSig);
=== Kippschalter zur Betriebsauswahl ===
    // *************************************************************


    // *************************************************************
Über zwei Kippschalter kann der automatische oder manuelle Modus der Licht- und Türsteuerung getrennt ausgewählt werden. Das Lämpchen gibt dem Halter Auskunft über den ausgewählten Modus (s. Abbildung 31). Die Kippschalter werden mit 12 V von der Hauptplatine betrieben. Aufgrund des Spannungswerts sind zwei Spannungsteiler auf der Nebenplatine aufgebracht, damit die 5 V Ausgangsspannung für das Auslesen des Arduinos erreicht werden.
    // Start - Helligkeitssteuerung


    Tuersteuerung.StartTS(SenSig, AktSig);
[[Datei:Kippschalter.png|mini|500px|links|'''Abb. 31''': Anbringung der Kippschalter]]
    // *************************************************************
<br clear=all>
    Serial.println(' ');
}


</pre>
== Entwicklung eines Prototypen ==
</div>


=== Türsteuerung ===
Das System wird anhand des V-Modells entwickelt. Um die Entwurf-, Implementierungs- und Testphase bestmöglich umzusetzen, wurde ein Prototyp entwickelt. Dieser bietet die Möglichkeit viele Dinge auszuprobieren und zu testen, bevor die finale Version im Stall eingebaut wird. Dadurch können schnell einfache Fehler (s. "Kinderkrankheiten") entdeckt werden. Der Prototyp wurde erst in Abbildung 32 skizziert und anschließend aufgebaut (s. Abbildung 44).
<div style="width:820px; height:760px; overflow:auto; border: 1px solid #000">
 
<pre>
[[Datei:Entwurf_Skizze_Prototyp.png|mini|300px|links|'''Abb. 32''': Skizze der Prototyp-Vorrichtung]]
class hTUERSTEUERUNG
<br clear=all>
{
 
private:
== Entwicklung der Hilfsplatine ==
    // ************************************************************
    // Zeiterfassung für die Türsteuerung (State Machine)
    // ************************************************************
    bool stmZeitErfassungTuer(unsigned int nStunden);
   
    // ************************************************************
    // Entscheidung Türbewegung im Automatik-Betrieb
    // ************************************************************************
    int Entscheidung_Tuerbewegung_Automatik(bool bTuerFlag, bool bHelligkeitszustand);
   
    // ************************************************************************
    // Türsteuerung Manuellen und Automatik-Betrieb (State Machine)
    // ************************************************************************
    int TuerBetrieb(bool bTuerBewegungAuto, bool bTouchTuer, int nAbstand, bool bKippschalter);
   
    // ************************************************************************


public:
=== Hauptplatine ===
    hTUERSTEUERUNG();
    // ************************************************************************
    // Abfrage Türzustand
    // ************************************************************************
    int getTuerZustand();


    // ************************************************************************
Um das ganze System modular zu trennen, wird neben den Aktoren und Sensoren auch das Breadbord vom Mikrocontroller getrennt. Alle analogen und digitalen I/O Pins werden auf die Platine übertragen. Es existieren viele VCC 5V und GND Anschlüsse für den Anschluss der Sensoren und Aktuatoren. Zum Anschluss der Tageslichtlampe existiert eine Spannungsversorgung von 230 V und für den Motor von 12 V. Da die 230 V Spannung einen risikoreichen Anschluss darstellt, stellt dies nur eine Übergangslösung dar. Der Motor wird über die zwei Outputs in der Motorschaltung gesteuert. Für die Schaltung der Helligkeitserfassung wird ein Widerstand mit 20 Ohm verwendet, der in der Hilfsplatine direkt mit verlötet ist. Wie eingangs im Brainstorming (s. Abbildung 2) visualisiert, existieren noch weitere Anschlussmöglichkeiten für die Subsysteme im Gesamtsystem "SmartFarm" (s. Reserve). Alle Bestandteile der Platine sind in den folgenden beiden Abbildungen 33 und 34 von der Ober- und Unterseite dokumentiert.
    // Abfrage Betrieb
    // ************************************************************************
    // bool getTuerBetrieb();


    // ************************************************************************
<gallery class="left" caption=" " widths="500" heights="300">
    // Start-Funktion
Datei:Oberseite der Hauptplatine.png|'''Abb. 33''': Oberseite der Hauptplatine
    // ************************************************************************
Datei:Unterseite der Hauptplatine.png|'''Abb. 34''': Unterseite der Hauptplatine
    void StartTS(hSENSOR_SIGNAL &SenSig, hAKTUATOR_AUSGABE &AktSig);
</gallery>


    // ************************************************************************
=== Nebenplatine ===
};
</pre>
</div>


=== Helligkeitssteurung ===
Neben der Hauptplatine wurde eine Nebenplatine für die Kippschalter konstruiert. Die beiden Kippschalter ermöglichen einen Wechsel zwischen dem automatischen und manuellen Betrieb der Lampe und der Tür. Sie werden mit 12 V betrieben. Da der Arduino für die Signalverarbeitung eine Spannung von 5 V benötigt, ist ein Spannungsteiler notwendig. In der Abbildung 35 und 36 ist die Nebenplatine von der Ober- und Unterseite visualisiert.
<div style="width:820px; height:740px; overflow:auto; border: 1px solid #000">
<pre>


class hHELLIGKEITSSTEUERUNG{   
<gallery class="left" caption=" " widths="500" heights="300">
    private:
Datei:Oberseite der Nebenplatine2.png|'''Abb. 35''': Oberseite der Nebenplatine
    // ************************************************************
Datei:Unterseite der Nebenplatine.png|'''Abb. 36''': Unterseite der Nebenplatine
    // Zeiterfassung für die Helligkeitssteuerung (State Machine)
</gallery>
    // ************************************************************
    bool stmZeitErfassungLampe(int nStunden);


    // ************************************************************
== Programmablaufplan ==
    // Entscheidung Lampenzustand im Automatik-Betrieb
Der Programmablaufplan wird mittels eines Activity-Diagramms nach dem SysML-Standard ermittelt.
    // ************************************************************
    int Entscheidung_Lampenbewegung_Automatik(bool bLampenFlag, bool bHellZustand);


    // ************************************************************************
=== Türsteuerung im Automatik-Betrieb ===
    // Helligkeitssteuerung Manuellen und Automatik-Betrieb (State Machine)
    // ************************************************************************
    bool LampenBetrieb(bool bLampeZustandAuto, bool bTouch_Lampe, bool bKippschalterHelligkeit);
    // ************************************************************************


    // *************************************************************************
Die Sensorsignale "Tageslichtaufnahme" und "Uhrzeit" werden jeweils mit den Funktionen '''GetHelligkeit''' und '''GetZeit''' erfasst. Das Signal wird anschließend in das [https://wiki.hshl.de/wiki/index.php/SmartFarm#Tageslichtabfrage_mit_Hysterese Helligkeitszustand]-Statediagramm weitergegeben.
    // Initialisierung der Lampensteuerung
Das Statediagramm wird Auskunft darüber geben, ob es draußen hell oder dunkel ist. Das Zeitsignal wird in dem Zustand "[https://wiki.hshl.de/wiki/index.php/SmartFarm#Zeiterfassung_f.C3.BCr_die_T.C3.BCrsteuerung Zeiterfassung für die Tür]"-Statediagramm geführt. Dieser gibt Auskunft darüber, ob das Subsystem ausführbar ist. Anhand beider Signale wird die durchzuführende Aktion gemäß dem [https://wiki.hshl.de/wiki/index.php/SmartFarm#T.C3.BCrstatus_-_Automatikbetrieb Türstatus]-Statediamme entschieden. Die Funktion '''Türsteuerung''' sammelt
    // *************************************************************************
zusätzlich Daten von dem Ultraschallsensor, damit der Motor und damit die Tür rechtzeitig anhält.
    public:  
    hHELLIGKEITSSTEUERUNG();


    // ************************************************************************
    // Abfrage Lampenzustand
    // ************************************************************************
    bool getTuerZustand();


    // ************************************************************************
[[Datei:PAP_Tuersteuerung_AE_Gruppe_1_8.png|mini|600px|links|'''Abb. 37''': State Machine - Betriebsmodis des Stall-Systems]]
    // Start-Funktion
<br clear=all>
    // ************************************************************************
    void StartHS(hSENSOR_SIGNAL& SenSig, hAKTUATOR_AUSGABE& AktSig);


    // ************************************************************************
=== Helligkeitssteuerung im Automatik-Betrieb ===
};
Analog zur Türsteuerung existiert die Lichtsteuerung.


</pre>
[[Datei:PAP_Helligkeitssteuerung_AE_Gruppe_1_8.png|mini|600px|links|'''Abb. 38''': State Machine - Betriebsmodis des Stall-Systems]]
</div>
<br clear=all>


=== Sensor-Signalaufbereitung ===
== Modellierung und Simulation des Stallsystems in MATLAB-Simulink ==
<div style="width:820px; height:1300px; overflow:auto; border: 1px solid #000">
Modelle werden verwendet, um die Idee darzustellen. Das Modell ist ein Abbild der Realität. Modelle helfen dabei:
<pre>
* ein System zu visualisieren,
class hSENSOR_SIGNAL{
* ein System zu dokumentieren und
    private:
* Programmcode oder einen Coderahmen aus den Modelldaten zu generieren.
    // ************************************************************
    // Ultraschall-Sensor
    // ************************************************************
    long Berechnung_Entfernung();


    // ************************************************************
Für die Modellierung wird MATLAB/Simulink verwendet. Zu sehen sind die verschiedenen Teile der Softwarearchitektur mit der Sensorsignalaufbereitung. Dazu zählt der Sensorblock, beide Steuerungsfunktionen und <br>
    // Zeitsensor
die Aktuatorausgabe. Im C/C++-Code wird diese Ausgabe in einer eigenen Klasse programmiert. Aufgrund der Benutzerfreundlichkeit
    // ************************************************************
wurde die Sensoreingabe mit dem MATLAB-Dashboard realisiert. Dadurch kann der Entwickler den Code einfach programmieren und verschiedene Zustände simulieren und testen.
    int leseZeitvomRTC();


    public:
[[Datei:Simulinkmodell_AE_Gruppe_1_8.png|mini|800px|links|'''Abb. 39''': Modellierung des Stallsystems mit MATLAB/Simulink]]
    // ************************************************************
<br clear=all>
    // Initialisierung alle Sensoren
    // ************************************************************
    hSENSOR_SIGNAL(){
        // Touch-Sensor
        pinMode(_TOUCH_DIG_TUER_PIN_, INPUT);
        pinMode(_TOUCH_DIG_LAMPE_PIN_, INPUT);


        // Ultraschall
        pinMode(_US_DIG_ECHO_PIN_, INPUT);
        pinMode(_US_DIG_TRIG_PIN_, OUTPUT);


        // Fotowiderstand
[[Datei:TursteuerungSimulinkmodell_AE_Gruppe_1_8.png|mini|800px|links|'''Abb. 40''': Modellierung der Türsteuerung entsprechend Programmablaufplan ]]
        pinMode(_FOTOWIDERSTAND_ANA_PIN_, INPUT);
<br clear=all>
        nSchwellwert = 300;
        nOffset = 50; 
        StateHelligkeit = S1_DUNKEL;
        bHelligkeitszustand = 0;
       
        // Kippschalter
        //pinMode(_TOUCH_DIG_TUER_PIN_, INPUT);
    }; 
    // ************************************************************


    // ***********************************************************
    // Abfrage der Sensoren
    // ***********************************************************
    // Touch-Sensoren
    // ***********************************************************
    bool getTouchTuer();
    bool getTouchLampe();


    // ***********************************************************
[[Datei:HelligkeitsteuerungSimulinkmodell_AE_Gruppe_1_8.png|mini|800px|links|'''Abb. 41''': Modellierung der Helligkeitssteuerung entsprechend Programmablaufplan]]
    // Ultraschallsensor
<br clear=all>
    // ***********************************************************
    long getAbstand();


    // ***********************************************************
== Implementierung des Stallsystems in C/C++ ==
    // Fotowiderstand
    // ***********************************************************
    unsigned int getHeligkeitRoh();
    bool getHelligkeit();


    // ***********************************************************
=== Bibliotheken-Einbindung und Definition der Variablen ===
    // Real-Time-Sensor
<div style="width:820px; height:390px; overflow:auto; border: 1px solid #000">
    // ***********************************************************
<pre>
    unsigned int getZeitStunden();
// ********************************************************************************************
// Bibliotheken einbinden
// ********************************************************************************************
#include "Parameter.h"
#include "Sensor_Signalaufbereitung.h"
#include "Tuersteuerung.h"
#include "Helligkeitssteuerung.h"
#include "Aktuator_Signalausgabe.h"
#include "Wire.h"


    // ************************************************************
// ********************************************************************************************
    // Kippschalter
// Variablen Definition
    // ***********************************************************
// ********************************************************************************************
    bool getKippschalterTuer();
hSENSOR_SIGNAL SenSig;
    bool getKippschalterLampe();
hAKTUATOR_AUSGABE AktSig;
    // ************************************************************
hHELLIGKEITSSTEUERUNG Helligkeitssteuerung;
hTUERSTEUERUNG Tuersteuerung;


};
</pre>
 
</pre>
</div>
</div>


=== Aktuator-Signalausgabe ===
=== Main-Funktion ===
<div style="width:820px; height:550px; overflow:auto; border: 1px solid #000">
<div style="width:820px; height:580px; overflow:auto; border: 1px solid #000">
<pre>
<pre>
class hAKTUATOR_AUSGABE{
//*********************************************************************************************
    public:
// SETUP-Funktion:
    // ************************************************************
// the setup function runs once when you press reset or power the board
    // Initialisierung der Aktuatoren
//*********************************************************************************************
    // ************************************************************
void setup(){
    hAKTUATOR_AUSGABE(){
    Serial.begin(9600);  
        pinMode(_RELAIS_DIG_LAMPE_PIN_, OUTPUT);
    Wire.begin();
        pinMode(_HBRIDGE_DIG_IN1_PIN_, OUTPUT);
}
        pinMode(_HBRIDGE_DIG_IN2_PIN_, OUTPUT);
        pinMode(_HBRIDGE_PWM_ENA_PIN_, OUTPUT);
    };


    // ************************************************************
//*********************************************************************************************
    // Signalausgabe zu den Aktuatoren
// LOOP-Funktion:
    // ************************************************************
// the loop function runs over and over again forever
    // UV-Lampe
//*********************************************************************************************
    // ************************************************************
void loop(){
    bool getUVLampeZustand();
    void setUVLampeZustand(bool LampenZustand);
    // ************************************************************
    // Stall Tür
    // ************************************************************
    int getTuerZustand();
      
      
    void setTuerZustand(bool bMotorZustand, bool bMotorRichtung);
     // *************************************************************
     // ************************************************************
    // Start - Helligkeitssteuerung
};
</pre>
</div>


= Testphase =
    Helligkeitssteuerung.StartHS(SenSig, AktSig);
    // *************************************************************


== Komponententest ==
    // *************************************************************
{| class="wikitable"
    // Start - Helligkeitssteuerung
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Testfall-ID
 
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Testfall-Name
    Tuersteuerung.StartTS(SenSig, AktSig);
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Anforderungs-ID
    // *************************************************************
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Vorbedingungen und Eingänge
    Serial.println(' ');
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Aktionen
}
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Erwartetes Ergebnis
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Ergebnis
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Bewertung
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Kommentar


|-
</pre>
| KT-HW-001
</div>
| RTC - Erfassung der echten Uhrzeit
| REQ-141, REQ-142, REQ-720, KS-RTC-000
| I2C-Bus verbunden
| Messwert lesen
| 17 Uhr
| 17 Uhr
|i. O.
|


|-
=== Türsteuerung ===
| KT-HW-002
<div style="width:820px; height:760px; overflow:auto; border: 1px solid #000">
| LDR - Aufnahme des Tageslicht um 12 Uhr mittag
<pre>
| REQ-111, REQ-112, KS-LDR-000
class hTUERSTEUERUNG
| Richtige Aufstellung und Berechnung der Spannungsteilergleichung
{
| Messwert auslesen
private:
| Hohe Analogsignal nah an 1023
    // ************************************************************
| Hohe Analogsignal nah an 1023
    // Zeiterfassung für die Türsteuerung (State Machine)
|i. O.
    // ************************************************************
|
    bool stmZeitErfassungTuer(unsigned int nStunden);
   
    // ************************************************************
    // Entscheidung Türbewegung im Automatik-Betrieb
    // ************************************************************************
    int Entscheidung_Tuerbewegung_Automatik(bool bTuerFlag, bool bHelligkeitszustand);
   
    // ************************************************************************
    // Türsteuerung Manuellen und Automatik-Betrieb (State Machine)
    // ************************************************************************
    int TuerBetrieb(bool bTuerBewegungAuto, bool bTouchTuer, int nAbstand, bool bKippschalter);
   
    // ************************************************************************


|-
public:
| KT-HW-003
    hTUERSTEUERUNG();
| LDR - Aufnahme des Tageslicht um 4 Uhr morgen
    // ************************************************************************
| REQ-111, REQ-112, REQ-150, KS-LDR-000
    // Abfrage Türzustand
| Richtige Aufstellung und Berechnung der Spannungsteilergleichung
    // ************************************************************************
| Messwert auslesen
    int getTuerZustand();
| Niedriege  Analogsignal nah an die Null
| Niedriege  Analogsignal nah an die Null
| i. O.
|


|-
    // ************************************************************************
| KT-HW-004
    // Abfrage Betrieb
| US-Sensor - Distanzmessung in cm
    // ************************************************************************
| KS-US-000
    // bool getTuerBetrieb();
| Richtige Berechnung der Laufzeit
| Messwert auslesen
| 10 cm
| 10 cm
| i. O.
|


|-
    // ************************************************************************
| KT-HW-007
    // Start-Funktion
| Motor - Öffnen und Schließen einer 5 kg Tür über eine Seilwinde
    // ************************************************************************
| REQ-001, REQ-230, REQ-250, REQ-520
    void StartTS(hSENSOR_SIGNAL &SenSig, hAKTUATOR_AUSGABE &AktSig);
| Seil über die Umlenkrolle richtig einrolle
| PWM-Signal über H-Bridge schicken
| Hochheben und Sinken der Tür je 1 sec.
| Hochheben und Sinken der Tür je 1 sec.
| i. O.
|


|}
    // ************************************************************************
'''Tab. 4''': Ausschnitt aus Komponententest der Hardwarekomponente
};
</pre>
</div>


== Integrationstest ==
=== Helligkeitssteuerung ===
 
<div style="width:820px; height:740px; overflow:auto; border: 1px solid #000">
=== Betriebsmoduswechsel-Test - Lampensteuerung ===
 
<div style="width:820px; height:540px; overflow:auto; border: 1px solid #000">
<pre>
<pre>
using namespace std;


int ZustandLampenbetrieb = S2_AUTOMATIK_BETRIEB_HELLIGKEIT;
class hHELLIGKEITSSTEUERUNG{   
int ZustandLampeManuelinnen = S0_NEUTRAL;
    private:
bool bLampenStatus = 0;
    // ************************************************************
int ZustandLampeAutomatikinnen = S0_NEUTRAL;  
    // Zeiterfassung für die Helligkeitssteuerung (State Machine)
    // ************************************************************
    bool stmZeitErfassungLampe(int nStunden);


bool LampenBetrieb(bool bLampeZustandAuto, bool bTouch_Lampe, bool bKippschalterHelligkeit);
    // ************************************************************
    // Entscheidung Lampenzustand im Automatik-Betrieb
    // ************************************************************
    int Entscheidung_Lampenbewegung_Automatik(bool bLampenFlag, bool bHellZustand);


int main() {
     // ************************************************************************
     int touch = 0;
     // Helligkeitssteuerung Manuellen und Automatik-Betrieb (State Machine)
     int entscheidung;
    // ************************************************************************
    for (int i = 1; i < 10; i++) {
    bool LampenBetrieb(bool bLampeZustandAuto, bool bTouch_Lampe, bool bKippschalterHelligkeit);  
        cin >> entscheidung;
     // ************************************************************************
        LampenBetrieb(entscheidung, touch, 1);
    }
     //LampenBetrieb(0, 0, 1);


     LampenBetrieb(0, 0, 0);
     // *************************************************************************
    // Initialisierung der Lampensteuerung
    // *************************************************************************
    public:
    hHELLIGKEITSSTEUERUNG();


     // LampenBetrieb(0, 0, 1);
     // ************************************************************************
    // Abfrage Lampenzustand
    // ************************************************************************
    bool getTuerZustand();
 
    // ************************************************************************
    // Start-Funktion
    // ************************************************************************
    void StartHS(hSENSOR_SIGNAL& SenSig, hAKTUATOR_AUSGABE& AktSig);


     LampenBetrieb(0, 0, 0);
     // ************************************************************************
};  


    system("pause");
    return 0;
}
</pre>
</pre>
</div>
</div>


=== Sensor-Signalaufbereitung ===
<div style="width:820px; height:1320px; overflow:auto; border: 1px solid #000">
<pre>
class hSENSOR_SIGNAL{
    private:
    // ************************************************************
    // Ultraschall-Sensor
    // ************************************************************
    long Berechnung_Entfernung();


{| class="wikitable"
    // ************************************************************
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Testfall-ID
    // Zeitsensor
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Testfall-Name
    // ************************************************************
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Anforderungs-ID
    int leseZeitvomRTC();
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Vorbedingungen und Eingänge
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Aktionen
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Erwartetes Ergebnis
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Ergebnis
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Bewertung
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Kommentar


|-
    public:
| IT-SW-HS-001
    // ************************************************************
| Zustandswechsel - Automatik zu Manuell
    // Initialisierung alle Sensoren
| REQ-310, REQ-312
    // ************************************************************
| Kippschalter mit 12 V versorgt
    hSENSOR_SIGNAL(){
| Schalter kippen
        // Touch-Sensor
| Wechsel von Automatik auf Manuell
        pinMode(_TOUCH_DIG_TUER_PIN_, INPUT);
| Wechsel von Automatik auf Manuell
        pinMode(_TOUCH_DIG_LAMPE_PIN_, INPUT);
|i. O.
|


|-
        // Ultraschall
| IT-SW-HS-002
        pinMode(_US_DIG_ECHO_PIN_, INPUT);
| Zustandswechsel - Manuell auf Automatik
        pinMode(_US_DIG_TRIG_PIN_, OUTPUT);
| REQ-310, REQ-312
| Kippschalter mit 12 V versorgt
| Schalter kippen
| Wechsel von Manuell auf Automatik
| Wechsel von Manuell auf Automatik
|i. O.
|


        // Fotowiderstand
        pinMode(_FOTOWIDERSTAND_ANA_PIN_, INPUT);
        nSchwellwert = 300;
        nOffset = 50; 
        StateHelligkeit = S1_DUNKEL;
        bHelligkeitszustand = 0;
       
        // Kippschalter
        //pinMode(_TOUCH_DIG_TUER_PIN_, INPUT);
    }; 
    // ************************************************************


    // ***********************************************************
    // Abfrage der Sensoren
    // ***********************************************************
    // Touch-Sensoren
    // ***********************************************************
    bool getTouchTuer();
    bool getTouchLampe();


|}
     // ***********************************************************
'''Tab. 4''': Ausschnitt aus Integrationstest für den Lampenbetrieb
     // Ultraschallsensor
 
     // ***********************************************************
=== Betriebsmoduswechsel-Test - Türsteuerung ===
    long getAbstand();
<div style="width:820px; height:1000px; overflow:auto; border: 1px solid #000">
<pre>
int main() {
     // ****************************************
     // Initialisierung der nötigen Parametern
     // ****************************************


     bool bTuerBewegungAuto = false;
     // ***********************************************************
     bool bTouchTuer = false;
    // Fotowiderstand
     int nAbstand = 10; // in [cm]
     // ***********************************************************
     bool bKippschalter = false;
     unsigned int getHeligkeitRoh();
     bool getHelligkeit();


    // ***********************************************************
    // Real-Time-Sensor
    // ***********************************************************
    unsigned int getZeitStunden();


     // ****************************************
     // ************************************************************
     // Test - Wechsel Automatik/Manuel-Betrieb
     // Kippschalter
     // ****************************************
     // ***********************************************************
    cout << "*********************************************************************************" << endl;
    bool getKippschalterTuer();
    cout << "Test - Wechse Automatik / Manuel - Betrieb" << endl;
    bool getKippschalterLampe();
    cout << "------------------------------------------" << endl;
    // ************************************************************
   
    for (int i = 1; i <= 10; i++){
 
        if (i % 2 == 0) {
            bKippschalter = false;
        }
        else {
            bKippschalter = true;
        }
         


        cout << "Input: Kippschalter = " << bKippschalter << endl;  
};  


        for (int j = 1; j <= 5; j++) {
</pre>
            TuerBetrieb(bTuerBewegungAuto, bTouchTuer, nAbstand, bKippschalter);
</div>
        }
        cout << endl;
    }
    cout << "******************************************************************************" << endl;


     // ***********************************************
=== Aktuator-Signalausgabe ===
     // Test im manuellen Betrieb
<div style="width:820px; height:550px; overflow:auto; border: 1px solid #000">
     // ***********************************************
<pre>
     // Manueller Betrieb einschalten
class hAKTUATOR_AUSGABE{
     bKippschalter = false;
    public:
     // ************************************************************
     // Initialisierung der Aktuatoren
     // ************************************************************
     hAKTUATOR_AUSGABE(){
        pinMode(_RELAIS_DIG_LAMPE_PIN_, OUTPUT);
        pinMode(_HBRIDGE_DIG_IN1_PIN_, OUTPUT);
        pinMode(_HBRIDGE_DIG_IN2_PIN_, OUTPUT);
        pinMode(_HBRIDGE_PWM_ENA_PIN_, OUTPUT);
     };  


 
    // ************************************************************
     // ***********************************************
    // Signalausgabe zu den Aktuatoren
     // Test im automatischen Betrieb
     // ************************************************************
     // ***********************************************
     // UV-Lampe
     // Manueller Betrieb einschalten
     // ************************************************************
 
    bool getUVLampeZustand();
     system("pause");  
    void setUVLampeZustand(bool LampenZustand);
     return 0;  
     // ************************************************************
}
    // Stall Tür
     // ************************************************************
    int getTuerZustand();  
      
    void setTuerZustand(bool bMotorZustand, bool bMotorRichtung);
    // ************************************************************
};
</pre>
</pre>
</div>
</div>


= Testphase =


== Komponententest ==
{| class="wikitable"
{| class="wikitable"
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Testfall-ID
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Testfall-ID
Zeile 1.461: Zeile 1.339:


|-
|-
| IT-SW-TS-001
| KT-HW-001
| Zustandswechsel - Automatik zu Manuell
| RTC - Erfassung der echten Uhrzeit
| REQ-310, REQ-311
| REQ-141, REQ-142, REQ-720, KS-RTC-000
| Kippschalter mit 12 V versorgt
| I2C-Bus verbunden
| Schalter kippen
| Messwert lesen
| Wechsel von Automatik auf Manuell
| 17 Uhr
| Wechsel von Automatik auf Manuell
| 17 Uhr
|i. O.
|i. O.
|
|


|-
|-
| IT-SW-TS-002
| KT-HW-002
| Zustandswechsel - Manuell auf Automatik
| LDR - Helligkeitserfassung vom Tageslicht um 4 Uhr morgens
| REQ-310, REQ-311
| REQ-111, REQ-112, KS-LDR-000
| Kippschalter mit 12 V versorgt
| Richtige Aufstellung und Berechnung der Spannungsteilergleichung
| Schalter kippen
| Messwert auslesen
| Wechsel von Manuell auf Automatik
| Hohes Analogsignal nah an 1023
| Wechsel von Manuell auf Automatik
| Hohes Analogsignal nah an 1023
|i. O.
| i. O.
|
|


|-
| KT-HW-003
| LDR - Helligkeitserfassung vom Tageslicht um 4 Uhr morgens
| REQ-111, REQ-112, REQ-150, KS-LDR-000
| Richtige Aufstellung und Berechnung der Spannungsteilergleichung
| Messwert auslesen
| Niedriges  Analogsignal nahe der Null
| Niedriges  Analogsignal nahe der Null
| i. O.
|


|-
| KT-HW-004
| US-Sensor - Distanzmessung in cm
| KS-US-000
| Richtige Berechnung der Laufzeit
| Messwert auslesen
| 10 cm
| 10 cm
| i. O.
|
|-
| KT-HW-007
| Motor - Öffnen und Schließen einer 5 kg Tür über eine Seilwinde
| REQ-001, REQ-230, REQ-250, REQ-520
| Seil über die Umlenkrolle richtig einrollen
| PWM-Signal über H-Bridge schicken
| Hochheben und Senken der Tür je 1 Sek.
| Hochheben und Senken der Tür je 1 Sek.
| i. O.
|


|}
|}
'''Tab. 4''': Ausschnitt aus Integrationstest für den Türbetrieb
'''Tab. 4''': Ausschnitt aus Komponententest der Hardwarekomponente
 
 
 
=== Testphase der Konstruktion und Mechanik im Stall ===


= Ergebnis =
In dieser Testphase wird die Lampen- und Türsteuerung manuell betätigt und getestet. Die Tageslichtlampe ist hell genug, um den Stall auszuleuchten. Die Führung der Tür bewegt sie problemlos nach oben und unten. Der Motor hat genug Kraft, um die Tür nach oben und unten zu bewegen. Die folgenden beiden Abbildungen 42 und 43 stellen den Aufbau des Testsystems dar.
{| class="wikitable"
 
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | ID
[[Datei:Komponententest_Lampe_AE_Gruppe_1_8.png|mini|500px|links|'''Abb. 42''': Komponententest Lampe]]
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Typ (I = Info, A = Anforderung)
<br clear=all>
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Kapitel
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Inhalt
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Status
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Kommentar
|-
! style="font-weight: bold;" | REQ-000
! style="font-weight: bold;" | I
! style="font-weight: bold;" | 0
! style="font-weight: bold;" |Projektziel
! style="font-weight: bold;" | erfüllt
! style="font-weight: bold;" |


|-
[[Datei:Komponententest_Tür_AE_Gruppe_1_8.png|mini|500px|links|'''Abb. 43''': Komponententest Tür]]
| REQ-001
<br clear=all>
! style="font-weight: bold;"| A
! style="font-weight: bold;"| 0.1
|Mit Sensorsystemen und Aktuatoren die Tierhaltung im Einklang mit den Tieren erleichtern und optimieren.
| erfüllt
|


|-
== Integrationstest ==
! style="font-weight: bold;" | REQ-100
! style="font-weight: bold;" | I
! style="font-weight: bold;" | 1
! style="font-weight: bold;" |Functional Requirements
! style="font-weight: bold;" | erfüllt
! style="font-weight: bold;" |


|-
=== Test - Betriebsmoduswechsel Lampensteuerung ===
| REQ-110
 
! style="font-weight: bold;"| A
<div style="width:820px; height:540px; overflow:auto; border: 1px solid #000">
! style="font-weight: bold;"| 1.1
<pre>
|Ein mechatronisches System für die Helligkeit- und die Türsteuerung muss entworfen werden.
using namespace std;
| erfüllt
|


|-
int ZustandLampenbetrieb = S2_AUTOMATIK_BETRIEB_HELLIGKEIT;
| REQ-140
int ZustandLampeManuelinnen = S0_NEUTRAL;
! style="font-weight: bold;"| A
bool bLampenStatus = 0;  
! style="font-weight: bold;"| 1.3
int ZustandLampeAutomatikinnen = S0_NEUTRAL;  
|Der Zustand der Tür und der Lampe müssen nur an bestimmsten Zeiten im Automatik-Betrieb geändert werden.
| erfüllt
|


|-
bool LampenBetrieb(bool bLampeZustandAuto, bool bTouch_Lampe, bool bKippschalterHelligkeit);
| REQ-150
! style="font-weight: bold;"| A
! style="font-weight: bold;"| 1.4
|Die Tür muss bei ausreichende Außenhelligkeit aufgehen, andersfalls muss es zu sein.
| erfüllt
|


|-
int main() {
! style="font-weight: bold;" | REQ-200
    int touch = 0;
! style="font-weight: bold;" | I
    int entscheidung;
! style="font-weight: bold;" | 2
    for (int i = 1; i < 10; i++) {
! style="font-weight: bold;" |Physical Requirements
        cin >> entscheidung;
! style="font-weight: bold;" | erfüllt
        LampenBetrieb(entscheidung, touch, 1);
! style="font-weight: bold;" |
    }
    //LampenBetrieb(0, 0, 1);
 
    LampenBetrieb(0, 0, 0);
 
    // LampenBetrieb(0, 0, 1);


|-
    LampenBetrieb(0, 0, 0);
| REQ-210
 
! style="font-weight: bold;"| A
    system("pause");  
! style="font-weight: bold;"| 2.1
    return 0;  
|Ein Gehäusekonzept muss erarbeitet werden.
}
| erfüllt
</pre>
|
</div>


|-
| REQ-210
! style="font-weight: bold;"| A
! style="font-weight: bold;"| 2.2
|Der ausgewählte Motor muss die Tür heben können.
| erfüllt
|


|-
{| class="wikitable"
| REQ-230
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Testfall-ID
! style="font-weight: bold;"| A
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Testfall-Name
! style="font-weight: bold;"| 2.3
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Anforderungs-ID
|Die Masse der Tür muss auf keinen Fall ein Wert von 5 Kg überschreiten.
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Vorbedingungen und Eingänge
| erfüllt
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Aktionen
|  
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Erwartetes Ergebnis
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Ergebnis
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Bewertung
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Kommentar


|-
|-
| REQ-240
| IT-SW-HS-001
! style="font-weight: bold;"| A
| Zustandswechsel - Automatik zu Manuell
! style="font-weight: bold;"| 2.4
| REQ-310, REQ-312
|Die Länge des Seils muss eine komplette Öffnung bzw. Schließung der Tür ermöglichen
| Kippschalter mit 12 V versorgt
| erfüllt
| Schalter kippen
|  
| Wechsel von Automatik auf Manuell
| Wechsel von Automatik auf Manuell
|i. O.
|


|-
|-
| REQ-250
| IT-SW-HS-002
! style="font-weight: bold;"| A
| Zustandswechsel - Manuell auf Automatik
! style="font-weight: bold;"| 2.5
| REQ-310, REQ-312
|Die Zugfestigkeit des Seils muss dem Heben und Senken der Holztür standhalten.
| Kippschalter mit 12 V versorgt
| erfüllt
| Schalter kippen
|
| Wechsel von Manuell auf Automatik
| Wechsel von Manuell auf Automatik
|i. O.
|
 


|-
! style="font-weight: bold;" | REQ-300
! style="font-weight: bold;" | I
! style="font-weight: bold;" | 3
! style="font-weight: bold;" |Usability Requirements
! style="font-weight: bold;" | erfüllt
! style="font-weight: bold;" |


|-
|}
| REQ-310
'''Tab. 4''': Ausschnitt aus Integrationstest für den Lampenbetrieb
! style="font-weight: bold;"| A
! style="font-weight: bold;"| 3.1
|Eine alternative Lösung zur manuelle Ansteuerung muss angeboten werden.
| erfüllt
|


|-
=== Betriebsmoduswechsel-Test - Türsteuerung ===
| REQ-311
<div style="width:820px; height:1000px; overflow:auto; border: 1px solid #000">
! style="font-weight: bold;"| A
<pre>
! style="font-weight: bold;"| 3.1
int main() {
|Es muss eine Möglichkeit bestehen, jeder Zeit die Tür zu öffnen bzw. zu schließen.
    // ****************************************
| erfüllt
    // Initialisierung der nötigen Parametern
|
    // ****************************************
 
    bool bTuerBewegungAuto = false;
    bool bTouchTuer = false;
    int nAbstand = 10; // in [cm]
    bool bKippschalter = false;


|-
| REQ-312
! style="font-weight: bold;"| A
! style="font-weight: bold;"| 3.2
|Es muss eine Möglichkeit bestehen, jeder Zeit die Beleuchtung an- bzw. auszuschalten.
| erfüllt
|


    // ****************************************
    // Test - Wechsel Automatik/Manuel-Betrieb
    // ****************************************
    cout << "*********************************************************************************" << endl;
    cout << "Test - Wechse Automatik / Manuel - Betrieb" << endl;
    cout << "------------------------------------------" << endl;
   
    for (int i = 1; i <= 10; i++){


|-
        if (i % 2 == 0) {
! style="font-weight: bold;" | REQ-400
            bKippschalter = false;
! style="font-weight: bold;" | I
        }
! style="font-weight: bold;" | 4
        else {
! style="font-weight: bold;" |Business Requirements
            bKippschalter = true;
! style="font-weight: bold;" | x
        }
! style="font-weight: bold;" |
         
|-
! style="font-weight: bold;" | REQ-500
! style="font-weight: bold;" | I
! style="font-weight: bold;" | 5
! style="font-weight: bold;" |Performance Requirement
! style="font-weight: bold;" | erfüllt
! style="font-weight: bold;" |


|-
        cout << "Input: Kippschalter = " << bKippschalter << endl;  
| REQ-520
! style="font-weight: bold;"| A
! style="font-weight: bold;"| 5.2
|Der Motor darf sich maximal mit einer Geschwindigkeit von 9 RPM drehen.
| erfüllt
| Die Tür bewegt sich mit einer konstante Geschwindigkeit von 6 RPM.


|-
        for (int j = 1; j <= 5; j++) {
! style="font-weight: bold;" | REQ-600
            TuerBetrieb(bTuerBewegungAuto, bTouchTuer, nAbstand, bKippschalter);  
! style="font-weight: bold;" | I
        }
! style="font-weight: bold;" | 6
        cout << endl;
! style="font-weight: bold;" |Non functional Requirement
    }
! style="font-weight: bold;" | erfüllt
    cout << "******************************************************************************" << endl;
! style="font-weight: bold;" |


|-
    // ***********************************************
| REQ-610
    // Test im manuellen Betrieb
! style="font-weight: bold;"| A
    // ***********************************************
! style="font-weight: bold;"| 6.1
    // Manueller Betrieb einschalten
|Toolanforderungen
    bKippschalter = false;
| erfüllt
|


|-
| REQ-611
! style="font-weight: bold;"| A
! style="font-weight: bold;"| 6.1.1
|Das Projekt geht bei der Entwicklung nach dem V-Modell vor.
| erfüllt
|


|-
    // ***********************************************
| REQ-613
    // Test im automatischen Betrieb
! style="font-weight: bold;"| A
    // ***********************************************
! style="font-weight: bold;"| 6.1.3
    // Manueller Betrieb einschalten
|Als Versionsverwaltungstool wird SVN oder Git eingesetzt.
| erfüllt
|


|-
    system("pause");  
| REQ-620
    return 0;  
! style="font-weight: bold;"| A
}
! style="font-weight: bold;"| 6.2
</pre>
|Qualitätsicherung
</div>
| erfüllt
|


|-
| REQ-620
! style="font-weight: bold;"| A
! style="font-weight: bold;"| 6.2
|Sowohl für die implementierte Software als auch für die Modelle müssen geeignete Tests erstellt werden:
* Unittests zum Testen der Komponenten
* Integrationstests zum Testen von Module
* Systemtests zum Testen des gesamten Modells
* Abnahmetests für die Endabnahme des gesamten Projektes
| erfüllt
|


|-
{| class="wikitable"
! style="font-weight: bold;" | REQ-700
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Testfall-ID
! style="font-weight: bold;" | I
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Testfall-Name
! style="font-weight: bold;" | 7
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Anforderungs-ID
! style="font-weight: bold;" |Extended Requirement
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Vorbedingungen und Eingänge
! style="font-weight: bold;" | erfüllt
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Aktionen
! style="font-weight: bold;" |  
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Erwartetes Ergebnis
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Ergebnis
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Bewertung
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Kommentar


|-
|-
| REQ-720
| IT-SW-TS-001
! style="font-weight: bold;"| A
| Zustandswechsel - Automatik auf Manuell
! style="font-weight: bold;"| 7.2
| REQ-310, REQ-311
|Die echte Uhrzeit muss für den Ansteuerung erfasst werden.
| Kippschalter mit 12 V versorgt
| erfüllt
| Schalter kippen
|  
| Wechsel von Automatik auf Manuell
| Wechsel von Automatik auf Manuell
|i. O.
|


|-
|-
! style="font-weight: bold;" | REQ-800
| IT-SW-TS-002
! style="font-weight: bold;" | I
| Zustandswechsel - Manuell auf Automatik
! style="font-weight: bold;" | 7
| REQ-310, REQ-311
! style="font-weight: bold;" |Meilensteine
| Kippschalter mit 12 V versorgt
! style="font-weight: bold;" | erfüllt
| Schalter kippen
! style="font-weight: bold;" |  
| Wechsel von Manuell auf Automatik
| Wechsel von Manuell auf Automatik
|i. O.
|
 




|}
|}
'''Tab. 4''': Ausschnitt aus Integrationstest für den Türbetrieb


= Zusammenfassung =
= Ergebnis =
 
{| class="wikitable"
Das Projekt "SmartFarm" wird nicht nur für die Lehrveranstalltung entwicklelt. Die Idee kommt aus Beobachtung einer reelen System, die durch manueller menschlischer Arbeit langsam aufwändig und <br>
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | ID
sehr schwer zu koordinieren bei den vielen Nebenbeschätigung geworden sind. Daher bietet sich die Gelegenheit durch Automatisierung die Kontrolle über die Helligkeit im Stall und die Tür des Stall <br>
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Typ (I = Info, A = Anforderung)
zu verbessern.
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Kapitel
 
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Inhalt
=== Lessons Learned ===
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Status
Für die Entwicklung des Projekts wurde hauptsächlich drei Bereiche benötigt:  
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Kommentar
* Software-Entwicklung
|-
* Hardware-Entwicklung
! style="font-weight: bold;" | REQ-000
* Konstruktion
! style="font-weight: bold;" | I
 
! style="font-weight: bold;" | 0
Die Software-Entwicklung sollte eine Software anbieten, die folgende Anforderungen sollte:  
! style="font-weight: bold;" |Projektziel
* Anpassbarkeit bzw. Adaptierbarkeit
! style="font-weight: bold;" | erfüllt
* Skalierbarkeit
! style="font-weight: bold;" |
* Zuverlässigkeit
* Effizienz


Die Herausforderung besteht darin die Software mittels moderne Softwarewerkzeuge und -techniken als Bindeglied zwischen Kundenwunsch und Systemverhalten zu programmieren, sodass möglichst alle Wünschen <br>
|-
bei einer hundertprozentigen Zuverlässigkeit und Korrektheit des Systems zu erfüllen. Zusätzlich sollte die Software gewährleisten, dass beide Systeme unabhängig voneinander funktionieren und keine Signalverluste <br>
| REQ-001
oder Signalfehler z.B. aufgrund der Dateninkonsistenz entsteht.
! style="font-weight: bold;"| A
! style="font-weight: bold;"| 0.1
|Mit Sensorsystemen und Aktuatoren wird die Tierhaltung im Einklang mit den Tieren erleichtert und optimiert.
| erfüllt
|


=== Projektunterlagen ===
|-
==== LOP - List Of Open-Point ====
! style="font-weight: bold;" | REQ-100
! style="font-weight: bold;" | I
! style="font-weight: bold;" | 1
! style="font-weight: bold;" |Functional Requirements
! style="font-weight: bold;" | erfüllt
! style="font-weight: bold;" |


|-
| REQ-110
! style="font-weight: bold;"| A
! style="font-weight: bold;"| 1.1
|Ein mechatronisches System für die Helligkeits- und die Türsteuerung muss entworfen werden.
| erfüllt
|


|-
| REQ-140
! style="font-weight: bold;"| A
! style="font-weight: bold;"| 1.3
|Der Zustand der Tür und der Lampe darf nur an bestimmten Zeiten im Automatik-Betrieb geändert werden.
| erfüllt
|


{| class="wikitable"
|-
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | No.
| REQ-150
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Priorität
! style="font-weight: bold;"| A
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Issue
! style="font-weight: bold;"| 1.4
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Action
|Die Tür muss bei ausreichender Außenhelligkeit aufgehen und bei Dunkelheit (s. Schwellwert) schließen.
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Responsable
| erfüllt
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Department
|  
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Target date
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Start date
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | closed date
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | status
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Komentar
 


|-
|-
| 1
! style="font-weight: bold;" | REQ-200
| 1
! style="font-weight: bold;" | I
| Türsteuerung - Motorauswahl
! style="font-weight: bold;" | 2
| Benchmart des Motors und Bestelung
! style="font-weight: bold;" |Physical Requirements
| Dominik H.
! style="font-weight: bold;" | erfüllt
| Hardware Development
! style="font-weight: bold;" |  
| 25.12.2020
| 01.10.2020
| 12.12.2020
| erledigt
| 17.11.2020:
* Kein BLDC --> Zu aufwendig
* DC Motor mit Getriebe --> große Drehmoment


|-
|-
| 2
| REQ-210
| 1
! style="font-weight: bold;"| A
| Ultrachall Positionierung
! style="font-weight: bold;"| 2.1
| Probe von verschiedenen position
|Ein Gehäusekonzept muss erarbeitet werden.
| Dominik H.  
| erfüllt
| Konstruktion
|  
| 25.12.2020
| 01.10.2020
| 12.12.2020
| erledigt
| 17.11.2020:
* Verschiedene Position ausprobieren und schauen, ob die Distanz korrekt ermittelt wird.


|-
|-
| 3
| REQ-210
| 2
! style="font-weight: bold;"| A
| Gehäuse
! style="font-weight: bold;"| 2.2
| Prototyp drucken lassen und verbessern
|Der ausgewählte Motor muss die Tür anheben können.
| Dominik H.  
| erfüllt
| Test and Calibration
| 25.12.2020
| 01.10.2020
| 19.12.2020
| erledigt
|  
|  


|-
|-
| 4
| REQ-230
| 2
! style="font-weight: bold;"| A
| Schwellwertbestimmung LDR
! style="font-weight: bold;"| 2.3
| Messungen durchführen
|Die Masse der Tür darf ein Gewicht von 5 kg nicht überschreiten.  
| Dominik H.  
| erfüllt
| Test and Calibration
|  
| 25.12.2020
| 01.10.2020
| 17.12.2020
| erledigt
| 17.11.2020
* Messung an verschiedenen Tagen durchführen mit vielen und wenigen Sonnenstunden
* Messung mit Kunststoff-Kuppe testen


|-
|-
| 8
| REQ-240
| 1
! style="font-weight: bold;"| A
| Programmablaufplan
! style="font-weight: bold;"| 2.4
| Modellierung des PAP
|Die Länge des Seils muss eine komplette Öffnung bzw. Schließung der Tür ermöglichen.  
| Isaac Mpidi Bita
| erfüllt
| Projektleitung/Software
| 30.12.2020
| 28.12.2020
| 30.12.2020
| erledigt
| 28.12.2020: Warte auf Abstimmung des Programmorientierung
 
|-
| 10
| 2  
| Simulationsmodell
| Erstellung eines Simulationsmodell in MATLAB/Simulink
| Isaac Mpidi Bita
| Software Developement
| 10.01.2020
| 01.12.2020
| 02.01.2020
| erledigt
|  
|  


|-
|-
| 11
| REQ-250
| 1
! style="font-weight: bold;"| A
| Hardware-Entwurf
! style="font-weight: bold;"| 2.5
| Erstellung eines funktionaler Harwareentwurf
|Die Zugfestigkeit des Seils muss dem Heben und Senken der Holztür standhalten.
| Isaac Mpidi Bita
| erfüllt
| Hardware Developement
| 10.12.2020
| 01.12.2020
| 06.01.2020
| erledigt
|  
|  


|-
|-
| 11
! style="font-weight: bold;" | REQ-300
| 1
! style="font-weight: bold;" | I
| Software-Entwurf
! style="font-weight: bold;" | 3
| Erstellung eines funktionaler  Sofwareentwurf
! style="font-weight: bold;" |Usability Requirements
| Isaac Mpidi Bita
! style="font-weight: bold;" | erfüllt
| Software Developement
! style="font-weight: bold;" |  
| 10.12.2020
| 01.12.2020
| 06.01.2020
| erledigt
|  


|-
|-
| 13
| REQ-310
| 1  
! style="font-weight: bold;"| A
| Verhaltenmodellierung
! style="font-weight: bold;"| 3.1
| Erstellung der Stateflow für die verschiedenen Programmsequenzen
|Eine alternative Lösung zur manuellen Ansteuerung muss angeboten werden.
| Isaac Mpidi Bita
| erfüllt
| Software Developement
|
 
|-
| REQ-311
! style="font-weight: bold;"| A
! style="font-weight: bold;"| 3.1
|Es muss eine Möglichkeit bestehen, jederzeit die Tür zu öffnen bzw. zu schließen.
| erfüllt
|
 
|-
| REQ-312
! style="font-weight: bold;"| A
! style="font-weight: bold;"| 3.2
|Es muss eine Möglichkeit bestehen, jederzeit die Beleuchtung an- bzw. auszuschalten.
| erfüllt
|
 
 
|-
! style="font-weight: bold;" | REQ-400
! style="font-weight: bold;" | I
! style="font-weight: bold;" | 4
! style="font-weight: bold;" |Business Requirements
! style="font-weight: bold;" | x
! style="font-weight: bold;" |
|-
! style="font-weight: bold;" | REQ-500
! style="font-weight: bold;" | I
! style="font-weight: bold;" | 5
! style="font-weight: bold;" |Performance Requirement
! style="font-weight: bold;" | erfüllt
! style="font-weight: bold;" |
 
|-
| REQ-520
! style="font-weight: bold;"| A
! style="font-weight: bold;"| 5.2
|Der Motor darf sich maximal mit einer Geschwindigkeit von 9 rpm drehen.
| erfüllt
| Die Tür bewegt sich mit einer konstanten Geschwindigkeit von 5 rpm.
 
|-
! style="font-weight: bold;" | REQ-600
! style="font-weight: bold;" | I
! style="font-weight: bold;" | 6
! style="font-weight: bold;" |Non functional Requirement
! style="font-weight: bold;" | erfüllt
! style="font-weight: bold;" |
 
|-
| REQ-610
! style="font-weight: bold;"| A
! style="font-weight: bold;"| 6.1
|Toolanforderungen
| erfüllt
|
 
|-
| REQ-611
! style="font-weight: bold;"| A
! style="font-weight: bold;"| 6.1.1
|Das Projekt geht bei der Entwicklung nach dem V-Modell vor.
| erfüllt
|
 
|-
| REQ-613
! style="font-weight: bold;"| A
! style="font-weight: bold;"| 6.1.3
|Als Versionsverwaltungstool wird SVN oder Git eingesetzt.
| erfüllt
|
 
|-
| REQ-620
! style="font-weight: bold;"| A
! style="font-weight: bold;"| 6.2
|Qualitätssicherung
| erfüllt
|
 
|-
| REQ-620
! style="font-weight: bold;"| A
! style="font-weight: bold;"| 6.2
|Sowohl für die implementierte Software als auch für die Modelle müssen geeignete Tests erstellt werden:
* Unittests zum Testen der Komponenten
* Integrationstests zum Testen der Module
* Systemtests zum Testen des gesamten Modells
* Abnahmetests für die Endabnahme des gesamten Projektes
| erfüllt
|
 
|-
! style="font-weight: bold;" | REQ-700
! style="font-weight: bold;" | I
! style="font-weight: bold;" | 7
! style="font-weight: bold;" |Extended Requirement
! style="font-weight: bold;" | erfüllt
! style="font-weight: bold;" |
 
|-
| REQ-720
! style="font-weight: bold;"| A
! style="font-weight: bold;"| 7.2
|Die echte Uhrzeit muss für die Ansteuerung erfasst werden.
| erfüllt
|
 
|-
! style="font-weight: bold;" | REQ-800
! style="font-weight: bold;" | I
! style="font-weight: bold;" | 7
! style="font-weight: bold;" |Meilensteine
! style="font-weight: bold;" | erfüllt
! style="font-weight: bold;" |  
 
|}
 
Als Vorinstallation wurde ein Stromanschluss mit mehreren Steckdosen im Stall angebracht. Ferner ist die Mechanik der Tür für ein manuelles Öffnen und Schließen eingebaut. Für die Lichtsteuerung befindet sich eine angeschlossene Tageslichtlampe im Stall. Das Ergebnis ist auf den folgenden Bildern zu erkennen.
 
<gallery class="left" caption=" " widths="300" heights="300">
Datei:Entwurf_Foto_Prototyp.png|'''Abb. 44: Prototypen-Vorrichtung'''
Datei:Istsituation - Tür.png|'''Abb. 45: Hühnerstall bei Dunkelheit'''
Datei:Lampe_im_Stall_AE_Gruppe_1_8.png|'''Abb. 46: Lampe im Hühnerstall'''
Datei:Automatik_Manuell.jpg|'''Abb. 47: Betriebsmodus-Auswahl'''
Datei:SmartFarm_Brainstorming.png|'''Abb. 48: Projektzustands'''
</gallery>
 
Es existiert ein fertiger und funktionstüchtiger Prototyp. Dieser kann baugleich in den Hühnerstall integriert werden. Im automatischen Modus öffnet und schließt sich die Tür im Tageslauf abhängig von der Helligkeit und Zeit und ermöglicht den Tieren Zugang zum Außengehege für eine artgerechte Haltung. Des Weiteren sorgt die Lichtsteuerung für einen künstlich verlängerten Tag und damit für eine gleichbleibende Legeleistung auch in den dunklen Jahreszeiten. Diese Steuerung ist ebenfalls von der Helligkeit und Uhrzeit abhängig. Für eine hohe Nutzungsfreundlichkeit sind beide Systeme unabhängig voneinander manuell ansteuerbar.
 
= Zusammenfassung =
 
Das Projekt "SmartFarm" ist aus langjähriger Beobachter der Hühnerhaltung als ein reales System entstanden. Durch das manuelle Öffnen und Schließen der Tür ist der Halter täglich morgens und abends an den Hühnerstall gebunden. Durch die automatische Türsteuerung erreicht der Tierhalter ein hohes Maß an Flexibilität. Des Weiteren wurde die Beobachtung gemacht, dass die Legeleistung in der dunklen Jahreszeit stark abnimmt. Dieser Entwicklung kann mit einer Tageslichtlampe angeschlossen an eine Lichtsteuerung entgegen gewirkt werden.
 
=== Lessons Learned ===
Für die Entwicklung des Projekts wurden hauptsächlich drei Bereiche benötigt:
* Entwicklung der Software
* Entwicklung der Hardware
* Entwicklung der Konstruktion und Mechanik
 
Die entwickelte Software sollte folgende Anforderungen erfüllen:
* Anpassbarkeit bzw. Adaptierbarkeit
* Skalierbarkeit
* Zuverlässigkeit
* Effizienz
 
Die Herausforderung besteht in der Softwareprogrammierung mittels moderner Softwarewerkzeuge und -techniken als Bindeglied zwischen Kundenwunsch und Systemverhalten, sodass möglichst alle Wünsche <br>
bei optimaler Zuverlässigkeit und Korrektheit des Systems erfüllt werden. Zusätzlich sollte die Software gewährleisten, dass beide Systeme unabhängig voneinander funktionieren und keine Signalverluste <br>
oder Signalfehler z.B. aufgrund der Dateninkonsistenz entstehen.
 
=== Projektunterlagen ===
==== LOP - List Of Open-Point ====
 
 
 
{| class="wikitable"
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Nr.
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Priorität
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Thema
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Aktion
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Verantwortlichkeit
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Department
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Zieldatum
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Startdatum
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Enddatum
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Status
! style="font-weight: bold; background-color:#0070C0;color:#FFFFFF" | Kommentar
 
 
|-
| 1
| 1
| Türsteuerung - Motorauswahl
| Benchmark des Motors und Bestellung
| Dominik Hermelingmeier
| Hardware Development
| 25.12.2020
| 01.10.2020
| 12.12.2020
| erledigt
| 17.11.2020:
* Kein BLDC --> Zu aufwendig
* DC Motor mit Getriebe --> große Drehmoment
 
|-
| 2
| 1
| Ultraschall Positionierung
| Probe von verschiedenen Position
| Dominik Hermelingmeier
| Konstruktion
| 25.12.2020
| 01.10.2020
| 12.12.2020
| erledigt
| 17.11.2020:
* Verschiedene Position ausprobieren und schauen, ob die Distanz korrekt ermittelt wird.
 
|-
| 3
| 2
| Gehäuse
| Prototyp drucken lassen und verbessern
| Dominik Hermelingmeier
| Test and Calibration
| 25.12.2020
| 01.10.2020
| 19.12.2020
| erledigt
|
 
|-
| 4
| 2
| Schwellwertbestimmung LDR
| Messungen durchführen
| Dominik Hermelingmeier
| Test and Calibration
| 25.12.2020
| 01.10.2020
| 17.12.2020
| erledigt
| 17.11.2020
* Messung an verschiedenen Tagen durchführen mit vielen und wenigen Sonnenstunden
* Messung mit Kunststoffkuppe testen
 
|-
| 5
| 1
| Programmablaufplan
| Modellierung des PAP
| Isaac Mpidi Bita
| Projektleitung/Software
| 30.12.2020
| 28.12.2020
| 30.12.2020
| 30.12.2020
| 01.12.2020
| erledigt
| 30.12.2020
| 28.12.2020: Warte auf Abstimmung des Programmorientierung
| erledigt
 
|  
|-
 
| 6
 
| 2
|}
| Simulationsmodell
 
| Erstellung eines Simulationsmodell in MATLAB/Simulink
==== Gannt Chart ====
| Isaac Mpidi Bita
[[Datei:Gannt_AE_Gruppe_1_8.png|mini|1000px|links|'''Abb.1''': State Machine - Betriebsmodis des Stall-Systems]]
| Software Developement
<br clear=all>
| 10.01.2020
 
| 01.12.2020
==== Projektdurchführung ====
| 02.01.2020
 
| erledigt
'''Prozessmodell''' : V-Modell
|
 
 
'''Modellierungstandard''' : SysML für das System Design
|-
 
| 7
'''Software-Archtektur''' : Objektorientierte Programmierung
| 1
 
| Hardware-Entwurf
'''Software-Richtlinien''' : Embedeed Software Engineering
| Erstellung eines funktionaler Harwareentwurfs
 
| Isaac Mpidi Bita
==== YouTube Video ====
| Hardware Developement
 
| 10.12.2020
= Ausblick =
| 01.12.2020
 
| 06.01.2020
== Weblinks ==
| erledigt
 
|
== Literatur ==
 
 
|-
<references>
| 8
 
| 1
<ref name="Datendankverstehen">
| Software-Entwurf
Datendanken verstehen (2020): V-Modell. [https://www.datenbanken-verstehen.de/datenbankentwicklung/vorgehensmodelle/v-modell/] Letzter Aufruf: 18.07.2020.  
| Erstellung eines funktionalen Sofwareentwurfs
| Isaac Mpidi Bita
| Software Developement
| 10.12.2020
| 01.12.2020
| 06.01.2020
| erledigt
|
 
|-
| 9
| 1
| Verhaltenmodellierung
| Erstellung der Stateflow für die verschiedenen Programmsequenzen
| Isaac Mpidi Bita
| Software Developement
| 30.12.2020
| 01.12.2020
| 30.12.2020
| erledigt
|  
 
 
|}
 
==== Gannt Chart ====
 
Zur Strukturierung des zeitlichen Projektablaufs wurde das V-Modell anhand des folgenden Gantt-Diagramms in Abbildung 51 umgesetzt.
 
[[Datei:Gannt_AE_Gruppe_1_8.png|mini|1000px|links|'''Abb. 49''': State Machine - Betriebsmodis des Stall-Systems]]
<br clear=all>
 
==== Projektdurchführung ====
 
'''Prozessmodell''': V-Modell
 
'''Modellierungstandard''': SysML für das System Design
 
'''Software-Archtektur''': Objektorientierte Programmierung
 
'''Software-Richtlinien''': Embedeed Software Engineering
 
= Ausblick =
 
=== Systeminstallation und Verbesserung der Hilfsplatine ===
 
Beim Einbau des Gesamtsystems in das entsprechende Gehäuse wurden weitere Herausforderungen erkannt. Durch den modularen Systemaufbau können alle Sensoren und Aktoren auch im Stall schnell und einfach ausgetauscht oder umgesteckt werden. Dennoch nehmen die verwendeten Jumperkabel sehr viel Platz ein und stellen eine lose Verbindung dar. Beim Versuch des Umbaus lösen sich die Anschlüsse der Sensoren, Aktoren oder der Platine bereits bei kleinen Belastungen. Diese Fehlerquelle kann mit einer direkt verlöteten Leiterplatine (PCB) vermieden werden. Die Darstellung der Schaltpläne ist in den folgenden Abbildung 50, 51 und 52 dargestellt. Die restlichen Modulkomponente können durch Schraubverbindungen einfach vom Prototypen in den Stall umgebaut werden.
 
<gallery class="left" caption=" " widths="300" heights="300">
Datei:Schaltung1_AE_Gruppe_1_8.png|'''Abb. 50''': Schaltplan
Datei:Schaltung2_AE_Gruppe_1_8.png|'''Abb. 51''': PCB
Datei:Schaltung3_AE_Gruppe_1_8.png|'''Abb. 52''': 3D-Ansicht des PCB 
</gallery>
 
=== Ausblick auf die weiteren Subsysteme ===
 
Neben der Implementierung der beiden Subsysteme der Helligkeits- und Türsteuerung (s. SmartLight und SmartDoor) besteht die Möglichkeit, die weiteren Subsysteme aus dem eingangs eräuterten Brainstorming aus Abbildung 2 umzusetzen. Die weiteren Subsysteme aus der Abbildung 50 werden modulweise implementiert. Dadurch wird der Automatisierungsgrad des Hühnerstalls weiter erhöht und die Tierhaltung für den Halter weiter erleichtert. Weitere Videos werden auf dem [https://www.youtube.com/watch?v=d51bS0bcJSA YouTube] Kanal zeitnah erscheinen.
 
[[Datei:Brainstorming Aublick_AE_Gruppe_1_8.png|mini|1000px|links|'''Abb. 53''': Fokus auf weitere Subsysteme]]
<br clear=all>
 
== Lernziele ==
 
* Projektmanagement
* Anwendung des V-Modells
* Systems Engineering
* Software Engineering
* Embedded Systems
* objektorientierte Programmierung
* Umgang mit MATLAB/Simulink und Arduino IDE
* Rapid Control Prototyping
* CAD-Konstruktionen
* innovative- und additive Fertigung (3D-Druck)
* mechanische Konstruktionen auslegen und aufbauen
* mechanische Berechnungen
* elektrotechnische Berechnungen
* Layout von Leiterplatten/Platinen (PCB)
* Videodesign
 
== Weblinks ==
[https://www.arduino.cc/en/main/OldSoftwareReleases Arduino IDE]
 
== YouTube Video ==
{{#ev:youtube|https://www.youtube.com/watch?v=yzaUWs2E_Lc|800px|left}}
<br clear=all>
 
== Literatur ==
 
<references>
 
<ref name="Datendankverstehen">
Datendanken verstehen (2020): V-Modell. [https://www.datenbanken-verstehen.de/datenbankentwicklung/vorgehensmodelle/v-modell/] Letzter Aufruf: 09.02.2021.  
</ref>
 
<ref name="ionos_VModell">
Digital Guide Ionos (2020): Was ist das V-Modell. [https://www.ionos.de/digitalguide/websites/web-entwicklung/v-modell/] Letzter Aufruf: 09.02.2021.
</ref>
</ref>


<ref name="ionos_VModell">
<ref name="Gehäuse Arduino Uno">
Datendanken verstehen (2020): V-Modell. [https://www.ionos.de/digitalguide/websites/web-entwicklung/v-modell/] Letzter Aufruf: 18.07.2020.  
Gehäuse Arduino Uno (2015): [https://grabcad.com/library/arduino-uno-case-2] Letzter Aufruf: 15.11.2020.
</ref>
</ref>


</references>
</references>

Aktuelle Version vom 14. Februar 2021, 23:04 Uhr

Autoren: Isaac Mpidi Bita, Dominik Hermelingmeier
Betreuer: Prof. Göbel


→ zurück zur Übersicht: WS 20/21: Angewandte Elektrotechnik (BSE)

Abb. 1: SmartFarm


Einleitung

Diese Arbeit wurde im Rahmen der Veranstaltung "Angewandte Elektronik" im Masterstudiengang "Business and Systems Engineering" (BSE/BaSE) angefertigt. Es werden folgende Ziele verfolgt:

  • Auswertung von Sensorinformationen
  • Ansteuerung von verschiedenen Sensoren und Aktuatoren
  • Verarbeitung von Signalen im Rahmen der Mess- und Regelungstechnik mit einem Microcontroller

Die Veranstaltung wird mit einem mechatronischen Projekt begleitet, welches die folgenden Phasen beinhaltet:

  • Projektplanung und Schaltungsentwurf
  • Beschaffung der Bauteile und Materialien
  • Entwicklung (z. B. Platinenlayout) und Fertigung mit anschließender Inbetriebnahme
  • Projektdemonstration, -abnahme und -dokumentation

Heutzutage spielt das Konzept "SMART" eine wichtige Rolle in zahlreichen alltäglichen Bereichen. In der Landwirtschaft gewinnt der Einsatz moderner Techniken, genauer gesagt Informations- und Kommunikationssysteme, immer mehr an Bedeutung. Diese Revolution wird in dem Bereich als Landwirtschaft 4.0 bezeichnet. Im Rahmen des Moduls "Angewandte Elektrotechnik" ist das Projekt SmartFarm entstanden.

Das Projekt SmartFarm verfolgt das Ziel, mit Sensorsystemen und Aktuatoren die Tierhaltung im Einklang mit den Tieren zu erleichtern und zu optimieren. Sie lassen sich zu den fünf Oberpunkten SmartLight, SmartDoor, SmartTracking, SmartFeed, SmartWater und SmartClimate zusammenfassen. SmartLight bezieht sich auf die Helligkeitssteuerung im Stall und SmartDoor auf die Türsteuerung. SmartTracking umfasst die Positionserfassung der Tiere. SmartFeed und SmartWater beziehen sich auf die Versorgung der Tiere. Klimatische Daten werden im Gebiet SmartClimate sowohl für den Stall als auch für die Legenester zur Überwachung des Lege- und Brutverhaltens ermittelt. Ein perfektes System erfordert die Zusammenarbeit zwischen den Bereichen. Verschiedene Möglichkeiten für die Umsetzung des Gesamtsystems mit den Teilsystemen sind in dem Brainstorming in Abbildung 2 visualisiert.

Abb. 2: SmartFarm - Brainstorming


Der Fokus dieses mechatronischen Projekts liegt auf den Teilsystemen der Tür- (s. SmartDoor) und Helligkeitssteuerung (s. SmartLight) in einem Hühnerstall (s. Abbildung 3). Zudem besteht die Möglichkeit, sowohl die Tür als auch die Lampe manuell anzusteuern. Ein geschlossener Stall schützt die Hühner über Nacht vor Raubtieren. Die Türsteuerung verschafft dem Tierhalter Unabhängigkeit und Flexibilität beim Öffnen und Schließen der Tür. Aus der Lampensteuerung resultiert eine erhöhte Legeleistung in der dunklen Jahreszeit durch einen künstlich verlängerten Tag.

Abb. 3: Fokus auf die Subsysteme "SmartDoor" und "SmartLight"


Istsituation

Für einen ersten Eindruck ist der Stall (Istsituation) in den folgenden Bilder 4 und 5 dargestellt.

V-Modell als Vorgehensmodell

Abb.6: Das V-Modell (eigene Abbildung in Anlehnung an [1])

Das V-Modell ist ein Prozessmodell zur Systementwicklung. Dieses Modell wird für die Entwicklung des Projekts "SmartFarm" verwendet und gliedert sich schwerpunktmäßig in die Entwurfsphase, Implementierung und Testphase. Das Ergebnis bzw. Ziel ist ein fertiges Produkt (s. Abbildung 6). Das V-Modell wird für die Systementwicklung aus den folgenden Gründen ausgewählt [2]:

  • Klare Projektstruktur mit Qualitätsgewährleistung
  • bessere Planbarkeit durch fest vorgegebene Rollen, Strukturen und Ergebnisse
  • Verbesserung der Kommunikation zwischen den Beteiligten
  • Zusammenspiel von Konzipierung und Qualitätssicherung
  • Verbesserung der Projektdokumentation

Die Meilensteine dieses Projektes sind gemäß der Prozessschritte im V-Modell definiert und lauten:

  • Anforderungsdefinition
  • Funktionaler Entwurf
  • Technischer Systementwurf
  • Komponentenspezifikation
  • Programmierung
  • Komponententest/Unittest
  • Integrationstest/ Modultest
  • Systemtest
  • Abnahmetest

Anforderungsmanagement

Allgemeine Projektanforderungen

  • Entwurf eines mechatronischen Systems für die Helligkeit- und Türsteuerung eines Hühnerstalls
  • Erfassung der Helligkeit bzw. der Zeit für die Öffnung der Tür
  • Erfassung der Helligkeit bzw. der Zeit für die Helligkeitsteuerung
  • Erarbeiten einer alternativen Lösung für die manuelle Türsteuerung (unabhängig von der Helligkeit)
  • Vorstellung und Erarbeiten eines Konzepts für eine geregelte Bewegung der Tür
  • Erarbeitung eines Systems für die Energieversorgung
  • Softwareentwicklung nach HSHL Standard in SVN

Lastenheft

Detaillierte Anforderungen werden in einem Lastenheft in Form einer Excel-Tabelle zusammengefasst. Diese gliedert sich entsprechend des SysML-Standards in die folgenden Punkte:

  1. Projektziel
  2. Functional Requirements
  3. Physical Requirements
  4. Usability Requirements
  5. Business Requirements
  6. Performance Requirements
  7. Non-functional Requirements
  8. Extended Requirements
  9. Meilensteinen
ID Typ (I = Info, A = Anforderung) Kapitel Inhalt Ersteller Datum
REQ-000 I 0 Projektziel I. Mpidi Bita & D. Hermelingmeier 20.10.2020
REQ-001 A 0.1 Mit Sensorsystemen und Aktuatoren wird die Tierhaltung im Einklang mit den Tieren erleichtert und optimiert. I. Mpidi Bita & D. Hermelingmeier 20.10.2020
REQ-100 I 1 Functional Requirements I. Mpidi Bita & D. Hermelingmeier 20.10.2020
REQ-110 A 1.1 Ein mechatronisches System für die Helligkeits- und die Türsteuerung muss entworfen werden. I. Mpidi Bita & D. Hermelingmeier 20.10.2020
REQ-140 A 1.3 Der Zustand der Tür und der Lampe darf nur an bestimmten Zeiten im Automatik-Betrieb geändert werden. I. Mpidi Bita & D. Hermelingmeier 20.10.2020
REQ-150 A 1.4 Die Tür muss bei ausreichender Außenhelligkeit aufgehen und bei Dunkelheit wieder schließen. I. Mpidi Bita & D. Hermelingmeier 20.10.2020
REQ-200 I 2 Physical Requirements I. Mpidi Bita & D. Hermelingmeier 02.05.2020
REQ-210 A 2.1 Ein Gehäusekonzept muss erarbeitet werden. I. Mpidi Bita & D. Hermelingmeier 20.10.2020
REQ-210 A 2.2 Der ausgewählte Motor muss die Tür heben können. I. Mpidi Bita & D. Hermelingmeier 20.10.2020
REQ-230 A 2.3 Die Masse der Tür darf ein Gewicht von 5 kg nicht überschreiten. I. Mpidi Bita & D. Hermelingmeier 20.10.2020
REQ-240 A 2.4 Die Länge des Seils muss eine komplette Öffnung bzw. Schließung der Tür ermöglichen. I. Mpidi Bita & D. Hermelingmeier 20.10.2020
REQ-250 A 2.5 Die Zugfestigkeit des Seils muss dem Heben und Senken der Holztür standhalten. I. Mpidi Bita & D. Hermelingmeier 20.10.2020
REQ-300 I 3 Usability Requirements I. Mpidi Bita & D. Hermelingmeier 20.10.2020
REQ-310 A 3.1 Eine alternative Lösung zur manuellen Ansteuerung muss angeboten werden. I. Mpidi Bita & D. Hermelingmeier 20.10.2020
REQ-311 A 3.1 Es muss eine Möglichkeit bestehen, jederzeit die Tür zu öffnen bzw. zu schließen. I. Mpidi Bita & D. Hermelingmeier 20.10.2020
REQ-312 A 3.2 Es muss eine Möglichkeit bestehen, jederzeit die Beleuchtung an- bzw. auszuschalten. I. Mpidi Bita & D. Hermelingmeier 20.10.2020


REQ-400 I 4 Business Requirements I. Mpidi Bita & D. Hermelingmeier 20.10.2020
REQ-500 I 5 Performance Requirement I. Mpidi Bita & D. Hermelingmeier 20.10.2020
REQ-520 A 5.2 Der Motor darf sich maximal mit einer Geschwindigkeit von 9 rpm (rounds per minute) drehen. I. Mpidi Bita & D. Hermelingmeier 20.10.2020
REQ-600 I 6 Non functional Requirement I. Mpidi Bita & D. Hermelingmeier 20.10.2020
REQ-610 A 6.1 Toolanforderungen I. Mpidi Bita & D. Hermelingmeier 20.10.2020
REQ-611 A 6.1.1 Das Projekt geht bei der Entwicklung nach dem V-Modell vor. I. Mpidi Bita & D. Hermelingmeier 20.10.2020
REQ-613 A 6.1.3 Als Versionsverwaltungstool wird SVN oder Git eingesetzt. I. Mpidi Bita & D. Hermelingmeier 20.10.2020
REQ-620 A 6.2 Qualitätssicherung I. Mpidi Bita & D. Hermelingmeier 20.10.2020
REQ-620 A 6.2 Sowohl für die implementierte Software als auch für die Modelle müssen

geeignete Tests erstellt werden:

  • Unittests zum Testen der Komponenten
  • Integrationstests zum Testen der Module
  • Systemtests zum Testen des gesamten Modells
  • Abnahmetests für die Endabnahme des gesamten Projektes
I. Mpidi Bita & D. Hermelingmeier 20.10.2020
REQ-700 I 7 Extended Requirement I. Mpidi Bita & D. Hermelingmeier 20.10.2020
REQ-720 A 7.2 Die echte Uhrzeit muss für die Ansteuerung erfasst werden. I. Mpidi Bita & D. Hermelingmeier 20.10.2020
REQ-800 I 7 Meilensteine I. Mpidi Bita & D. Hermelingmeier 20.10.2020
REQ-810 A 8.1 Erstellung des Lastenhefts I. Mpidi Bita & D. Hermelingmeier 05.05.2020
044 A 4.2 Funktionaler und technischer Systemplan I. Mpidi Bita & D. Hermelingmeier 20.10.2020
045 A 4.3 Komponentenspezifikationen I. Mpidi Bita & D. Hermelingmeier 20.10.2020
046 A 4.4 Simulink/Modell und MATLAB-Parameterdatei und C++-Code I. Mpidi Bita & D. Hermelingmeier 20.10.2020
047 A 4.5 Komponententest in der Form eines Unittestberichts I. Mpidi Bita & D. Hermelingmeier 20.10.2020
048 A 4.6 Integrationstest in der Form eines Modultestberichts I. Mpidi Bita & D. Hermelingmeier 20.10.2020
049 A 4.7 Systemtest in der Form eines Systemtestberichts I. Mpidi Bita & D. Hermelingmeier 20.10.2020
049 A 4.7 Abnahmetest in der Form eines Wiki-Artikels I. Mpidi Bita & D. Hermelingmeier 20.10.2020

Tab.1: Auszug aus dem Lastenheft

Funktionaler Systementwurf

Der funktionale Systementwurf beinhaltet drei wesentliche Abschnitte:

  • FE-Gesamtsystem
  • Softwarearchitektur
  • Hardwarearchitektur

Aus diesem Entwurf wird eine BOM bzw. Stückliste der Bauteile für die Realisierung des Projektes ermittelt.

Gesamtsystem

Das Projekt "SmartFarm" gliedert sich gemäß Abbildung 7 in mehrere Bestandteile. Bei diesem Entwurf ist das Ziel das System in der Funktionalität abzugrenzen und
einen Projektrahmen zu definieren. Das Stallsystem/Gesamtsystem besteht aus zwei Subsystemen/Teilsystemen. In diesem Projekt wird die Helligkeits- und die Türsteuerung betrachtet (s. Abbildung 7 unten).

Bei der Helligkeitssteuerung wird eine Tageslichtlampe bei Dunkelheit für ausreichend Helligkeit im Stall sorgen. Wesentliche Anforderungen der Helligkeitssteuerung sind in der REQ-140 beschrieben. Das zweite Subsystem ist die Türsteuerung. Hier soll die Tür automatisch entsprechend REQ-110, REQ-230, REQ-240, REQ-250 und REQ-520 hoch und runterfahren. Beide Systeme sind sowohl abhängig von der realen Zeit als auch von Außenhelligkeit.

Abb. 7: Funktionaler Entwurf - Projekt SmartFarm (Funktionalität)


Softwarearchitektur

Im Folgenden wird die Softwarearchitektur des Systems beschrieben. Die Software spielt bei Embedded (eingebetteten) -Systemen eine wesentliche Rolle. Das Ziel hierbei ist die klare
und funktionsbasierte Abgrenzung von verschiedenen Softwarekomponenten. Diese Anforderungen basieren auf dem Einsatz von objektorientierter Programmierung.
Änderungen im Laufe des Projekts lassen sich einfach und schnell in die Software einbringen. Die Softwarearchitektur besteht aus folgenden Elementen:

  • Main-Funktion
  • Signalaufbereitung: Schnittstelle zwischen Sensoren und Software
  • Aktuatorausgabe: Schnittstelle zwischen Software und Aktuatoren
  • Türsteuerung
  • Helligkeitssteuerung

Die Klasse "Signalaufbereitung" bezieht sich auf die Sensoren des Systems. Hier werden die verschiedenen Sensoren beim Systemstart initialisiert. Während des Systembetriebs
werden alle Sensorsignale aufgenommen und zur Verfügung gestellt. Die Klasse "Aktuatorausgabe" leitet die Befehle an die Aktuatoren weiter. Die eigentlichen Automatisierungs-
funktionen werden in der jeweiligen Klasse "Tür- und Helligkeitssteuerung" zusammen gebracht. Die Main-Funktion ist das Herzstück des Programms. Hier wird der Programmabfluss durch Verweise
und verschiedene Funktionsaufrufe gesteuert.

Abb. 8: Softwarearchitektur - Projekt SmartFarm


Hardwarearchitektur

Eingabe bzw. Sensoren:

  • LDR: Helligkeitsaufnahme
  • Touch-Sensor: Manuelle Ansteuerung der Tür und der Lampe
  • Ultraschallsensor: Erfassung der Türposition
  • Kippschalter: Wechsel vom Betriebsmodus
  • RTC-Sensor: Angabe der echten Uhrzeit


Mikrocontroller: Systemsteuereinheit


Ausgabe bzw. Aktuatoren:

  • UV-Lampe: erzeugt künstliches Tageslicht im Stall
  • Motor: öffnet oder schließt die Tür
Abb. 9: Funktionaler Entwurf - Projekt SmartFarm


Stückliste

No. Artikel Link


1 Lampe https://www.obi.de/e14-led/osram-led-lampe-classic-t-form-klar-e14-2-8w-250-lm-tageslicht-eek-a-/p/8471617


2 LDR-Fotowiderstand https://www.funduinoshop.com/epages/78096195.sf/de_DE/?ObjectID=54561679


3 RTC-Sensor https://www.az-delivery.de/products/ds3231-real-time-clock?_pos=1&_sid=4ea98dcb7&_ss=r
4 Relais https://www.funduinoshop.com/epages/78096195.sf/de_DE/?ObjectPath=/Shops/78096195/Products/A-5-4


5 DC-Motor https://www.amazon.de/gp/product/B07LF7V1Y3/ref=ppx_yo_dt_b_asin_title_o01_s00?ie=UTF8&psc=1


6 Ultraschallsensor https://www.funduinoshop.com/epages/78096195.sf/de_DE/?ObjectID=50294801


7 H-Bridge https://www.reichelt.de/de/de/entwicklerboards-motodriver2-l298n-debo-motodriver2-p202829.html?PROVID=2788&gclid=EAIaIQobChMI5tjlx43D7AIVA-h3Ch1_bwO5EAQYASABEgJe9_D_BwE&&r=1


8 2x Touchsensor https://www.funduinoshop.com/epages/78096195.sf/de_DE/?ObjectID=128598580
9 2x Kippschalter https://www.amazon.de/Rovtop-Kippschalter-beleuchtet-Schalter-Wippschalter/dp/B079L4K7TF/ref=pd_sbs_4?pd_rd_w=1AiWR&pf_rd_p=ad79fb78-2eb6-4fd8-b228-cb6e6b4589d9&pf_rd_r=6GW2EA97VRAGX5AG4KGQ&pd_rd_r=bbab490b-49ca-425d-9b36-bb57fb166b01&pd_rd_wg=ufN1J&pd_rd_i=B079L4K7TF&psc=1

Technischer Systementwurf

Im technischen Systementwurf (s. Abbildung 10) wird der Systemplan entworfen. Dabei werden die Komponenten und Schnittstellen in den einzelnen Modulen festgelegt. Der Entwurf lässt sich weiter in Hardware (s. Abbildung 10) und Software (s. Abbilung 11) unterteilen.

TE-Software

Abb. 10: Funktionaler Entwurf - Projekt SmartFarm


TE-Hardware

Abb. 11: Funktionaler Entwurf - Projekt SmartFarm


Software-Hardware-Schnittstelle

Die Hardware-Software-Schnittstellen sind die Module "Sensorsignalaufbereitung" und "Aktuatorausgabe". Damit die Software das richtige Element steuert, wird eine sogenannte Parameter-Datei erstellt.
In dieser ist der Anschluss der Pins an die Bauteile festgelegt.

#ifndef Parameter_h
#define Parameter_h

#include "Arduino.h"
// ****************************************************************
// H-Brige
// ****************************************************************
#define _HBRIDGE_PWM_ENA_PIN_ 10
#define _HBRIDGE_DIG_IN1_PIN_ 9
#define _HBRIDGE_DIG_IN2_PIN_ 8

// *****************************************************************
// Ultraschall-Sensor
// *****************************************************************
#define _US_DIG_TRIG_PIN_ 7
#define _US_DIG_ECHO_PIN_ 6

// *****************************************************************
// Touch-Sensoren
// *****************************************************************
#define _TOUCH_DIG_TUER_PIN_ 3
#define _TOUCH_DIG_LAMPE_PIN_ 4

// *****************************************************************
// Fotowiderstand 
// *****************************************************************
#define _FOTOWIDERSTAND_ANA_PIN_ A0

// *****************************************************************
// Kippschalter
// *****************************************************************
#define _KIPPSCHALTER_DIG_TUER_PIN_ 12
#define _KIPPSCHALTER_DIG_LAMPE_PIN_ 13

// *****************************************************************
// Relais
// *****************************************************************
#define _RELAIS_DIG_LAMPE_PIN_ 5

// *****************************************************************
// Real-Time-Clock-Sensor
// *****************************************************************
// #define _RTC_ANA_SDA_PIN_ A4
// #define _RTC_ANA_SCL_PIN_ A5

#endif

Komponentenspezifikation

Bei der Komponentenspezifikation werden die Aufgaben und das Verhalten jeder Komponente definiert. Darüber hinaus wird der innere Aufbau mit den Schnittstellen jeder Komponente festgestellt.
Der Aufbau gliedert sich in die Software- und Hardwarespezifikationen.

Softwarespezifikationen

Betriebsmodis - Stallsystem

Wird das System mit Spannung versorgt und eingeschaltet, befindet sich das System im Betriebszustand. Es kann zwischen einem automatischen und manuellen Betrieb gewählt werden. Der Zustandsübergang wird durch
einen Kippschalter gewährleistet. Beide Systeme sind unabhängig voneinander implementiert. Das heißt, dass die Tür auch manuell runtergefahren werden kann, wenn sich die Lichtsteuerung im automatischen Zustand befindet. Leuchtet das Lämpchen am Kippschalter, befindet sich das jeweilige Subsystem im Modus "Automatik". Dies ist in Abbildung 47 im Ergebnis dargestellt.

Abb. 12: State Machine - Betriebsmodis des Stall-Systems


Tageslichtabfrage mit Hysterese

Die Tageslichtabfrage gibt den Status der Außenhelligkeit an. Als Status existiert "Hell" [1] oder "Dunkel" [0] in Abhängigkeit von einem Schwellwert.

Abb. 13: State Machine - Tageslichtabfrage mit Hysterese


Zur Schwellwertbildung wurden mehrere Helligkeitsmessungen direkt im Stall ausgeführt. Der Helligkeitswert ist abhängig vom Wetter (Sonnenstand, Bewölkung etc.). In dem Diagramm 14 unten sieht man die Helligkeitswerte über die Zeit an einem bewölkten Tag aufgetragen. Für einen perfekten Schwellwert werde die Werte der verschiedenen Tage verglichen. Bei diesen Systemanforderungen liegt ein geeigneter Schwellwert bei 300 mit einer Hysterese (Offset) von 50.

Abb. 14: Messdaten von der Helligkeit über den Tag:


Spezifikation der Türsteuerung

Im Folgenden werden alle Zustandsverhalten der Türsteuerung dargestellt.

Türstatus - Manuell-Betrieb

Hier handelt es sich um die Türsteuerung im manuellen Betrieb. Der Zustandswechsel wird anhand des Tür-Touch-Sensors ausgeführt.

Abb. 15: State Machine - manueller Betrieb der Türsteuerung


Zeiterfassung für die Türsteuerung

Im Automatikbetrieb darf sich die Tür nur an bestimmten Zeiten bewegen. Eine Bewegung der Tür ist ausschließlich zwischen 5 Uhr und 23 Uhr möglich. Außerhalb dieser Zeitspanne darf sich die Tür im Automatikbetrieb nicht bewegen.

Abb. 16: State Machine - Zeiterfassung für die Zustimmung der Türsteuerung


Türstatus - Automatikbetrieb

Im Automatikbetrieb muss die Tür bei ausreichender Dunkelheit zufahren und bei ausreichender Helligkeit wieder auffahren. Die (untere bzw. obere) Position der Tür wird anhand eines Ultraschallsensors erkannt.
Der Zustand der Tür wird anhand der folgenden Definition bestimmt:

  • 40 ± 1 cm Tür ist zu
  • 10 ± 1 cm Tür ist auf


Helligkeitszustand Zeitflag Türbewegung
dunkel Tür darf sich bewegen Bewegung nach unten
dunkel Tür darf sich nicht bewegen -
hell Tür darf sich bewegen Bewegung nach oben
hell Tür darf sich nicht bewegen -
Abb. 17: State Machine - Türsteuerung im Automatikbetrieb


Spezifikation der Lampensteuerung

Im Folgenden wird das Zustandsverhalten der Helligkeitssteuerung dargestellt.

Lampenstatus - manueller Betrieb

Hier handelt es sich um die Helligkeitssteuerung im manuellen Betrieb. Der Zustandswechsel wird mit dem Lampe-Touch-Sensor ausgeführt.

Abb. 18: State Machine - manueller Betrieb der Lampensteuerung


Zeiterfassung für die Helligkeitssteuerung

Im Automatikbetrieb geht das Licht nur zu bestimmten Zeiten an. Im Stall muss es ganzjährig von mindestens 7 Uhr bis mindestens 19 Uhr hell sein (s. REQ 141).

Abb. 19: State Machine - Zeiterfassung für die Zustimmung der Lampensteuerung


Lampenstatus - Automatikbetrieb

Die Lampensteuerung bzw. Helligkeitssteuerung im Automatikbetrieb ergibt die folgenden Zustände. Die Lampe darf nur angehen, wenn es dunkel genug ist (s. Schwellwert) und das Lampenflag auf dem vorherigen Zustandsdiagramm ist.

Helligkeitszustand Lampenflag Türbewegung
dunkel 0 Licht aus
dunkel 1 Licht an
hell 0 Licht aus
hell 1 Licht aus
Abb. 20: State Machine - Lampensteuerung im Automatikbetrieb


Hardwarespezifikationen

In den folgenden Tabellen werden die Hardware-Komponentenspezifikationen von einigen wichtigen Hardware-Komponenten aufgeführt.

DC Motor

ID Kapitel Inhalt
KS-MO-000 1 Aufgabe
Öffnen und Schließen der Tür über eine Seilwinde
KS-MO-001 2 Schnittstelle
Ansteuerung über die H-Bridge
KS-MO-002 3 Technische Daten
DC-Motor
12 V Spannungsversorgung
Geschwindigkeit: 6 rpm
Dauerstrom = 0,82 A; Leerlaufstrom = 0,12 A

Ultraschallsensor

ID Kapitel Inhalt
KS-US-000 1 Aufgabe
Abstandsmessung zur Tür und Bestätigung der Türposition
KS-US-001 2 Schnittstelle
VCC
Trig
Echo
GND
KS-US-002 3 Technische Daten und Messverfahren
Triangulation
Laufzeit
KS-US-003 4 Berechnung
Messung der Entfernung über Ultraschallwellen

LDR-Fotowiderstand

ID Kapitel Inhalt
KS-LDR-000 1 Aufgabe
Tageslicht bzw. Helligkeitsaufnahme
KS-LDR-001 2 Schnittstelle
KS-LDR-002 3 Technische Daten und Messverfahren
Widerstandsmessung
KS-LDR-003 4 Berechnung
Gleichung des Spannungsteilers aufstellen

RTC-Zeitsensor

ID Kapitel Inhalt
KS-RTC-000 1 Aufgabe
Messung der echten Uhrzeit in Stunden
KS-LDR-001 2 Schnittstelle - Pins
VCC
GDN
SDA - Serial Data Pin
SCL - Serial Clock Pin
SQW - Square Wave Output Pin
32K - 32 K Oscillator

Implementierung

In diesem Abschnitt erfolgt die Softwareumsetzung. Hierfür wird zunächst ein Programmablaufplan erstellt. Des Weiteren wird das Gesamtsystem im MATLAB/Simulink modelliert. Abschließend erfolgt
das Codieren mit der Hochsprache C/C++.

Mechanik und Konstruktion

Das Gesamtsystem wird direkt im Hühnerstall implementiert. Diese Umweltbedingungen bestimmen die Anforderungen an das System. Die verwendeten Aktoren und Sensoren müssen für eine lange Lebensdauer und eine fehlerfreie Funktionalität vor Staub und Schmutz geschützt werden. Diesbezüglich wurde ein Gehäuse konstruiert, dass die verwendete Schaltung und die Bauteile schützt (s. Anhang). Die additive Fertigung erfolgte in einem 3D-Drucker vom Hersteller AnyCubic der Hochschule Hamm-Lippstadt.

Gesamtsystem

Alle Bauteile werden in einem schützenden Gehäuse an der Stallwand positioniert. Dazu zählen der Arduino, die Platinen, der RTC-Sensor, das Relais und die H-Bridge. Der Deckel ist durch Stifte mit der Boxunterseite verbunden und kann schnell und flexibel abgenommen werden, um am System zu operieren. Öffnungen am Gehäuse dienen zum Anschluss der außen liegenden Sensoren und Aktoren (Schnittstelle).

Arduino

Auch der Arduino wird durch ein Gehäuse[3] (s. Abbildung 23) geschützt. Alle verwendeten Anschlüsse liegen frei, sodass der Arduino einfach angeschlossen werden kann. Durch den modularen Aufbau kann ein defekter oder anderer Arduino schnell gewechselt bzw. neu angeschlossen werden.

Abb. 23: Gehäuse für den Arduino


Ultraschallsensor

Das folgende Gehäuse positioniert und schützt den Ultraschallsensor im Hühnerstall (s. Abbildung 24 und 25). Er befindet sich links vom DC Motor. Der innen liegende Sensor wird durch zwei Löcher zum Emittieren der Ultraschallwellen fixiert. Der Deckel ist mit vier Schrauben befestigt.

Lichtsensor

Für eine perfekte Funktionsausführung muss der Fotowiderstand (LDR) außen am Stallangebracht werden. Dies wird durch die folgende Konstruktion in Abbildung 26 und den fertigen 3D-Druck in Abbildung 27 ermöglicht. Die durchsichtige Plastikkuppe schützt den Sensor vor Staub ohne das Messergebnis zu verfälschen.

Stromversorgung im Stall

Für die Funktionsausführung des Gesamtsystems bedarf es einer Spannungsversorgung der einzelnen Komponenten. Dafür wurden mehrere Steckdosen im Stall angebracht. In Abbildung 28 ist die Verkabelung dargestellt.

Abb. 28: Stromanschluss im Stall


DC Motor

Um die Tür bestmöglich anzuheben wurde ein DC-Motor mit einem Schneckengetriebe ausgewählt. Diese Getriebeart verfügt über ein starkes Drehmoment. Die vergleichsweise langsame Drehgeschwindigkeit beträgt 5 rpm (rounds per minute), damit die Tiere beim Schließen der Tür nicht verletzt werden können. Die Funktionsweise ist mit einer Seilwinde zu vergleichen. Der Motor wird mit 12 V von der Hauptplatine betrieben. Die Anbringung und Konstruktion sind in der folgenden Abbildung 29 dargestellt.

Abb. 29: Anbringung und Konstruktion Motor


Tageslichtlampe

Die Tageslichtlampe sorgt für die Helligkeit im Stall. Mit einer Wellenlänge von 550 nm wir der Tag künstlich verlängert. Die Lame wird über 230 V von der Hauptplatine betrieben.

Abb. 30: Anbringung der Tageslichtlampe


Kippschalter zur Betriebsauswahl

Über zwei Kippschalter kann der automatische oder manuelle Modus der Licht- und Türsteuerung getrennt ausgewählt werden. Das Lämpchen gibt dem Halter Auskunft über den ausgewählten Modus (s. Abbildung 31). Die Kippschalter werden mit 12 V von der Hauptplatine betrieben. Aufgrund des Spannungswerts sind zwei Spannungsteiler auf der Nebenplatine aufgebracht, damit die 5 V Ausgangsspannung für das Auslesen des Arduinos erreicht werden.

Abb. 31: Anbringung der Kippschalter


Entwicklung eines Prototypen

Das System wird anhand des V-Modells entwickelt. Um die Entwurf-, Implementierungs- und Testphase bestmöglich umzusetzen, wurde ein Prototyp entwickelt. Dieser bietet die Möglichkeit viele Dinge auszuprobieren und zu testen, bevor die finale Version im Stall eingebaut wird. Dadurch können schnell einfache Fehler (s. "Kinderkrankheiten") entdeckt werden. Der Prototyp wurde erst in Abbildung 32 skizziert und anschließend aufgebaut (s. Abbildung 44).

Abb. 32: Skizze der Prototyp-Vorrichtung


Entwicklung der Hilfsplatine

Hauptplatine

Um das ganze System modular zu trennen, wird neben den Aktoren und Sensoren auch das Breadbord vom Mikrocontroller getrennt. Alle analogen und digitalen I/O Pins werden auf die Platine übertragen. Es existieren viele VCC 5V und GND Anschlüsse für den Anschluss der Sensoren und Aktuatoren. Zum Anschluss der Tageslichtlampe existiert eine Spannungsversorgung von 230 V und für den Motor von 12 V. Da die 230 V Spannung einen risikoreichen Anschluss darstellt, stellt dies nur eine Übergangslösung dar. Der Motor wird über die zwei Outputs in der Motorschaltung gesteuert. Für die Schaltung der Helligkeitserfassung wird ein Widerstand mit 20 Ohm verwendet, der in der Hilfsplatine direkt mit verlötet ist. Wie eingangs im Brainstorming (s. Abbildung 2) visualisiert, existieren noch weitere Anschlussmöglichkeiten für die Subsysteme im Gesamtsystem "SmartFarm" (s. Reserve). Alle Bestandteile der Platine sind in den folgenden beiden Abbildungen 33 und 34 von der Ober- und Unterseite dokumentiert.

Nebenplatine

Neben der Hauptplatine wurde eine Nebenplatine für die Kippschalter konstruiert. Die beiden Kippschalter ermöglichen einen Wechsel zwischen dem automatischen und manuellen Betrieb der Lampe und der Tür. Sie werden mit 12 V betrieben. Da der Arduino für die Signalverarbeitung eine Spannung von 5 V benötigt, ist ein Spannungsteiler notwendig. In der Abbildung 35 und 36 ist die Nebenplatine von der Ober- und Unterseite visualisiert.

Programmablaufplan

Der Programmablaufplan wird mittels eines Activity-Diagramms nach dem SysML-Standard ermittelt.

Türsteuerung im Automatik-Betrieb

Die Sensorsignale "Tageslichtaufnahme" und "Uhrzeit" werden jeweils mit den Funktionen GetHelligkeit und GetZeit erfasst. Das Signal wird anschließend in das Helligkeitszustand-Statediagramm weitergegeben. Das Statediagramm wird Auskunft darüber geben, ob es draußen hell oder dunkel ist. Das Zeitsignal wird in dem Zustand "Zeiterfassung für die Tür"-Statediagramm geführt. Dieser gibt Auskunft darüber, ob das Subsystem ausführbar ist. Anhand beider Signale wird die durchzuführende Aktion gemäß dem Türstatus-Statediamme entschieden. Die Funktion Türsteuerung sammelt zusätzlich Daten von dem Ultraschallsensor, damit der Motor und damit die Tür rechtzeitig anhält.


Abb. 37: State Machine - Betriebsmodis des Stall-Systems


Helligkeitssteuerung im Automatik-Betrieb

Analog zur Türsteuerung existiert die Lichtsteuerung.

Abb. 38: State Machine - Betriebsmodis des Stall-Systems


Modellierung und Simulation des Stallsystems in MATLAB-Simulink

Modelle werden verwendet, um die Idee darzustellen. Das Modell ist ein Abbild der Realität. Modelle helfen dabei:

  • ein System zu visualisieren,
  • ein System zu dokumentieren und
  • Programmcode oder einen Coderahmen aus den Modelldaten zu generieren.

Für die Modellierung wird MATLAB/Simulink verwendet. Zu sehen sind die verschiedenen Teile der Softwarearchitektur mit der Sensorsignalaufbereitung. Dazu zählt der Sensorblock, beide Steuerungsfunktionen und
die Aktuatorausgabe. Im C/C++-Code wird diese Ausgabe in einer eigenen Klasse programmiert. Aufgrund der Benutzerfreundlichkeit wurde die Sensoreingabe mit dem MATLAB-Dashboard realisiert. Dadurch kann der Entwickler den Code einfach programmieren und verschiedene Zustände simulieren und testen.

Abb. 39: Modellierung des Stallsystems mit MATLAB/Simulink



Abb. 40: Modellierung der Türsteuerung entsprechend Programmablaufplan



Abb. 41: Modellierung der Helligkeitssteuerung entsprechend Programmablaufplan


Implementierung des Stallsystems in C/C++

Bibliotheken-Einbindung und Definition der Variablen

// ********************************************************************************************
// Bibliotheken einbinden
// ********************************************************************************************
#include "Parameter.h"
#include "Sensor_Signalaufbereitung.h"
#include "Tuersteuerung.h"
#include "Helligkeitssteuerung.h"
#include "Aktuator_Signalausgabe.h"
#include "Wire.h"

// ********************************************************************************************
// Variablen Definition
// ********************************************************************************************
hSENSOR_SIGNAL SenSig;
hAKTUATOR_AUSGABE AktSig; 
hHELLIGKEITSSTEUERUNG Helligkeitssteuerung; 
hTUERSTEUERUNG Tuersteuerung; 

Main-Funktion

//*********************************************************************************************
// SETUP-Funktion: 
// the setup function runs once when you press reset or power the board
//*********************************************************************************************
void setup(){
    Serial.begin(9600); 
    Wire.begin();
}

//*********************************************************************************************
// LOOP-Funktion: 
// the loop function runs over and over again forever
//*********************************************************************************************
void loop(){
    
    // *************************************************************
    // Start - Helligkeitssteuerung

    Helligkeitssteuerung.StartHS(SenSig, AktSig); 
    // *************************************************************

    // *************************************************************
    // Start - Helligkeitssteuerung

    Tuersteuerung.StartTS(SenSig, AktSig);
    // *************************************************************
    Serial.println(' ');
} 

Türsteuerung

class hTUERSTEUERUNG
{
private:
    // ************************************************************
    // Zeiterfassung für die Türsteuerung (State Machine)
    // ************************************************************
    bool stmZeitErfassungTuer(unsigned int nStunden);
    
    // ************************************************************
    // Entscheidung Türbewegung im Automatik-Betrieb
    // ************************************************************************
    int Entscheidung_Tuerbewegung_Automatik(bool bTuerFlag, bool bHelligkeitszustand);
    
    // ************************************************************************
    // Türsteuerung Manuellen und Automatik-Betrieb (State Machine)
    // ************************************************************************
    int TuerBetrieb(bool bTuerBewegungAuto, bool bTouchTuer, int nAbstand, bool bKippschalter);
    
    // ************************************************************************

public:
    hTUERSTEUERUNG();
    // ************************************************************************
    // Abfrage Türzustand
    // ************************************************************************
    int getTuerZustand();

    // ************************************************************************
    // Abfrage Betrieb
    // ************************************************************************
    // bool getTuerBetrieb();

    // ************************************************************************
    // Start-Funktion
    // ************************************************************************
    void StartTS(hSENSOR_SIGNAL &SenSig, hAKTUATOR_AUSGABE &AktSig);

    // ************************************************************************
};

Helligkeitssteuerung


class hHELLIGKEITSSTEUERUNG{    
    private:
    // ************************************************************
    // Zeiterfassung für die Helligkeitssteuerung (State Machine)
    // ************************************************************
    bool stmZeitErfassungLampe(int nStunden);

    // ************************************************************
    // Entscheidung Lampenzustand im Automatik-Betrieb
    // ************************************************************
    int Entscheidung_Lampenbewegung_Automatik(bool bLampenFlag, bool bHellZustand);

    // ************************************************************************
    // Helligkeitssteuerung Manuellen und Automatik-Betrieb (State Machine)
    // ************************************************************************
    bool LampenBetrieb(bool bLampeZustandAuto, bool bTouch_Lampe, bool bKippschalterHelligkeit); 
    // ************************************************************************

    // *************************************************************************
    // Initialisierung der Lampensteuerung
    // *************************************************************************
    public: 
    hHELLIGKEITSSTEUERUNG();

    // ************************************************************************
    // Abfrage Lampenzustand
    // ************************************************************************
    bool getTuerZustand(); 

    // ************************************************************************
    // Start-Funktion
    // ************************************************************************
    void StartHS(hSENSOR_SIGNAL& SenSig, hAKTUATOR_AUSGABE& AktSig);

    // ************************************************************************
}; 

Sensor-Signalaufbereitung

class hSENSOR_SIGNAL{
    private:
    // ************************************************************
    // Ultraschall-Sensor
    // ************************************************************
    long Berechnung_Entfernung();

    // ************************************************************
    // Zeitsensor
    // ************************************************************
    int leseZeitvomRTC();

    public:
    // ************************************************************
    // Initialisierung alle Sensoren
    // ************************************************************
    hSENSOR_SIGNAL(){
        // Touch-Sensor
        pinMode(_TOUCH_DIG_TUER_PIN_, INPUT); 
        pinMode(_TOUCH_DIG_LAMPE_PIN_, INPUT); 

        // Ultraschall
        pinMode(_US_DIG_ECHO_PIN_, INPUT); 
        pinMode(_US_DIG_TRIG_PIN_, OUTPUT);

        // Fotowiderstand
        pinMode(_FOTOWIDERSTAND_ANA_PIN_, INPUT); 
        nSchwellwert = 300;
        nOffset = 50;   
        StateHelligkeit = S1_DUNKEL; 
        bHelligkeitszustand = 0; 
        
        // Kippschalter
        //pinMode(_TOUCH_DIG_TUER_PIN_, INPUT); 
    };  
    // ************************************************************

    // ***********************************************************
    // Abfrage der Sensoren
    // ***********************************************************
    // Touch-Sensoren
    // ***********************************************************
    bool getTouchTuer();
    bool getTouchLampe();

    // ***********************************************************
    // Ultraschallsensor
    // ***********************************************************
    long getAbstand();

    // ***********************************************************
    // Fotowiderstand
    // ***********************************************************
    unsigned int getHeligkeitRoh();
    bool getHelligkeit();

    // ***********************************************************
    // Real-Time-Sensor 
    // ***********************************************************
    unsigned int getZeitStunden();

    // ************************************************************
    // Kippschalter
    // ***********************************************************
    bool getKippschalterTuer();
    bool getKippschalterLampe();
    // ************************************************************

}; 

Aktuator-Signalausgabe

class hAKTUATOR_AUSGABE{
    public: 
    // ************************************************************
    // Initialisierung der Aktuatoren 
    // ************************************************************
    hAKTUATOR_AUSGABE(){
        pinMode(_RELAIS_DIG_LAMPE_PIN_, OUTPUT);
        pinMode(_HBRIDGE_DIG_IN1_PIN_, OUTPUT);
        pinMode(_HBRIDGE_DIG_IN2_PIN_, OUTPUT);
        pinMode(_HBRIDGE_PWM_ENA_PIN_, OUTPUT);
    }; 

    // ************************************************************
    // Signalausgabe zu den Aktuatoren
    // ************************************************************
    // UV-Lampe 
    // ************************************************************
    bool getUVLampeZustand(); 
    void setUVLampeZustand(bool LampenZustand);
    // ************************************************************
    // Stall Tür
    // ************************************************************
    int getTuerZustand(); 
    
    void setTuerZustand(bool bMotorZustand, bool bMotorRichtung);
    // ************************************************************
}; 

Testphase

Komponententest

Testfall-ID Testfall-Name Anforderungs-ID Vorbedingungen und Eingänge Aktionen Erwartetes Ergebnis Ergebnis Bewertung Kommentar
KT-HW-001 RTC - Erfassung der echten Uhrzeit REQ-141, REQ-142, REQ-720, KS-RTC-000 I2C-Bus verbunden Messwert lesen 17 Uhr 17 Uhr i. O.
KT-HW-002 LDR - Helligkeitserfassung vom Tageslicht um 4 Uhr morgens REQ-111, REQ-112, KS-LDR-000 Richtige Aufstellung und Berechnung der Spannungsteilergleichung Messwert auslesen Hohes Analogsignal nah an 1023 Hohes Analogsignal nah an 1023 i. O.
KT-HW-003 LDR - Helligkeitserfassung vom Tageslicht um 4 Uhr morgens REQ-111, REQ-112, REQ-150, KS-LDR-000 Richtige Aufstellung und Berechnung der Spannungsteilergleichung Messwert auslesen Niedriges Analogsignal nahe der Null Niedriges Analogsignal nahe der Null i. O.
KT-HW-004 US-Sensor - Distanzmessung in cm KS-US-000 Richtige Berechnung der Laufzeit Messwert auslesen 10 cm 10 cm i. O.
KT-HW-007 Motor - Öffnen und Schließen einer 5 kg Tür über eine Seilwinde REQ-001, REQ-230, REQ-250, REQ-520 Seil über die Umlenkrolle richtig einrollen PWM-Signal über H-Bridge schicken Hochheben und Senken der Tür je 1 Sek. Hochheben und Senken der Tür je 1 Sek. i. O.

Tab. 4: Ausschnitt aus Komponententest der Hardwarekomponente


Testphase der Konstruktion und Mechanik im Stall

In dieser Testphase wird die Lampen- und Türsteuerung manuell betätigt und getestet. Die Tageslichtlampe ist hell genug, um den Stall auszuleuchten. Die Führung der Tür bewegt sie problemlos nach oben und unten. Der Motor hat genug Kraft, um die Tür nach oben und unten zu bewegen. Die folgenden beiden Abbildungen 42 und 43 stellen den Aufbau des Testsystems dar.

Abb. 42: Komponententest Lampe


Abb. 43: Komponententest Tür


Integrationstest

Test - Betriebsmoduswechsel Lampensteuerung

using namespace std;

int ZustandLampenbetrieb = S2_AUTOMATIK_BETRIEB_HELLIGKEIT;
int ZustandLampeManuelinnen = S0_NEUTRAL; 
bool bLampenStatus = 0; 
int ZustandLampeAutomatikinnen = S0_NEUTRAL; 

bool LampenBetrieb(bool bLampeZustandAuto, bool bTouch_Lampe, bool bKippschalterHelligkeit);

int main() {
    int touch = 0;
    int entscheidung; 
    for (int i = 1; i < 10; i++) {
        cin >> entscheidung;
        LampenBetrieb(entscheidung, touch, 1);
    }
    //LampenBetrieb(0, 0, 1);

    LampenBetrieb(0, 0, 0);

    // LampenBetrieb(0, 0, 1);

    LampenBetrieb(0, 0, 0);

    system("pause"); 
    return 0; 
}


Testfall-ID Testfall-Name Anforderungs-ID Vorbedingungen und Eingänge Aktionen Erwartetes Ergebnis Ergebnis Bewertung Kommentar
IT-SW-HS-001 Zustandswechsel - Automatik zu Manuell REQ-310, REQ-312 Kippschalter mit 12 V versorgt Schalter kippen Wechsel von Automatik auf Manuell Wechsel von Automatik auf Manuell i. O.
IT-SW-HS-002 Zustandswechsel - Manuell auf Automatik REQ-310, REQ-312 Kippschalter mit 12 V versorgt Schalter kippen Wechsel von Manuell auf Automatik Wechsel von Manuell auf Automatik i. O.


Tab. 4: Ausschnitt aus Integrationstest für den Lampenbetrieb

Betriebsmoduswechsel-Test - Türsteuerung

int main() {
    // ****************************************
    // Initialisierung der nötigen Parametern 
    // ****************************************

    bool bTuerBewegungAuto = false;
    bool bTouchTuer = false;
    int nAbstand = 10; // in [cm] 
    bool bKippschalter = false;


    // ****************************************
    // Test - Wechsel Automatik/Manuel-Betrieb
    // ****************************************
    cout << "*********************************************************************************" << endl; 
    cout << "Test - Wechse Automatik / Manuel - Betrieb" << endl;
    cout << "------------------------------------------" << endl;
    
    for (int i = 1; i <= 10; i++){

        if (i % 2 == 0) {
            bKippschalter = false;
        }
        else {
            bKippschalter = true;
        }
           

        cout << "Input: Kippschalter = " << bKippschalter << endl; 

        for (int j = 1; j <= 5; j++) {
            TuerBetrieb(bTuerBewegungAuto, bTouchTuer, nAbstand, bKippschalter); 
        }
        cout << endl;
    }
    cout << "******************************************************************************" << endl;

    // ***********************************************
    // Test im manuellen Betrieb
    // ***********************************************
    // Manueller Betrieb einschalten
    bKippschalter = false;


    // ***********************************************
    // Test im automatischen Betrieb
    // ***********************************************
    // Manueller Betrieb einschalten

    system("pause"); 
    return 0; 
}


Testfall-ID Testfall-Name Anforderungs-ID Vorbedingungen und Eingänge Aktionen Erwartetes Ergebnis Ergebnis Bewertung Kommentar
IT-SW-TS-001 Zustandswechsel - Automatik auf Manuell REQ-310, REQ-311 Kippschalter mit 12 V versorgt Schalter kippen Wechsel von Automatik auf Manuell Wechsel von Automatik auf Manuell i. O.
IT-SW-TS-002 Zustandswechsel - Manuell auf Automatik REQ-310, REQ-311 Kippschalter mit 12 V versorgt Schalter kippen Wechsel von Manuell auf Automatik Wechsel von Manuell auf Automatik i. O.


Tab. 4: Ausschnitt aus Integrationstest für den Türbetrieb

Ergebnis

ID Typ (I = Info, A = Anforderung) Kapitel Inhalt Status Kommentar
REQ-000 I 0 Projektziel erfüllt
REQ-001 A 0.1 Mit Sensorsystemen und Aktuatoren wird die Tierhaltung im Einklang mit den Tieren erleichtert und optimiert. erfüllt
REQ-100 I 1 Functional Requirements erfüllt
REQ-110 A 1.1 Ein mechatronisches System für die Helligkeits- und die Türsteuerung muss entworfen werden. erfüllt
REQ-140 A 1.3 Der Zustand der Tür und der Lampe darf nur an bestimmten Zeiten im Automatik-Betrieb geändert werden. erfüllt
REQ-150 A 1.4 Die Tür muss bei ausreichender Außenhelligkeit aufgehen und bei Dunkelheit (s. Schwellwert) schließen. erfüllt
REQ-200 I 2 Physical Requirements erfüllt
REQ-210 A 2.1 Ein Gehäusekonzept muss erarbeitet werden. erfüllt
REQ-210 A 2.2 Der ausgewählte Motor muss die Tür anheben können. erfüllt
REQ-230 A 2.3 Die Masse der Tür darf ein Gewicht von 5 kg nicht überschreiten. erfüllt
REQ-240 A 2.4 Die Länge des Seils muss eine komplette Öffnung bzw. Schließung der Tür ermöglichen. erfüllt
REQ-250 A 2.5 Die Zugfestigkeit des Seils muss dem Heben und Senken der Holztür standhalten. erfüllt
REQ-300 I 3 Usability Requirements erfüllt
REQ-310 A 3.1 Eine alternative Lösung zur manuellen Ansteuerung muss angeboten werden. erfüllt
REQ-311 A 3.1 Es muss eine Möglichkeit bestehen, jederzeit die Tür zu öffnen bzw. zu schließen. erfüllt
REQ-312 A 3.2 Es muss eine Möglichkeit bestehen, jederzeit die Beleuchtung an- bzw. auszuschalten. erfüllt


REQ-400 I 4 Business Requirements x
REQ-500 I 5 Performance Requirement erfüllt
REQ-520 A 5.2 Der Motor darf sich maximal mit einer Geschwindigkeit von 9 rpm drehen. erfüllt Die Tür bewegt sich mit einer konstanten Geschwindigkeit von 5 rpm.
REQ-600 I 6 Non functional Requirement erfüllt
REQ-610 A 6.1 Toolanforderungen erfüllt
REQ-611 A 6.1.1 Das Projekt geht bei der Entwicklung nach dem V-Modell vor. erfüllt
REQ-613 A 6.1.3 Als Versionsverwaltungstool wird SVN oder Git eingesetzt. erfüllt
REQ-620 A 6.2 Qualitätssicherung erfüllt
REQ-620 A 6.2 Sowohl für die implementierte Software als auch für die Modelle müssen geeignete Tests erstellt werden:
  • Unittests zum Testen der Komponenten
  • Integrationstests zum Testen der Module
  • Systemtests zum Testen des gesamten Modells
  • Abnahmetests für die Endabnahme des gesamten Projektes
erfüllt
REQ-700 I 7 Extended Requirement erfüllt
REQ-720 A 7.2 Die echte Uhrzeit muss für die Ansteuerung erfasst werden. erfüllt
REQ-800 I 7 Meilensteine erfüllt

Als Vorinstallation wurde ein Stromanschluss mit mehreren Steckdosen im Stall angebracht. Ferner ist die Mechanik der Tür für ein manuelles Öffnen und Schließen eingebaut. Für die Lichtsteuerung befindet sich eine angeschlossene Tageslichtlampe im Stall. Das Ergebnis ist auf den folgenden Bildern zu erkennen.

Es existiert ein fertiger und funktionstüchtiger Prototyp. Dieser kann baugleich in den Hühnerstall integriert werden. Im automatischen Modus öffnet und schließt sich die Tür im Tageslauf abhängig von der Helligkeit und Zeit und ermöglicht den Tieren Zugang zum Außengehege für eine artgerechte Haltung. Des Weiteren sorgt die Lichtsteuerung für einen künstlich verlängerten Tag und damit für eine gleichbleibende Legeleistung auch in den dunklen Jahreszeiten. Diese Steuerung ist ebenfalls von der Helligkeit und Uhrzeit abhängig. Für eine hohe Nutzungsfreundlichkeit sind beide Systeme unabhängig voneinander manuell ansteuerbar.

Zusammenfassung

Das Projekt "SmartFarm" ist aus langjähriger Beobachter der Hühnerhaltung als ein reales System entstanden. Durch das manuelle Öffnen und Schließen der Tür ist der Halter täglich morgens und abends an den Hühnerstall gebunden. Durch die automatische Türsteuerung erreicht der Tierhalter ein hohes Maß an Flexibilität. Des Weiteren wurde die Beobachtung gemacht, dass die Legeleistung in der dunklen Jahreszeit stark abnimmt. Dieser Entwicklung kann mit einer Tageslichtlampe angeschlossen an eine Lichtsteuerung entgegen gewirkt werden.

Lessons Learned

Für die Entwicklung des Projekts wurden hauptsächlich drei Bereiche benötigt:

  • Entwicklung der Software
  • Entwicklung der Hardware
  • Entwicklung der Konstruktion und Mechanik

Die entwickelte Software sollte folgende Anforderungen erfüllen:

  • Anpassbarkeit bzw. Adaptierbarkeit
  • Skalierbarkeit
  • Zuverlässigkeit
  • Effizienz

Die Herausforderung besteht in der Softwareprogrammierung mittels moderner Softwarewerkzeuge und -techniken als Bindeglied zwischen Kundenwunsch und Systemverhalten, sodass möglichst alle Wünsche
bei optimaler Zuverlässigkeit und Korrektheit des Systems erfüllt werden. Zusätzlich sollte die Software gewährleisten, dass beide Systeme unabhängig voneinander funktionieren und keine Signalverluste
oder Signalfehler z.B. aufgrund der Dateninkonsistenz entstehen.

Projektunterlagen

LOP - List Of Open-Point

Nr. Priorität Thema Aktion Verantwortlichkeit Department Zieldatum Startdatum Enddatum Status Kommentar


1 1 Türsteuerung - Motorauswahl Benchmark des Motors und Bestellung Dominik Hermelingmeier Hardware Development 25.12.2020 01.10.2020 12.12.2020 erledigt 17.11.2020:
  • Kein BLDC --> Zu aufwendig
  • DC Motor mit Getriebe --> große Drehmoment
2 1 Ultraschall Positionierung Probe von verschiedenen Position Dominik Hermelingmeier Konstruktion 25.12.2020 01.10.2020 12.12.2020 erledigt 17.11.2020:
  • Verschiedene Position ausprobieren und schauen, ob die Distanz korrekt ermittelt wird.
3 2 Gehäuse Prototyp drucken lassen und verbessern Dominik Hermelingmeier Test and Calibration 25.12.2020 01.10.2020 19.12.2020 erledigt
4 2 Schwellwertbestimmung LDR Messungen durchführen Dominik Hermelingmeier Test and Calibration 25.12.2020 01.10.2020 17.12.2020 erledigt 17.11.2020
  • Messung an verschiedenen Tagen durchführen mit vielen und wenigen Sonnenstunden
  • Messung mit Kunststoffkuppe testen
5 1 Programmablaufplan Modellierung des PAP Isaac Mpidi Bita Projektleitung/Software 30.12.2020 28.12.2020 30.12.2020 erledigt 28.12.2020: Warte auf Abstimmung des Programmorientierung
6 2 Simulationsmodell Erstellung eines Simulationsmodell in MATLAB/Simulink Isaac Mpidi Bita Software Developement 10.01.2020 01.12.2020 02.01.2020 erledigt
7 1 Hardware-Entwurf Erstellung eines funktionaler Harwareentwurfs Isaac Mpidi Bita Hardware Developement 10.12.2020 01.12.2020 06.01.2020 erledigt
8 1 Software-Entwurf Erstellung eines funktionalen Sofwareentwurfs Isaac Mpidi Bita Software Developement 10.12.2020 01.12.2020 06.01.2020 erledigt
9 1 Verhaltenmodellierung Erstellung der Stateflow für die verschiedenen Programmsequenzen Isaac Mpidi Bita Software Developement 30.12.2020 01.12.2020 30.12.2020 erledigt


Gannt Chart

Zur Strukturierung des zeitlichen Projektablaufs wurde das V-Modell anhand des folgenden Gantt-Diagramms in Abbildung 51 umgesetzt.

Abb. 49: State Machine - Betriebsmodis des Stall-Systems


Projektdurchführung

Prozessmodell: V-Modell

Modellierungstandard: SysML für das System Design

Software-Archtektur: Objektorientierte Programmierung

Software-Richtlinien: Embedeed Software Engineering

Ausblick

Systeminstallation und Verbesserung der Hilfsplatine

Beim Einbau des Gesamtsystems in das entsprechende Gehäuse wurden weitere Herausforderungen erkannt. Durch den modularen Systemaufbau können alle Sensoren und Aktoren auch im Stall schnell und einfach ausgetauscht oder umgesteckt werden. Dennoch nehmen die verwendeten Jumperkabel sehr viel Platz ein und stellen eine lose Verbindung dar. Beim Versuch des Umbaus lösen sich die Anschlüsse der Sensoren, Aktoren oder der Platine bereits bei kleinen Belastungen. Diese Fehlerquelle kann mit einer direkt verlöteten Leiterplatine (PCB) vermieden werden. Die Darstellung der Schaltpläne ist in den folgenden Abbildung 50, 51 und 52 dargestellt. Die restlichen Modulkomponente können durch Schraubverbindungen einfach vom Prototypen in den Stall umgebaut werden.

Ausblick auf die weiteren Subsysteme

Neben der Implementierung der beiden Subsysteme der Helligkeits- und Türsteuerung (s. SmartLight und SmartDoor) besteht die Möglichkeit, die weiteren Subsysteme aus dem eingangs eräuterten Brainstorming aus Abbildung 2 umzusetzen. Die weiteren Subsysteme aus der Abbildung 50 werden modulweise implementiert. Dadurch wird der Automatisierungsgrad des Hühnerstalls weiter erhöht und die Tierhaltung für den Halter weiter erleichtert. Weitere Videos werden auf dem YouTube Kanal zeitnah erscheinen.

Abb. 53: Fokus auf weitere Subsysteme


Lernziele

  • Projektmanagement
  • Anwendung des V-Modells
  • Systems Engineering
  • Software Engineering
  • Embedded Systems
  • objektorientierte Programmierung
  • Umgang mit MATLAB/Simulink und Arduino IDE
  • Rapid Control Prototyping
  • CAD-Konstruktionen
  • innovative- und additive Fertigung (3D-Druck)
  • mechanische Konstruktionen auslegen und aufbauen
  • mechanische Berechnungen
  • elektrotechnische Berechnungen
  • Layout von Leiterplatten/Platinen (PCB)
  • Videodesign

Weblinks

Arduino IDE

YouTube Video


Literatur

  1. Datendanken verstehen (2020): V-Modell. [1] Letzter Aufruf: 09.02.2021.
  2. Digital Guide Ionos (2020): Was ist das V-Modell. [2] Letzter Aufruf: 09.02.2021.
  3. Gehäuse Arduino Uno (2015): [3] Letzter Aufruf: 15.11.2020.