Safe-Plant: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
(→‎Programmcode: Aktualisiert)
Zeile 191: Zeile 191:
#include <Wire.h> // Wire Bibleothek laden
#include <Wire.h> // Wire Bibleothek laden
#include <LiquidCrystal_I2C.h> // LiquidCrystal Display laden
#include <LiquidCrystal_I2C.h> // LiquidCrystal Display laden
LiquidCrystal_I2C lcd(0x27, 16, 2); // Display definieren
#include <AccelStepper.h>
 
#define DHTPIN 2 //Der Sensor wird an PIN 2 angeschlossen     
#define DHTPIN 2 //Der Sensor wird an PIN 2 angeschlossen     
#define DHTTYPE DHT22    // Es handelt sich um den DHT22 Sensor
#define DHTTYPE DHT22    // Es handelt sich um den DHT22 Sensor
#define Steuer_PIN 3 //==> Pin für Relais-Steuerung
#define dirPin 4
#define stepPin 5
#define motorInterfaceType 1


LiquidCrystal_I2C lcd(0x27, 16, 2); // Display definieren
AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin);
DHT dht(DHTPIN, DHTTYPE); //Der Sensor wird ab jetzt mit „dht“ angesprochen
DHT dht(DHTPIN, DHTTYPE); //Der Sensor wird ab jetzt mit „dht“ angesprochen
int bodenfeuchte = 0;
int bodenfeuchte = 0;
int bodenfeuchteProzent = 0;
int bodenfeuchteProzent = 0;
Zeile 202: Zeile 210:
const int LuftWert = 455;
const int LuftWert = 455;
const int WasserWert = 159;
const int WasserWert = 159;
// Timer für den Abstand der Bewässerung
long myTimer = 0;
long myTimeout = 500000;


void setup() {
void setup() {
Zeile 208: Zeile 220:
   lcd.backlight();
   lcd.backlight();
   dht.begin(); //DHT22 Sensor starten
   dht.begin(); //DHT22 Sensor starten
  pinMode(Steuer_PIN, OUTPUT);
  digitalWrite(Steuer_PIN,HIGH);
  stepper.setMaxSpeed(1000);
}
}


Zeile 259: Zeile 274:
   lcd.setCursor (0,1);
   lcd.setCursor (0,1);
   lcd.print ("Wasserstand:");
   lcd.print ("Wasserstand:");
   lcd.print (wassserstandProzent);
   lcd.print (wasserstandProzent);
   lcd.print (" %");
   lcd.print (" %");
    
    
Zeile 268: Zeile 283:
   lcd.print ("                    ");
   lcd.print ("                    ");


  if ( wasserstandProzent >= 30 && bodenfeuchte <= 30){
// Timer starten
   //GIESSEN DER PFLANZE
 
if (millis() % 1000 > 500)
  {
  if ( (wasserstandProzent >= 30) & (bodenfeuchteProzent <= 30))
  {
    digitalWrite ( Steuer_PIN,LOW);
    delay(1000);
    digitalWrite(Steuer_PIN,HIGH);
   }
  else
  {
    digitalWrite (Steuer_PIN,HIGH);
  }
  }
  }
  else if (wasserstandProzent < 30)
 
  if (wasserstandProzent < 30)
  {
  {
   lcd.setCursor (0,0 (WASSERAUFFÜLLEN! auf DISPLAY ZEIGEN)  
   lcd.setCursor(0,0);
  lcd.print ("                    ");
  lcd.setCursor (0,1);
  lcd.print ("                    ");
  lcd.setCursor (0,0);
  lcd.print ("Wasserstand ist zu gering!");
  }
  }


if ( temperatur > 30){
if (Temperatur >= 30)
   // KLAPPE ÖFFNEN
{
}
  stepper.setCurrentPosition(0);
  // Run the motor forward at 2 steps/second until the motor reaches 40 steps
  while(stepper.currentPosition() != 40)
  {
    stepper.setSpeed(2);
    stepper.runSpeed();
  }
  delay(1000);
  // Reset the position to 0:
  stepper.setCurrentPosition(0);
}
 
if (Temperatur < 30)
{
 
   // Run the motor backwards at 2 steps/second until the motor reaches -40 steps
  while(stepper.currentPosition() != -40)
  {
    stepper.setSpeed(-2);
    stepper.runSpeed();
  }
  delay(1000);
  // Reset the position to 0:
  stepper.setCurrentPosition(0);
}
}


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

Version vom 8. Januar 2022, 16:21 Uhr


Abb. 1: Werbeplakat für die Projektmesse

Autoren: Dennis Weber & Lukas Rellermeier
Betreuer: Prof. Göbel & Prof. Schneider

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

Abb. 1: Safe-Plant Box Prototyp
Abb.2: Systementwurf "Safe-Plant"


Komponentenspezifikation

Komponente Beschreibung Abbildung
I2C Display Display um die Raumtemperatur, Luftfeuchtigkeit, Bodenfeuchtigkeit und Wasserstand des Gefäßes anzuzeigen.
I2C Display
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
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.

Moisture Sensor V1.2
Nema 17 Schrittmotor 45Ncm 1.5A Schrittmotor zum Halten von ... Der Motor besitzt ein Haltemoment von 45Ncm.
Nema 17 Schrittmotor
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.

DRV8825 Treiber
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
LM2596S Step Down Konverter DC auf DC Step Down Konverter um alle Komponenten mit der richtigen Betriebsspannung nutzen zu können, vereinfacht die Komponentenauswahl.
LM2596S
Relaiskarte 1-Kanal 5V/230V Das Relais wurde verwendet um die Wasserpumpe zu schalten.
1 Kanal Relaiskarte

Kostenübersicht

Komponenten Anzahl Preis Bezugsquelle (stand 02.01.2022):
Arduino Uno 1 11,90€ https://www.funduinoshop.com/epages/78096195.sf/de_DE/?ObjectPath=/Shops/78096195/Products/R12-A-3-2
Nema 17 Stepper Motor 1 7,98€ https://www.omc-stepperonline.com/de/nema-17-42mm-schrittmotor/nema-17-bipolar-45ncm-6374ozin-15a-42x42x39mm-4-wires-w--300mm-pin-connector.html?mfp=145-haltemoment-ncm%5B45%5D
DRV8825 Motortreiber 1 6,99€ https://www.az-delivery.de/products/drv8825-schrittmotor-treiber-modul-mit-kuhlkorper?variant=37100118866
Wasserpumpe 3-5V 1 2,40€ https://www.funduinoshop.com/epages/78096195.sf/de_DE/?ObjectPath=/Shops/78096195/Products/R12-B-7-4
1-Kanal Relais 5V 1 1,40€ https://www.funduinoshop.com/epages/78096195.sf/de_DE/?ObjectPath=/Shops/78096195/Products/R12-A-4-4
LM2596S Step Down Konverter 1 1,40€ https://www.funduinoshop.com/epages/78096195.sf/de_DE/?ObjectPath=/Shops/78096195/Products/R12-C-7-3
Moisture Sensor V 1.2 2 7,99€ https://www.az-delivery.de/products/bodenfeuchte-sensor-modul-v1-2?variant=12461193855072
DHT22 Sensor 1 5,90€ https://www.funduinoshop.com/epages/78096195.sf/de_DE/?ObjectPath=/Shops/78096195/Products/R12-A-6-2
I2C Display 1 3,20€ https://www.funduinoshop.com/epages/78096195.sf/de_DE/?ObjectID=56033504
6mmx9mm PVC Schlauch 0,5m 0,70 € https://www.hornbach.de/shop/Aquarienschlauch-PVC-6-9-mm-Meterware/10069312/artikel.html
Diverse Anschlusskabel 1 5,49 € https://www.az-delivery.de/products/3er-set-40-stk-jumper-wire-m2m-f2m-f2f
Quadratstab 20x20x2000mm 2 5,35 € https://www.hornbach.de/shop/Quadratstab-Konsta-Kiefer-roh-20x20x2000-mm/5485724/artikel.html
Hobbyglas 2x500x1500mm 1 18,75 € https://www.hornbach.de/shop/Hobbyglas-2x500x1500-mm-glatt-klar/1477823/artikel.html
3V-12V 5A Netzteil regelbar 1 15,46 € https://www.ebay.de/itm/313518396630?chn=ps&norover=1&mkevt=1&mkrid=707-134425-41852-0&mkcid=2&itemid=313518396630&targetid=1267714667707&device=c&mktype=pla&googleloc=9044152&poi=&campaignid=10203814794&mkgroupid=121648964639&rlsatarget=pla-1267714667707&abcId=1145991&merchantid=7364532&gclid=EAIaIQobChMI2Mjiz8-f9QIVk_lRCh2P7gaOEAQYBiABEgKB5vD_BwE

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 auszufüllen 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 Durchlüftung. 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.

Komponententest

Bodenfeuchtigkeitsensor DHT22 Test: Stepper-Motor Test: Die Komponenten wurden getestet in dem kleine Testprogramme in Arduino geschrieben wurden und die Komponenten provisorisch verkabelt wurden.

Programmierung

Programmcode


#include <DHT.h> //DHT Bibliothek laden
#include <Wire.h> // Wire Bibleothek laden
#include <LiquidCrystal_I2C.h> // LiquidCrystal Display laden
#include <AccelStepper.h>

#define DHTPIN 2 //Der Sensor 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
#define stepPin 5
#define motorInterfaceType 1

LiquidCrystal_I2C lcd(0x27, 16, 2); // Display definieren
AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin);
DHT dht(DHTPIN, DHTTYPE); //Der Sensor wird ab jetzt mit „dht“ angesprochen

int bodenfeuchte = 0;
int bodenfeuchteProzent = 0;
int wasserstand = 0;
int wasserstandProzent= 0;
const int LuftWert = 455;
const int WasserWert = 159;

// Timer für den Abstand der Bewässerung
long myTimer = 0;
long myTimeout = 500000;

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);
}

void loop()
{
  
  delay(5000);//5 Sekunden bis zur Messung warten damit der Sensor etwas //messen kann weil er relativ langsam ist
  
  bodenfeuchte = analogRead(A0);  //put Sensor insert into soil
  Serial.println(bodenfeuchte);
  wasserstand = analogRead(A1);  //put Sensor insert into soil
  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 in Prozent");
  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("Luftfeuchtigkeit: "); //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");

  // Ausgeben der Luftfeuchtigkeit und der Raumtemperatur
  lcd.setCursor(0, 0);
  lcd.print("Feuchte:");
  lcd.print (Luftfeuchtigkeit);
  lcd.setCursor(0, 1);
  lcd.print ("Temp:");
  lcd.print (Temperatur);
  delay (5000); // 5 Sekunden bis zur Löschung des Displays warten

  // Löschen des Displays
  lcd.setCursor(0,0); // Löschen des Displays
  lcd.print ("                    ");
  lcd.setCursor (0,1);
  lcd.print ("                    ");

  // Ausgeben der Bodenfeuchtigkeit und den Wasserstand
  lcd.setCursor (0,0);
  lcd.print ("Bodenfeuchtigkeit:");
  lcd.print (bodenfeuchteProzent);
  lcd.print (" %");
  lcd.setCursor (0,1);
  lcd.print ("Wasserstand:");
  lcd.print (wasserstandProzent);
  lcd.print (" %");
  
  // Löschen des Displays
  lcd.setCursor(0,0); 
  lcd.print ("                    ");
  lcd.setCursor (0,1);
  lcd.print ("                    ");

// Timer starten

 if (millis() % 1000 > 500) 
 {
  if ( (wasserstandProzent >= 30) & (bodenfeuchteProzent <= 30))
  {
    digitalWrite ( Steuer_PIN,LOW);
    delay(1000);
    digitalWrite(Steuer_PIN,HIGH);
  } 
  else 
  {
    digitalWrite (Steuer_PIN,HIGH);
  }
 }

 if (wasserstandProzent < 30)
 {
  lcd.setCursor(0,0); 
  lcd.print ("                    ");
  lcd.setCursor (0,1);
  lcd.print ("                    ");
  lcd.setCursor (0,0);
  lcd.print ("Wasserstand ist zu gering!");
 }

if (Temperatur >= 30)
{
  stepper.setCurrentPosition(0);
  // Run the motor forward at 2 steps/second until the motor reaches 40 steps
  while(stepper.currentPosition() != 40)
  {
    stepper.setSpeed(2);
    stepper.runSpeed();
  }
  delay(1000);
  // Reset the position to 0:
  stepper.setCurrentPosition(0);
}

if (Temperatur < 30)
{

  // Run the motor backwards at 2 steps/second until the motor reaches -40 steps
  while(stepper.currentPosition() != -40) 
  {
    stepper.setSpeed(-2);
    stepper.runSpeed();
  }
  delay(1000);
  // Reset the position to 0:
  stepper.setCurrentPosition(0);
}


 
}


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

Alternativer Text












YouTube Video

Weblinks

Literatur


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