Safe-Plant: Unterschied zwischen den Versionen
(→Programmcode: Aktualisiert) |
|||
(19 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 2: | Zeile 2: | ||
[[Kategorie:ProjekteET MTR BSE WS2020]] | [[Kategorie:ProjekteET MTR BSE WS2020]] | ||
[[Datei:Safe-Plant_Plakat.jpg|550px|thumb|right|Abb. 1: Werbeplakat für die Projektmesse]] | [[Datei:Safe-Plant_Plakat.jpg|550px|thumb|right|Abb. 1: Werbeplakat für die Projektmesse <ref>Eigenes Werk</ref>]] | ||
<!-- Kopieren Sie diesen Header in Ihren Artikel, damit er aufgelistet wird. --> | <!-- Kopieren Sie diesen Header in Ihren Artikel, damit er aufgelistet wird. --> | ||
'''Autoren: Dennis Weber & Lukas Rellermeier''' <br/> | '''Autoren: Dennis Weber & Lukas Rellermeier''' <br/> | ||
'''Betreuer: Prof. Göbel & Prof. Schneider''' <br/> | '''Betreuer: Prof. Göbel & Prof. Schneider''' <br/> | ||
→ zurück zur Übersicht: [[:Kategorie:ProjekteET_MTR_BSE_WS2021|WS 21/22: Angewandte Elektrotechnik (BSE)]] | |||
== Einleitung == | == Einleitung == | ||
Zeile 29: | Zeile 36: | ||
== Funktionaler Systementwurf/Technischer Systementwurf == | == Funktionaler Systementwurf/Technischer Systementwurf == | ||
[[Datei:Safe-Plant.PNG|500px| | Um die Bodenfeuchtigkeit ermitteln zu können wird ein kapazitiver Feuchtigkeitssensor verwendet. Dieser sollte die Bodenfeuchtigkeit in % ausgeben und zu dem wird ein kapazitiver Feuchtigkeitssensor verwendet um den Füllstand eines Behälters zu ermitteln. Die Genauigkeit bei der Füllstandsermittlung ist nicht hoch priorisiert, da nur erkannt werden soll ob sich noch Wasser in dem Behälter befindet. Im Behälter soll sich eine Pumpe befinden welche bei zu geringer Bodenfeuchte Wasser durch den Schlauch auf die Pflanze laufen lässt. Mit einem Sensor soll die Raumfeuchtigkeit sowie die Temperatur ermittelt werden. Mit der ausgelesenen Temperatur wird eine Klappe durch einen Motor geöffnet und geschlossen, dadurch soll es möglich sein die Temperatur im Gewächshaus zu regulieren. | ||
[[Datei:Systementwurf Safe Plant.PNG|500px| | Die Dauer der Pumpzeit und die Bodenfeuchte werden durch Versuche ermittelt. | ||
[[Datei:Safe-Plant.PNG|500px|mini|links|Abb. 1: Safe-Plant Box Prototyp <ref>Eigenes Werk</ref>]][[Datei:Systementwurf Safe Plant.PNG|500px|mini|links|Abb.2: Systementwurf "Safe-Plant" <ref>Eigenes Werk</ref>]] | |||
[[Datei:PAP Safe-Plant.png|500px|mini|zentriert|Abb. 3: PAP Safe-Plant <ref>Eigenes Werk</ref>]] | |||
<!-- Füllen Sie Ihre Projektskizze bis hierher aus. Fügen Sie einen Projektplan unten ein. --> | <!-- Füllen Sie Ihre Projektskizze bis hierher aus. Fügen Sie einen Projektplan unten ein. --> | ||
== Komponentenspezifikation == | == Komponentenspezifikation == | ||
Zeile 42: | Zeile 51: | ||
|I2C Display | |I2C Display | ||
|Display um die Raumtemperatur, Luftfeuchtigkeit, Bodenfeuchtigkeit und Wasserstand des Gefäßes anzuzeigen. | |Display um die Raumtemperatur, Luftfeuchtigkeit, Bodenfeuchtigkeit und Wasserstand des Gefäßes anzuzeigen. | ||
|[[Datei:I2c_1602_display.jpg|126px|mini|zentriert|I2C Display]] | |[[Datei:I2c_1602_display.jpg|126px|mini|zentriert|I2C Display <ref>https://www.funduinoshop.com/epages/78096195.sf/de_DE/?ObjectPath=/Shops/78096195/Products/R12-A-5-3</ref>]] | ||
|- | |- | ||
|- | |- | ||
Zeile 48: | Zeile 57: | ||
|Sensor um Temperatur und Luftfeuchtigkeit des Treibhauses zu messen, um diese zu Not entsprechend anzupassen. Luftfeuchtigkeitsmessbereich : 0 bis 100% mit einer Genauigkeit von ±2%. | |Sensor um Temperatur und Luftfeuchtigkeit des Treibhauses zu messen, um diese zu Not entsprechend anzupassen. Luftfeuchtigkeitsmessbereich : 0 bis 100% mit einer Genauigkeit von ±2%. | ||
Temperaturmessbereich -40 bis +80 C mit einer Genauigkeit von ±0.5. Betriebsspannung 3,3 - 5V DC. | Temperaturmessbereich -40 bis +80 C mit einer Genauigkeit von ±0.5. Betriebsspannung 3,3 - 5V DC. | ||
|[[Datei:SensorDHT22.PNG|126px|mini|zentriert| | |[[Datei:SensorDHT22.PNG|126px|mini|zentriert|DHT 22 <ref>https://www.mikrocontroller-elektronik.de/dht22-am2302-luftfeuchte-und-temperatursensor/</ref>]] | ||
|- | |- | ||
|Moisture Sensor V1.2 | |Moisture Sensor V1.2 | ||
|Sensor der die Feuchtigkeit des Bodens Kapazitiv misst, indem er in den Boden gesteckt wird, um zu wissen wann die Pflanze gegossen werden muss. 2 im Safe-Plant verbaut, den einen, | |Sensor der die Feuchtigkeit des Bodens Kapazitiv misst, indem er in den Boden gesteckt wird, um zu wissen wann die Pflanze gegossen werden muss. 2 im Safe-Plant verbaut, den einen, | ||
um die Bodenfeuchtigkeit zu messen und den anderen, um den Wasserstand auszulesen. Betriebsspannung 3,3 - 5V DC. | um die Bodenfeuchtigkeit zu messen und den anderen, um den Wasserstand auszulesen. Betriebsspannung 3,3 - 5V DC. | ||
|[[Datei:MoistureSensorV1.2.PNG|126px|mini|zentriert|Moisture Sensor V1.2]] | |[[Datei:MoistureSensorV1.2.PNG|126px|mini|zentriert|Moisture Sensor V1.2 <ref>https://www.az-delivery.de/products/bodenfeuchte-sensor-modul-v1-2</ref>]] | ||
|- | |- | ||
|Nema 17 Schrittmotor 45Ncm 1.5A | |Nema 17 Schrittmotor 45Ncm 1.5A | ||
|Schrittmotor zum Halten von ... Der Motor besitzt ein Haltemoment von 45Ncm. | |Schrittmotor zum Halten von ... Der Motor besitzt ein Haltemoment von 45Ncm. | ||
|[[Datei:SchrittmotorNema17.PNG|126px|mini|zentriert|Nema 17 Schrittmotor]] | |[[Datei:SchrittmotorNema17.PNG|126px|mini|zentriert|Nema 17 Schrittmotor <ref>https://www.omc-stepperonline.com/de/nema-17-bipolaire-45ncm-6374ozin-15a-42x42x39mm-4fils-w-1m-cable--connector-de.html</ref>]] | ||
|- | |- | ||
|DRV8825 Treiber für den Stepper Motor | |DRV8825 Treiber für den Stepper Motor | ||
|Treiber für den Schrittmotor, der Treiber besitzt eine einstellbare Strombegrenzung, sowie Überstrom- und Übertemperaturschutz und verschiedene Schrittaufläsungen. | |Treiber für den Schrittmotor, der Treiber besitzt eine einstellbare Strombegrenzung, sowie Überstrom- und Übertemperaturschutz und verschiedene Schrittaufläsungen. | ||
Arbeitet zwischen 8,2V und 45V. | Arbeitet zwischen 8,2V und 45V. | ||
|[[Datei:DRV8825Treiber.PNG|126px|mini|zentriert|DRV8825 Treiber]] | |[[Datei:DRV8825Treiber.PNG|126px|mini|zentriert|DRV8825 Treiber <ref>https://www.exp-tech.de/motoren/motorsteuerung/schrittmotor-treiber/4802/drv8825-stepper-motor-driver-carrier-high-current</ref>]] | ||
|- | |- | ||
|Wasserpumpe 3-5V 100-200mA | |Wasserpumpe 3-5V 100-200mA | ||
|Wasserpumpe um Wasser im Treibhaus zu befördern. Fördermenge 1.2-1.6 Liter/Minute. Betriebsspannung zwischen 3-5V. | |Wasserpumpe um Wasser im Treibhaus zu befördern. Fördermenge 1.2-1.6 Liter/Minute. Betriebsspannung zwischen 3-5V. | ||
|[[Datei:WasserpumpeFunduino.PNG|126px|mini|zentriert|Wasserpumpe]] | |[[Datei:WasserpumpeFunduino.PNG|126px|mini|zentriert|Wasserpumpe <ref>https://www.funduinoshop.com/Mini-Wasserpumpe-3/5V</ref>]] | ||
|- | |- | ||
|LM2596S Step Down Konverter | |LM2596S Step Down Konverter | ||
|DC auf DC Step Down Konverter um alle Komponenten mit der richtigen Betriebsspannung nutzen zu können, vereinfacht die Komponentenauswahl. | |DC auf DC Step Down Konverter um alle Komponenten mit der richtigen Betriebsspannung nutzen zu können, vereinfacht die Komponentenauswahl. | ||
|[[Datei:KonverterLM2596s.PNG|126px|mini|zentriert|LM2596S]] | |[[Datei:KonverterLM2596s.PNG|126px|mini|zentriert|LM2596S <ref>https://www.makershop.de/module/step-downup/lm2596-step-down/</ref>]] | ||
|- | |- | ||
|Relaiskarte 1-Kanal 5V/230V | |Relaiskarte 1-Kanal 5V/230V | ||
|Das Relais wurde verwendet um die Wasserpumpe zu schalten. | |Das Relais wurde verwendet um die Wasserpumpe zu schalten. | ||
|[[Datei:Relais karte 1-kanal 5v 230V.jpg|126px|mini|zentriert|1 Kanal Relaiskarte]] | |[[Datei:Relais karte 1-kanal 5v 230V.jpg|126px|mini|zentriert|1 Kanal Relaiskarte <ref>https://www.funduinoshop.com/epages/78096195.sf/de_DE/?ObjectPath=/Shops/78096195/Products/R12-A-4-4</ref>]] | ||
|- | |- | ||
|} | |} | ||
Zeile 171: | Zeile 180: | ||
== Umsetzung (HW/SW) == | == Umsetzung (HW/SW) == | ||
Für das Gehäuse wurden Kanthölzer als Rahmen verwendet. Diese wurden mit 3D-gedruckten Winkeln an den Ecken verbunden. Um den Rahmen durchsichtig | === HW === | ||
Für das Gehäuse wurden Kanthölzer (20mm x 20mm) als Rahmen verwendet. Diese wurden mit 3D-gedruckten Winkeln an den Ecken verbunden. Um den Rahmen durchsichtig | |||
und ein Relais enthält. | zu gestallten wurden Plexiglasscheiben eingesetzt. Für den Arduino gibt es eine 3D-gedruckte Box, die zusätzlich den Treiber des Motors, den Step-down Converter | ||
Es wurde ein Schrittmotor verwendet um den Deckel mit einem Hebel automatisch anheben zu können, zur Änderung der | und ein Relais enthält. Die Box wurde ebenfalls aus PLA gedruckt. | ||
Feuchtigkeitssensoren zur Messung der Bodenfeuchtigkeit und den Anderen zur Wasserstandsmessung des Wasserbehälters. Ein Luftfeuchtigkeits- sowie Temperatursensor. | Es wurde ein Schrittmotor verwendet um den Deckel mit einem Hebel automatisch anheben zu können, zur Änderung der Temperatur und Luftfeuchtigkeit im inneren des Gewächshauses. Es wurden mehrere Sensoren angebracht, zwei Feuchtigkeitssensoren zur Messung der Bodenfeuchtigkeit und den Anderen zur Wasserstandsmessung des Wasserbehälters. Ein Luftfeuchtigkeits- sowie Temperatursensor. | ||
Durch diese Sensoren, lassen sich die wichtigsten Daten zur Automatisierung abgreifen und benutzen. | Durch diese Sensoren, lassen sich die wichtigsten Daten zur Automatisierung abgreifen und benutzen. | ||
Alle Kunststoffteile wurden aus biologisch abbaubarem PLA gedruckt. | Alle Kunststoffteile wurden aus biologisch abbaubarem PLA gedruckt. | ||
<gallery widths="500" heights="500" perrow="3"> | |||
3D_Motorhalterung.PNG|Motorhalterung des Nema 17 Schrittmotors <ref>Eigenes Werk</ref> | |||
3D_Schalteinheit_unten.PNG|Gehäuse der Schalteinheit des Projekts <ref>Eigenes Werk</ref> | |||
</gallery> | |||
===SW=== | |||
Die verwendete Software um den Programmcode zu schreiben war die Arduino IDE in der Version 1.8.16 . Mit der Integration verschiedener Bibliotheken war es möglich die Sensoren, das Display und die Motoren anzusteuern. Der Programmcode mit Kommentaren ist in dem Abschnitt Programmierung zu finden, dort sind die verwendeten Bibliotheken ebenso zusehen. | |||
== Komponententest == | == Komponententest == | ||
Die einzelnen Komponenten wurden getestet in dem kleine Testprogramme verwendet wurden und die Komponenten provisorisch verkabelt wurden. | |||
Die Komponenten wurden getestet in dem kleine Testprogramme | Testprogramme sind unter folgenden Links zu finden: | ||
[https://www.makerguides.com/drv8825-stepper-motor-driver-arduino-tutorial/ Stepper Motor], | |||
[https://www.youtube.com/watch?v=pFQaFnqpOtQ Kapazitiver Feuchtigkeitssensor], | |||
[https://www.mikrocontroller-elektronik.de/dht22-am2302-luftfeuchte-und-temperatursensor/ DHT22 Sensor]. | |||
== Programmierung == | == Programmierung == | ||
===Programmcode=== | ===Programmcode=== | ||
<div style="width:1200px; height: | <div style="width:1200px; height:600px; overflow:auto; border: 2px solid #088"> | ||
<pre> | <pre> | ||
/////////////////////////////////////////////// | |||
// // | |||
// SAFE-PLANT // | |||
// Lukas Rellermeier & Dennis Weber // | |||
// MTR 2.2 // | |||
// Bachelor-Studiengang Mechatronik (MTR) // | |||
// Hochschule Hamm-Lippstadt // | |||
// Betreuer: Marc Ebmeyer // | |||
// // | |||
/////////////////////////////////////////////// | |||
#define DHTPIN 2 // | // Einfügen der einzelnen Bibliotheken die notwendig sind | ||
#define DHTTYPE DHT22 | #include <DHT.h> //DHT22 Bibliothek | ||
#define Steuer_PIN 3 // | #include <Wire.h> // Wire Bibliothek | ||
#define dirPin 4 | #include <LiquidCrystal_I2C.h> // LiquidCrystal Display Bibliothek | ||
#define stepPin 5 | #include <AccelStepper.h> // AccelStepper Bibliothek für den Stepper Motor | ||
#define motorInterfaceType 1 | |||
// Definieren der Anschlusspinne und Sensoren die verwendet werden | |||
#define DHTPIN 2 //DHT22 wird an PIN 2 angeschlossen | |||
#define DHTTYPE DHT22 // Es handelt sich um den DHT22 Sensor | |||
#define Steuer_PIN 3 // Pin für Relais-Steuerung | |||
#define dirPin 4 // Pin für den Steppemotor für die Richtung | |||
#define stepPin 5 // Pin für den Steppemotor | |||
#define motorInterfaceType 1 // Auswahl des Motors der verwendet wird | |||
LiquidCrystal_I2C lcd(0x27, 16, 2); // Display definieren | LiquidCrystal_I2C lcd(0x27, 16, 2); // Display definieren | ||
AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin); | AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin); // Motor definieren | ||
DHT dht(DHTPIN, DHTTYPE); // | DHT dht(DHTPIN, DHTTYPE); // Sensor mit "dht" ansprechbar machen | ||
// Initialisieren der einzelnen Werte | |||
int bodenfeuchte = 0; | int bodenfeuchte = 0; | ||
int bodenfeuchteProzent = 0; | int bodenfeuchteProzent = 0; | ||
int wasserstand = 0; | int wasserstand = 0; | ||
int wasserstandProzent= 0; | int wasserstandProzent= 0; | ||
const int LuftWert = 455; | const int LuftWert = 455; // Kalibrierungswert für die Feuchtigkeitssensoren | ||
const int WasserWert = 159; | const int WasserWert = 159; // Kalibrierungswert für die Feuchtigkeitssensoren | ||
// | |||
void setup() { | void setup() { | ||
Zeile 223: | Zeile 254: | ||
digitalWrite(Steuer_PIN,HIGH); | digitalWrite(Steuer_PIN,HIGH); | ||
stepper.setMaxSpeed(1000); | stepper.setMaxSpeed(1000); | ||
stepper.setCurrentPosition(0); | |||
} | } | ||
Zeile 228: | Zeile 260: | ||
{ | { | ||
delay(5000);//5 Sekunden bis zur Messung warten | delay(5000);//5 Sekunden bis zur Messung warten | ||
bodenfeuchte = analogRead( | bodenfeuchte = analogRead(A1); | ||
Serial.println(bodenfeuchte); | Serial.println(bodenfeuchte); | ||
wasserstand = analogRead( | wasserstand = analogRead(A0); | ||
Serial.println(wasserstand); | Serial.println(wasserstand); | ||
wasserstandProzent = map (wasserstand, WasserWert, LuftWert, 100, 0); | wasserstandProzent = map (wasserstand, WasserWert, LuftWert, 100, 0); | ||
bodenfeuchteProzent = map(bodenfeuchte, WasserWert, LuftWert, 100, 0); | bodenfeuchteProzent = map(bodenfeuchte, WasserWert, LuftWert, 100, 0); | ||
Serial.print(bodenfeuchteProzent); | Serial.print(bodenfeuchteProzent); | ||
Serial.println("%"); | Serial.println("%"); | ||
Serial.println("Wasserstand | Serial.println("Wasserstand:"); | ||
Serial.print(wasserstandProzent); | Serial.print(wasserstandProzent); | ||
Zeile 245: | Zeile 278: | ||
float Luftfeuchtigkeit = dht.readHumidity(); //die Luftfeuchtigkeit auslesen und unter „Luftfeutchtigkeit“ speichern | float Luftfeuchtigkeit = dht.readHumidity(); //die Luftfeuchtigkeit auslesen und unter „Luftfeutchtigkeit“ speichern | ||
float Temperatur = dht.readTemperature();//die Temperatur auslesen und unter „Temperatur“ speichern | float Temperatur = dht.readTemperature();//die Temperatur auslesen und unter „Temperatur“ speichern | ||
Serial.print(" | Serial.print("Luftfeuchte: "); //Im seriellen Monitor den Text und | ||
Serial.print(Luftfeuchtigkeit); //die Dazugehörigen Werte anzeigen | Serial.print(Luftfeuchtigkeit); //die Dazugehörigen Werte anzeigen | ||
Serial.println(" %"); | Serial.println(" %"); | ||
Zeile 252: | Zeile 285: | ||
Serial.println(" Grad Celsius"); | Serial.println(" Grad Celsius"); | ||
// Löschen des Displays | |||
lcd.setCursor(0,0); | |||
lcd.print (" "); | |||
lcd.setCursor (0,1); | |||
lcd.print (" "); | |||
// Ausgeben der Luftfeuchtigkeit und der Raumtemperatur | // Ausgeben der Luftfeuchtigkeit und der Raumtemperatur | ||
lcd.setCursor(0, 0); | lcd.setCursor(0, 0); | ||
lcd.print(" | lcd.print ("Luftf.:"); | ||
lcd.print (Luftfeuchtigkeit); | lcd.print (Luftfeuchtigkeit); | ||
lcd.print (" %"); | |||
lcd.setCursor(0, 1); | lcd.setCursor(0, 1); | ||
lcd.print ("Temp:"); | lcd.print ("Temp.:"); | ||
lcd.print (Temperatur); | lcd.print (Temperatur); | ||
lcd.print (" C"); | |||
delay (5000); // 5 Sekunden bis zur Löschung des Displays warten | delay (5000); // 5 Sekunden bis zur Löschung des Displays warten | ||
// Löschen des Displays | // Löschen des Displays | ||
lcd.setCursor(0,0); | lcd.setCursor(0,0); | ||
lcd.print (" "); | lcd.print (" "); | ||
lcd.setCursor (0,1); | lcd.setCursor (0,1); | ||
Zeile 269: | Zeile 311: | ||
// Ausgeben der Bodenfeuchtigkeit und den Wasserstand | // Ausgeben der Bodenfeuchtigkeit und den Wasserstand | ||
lcd.setCursor (0,0); | lcd.setCursor (0,0); | ||
lcd.print (" | lcd.print ("Bodenfeuchte:"); | ||
lcd.print (bodenfeuchteProzent); | lcd.print (bodenfeuchteProzent); | ||
lcd.print (" %"); | lcd.print ("%"); | ||
lcd.setCursor (0,1); | lcd.setCursor (0,1); | ||
lcd.print ("Wasserstand:"); | lcd.print ("Wasserstand:"); | ||
lcd.print (wasserstandProzent); | lcd.print (wasserstandProzent); | ||
lcd.print (" %"); | lcd.print ("%"); | ||
// | // Gießen der Pflanze bei passendem Wasserstand und Bodenfeuchtigkeit | ||
if (millis() % 1000 > 500) | if (millis() % 1000 > 500) | ||
{ | { | ||
if ( (wasserstandProzent >= | if ( (wasserstandProzent >= 45) & (bodenfeuchteProzent <= 90)) | ||
{ | { | ||
digitalWrite ( Steuer_PIN,LOW); | digitalWrite ( Steuer_PIN,LOW); | ||
delay( | delay(250); | ||
digitalWrite(Steuer_PIN,HIGH); | digitalWrite(Steuer_PIN,HIGH); | ||
} | } | ||
else | else | ||
{ | { | ||
digitalWrite (Steuer_PIN,HIGH); | digitalWrite (Steuer_PIN,HIGH); | ||
Zeile 299: | Zeile 336: | ||
} | } | ||
if (wasserstandProzent < | // Ausgabe von einer Meldung das der Wasserstand zu gering ist | ||
if (wasserstandProzent < 45) | |||
{ | { | ||
lcd.setCursor(0,0); | lcd.setCursor(0,0); | ||
Zeile 306: | Zeile 345: | ||
lcd.print (" "); | lcd.print (" "); | ||
lcd.setCursor (0,0); | lcd.setCursor (0,0); | ||
lcd.print ("Wasserstand | lcd.print ("Wasserstand!!!"); | ||
} | } | ||
if (Temperatur > | // Öffnen der oberen Klappe falls die Temperatur im inneren einen Wert von 30°C erreicht hat | ||
if (Temperatur > 30) | |||
{ | { | ||
while(stepper.currentPosition() != -90) | |||
while(stepper.currentPosition() != | |||
{ | { | ||
stepper.setSpeed( | stepper.setSpeed(-50); | ||
stepper.runSpeed(); | stepper.runSpeed(); | ||
} | } | ||
delay(1000); | delay(1000); | ||
} | } | ||
// Schließen der oberen Klapppe falls die Temperatur im inneren einen Wert von unter 30 °C erreicht hat | |||
if (Temperatur < 30) | if (Temperatur < 30) | ||
{ | { | ||
while(stepper.currentPosition() != | while(stepper.currentPosition() != 0) | ||
{ | { | ||
stepper.setSpeed( | stepper.setSpeed(50); | ||
stepper.runSpeed(); | stepper.runSpeed(); | ||
} | } | ||
delay(1000); | delay(1000); | ||
} | } | ||
Zeile 361: | Zeile 400: | ||
=== Projektplan === | === Projektplan === | ||
[[Datei:Plant-Safe1.png|1280px|thumb|left| | [[Datei:Plant-Safe1.png|1280px|thumb|left|Projektplan Safe-Plant <ref>Eigenes Werk</ref>]] | ||
Zeile 383: | Zeile 422: | ||
== YouTube Video == | |||
{{#ev:youtube|https://www.youtube.com/watch?v=crCdaBLa-iA| 600 ||<ref>Eigenes Werk</ref>}} | |||
[https://www.youtube.com/watch?v=crCdaBLa-iA] | |||
== Weblinks == | == Weblinks == |
Aktuelle Version vom 10. Januar 2022, 20:02 Uhr
Autoren: Dennis Weber & Lukas Rellermeier
Betreuer: Prof. Göbel & Prof. Schneider
→ zurück zur Übersicht: WS 21/22: Angewandte Elektrotechnik (BSE)
Einleitung
In diesem Projekt wird ein vollkommen selbstständig arbeitendes Treibhaus erstellt. Es soll sich mit wenig zusätzlichen Zeitaufwand um Pflanzen kümmern können und den Betreiber über den aktuellen Stand dieser informieren.
Anforderungen
-Temperatur messen
-Luftfeuchtigkeit messen
-Feuchtigkeit des Bodens messen
-Lichtquelle
-Belüftung
-Signal bei nicht selbst lösbaren Problemen
-Daten aufnehmen verarbeiten und anzeigen und entsprechend handeln
Funktionaler Systementwurf/Technischer Systementwurf
Um die Bodenfeuchtigkeit ermitteln zu können wird ein kapazitiver Feuchtigkeitssensor verwendet. Dieser sollte die Bodenfeuchtigkeit in % ausgeben und zu dem wird ein kapazitiver Feuchtigkeitssensor verwendet um den Füllstand eines Behälters zu ermitteln. Die Genauigkeit bei der Füllstandsermittlung ist nicht hoch priorisiert, da nur erkannt werden soll ob sich noch Wasser in dem Behälter befindet. Im Behälter soll sich eine Pumpe befinden welche bei zu geringer Bodenfeuchte Wasser durch den Schlauch auf die Pflanze laufen lässt. Mit einem Sensor soll die Raumfeuchtigkeit sowie die Temperatur ermittelt werden. Mit der ausgelesenen Temperatur wird eine Klappe durch einen Motor geöffnet und geschlossen, dadurch soll es möglich sein die Temperatur im Gewächshaus zu regulieren. Die Dauer der Pumpzeit und die Bodenfeuchte werden durch Versuche ermittelt.
Komponentenspezifikation
Komponente | Beschreibung | Abbildung |
---|---|---|
I2C Display | Display um die Raumtemperatur, Luftfeuchtigkeit, Bodenfeuchtigkeit und Wasserstand des Gefäßes anzuzeigen. | |
DHT 22 Sensor | Sensor um Temperatur und Luftfeuchtigkeit des Treibhauses zu messen, um diese zu Not entsprechend anzupassen. Luftfeuchtigkeitsmessbereich : 0 bis 100% mit einer Genauigkeit von ±2%.
Temperaturmessbereich -40 bis +80 C mit einer Genauigkeit von ±0.5. Betriebsspannung 3,3 - 5V DC. |
|
Moisture Sensor V1.2 | Sensor der die Feuchtigkeit des Bodens Kapazitiv misst, indem er in den Boden gesteckt wird, um zu wissen wann die Pflanze gegossen werden muss. 2 im Safe-Plant verbaut, den einen,
um die Bodenfeuchtigkeit zu messen und den anderen, um den Wasserstand auszulesen. Betriebsspannung 3,3 - 5V DC. |
|
Nema 17 Schrittmotor 45Ncm 1.5A | Schrittmotor zum Halten von ... Der Motor besitzt ein Haltemoment von 45Ncm. | |
DRV8825 Treiber für den Stepper Motor | Treiber für den Schrittmotor, der Treiber besitzt eine einstellbare Strombegrenzung, sowie Überstrom- und Übertemperaturschutz und verschiedene Schrittaufläsungen.
Arbeitet zwischen 8,2V und 45V. |
|
Wasserpumpe 3-5V 100-200mA | Wasserpumpe um Wasser im Treibhaus zu befördern. Fördermenge 1.2-1.6 Liter/Minute. Betriebsspannung zwischen 3-5V. | |
LM2596S Step Down Konverter | DC auf DC Step Down Konverter um alle Komponenten mit der richtigen Betriebsspannung nutzen zu können, vereinfacht die Komponentenauswahl. | |
Relaiskarte 1-Kanal 5V/230V | Das Relais wurde verwendet um die Wasserpumpe zu schalten. |
Kostenübersicht
Umsetzung (HW/SW)
HW
Für das Gehäuse wurden Kanthölzer (20mm x 20mm) als Rahmen verwendet. Diese wurden mit 3D-gedruckten Winkeln an den Ecken verbunden. Um den Rahmen durchsichtig zu gestallten wurden Plexiglasscheiben eingesetzt. Für den Arduino gibt es eine 3D-gedruckte Box, die zusätzlich den Treiber des Motors, den Step-down Converter und ein Relais enthält. Die Box wurde ebenfalls aus PLA gedruckt. Es wurde ein Schrittmotor verwendet um den Deckel mit einem Hebel automatisch anheben zu können, zur Änderung der Temperatur und Luftfeuchtigkeit im inneren des Gewächshauses. Es wurden mehrere Sensoren angebracht, zwei Feuchtigkeitssensoren zur Messung der Bodenfeuchtigkeit und den Anderen zur Wasserstandsmessung des Wasserbehälters. Ein Luftfeuchtigkeits- sowie Temperatursensor. Durch diese Sensoren, lassen sich die wichtigsten Daten zur Automatisierung abgreifen und benutzen. Alle Kunststoffteile wurden aus biologisch abbaubarem PLA gedruckt.
SW
Die verwendete Software um den Programmcode zu schreiben war die Arduino IDE in der Version 1.8.16 . Mit der Integration verschiedener Bibliotheken war es möglich die Sensoren, das Display und die Motoren anzusteuern. Der Programmcode mit Kommentaren ist in dem Abschnitt Programmierung zu finden, dort sind die verwendeten Bibliotheken ebenso zusehen.
Komponententest
Die einzelnen Komponenten wurden getestet in dem kleine Testprogramme verwendet wurden und die Komponenten provisorisch verkabelt wurden.
Testprogramme sind unter folgenden Links zu finden: Stepper Motor, Kapazitiver Feuchtigkeitssensor, DHT22 Sensor.
Programmierung
Programmcode
/////////////////////////////////////////////// // // // SAFE-PLANT // // Lukas Rellermeier & Dennis Weber // // MTR 2.2 // // Bachelor-Studiengang Mechatronik (MTR) // // Hochschule Hamm-Lippstadt // // Betreuer: Marc Ebmeyer // // // /////////////////////////////////////////////// // Einfügen der einzelnen Bibliotheken die notwendig sind #include <DHT.h> //DHT22 Bibliothek #include <Wire.h> // Wire Bibliothek #include <LiquidCrystal_I2C.h> // LiquidCrystal Display Bibliothek #include <AccelStepper.h> // AccelStepper Bibliothek für den Stepper Motor // Definieren der Anschlusspinne und Sensoren die verwendet werden #define DHTPIN 2 //DHT22 wird an PIN 2 angeschlossen #define DHTTYPE DHT22 // Es handelt sich um den DHT22 Sensor #define Steuer_PIN 3 // Pin für Relais-Steuerung #define dirPin 4 // Pin für den Steppemotor für die Richtung #define stepPin 5 // Pin für den Steppemotor #define motorInterfaceType 1 // Auswahl des Motors der verwendet wird LiquidCrystal_I2C lcd(0x27, 16, 2); // Display definieren AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin); // Motor definieren DHT dht(DHTPIN, DHTTYPE); // Sensor mit "dht" ansprechbar machen // Initialisieren der einzelnen Werte int bodenfeuchte = 0; int bodenfeuchteProzent = 0; int wasserstand = 0; int wasserstandProzent= 0; const int LuftWert = 455; // Kalibrierungswert für die Feuchtigkeitssensoren const int WasserWert = 159; // Kalibrierungswert für die Feuchtigkeitssensoren void setup() { Serial.begin(9600); //Serielle Verbindung starten lcd.init(); lcd.backlight(); dht.begin(); //DHT22 Sensor starten pinMode(Steuer_PIN, OUTPUT); digitalWrite(Steuer_PIN,HIGH); stepper.setMaxSpeed(1000); stepper.setCurrentPosition(0); } void loop() { delay(5000);//5 Sekunden bis zur Messung warten bodenfeuchte = analogRead(A1); Serial.println(bodenfeuchte); wasserstand = analogRead(A0); Serial.println(wasserstand); wasserstandProzent = map (wasserstand, WasserWert, LuftWert, 100, 0); bodenfeuchteProzent = map(bodenfeuchte, WasserWert, LuftWert, 100, 0); Serial.print(bodenfeuchteProzent); Serial.println("%"); Serial.println("Wasserstand:"); Serial.print(wasserstandProzent); float Luftfeuchtigkeit = dht.readHumidity(); //die Luftfeuchtigkeit auslesen und unter „Luftfeutchtigkeit“ speichern float Temperatur = dht.readTemperature();//die Temperatur auslesen und unter „Temperatur“ speichern Serial.print("Luftfeuchte: "); //Im seriellen Monitor den Text und Serial.print(Luftfeuchtigkeit); //die Dazugehörigen Werte anzeigen Serial.println(" %"); Serial.print("Temperatur: "); Serial.print(Temperatur); Serial.println(" Grad Celsius"); // Löschen des Displays lcd.setCursor(0,0); lcd.print (" "); lcd.setCursor (0,1); lcd.print (" "); // Ausgeben der Luftfeuchtigkeit und der Raumtemperatur lcd.setCursor(0, 0); lcd.print ("Luftf.:"); lcd.print (Luftfeuchtigkeit); lcd.print (" %"); lcd.setCursor(0, 1); lcd.print ("Temp.:"); lcd.print (Temperatur); lcd.print (" C"); delay (5000); // 5 Sekunden bis zur Löschung des Displays warten // Löschen des Displays lcd.setCursor(0,0); lcd.print (" "); lcd.setCursor (0,1); lcd.print (" "); // Ausgeben der Bodenfeuchtigkeit und den Wasserstand lcd.setCursor (0,0); lcd.print ("Bodenfeuchte:"); lcd.print (bodenfeuchteProzent); lcd.print ("%"); lcd.setCursor (0,1); lcd.print ("Wasserstand:"); lcd.print (wasserstandProzent); lcd.print ("%"); // Gießen der Pflanze bei passendem Wasserstand und Bodenfeuchtigkeit if (millis() % 1000 > 500) { if ( (wasserstandProzent >= 45) & (bodenfeuchteProzent <= 90)) { digitalWrite ( Steuer_PIN,LOW); delay(250); digitalWrite(Steuer_PIN,HIGH); } else { digitalWrite (Steuer_PIN,HIGH); } } // Ausgabe von einer Meldung das der Wasserstand zu gering ist if (wasserstandProzent < 45) { lcd.setCursor(0,0); lcd.print (" "); lcd.setCursor (0,1); lcd.print (" "); lcd.setCursor (0,0); lcd.print ("Wasserstand!!!"); } // Öffnen der oberen Klappe falls die Temperatur im inneren einen Wert von 30°C erreicht hat if (Temperatur > 30) { while(stepper.currentPosition() != -90) { stepper.setSpeed(-50); stepper.runSpeed(); } delay(1000); } // Schließen der oberen Klapppe falls die Temperatur im inneren einen Wert von unter 30 °C erreicht hat if (Temperatur < 30) { while(stepper.currentPosition() != 0) { stepper.setSpeed(50); stepper.runSpeed(); } delay(1000); } }
Ergebnis
Das Projekt konnte größtenteils wie gewünscht beendet werden. Das Gewächshaus kann automatisiert die Temperatur im Inneren, sowie die Luftfeuchtigkeit auf dem Display anzeigen, ebenso die Bodenfeuchtigkeit, der Erde. So kann es bei abweichenden Sollwerten (z.B. zu trockene Erde) entsprechend handeln und diese wieder anpassen. Man kann auf dem unten eingefügten Video auf Youtube alle Funktionen erkennen und mithilfe des Arduino-Codes und dem Verdrahtungsplan das Projekt nachvollziehen und nachbauen.
Zusammenfassung
Lessons Learned
Aufgrund von schlechter Verfügbarkeit konnten nicht alle von uns gewünschten Komponenten verbaut werden. Durch die Planung mit dem Projektplan, konnten wir die Termine pünktlich einhalten, dieser hat sich als Hilfreiches Werkzeug erwiesen. Wir konnten den Umgang mit dem Arduino in Verbindung mit externen Komponenten vertiefen und unsere Programmierfähigkeiten weiter ausbauen. Durch den vorhandenen 3D-Drucker konnte man Erfahrungen mit SolidWorks sammeln und die Qualtiät von Konstruierten Teilen verbessern.
Projektunterlagen
Projektplan
YouTube Video
Weblinks
Literatur
→ zurück zur Übersicht: WS 21/22: Angewandte Elektrotechnik (BSE)
- ↑ Eigenes Werk
- ↑ Eigenes Werk
- ↑ Eigenes Werk
- ↑ Eigenes Werk
- ↑ https://www.funduinoshop.com/epages/78096195.sf/de_DE/?ObjectPath=/Shops/78096195/Products/R12-A-5-3
- ↑ https://www.mikrocontroller-elektronik.de/dht22-am2302-luftfeuchte-und-temperatursensor/
- ↑ https://www.az-delivery.de/products/bodenfeuchte-sensor-modul-v1-2
- ↑ https://www.omc-stepperonline.com/de/nema-17-bipolaire-45ncm-6374ozin-15a-42x42x39mm-4fils-w-1m-cable--connector-de.html
- ↑ https://www.exp-tech.de/motoren/motorsteuerung/schrittmotor-treiber/4802/drv8825-stepper-motor-driver-carrier-high-current
- ↑ https://www.funduinoshop.com/Mini-Wasserpumpe-3/5V
- ↑ https://www.makershop.de/module/step-downup/lm2596-step-down/
- ↑ https://www.funduinoshop.com/epages/78096195.sf/de_DE/?ObjectPath=/Shops/78096195/Products/R12-A-4-4
- ↑ Eigenes Werk
- ↑ Eigenes Werk
- ↑ Eigenes Werk
- ↑ Eigenes Werk