Hallo zusammen,
In meiner Berufsschule müssen wir ein Projekt realisieren, welches wir selbst wählen durften. Ich und ein Kollege möchten eine Automatisierte Pflanzenzuchtbox bauen, welche über folgende Funktionen verfügt:
- Automatische Regulierung der Belüftung, abhängig von Temperatur
- Automatische Beleuchtung
- Automatische Bewässerung
Da ich weder Erfahrungen mit Arduino, noch Programmierkenntnisse habe, habe ich meinen Code bis jeztt nur mit Proteus 8 simuliert. Allerdings bin ich jetzt an einem Punkt angekommen, an dem mir Beispiele aus dem Internet und Simulationen nicht mehr weiterhelfen. Wen ich die Simulation starte, funktioniert alles bestens, bis der loop teil des Codes zum ersten mal durchlaufen ist. Danach friert die RTC ein und der Code läuft nicht weiter. Nun kann der Fehler, meiner Meinung nach, an drei Orten sein: Der Code ist falsch, die Verdrahtung ist falsch oder Proteus 8 simuliert etwas falsch.
Wen Jemand Zeit hat und mir vielleicht den einen oder anderen Tip geben könnte, wäre ich sehr dankbar
Das ist mein Code:
#include "Wire.h"
#include "LiquidCrystal_I2C.h"
#include "DHT.h"
#include "RTClib.h"
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
RTC_DS1307 rtc;
DateTime now;
LiquidCrystal_I2C lcd(0x20, 4, 5, 6, 0, 1, 2, 3, 7, NEGATIVE);
//---------------------------------------------Temp. / Beleuchtung / Bewässerung
int wTemp = 24; //Legt die Wunschtemperatur fest
int lampOn = 10; //Einschaltzeit der Lampe (HH)
int lampOff = 21; //Ausschaltzeit der Lampe (HH)
int BewOnStd = 21; //Einschaltzeit der Pumpe (HH)
int BewOnMin = 00; //Einschaltzeit der Pumpe (MM)
//---------------------------------------------Lüfterparameter Abluft
int tempMinA = 10;
int tempMaxA = wTemp + 10;
int fanSpeedA;
int fanLCDA;
int fanA = 11;
//---------------------------------------------Lüfterparameter Zuluft
int tempMinB = 10;
int tempMaxB = wTemp + 10;
int fanSpeedB;
int fanLCDB;
int fanB = 10;
void setup()
{
Serial.begin(57600);
dht.begin();
lcd.begin(20,4);
rtc.begin();
pinMode(fanA, OUTPUT); //Legt Pin 11 als Ausgang fest (Abluft)
pinMode(fanB, OUTPUT); //Legt Pin 10 als Ausgang fest (Zuluft)
pinMode(7, OUTPUT); //Legt Pin 7 als Ausgang fest (Lampe)
pinMode(6, OUTPUT); //Legt Pin 6 als Ausgang fest (Pumpe)
lcd.setCursor(0,0);
lcd.print("Status");
lcd.setCursor(0,1);
lcd.print("Feu.");
lcd.setCursor(8,1);
lcd.print("%");
lcd.setCursor(10,1);
lcd.print("Temp.");
lcd.setCursor(17,1);
lcd.write(0b11011111); // Grad Zeichen
lcd.setCursor(0,2);
lcd.print("Zul.");
lcd.setCursor(8,2);
lcd.print("%");
lcd.setCursor(10,2);
lcd.print("Bel.");
lcd.setCursor(0,3);
lcd.print("Abl.");
lcd.setCursor(8,3);
lcd.print("%");
lcd.setCursor(10,3);
lcd.print("Bew.");
delay(1000);
}
void loop()
{
int h = dht.readHumidity();
int t = dht.readTemperature();
now = rtc.now();
int st = now.hour();
int mi = now.minute();
//---------------------------------------------Daten anzeigen
//-----------------------------Zeit
lcd.setCursor(15,0);
if (st<10){ //Anzeigen der Aktuellen Uhrzeit (Stunden)
lcd.print(0);
}
lcd.print(st);
lcd.setCursor(17,0);
lcd.print(":");
lcd.setCursor(18,0);
if (mi<10){ //Anzeigen der Aktuellen Uhrzeit (Minuten)
lcd.print(0);
}
lcd.print(mi);
//-----------------------------Luftfeuchtigkeit
lcd.setCursor(6,1);
lcd.print(h); //Anzeigen der Luftfeuchtigkeit
//-----------------------------Temperatur
lcd.setCursor(15,1);
lcd.print(t); //Anzeigen der Temperatur
//-----------------------------Abluft
lcd.setCursor(6,2);
lcd.print(fanLCDA); //Anzeigen der Lüfterauslastung Abluft
//-----------------------------Beleuchtung
lcd.setCursor(15,2);
if (digitalRead(7) == HIGH) //Status der Lampe.
lcd.print("Ein");
else
lcd.print("Aus");
//-----------------------------Zuluft
lcd.setCursor(6,3); //Cursorposition auf LCD 6,3
lcd.print(fanLCDB); //Anzeigen der Lüfterauslastung Zuluft
//-----------------------------Pumpe
lcd.setCursor(15,3); //Cursorposition auf LCD 15,3
if (digitalRead(6) == HIGH) //Status der Pumpe
lcd.print("Ein");
else
lcd.print("Aus");
//---------------------------------------------Steuerung der Beleuchtung
if(now.hour() >=lampOn && now.hour() <lampOff) //Lampe einschalten wen die momentane Stundenzeit gleich oder
{ //über der Einschaltzeit und unter der Ausschaltzeit ist.
digitalWrite(7, HIGH);
}
else
{
digitalWrite(7, LOW);
}
//---------------------------------------------Steuerung der Pumpe
if(now.hour() == BewOnStd && now.minute() == BewOnMin) //Pumpe einschalten wen die momentane Stunden und Minutenzeit
{ //gleich der Eincshaltzeit der Pumpe ist.
digitalWrite(6, HIGH);
}
else
{
digitalWrite(6, LOW);
}
//---------------------------------------------Steuerung der Zuluft
if(t < tempMinA)
{
fanSpeedA = 0;
digitalWrite(fanA, LOW);
}
if((t >= wTemp) && (t <= tempMaxA))
{
fanSpeedA = map(t, tempMinA, tempMaxA, 32, 255);
fanLCDA = map(t, tempMinA, tempMaxA, 0, 99);
analogWrite(fanA, fanSpeedA);
}
delay(5);
//---------------------------------------------Steuerung der Abluft
if(t < tempMinB)
{
fanSpeedB = 0;
digitalWrite(fanB, LOW);
}
if((t >= wTemp) && (t <= tempMaxB))
{
fanSpeedB = map(t, tempMinB, tempMaxB, 32, 255);
fanLCDB = map(t, tempMinB, tempMaxB, 0, 99);
analogWrite(fanB, fanSpeedB);
}
delay(5);
}
Hier noch ein Screenshot von Proteus 8: Link. Ich bin für jede Hilfe dankbar
Liebe Grüsse
Adriano
PS: Ich benutze einen Arduino Mega 2560 mit einem I2C 20x4 Display, einen DHT11 Temperatursensor und eine DS1307 RTC, welche ebenfalls per I2C angeschlossen ist.