Das ist die Programmversion für active-HIGH-relais
/*
Titel: Temperaturregelung Aquarium
Datum: 29.06.2021
Autor: ribaribi
Hardware: Temperatursensor, 2x Relais, LCD Display, Taster, Arduino Mega
*/
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
const byte DS18B20_DATA = 2; //Daten-Pin für TemperaturSensor DS18B20
const byte Heizung_PIN = 7;
const byte Kuehlung_PIN = 6;
const byte Knopf_PIN = 3;
const byte temp_start = 20;
const byte temp_min = 15;
const byte temp_max = 35;
// angenommen wenn man den IO-pin LOW schaltet wird das Relais
//so geschaltet das der Kontakt geschlossen = HEIZUNG EINgeschaltet ist
const byte EIN = HIGH;
const byte AUS = LOW;
OneWire oneWire(DS18B20_DATA);
DallasTemperature sensors(&oneWire);
int knopf;
int soll_Temp;
void setup() {
Serial.begin(115200); // im seriellen Monitor als Baudrate auch 115200 einstellen
Serial.println( F("Setup-Start") );
lcd.init();
lcd.backlight();
sensors.begin();
pinMode(Heizung_PIN, OUTPUT);
pinMode(Kuehlung_PIN, OUTPUT);
digitalWrite(Heizung_PIN, AUS);
digitalWrite(Kuehlung_PIN, AUS);
pinMode(Knopf_PIN, INPUT_PULLUP);
}
void loop() {
if (soll_Temp == 0) {
soll_Temp = temp_start;
}
knopf = digitalRead(Knopf_PIN);
if (knopf == 0) {
soll_Temp = soll_Temp + 1;
}
if (soll_Temp > temp_max) {
soll_Temp = temp_min;
}
sensors.requestTemperatures();
float temp (sensors.getTempCByIndex(0));
lcd.setCursor(0, 0);
lcd.print("Temperatur Aquarium");
lcd.setCursor(0, 1);
//lcd.print("Aktuell: ");
lcd.print("active HIGH");
lcd.print(String(temp, 1));
lcd.print("\337C ");
lcd.setCursor(0, 2);
lcd.print("Soll: ");
lcd.print(soll_Temp);
lcd.print(".0\337C ");
Serial.print( F("temp=") ); // name der Variable auasgeben
Serial.print(temp); // Inhalt der Variable ausgeben
Serial.print( F(" soll_Temp - 2: ") );
Serial.print(soll_Temp - 2); // Ergebnis der Berechnung soll_Temp - 2 ausgeben
Serial.println(); // println print-line in die nächste Zeile springen
Serial.print( F("temp=") ); // name der Variable auasgeben
Serial.print(temp); // Inhalt der Variable ausgeben
Serial.print( F(" soll_Temp + 2: ") );
Serial.print(soll_Temp + 2); // Ergebnis der Berechnung soll_Temp + 2 ausgeben
Serial.println(); // println print-line in die nächste Zeile springen
if (temp <= soll_Temp - 2) {
Serial.println( F("Bedingung (temp <= soll_Temp - 2) ist TRUE") );
Serial.println( F("Kühlung aus, Heizung ein") );
lcd.setCursor(0, 3);
lcd.print("Heizung EIN");
digitalWrite(Heizung_PIN, EIN);
digitalWrite(Kuehlung_PIN, AUS);
}
if (temp >= soll_Temp + 2) {
Serial.println( F("Bedingung (temp >= soll_Temp + 2) ist TRUE") );
Serial.println( F("Kühlung ein, Heizung aus") );
lcd.setCursor(0, 3);
lcd.print("Kuehlung EIN");
digitalWrite(Kuehlung_PIN, EIN);
digitalWrite(Heizung_PIN, AUS);
}
if (temp == soll_Temp) {
Serial.println( F("Bedingung (temp == soll_Temp) ist TRUE") );
Serial.println( F("Heizung und Kühlung aus") );
digitalWrite(Heizung_PIN, AUS);
digitalWrite(Kuehlung_PIN, AUS);
}
if (!digitalRead(Heizung_PIN) && !digitalRead(Kuehlung_PIN))
{
Serial.println( F("Bedingung (!digitalRead(Heizung_PIN) && !digitalRead(Kuehlung_PIN) ist TRUE") );
lcd.setCursor(0, 3);
lcd.print("Temperatur OK ");
}
delay(500);
}