Hallo zusammen,
Im Rahmen der Schule muss ich einen vollautomatischen Gewächshaus bauen. Ich habe schon vieles gebaut und programmiert wie Z.b Temperaturanzeige, automatische Beleuchtung, automatisches Bewässerung usw.
Nun muss mein Gewächshaus wissen können in welchem Jahreszeit wir uns befinden und dementsprechend reagieren. Als ein Beispiel soll mein Gewächshaus im Winter die Pflanzen weniger mit Wasser versorgen und im Sommer mit vieles Wasser, weil es wärmer ist.
Ich habe versucht diese mit eine RTC (Real Time Clock) Modul umzusetzen, aber ich bekomme das nicht hin.
ich würde mich sehr freuen, wenn Sie mir helfen würden, da die Zeit bald zu ende ist und die Projekt abgegeben werden muss.
Vielen Dank im Voraus.
Man sollte zeigen was man schon hat, von null aus macht wahrscheinlich keiner.
Und Bitte in Code Tags posten
Das ist schade....
Du hast leider vergessen zu sagen:
Wo ist dein Problem damit?
Naja hierfür habe ich noch nichts, obwohl ich vieles versucht habe, war das Ergebnis nicht korrekt. Aber ich packe die Programm coden hier rein. Mit diesem Coden messe ich einmal den Bodenfeuchtigkeit und Temperatur. Diese Werte werden dann auf einem Display angezeigt. wenn das Boden trocken ist dann geht die Pumpe an. Außerdem habe ich eine Lichtsensor womit ich die Helligkeit messe und eine Pflanzenlampe beim Dunkelheit zum leuchten bringe.
Hier sind die Coden:
#include <LiquidCrystal_I2C.h>
#include <dht.h> //DHT and LCD librarie
#define I2C_ADDR 0x27
#define BACKLIGHT_PIN 3
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
#define DHT11_PIN 7 //Declaring where the DHT signal pin is wire
int sensor_pin = A0; // Kapazitiver Bodenfeuchtigkeitssensor
int output_value ;
int relayPin = 6; // Relay für Pumpe
int ldr;
byte tropfen[8] = //Icon für Wassertropf
{
B00100,
B00100,
B01010,
B01010,
B10001,
B10001,
B10001,
B01110,
};
byte thermometer[8] = //Icon für Thermometer
{
B00100,
B01010,
B01010,
B01110,
B01110,
B11111,
B11111,
B01110
};
LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);
dht DHT; //Declaring the DHT as a dht type to use it later
const int dry = 595; // value for dry sensor
const int wet = 239; // value for wet sensor
void setup(){
lcd.begin (16,2);
pinMode(sensor_pin, INPUT);
pinMode(relayPin, OUTPUT);
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
lcd.setBacklight(HIGH);
lcd.home ();
// Wassertropfensymbol auf LCD Speichern
lcd.createChar(1, tropfen);
// Thermometersymbol auf LCD Speichern
lcd.createChar(2, thermometer);
pinMode(12, OUTPUT);// Pflazenlampe
pinMode(A1, INPUT);// Lichtsensor
}
void loop()
{
// Temperatur anzeigen auf dem Display
lcd.setCursor(0,0);
int chk = DHT.read11(DHT11_PIN); //Reading data from the module
lcd.write(2);
lcd.print(DHT.temperature); //Showing temperature value (before that you can do some math to get the temperature in Farnheit)
lcd.print("C");
lcd.setCursor(9,0);
lcd.write(1); //Wassertropfen
lcd.println(DHT.humidity); //Showing humidity percentage
delay(1000); //Refreshing every 1s
// Bodenfeuchtigkeit anzeigen auf dem Display
lcd.clear();
lcd.setCursor(0,1);
output_value= analogRead(sensor_pin);
output_value = map(output_value,dry,wet,1,99);
lcd.print("Bodenfeuchte:"); //Wassertropfen
lcd.print(output_value);
lcd.println("%");
// Pumpe steuern
if(output_value<2){
digitalWrite(relayPin, LOW);
}
else
{
digitalWrite(relayPin, HIGH);
}
{
// Pflanzenlampe Steuern
ldr = analogRead(A1);
if(ldr > 700)
{
digitalWrite(12, 1);
}
else
{
digitalWrite(12, 0);
}
Serial.println(ldr);
delay(50);
}
}
Nun wie gesagt muss meine Gewächshaus wissen welches Jahreszeit wir haben und dementsprechend beim winter wenig wasser und beim sommer viel wasser pumpen.
Das Gewächshaus muss wissen welches Jahreszeit wir haben, welche eigentlich einfach zu programmieren ist und die ich auch kann. Allerdings muss man das so programmieren, dass es im Winter mit wenig wasser und im Sommer mit viel Wasser versorgt werden muss.
eine Bekannte hat mir empfohlen das mit einem RTC Modul zu machen.
Ja, RTC ist ok, aber welches. Es gibt viele und ich empfehle das DS3231.
Da siehst du dir die Beispiele der Library an und baust die dann in deinen Sketch ein.
Ja genau das verwende ich auch. RTC D3231
Du schreibst das eine RTC ist vorhanden welche?
bei der RTC wird der Monat ausgelesen und entsprechend die Wasser pumpe gesteuert, je nach Bodenfeuchtigkeit.
Mal unabhängig von der Aufgabenstellung: wenn die Pflänzchen im Winter tatsächlich weniger Wasser als im Sommer brauchen, dann reicht doch die Bodenfeuchte? Regelt sich doch von selbst.
Ja könnte eventuell funktionieren, aber der Kapazitiver Bodenfeuchtigkeitssensor kann nicht wissen welches Zeit wir haben.
Falls sie eine Idee dafür haben dann teilen sie diese bitte mit.
Vielen dank
Also Du hast eine DS3231.
Kannst Du Datum und Uhrzeit auslesen?
Hat die Bibliothek die Du zum Auslesen verwendest Beispiele?
Wann sind die Anfängsdatume der Jahreszeiten?
Kannst Du berechnen in welcher Jahreszeit Du bist?
Grüße Uwe
Du sollst keine Fragen stellen, sondern ihr/ihm eine Lösung vorkauen.
Du kennst mich doch, Manchmal nehme ich Dich als Vorbild und geleite den TO zur Erkenntnis.
Grüße Uwe
Hallo ich kann die genaue Uhrzeit und das genaues Datum auslesen. Anfangsdatum beginnt von Heute.
Die Coden findest du Hier:
#include <Wire.h>
#include "RTClib.h"
RTC_DS3231 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
void setup ()
{
Serial.begin(9600);
delay(3000); // wait for console opening
}
void loop ()
{
DateTime now = rtc.now();
Serial.println("Current Date & Time: ");
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
Serial.println(" date 16/03/2022");
Serial.println();
delay(1000);
}
Erkenntnis!
Es gibt nur 3 Wege welche zum Ziel führen!
- Der goldene: Problem analysieren. Lösung erarbeiten. Lösung durchsetzen.
- Der silberne: Genauso machen, wie die anderen. (evtl. zukaufen)
- Der bronzene: Aus Erfahrungen lernen.
Alle anderen Wege führen schnurstracks ins Versagen.
OK, ich habe in #3 auch eine Frage gestellt.
Aber keine "wirkliche" Antwort erhalten.
Du könntest ja mal versuchen, mit dieser Erkenntnis die entsprechende Jahreszeit auszuwerten und die beiden Sketche zusammen zu führen.
Hallo,
Die wichtigste Frage ist doch eigentlich die: "Benötigst du im Winter eine andere Bodenfeuchte als im Sommer? Wenn Du die Frage mit "JA" beantworten kannst, dann könntest Du ein Array anlegen in dem für jeden Monat die Soll-Bodenfeuchte steht. Dann ließt Du von der RTC den Monat aus und steuerst die Wassermenge passend zu den verschiedenen Sollwerten und dem ausgelesen FeuchteWert des Sensors. Wenn Du Eingangsfrage mit "NEIN" beantwortest dann benötigst Du ja immer die selbe Feuchte und die Jahreszeit kann Dir eigentlich wursch sein.
Mit dem Licht ist es ähnlich, da ergibt sich auch die Frage immer möglichst gleich viel Licht oder kann/muss es im Winter dunkler sein.
Eigentlich sehe ich das so, das zu deiner Aufgabe auch das gehört was Combie bereits angesprochen hat. Erst mal eine theoretische Lösung erarbeiten und dann das Ganze in Teilaufgaben zerlegen und die dann praktisch lösen.
Heinz
Eins der Probleme ist:
Jede Art von Programmierung, bedarf einer Abstraktionsarbeit.
Das Problem aus seinem "natürlichen" Zusammenhang ziehen, und dann in Software gießen.
Natürlich muss das im Kopf passieren. Gerne auch auf dem Hilfsmittel Papier gemalt.
Datenflussdiagramme
UML Diagramme
Programmlaufpläne
usw.
Es gibt da viele "Sichtweisen"
Aber in erster Linie passiert das im Kopf.
Und das ist genau die Stelle wo ich, bei einem Gegenüber im Forum, nicht dran komme.
Dafür ist doch der Feuchtigkeit Sensor zuständig oder?
wen im Winter die Feuchte niedriger sein soll wertest das aus und reagierst da drauf.
und sowas ähnliches baust Du für die Jahres zeit.
Oder wurde alles mit Copy/Paste gemacht? Blatt Papier nehmen Abläufe zeichnen und dem entsprechend Programmieren, ist doch kein Hexenwerk, wen man die Beispiele versteht
Andererseits muß man die Jahreszeiten wissen? Genügt nicht nur der Monat?
Meine Mutter hat ein kleines Stück Land mit Äpfelbäumen. Gestern hab ich mit dem Bauern geredet, der alle Gerätearbeiten macht. Bis Ende April/Anfang Mai hab ich Ruhe. Danach muß das Hagelnetz ausgebreitet werden.
Dann Ende Mai bis Juni sind die Zuvieläpfel abzupflücken.
Grüße Uwe