SmartFarm: Unterschied zwischen den Versionen
Zeile 929: | Zeile 929: | ||
= Implementierung = | = Implementierung = | ||
In diesem Abschnitt erfolgt die Softwareumsetzung. Hierfür wird zunächst ein Programmablaufplan erstellt. Des Weiteren wird das Gesamtsystem im MATLAB/Simulink modelliert. | 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 | das Codieren mit der Hochsprache C/C++. | ||
== Mechanik und Konstruktion == | == Mechanik und Konstruktion == |
Version vom 14. Februar 2021, 18:12 Uhr
Autoren: Isaac Mpidi Bita, Dominik Hermelingmeier
Betreuer: Prof. Göbel
→ zurück zur Übersicht: WS 20/21: Angewandte Elektrotechnik (BSE)
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.
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.
Istsituation
Für einen ersten Eindruck ist der Stall (Istsituation) in den folgenden Bilder 4 und 5 dargestellt.
-
Abb. 4: Hühnerstall hinten
-
Abb. 5: Hühnerstall hinten
V-Modell als Vorgehensmodell
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:
- Projektziel
- Functional Requirements
- Physical Requirements
- Usability Requirements
- Business Requirements
- Performance Requirements
- Non-functional Requirements
- Extended Requirements
- 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:
|
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.
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.
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
Stückliste
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
TE-Hardware
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.
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.
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.
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.
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.
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:
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 | - |
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.
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).
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 |
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 der Hochschule Hamm-Lippstadt.
Gesamtsystem
Alle Bauteile werden in einem schützenden Gehäuse an der Stallwand positioniert. Dazu zählen der Arduino, die Platine und alle Sensoren und Aktoren die innen liegen können. Der Deckel ist durch Stifte mit der Boxunterseite verbunden und kann schnell und flexibel abgenommen werden, um an das System zu gelangen. Öffnungen dienen der Schnellstelle zu den außen liegenden Sensoren und Aktoren.
-
Abb. 21: Konstruktion: Gehäuse für das Gesamtsystem
-
Abb. 22: Gehäuse für das Gesamtsystem
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 Arduino schnell gewechselt werden.
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.
-
Abb. 24: Konstruktion: Gehäuse für den Ultraschallsensor
-
Abb. 25: Gehäuse für den Ultraschallsensor
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.
-
Abb. 26: Konstruktion: Gehäuse für den Lichtsensor
-
Abb. 27: Konstruktion: Gehäuse für den Lichtschallsensor
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.
DC Motor
Um die Tür bestmöglich anzugeben wurde ein DC-Motor mit einem Schneckengetriebe ausgewählt. Diese Getriebeart verfügt über ein starkes Drehmoment. Die 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 ähnlich einer Seilwinde. Der Motor wird mit 12 V von der Hauptplatine betrieben. Die Anbringung und Konstruktion sind in der folgenden Abbildung 29 dargestellt.
Tageslichtlampe
Die Tageslichtlampe sorgt für die Helligkeit im Stall. Sie wird über 230 V von der Hauptplatine betrieben.
Kippschalter zur Betriebsauswahl
Über zwei Kippschalter kann der automatische oder manuelle Modus der Licht- und Türsteuerung getrennt ausgewählt werden. Die Kippschalter werden mit 12 V von der Hauptplatine betrieben.
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 Prototyp wurde erst in Abbildung skizziert und dann aufgebaut (s. Abbildung 32).
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. Zum Anschluss der Tageslichtlampe existiert eine 230V Eingangsspannung und für den Motor eine 12 V Eingangsspannung. Da die 230 V Spannung einen risikoreichen Anschluss darstellt, ist dies nur eine Übergangslösung. 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 viele Erweiterungsmöglichkeiten als Subsysteme im Gesamtsystem SmartFarm. Dafür wurden vier Reserve Inputs und eine Vielzahl an Pins eingeplant. Alle Bestandteile der Platine sind in den folgenden beiden Abbildungen 33 und 34 von der Ober- und Unterseite dokumentiert.
-
Abb. 33: Oberseite der Hauptplatine
-
Abb. 34: Unterseite der Hauptplatine
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.
-
Abb. 35: Oberseite der Nebenplatine
-
Abb. 36: Unterseite der Nebenplatine
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 dann in das Helligkeitszustand-Statediagramm weitergegeben.
Das Statediagramm wird dann Auskunft 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 dann 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.
Helligkeitssteuerung im Automatik-Betrieb
Analog wird es bei Lampensteuerung aufgestellt.
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.
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 Sinken der Tür je 1 Sek. | Hochheben und Sinken 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.
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:
|
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.
-
Abb. 44: Prototypen-Vorrichtung
-
Abb. 45: Hühnerstall bei Dunkelheit
-
Abb. 46: Lampe im Hühnerstall
-
Abb. 47: Betriebsmodus-Auswahl
-
Abb. 48: Projektzustands
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:
|
2 | 1 | Ultraschall Positionierung | Probe von verschiedenen Position | Dominik Hermelingmeier | Konstruktion | 25.12.2020 | 01.10.2020 | 12.12.2020 | erledigt | 17.11.2020:
|
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
|
8 | 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 |
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 | 1 | Hardware-Entwurf | Erstellung eines funktionaler Harwareentwurfs | Isaac Mpidi Bita | Hardware Developement | 10.12.2020 | 01.12.2020 | 06.01.2020 | erledigt | |
11 | 1 | Software-Entwurf | Erstellung eines funktionalen Sofwareentwurfs | Isaac Mpidi Bita | Software Developement | 10.12.2020 | 01.12.2020 | 06.01.2020 | erledigt | |
13 | 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.
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.
-
Abb. 50: Schaltplan
-
Abb. 51: PCB
-
Abb. 52: 3D-Ansicht des PCB
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.
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
YouTube Video