SmartFarm: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Zeile 654: Zeile 654:
         // Kippschalter
         // Kippschalter
         //pinMode(_TOUCH_DIG_TUER_PIN_, INPUT);  
         //pinMode(_TOUCH_DIG_TUER_PIN_, INPUT);  
     };   
     };   
     // ************************************************************
     // ************************************************************

Version vom 8. Februar 2021, 19:15 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 Rahme 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. Der Fokus liegt auf der einer Tür- und Helligkeitssteuerung in einem Hühnerstall. Zudem besteht die Möglichkeit, sowohl die Tür als auch die Lampe manuell anzusteuern. Das Projekt "SmartFarm" bietet viele weitere Erweiterungsmöglichkeiten, die im Ausblick eingegangen wird.

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.

Anforderungsmanement

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 einer Energieversorgungssystem für das System
  • Softwareentwicklung nach HSHL Standard in SVN

Lastenheft

Detaillierte Anforderung werden in einer Lastenheft in Form eines Excel-Tabelle zusammengefasst. Diese gliedert sich in die folgenden Punkten entsprechend SysML-Standard:

  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 die Tierhaltung im Einklang mit den Tieren erleichtern und optimieren. 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 Helligkeit- 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 müssen nur an bestimmsten 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 ausreichende Außenhelligkeit aufgehen, andersfalls muss es zu sein. 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 muss auf keinen Fall ein Wert von 5 Kg ü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 manuelle Ansteuerung muss angeboten werden. I. Mpidi Bita & D. Hermelingmeier 20.10.2020
REQ-311 A 3.1 Es muss eine Möglichkeit bestehen, jeder Zeit 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, jeder Zeit 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 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ätsicherung 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 von 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 den 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 Komponentetest 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

Gesamtsystem

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



FE-Software

Abb.1: Software-Funktionaler Entwurf - Projekt SmartFarm


FE-Hardware

Eingabe:

  • Helligkeitssensor: Helligkeitsaufnahme
  • Touch-Sensor: Manuelle Ansteuerung der Tür und der Lampe
  • Ultraschallsensor: Regelung der Türgeschwindigkeit

Mikrocontroller: Systemsteuereinheit

Ausgabe:

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



Stückliste

Technischer Systementwurf

TE-Software

Abb.1: Funktionaler Entwurf - Projekt SmartFarm



TE-Hardware

Abb.1: Funktionaler Entwurf - Projekt SmartFarm


Komponentenspezifikation

Softwarespezifikationen

Betriebsmodis - Stallsystem

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


Tageslichtabfrage mit Hysterese

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


Spezifikation der Türsteuerung

Türstatus - Manuell-Betrieb

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


Türstatus - Automatikbetrieb

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


Zeiterfassung für die Türsteuerung

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


Spezifikation der Lampensteuerung

Lampenstatus - Manuell-Betrieb

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


Lampenstatus - Automatikbetrieb

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


Zeiterfassung für die Helligkeitssteuerung

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


Implementierung

Programmablaufplan

Türsteuerung im Automatik-Betrieb

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


Helligkeitssteuerung im Automatik-Betrieb

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


Modellierung und Simulation des Stall-Systems in MATLAB-Simulink

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



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



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


Implementierung des Stall-Systems in C/C++

Bibliotheken-Einbindung und Variablen definition

// ********************************************************************************************
// 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);

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

Helligkeitssteurung


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



Testphase

Ergebnis

Zusammenfassung

Lessons Learned

Projektunterlagen

Projektplan

Projektdurchführung

YouTube Video

Ausblick

Weblinks

Literatur


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