INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Wasser-Sensor
23.02.2019, 12:14
Beitrag #1
Wasser-Sensor
Hallo Zusammen,

ich bin gerade dabei eine Steuerung für eine Osmose-Anlage zu bauen.
Dazu müssen 4 Magnetventile angesteuert werden...soweit kein Problem.

Hierbei wollte ich aber bei Undichtigkeiten des Systems (Wasserschaden) über mehrere Sensoren alles überwachen.
Bei Wasseraustritt sollen dann alle Ventile über Interrupt geschlossen werden.

Nun habe ich den klassischen Bodenfeuchtesensor (Pommesspieß) ausgetestet.
Analog geht der gut, digital nicht zu gebrauchen oder meine sind defekt.
Egal wohin ich die Schaltschwelle mit dem Poti drehe, Wasser detektiert er nicht, nur direkten Kurzschluss der 2 Pins.

https://de.aliexpress.com/item/Smart-Ele...65225.html

Ich hätte dazu einen Fühler gebastelt, der über 2 V2A-Unterlegscheiben, die den Boden berühren, das Wasser detektieren könnte und wollte ihn einfach an der obigen Platine anschließen....siehe oben :o(

Kennt jemand eine einfache Schaltung oder fertige Einheiten (bezahlbar), mit der das digital funktioniert (Bin da DaU)?

Danke & Gruß

Lite
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.02.2019, 12:25
Beitrag #2
RE: Wasser-Sensor
Wenn er analog funktioniert, dann nutze ihn doch analog. Hauptsache, Du bekommst eine Anzeige, ob Wasser da ist.
Ist das destilliertes Wasser oder ist da was drin, was sich ionisieren läßt (Leitfähigkeit)?

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.02.2019, 12:35
Beitrag #3
RE: Wasser-Sensor
Hallo Tommy,

ist Osmosewasser, also sehr gering leitfähig.

Zur Not kann ich aber um den Sensor etwas Salz streuen oder ihn auf ein kleines Tuch legen, welches mit Salz "imprägniert" ist.

Zum Analogen:
Ich dachte per Interrupt kann nur digital ausgewertet werden, beim Nano also nur Int0 und Int1 ?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.02.2019, 12:49
Beitrag #4
RE: Wasser-Sensor
Wozu brauchst Du einen Interrupt? Das Wasser wird nicht innerhalb weniger µs alles überschwemmen.
Wenn Dein Sketch blockierungsfrei ist, so dass der Loop innerhalb einiger zig ms durch ist, ist das immer noch schnell genug.
Wenn Dein loop langsamer ist, hast Du schlecht programmiert.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.02.2019, 14:11
Beitrag #5
RE: Wasser-Sensor
Naja, ich bin in einigen Funktionen unterwegs, die bis zu 30 Minuten laufen.

Als Anfänger ist es da am einfachsten einen Interrupt zu nehmen, damit das Programm-Chaos trotzdem sicher in die Abschaltung der Magnetventile geht.

Ich müsste also in jede Funktion nachträglich eine sinnige Schleife mit Abfrage des Sensors bauen oder aber den kpl. Sketch (derzeit 6,5kB) umbauen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.02.2019, 14:32
Beitrag #6
RE: Wasser-Sensor
(23.02.2019 14:11)Lite schrieb:  Naja, ich bin in einigen Funktionen unterwegs, die bis zu 30 Minuten laufen.
...
Es ist ein sehr schlechter Programmierstiel wenn dann auch bestimmte Funktionen nur alle 30 Minuten laufen. Das ist besser lösbar.
Wie Tommy schon schreibt ist es kein Problem ein Programm so zu schreiben dass jede Funktion innerhalb einiger Millisekunden abläuft. Und dennoch sind dann Zeiten von 30 Minuten für bestimmte Aufgaben machbar. Stichwort: millis()

Wenn es die Einbausituation zulässt nimm Schwimmerschalter für die Leckageerkennung.
Mit einem Öffner als Kontakt hast Du sogar einen Schutz bei einem Leitungsbruch.

Gruß Arne
Mit zunehmender Anzahl qualifizierter Informationen bei einer Fragestellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.02.2019, 14:37
Beitrag #7
RE: Wasser-Sensor
(23.02.2019 14:11)Lite schrieb:  Naja, ich bin in einigen Funktionen unterwegs, die bis zu 30 Minuten laufen.
Da zeige mal den Code. Das geht bestimmt besser.

(23.02.2019 14:11)Lite schrieb:  Als Anfänger ist es da am einfachsten einen Interrupt zu nehmen, damit das Programm-Chaos trotzdem sicher in die Abschaltung der Magnetventile geht.
Total falsch. Die Nutzung des Interrupts soll nur von den eigenen Schwächen ablenken.

(23.02.2019 14:11)Lite schrieb:  Ich müsste also in jede Funktion nachträglich eine sinnige Schleife mit Abfrage des Sensors bauen oder aber den kpl. Sketch (derzeit 6,5kB) umbauen.
Mit hoher Warhscheinlichkeit nicht, Du musst nur blockierungsfrei programmieren.

Zeige uns doch mal Deinen Sketch. Wenn er < 9000 Zeichen ist, stelle ihn bitte in Codetags.
Wie das geht, steht hier.
Wenn er größer ist, hänge ihn als Attachment an.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.02.2019, 14:41 (Dieser Beitrag wurde zuletzt bearbeitet: 23.02.2019 14:46 von Lite.)
Beitrag #8
RE: Wasser-Sensor
Ja Arne, ist mir klar, daß ich (noch) keinen sauberen Programmstil hin bekomme.
Ich bin schon froh, daß der Sketch soweit funktioniert....vielleicht habe ich mir da zu Anfang auch zu viel vorgenommen.

Meine alte, manuelle Osmoseanlage geht eher Gestern als morgen ins Nirwana, ich bin da leider in Zeitdruck.

Deshalb wäre jetzt eben eine Meldung über Interrupt die schnellste und einfachste Lösung....sie führt zum Ziel.

Das geht mit Sicherheit besser Tommy, hier mein noch unfertiges Chaos:

Code:
//  BIBLIOTHEKEN EINBINDEN
#include <OneButton.h>
//Pin 12 als Taster-Eingang
OneButton button(12, true);

#include <LiquidCrystal_I2C.h>
//LCD 16x2 an Adresse 0x3F oder falls es nicht geht, ggf. an 0x27
LiquidCrystal_I2C lcd(0x3F, 16, 2);

//■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■​■■■■

//  DIGITALE PINS KONFIGURIEREN
//Digi Pin 1 > Mosfet > MV1 (Rohwasser > Osmosefilter-System)
const byte Rohwasser = 1;

//Digi Pin 2 > Feuchtesensor im Digitalmodus per Interrupt (Int0)
const byte Nass = 2;

//Digi Pin 3 < Schwimmerschalter NC (Behälter VOLL) per Interrupt (Int1)
const byte Voll = 3;

//Digi Pin 4 > Taster-LED (Anforderungstaster)
const byte TasterLED = 4;

//Digi Pin 5 > Mosfet > MV3 (Reinwasser > Glasbehälter)
const byte Reinwasser = 5;

//Digi Pin 6 > Mosfet > MV2 (Stehwasser > Abfluss)
const byte StehwasserSpuelung = 6;

//Digi Pin 9 > Mosfet > MV1 (Membranspülung > Abfluss)
const byte MembranSpuelung = 9;

//Digi Pin 13 > aktiver Piezo-Summer
const byte Piezo = 13;

//■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■​■■■■

//  VARIABLEN DEKLARIEREN
//Aktuell abgelaufene Füllzeit des Behälters in millis
volatile unsigned long Fuellzeit;

//Zeitpunkt der letzten Reinwasserproduktion in millis
volatile unsigned long LastReinwasser;

//Maximale Füllzeit (5min) des Behälters in millis
const long Fuellzeit_Grenzwert = 300000;

//Maximale Pausen-Zeit (15min) für Stehwasser in millis
const long Stehzeit_Grenzwert = 900000;

//Maximale Pausen-Zeit (6h) für Membranspülung in millis
const long Pause_Grenzwert = 21600000;

//(2,5min) für Stehwasserspüldauer in millis
const long Spuelzeit_Stehw = 150000;

//(20s) für Membranspüldauer (Nachspülung) in millis
const long Spuelzeit_Membran = 20000;

//(20s)"Nachleuchtdauer" des LCD-Backlight nach Funktionsende
const int Backlight = 20000;

//(3s) zeigt das Display den ausgewählten Zyklus an, bevor es damit startet
const int Meldung = 3000;

//■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■​■■■■

//  SETUP
void setup()
{
  //LCD-Display
  //LCD initialisieren
  lcd.init();

  // Setup Serial connection
  Serial.begin(115200);

  //Initialisieren des Displays mit 16 Zeichen und 2 Zeilen
  lcd.setCursor(16, 2);

  //Arduino
  //Eingang für Schwimmerschalter
  pinMode(Voll, INPUT_PULLUP);

  //Interner Pull up Widerstand für Schwimmerschalter auf 5V
  digitalWrite(Voll, HIGH);

  //Interner Pull up Widerstand für Schwimmerschalter (NC) auf 5V
  attachInterrupt(0, Func_Nass, HIGH);  //Wenn Voll=Pin 2 (INT 0) auf 5V (HIGH) geht, Func_Nass aufrufen

  //Interner Pull up Widerstand für Schwimmerschalter (NC) auf 5V
  attachInterrupt(1, Func_Voll, HIGH);  //Wenn Voll=Pin 3 (INT 1) auf 5V (HIGH) geht, Func_Voll aufrufen

  //Mit internem Pullup-Widerstand (Anforderungs-Taster schaltet auf Masse)
  pinMode(12, INPUT_PULLUP);

  //Ausgang für Betriebs-LED
  pinMode(TasterLED, OUTPUT);

  //Eingang für Feuchtesensor  ***************************************************************************​**
  pinMode(Nass, INPUT);

  //Ausgang über MosFet auf Magnetventil 1
  pinMode(MembranSpuelung, OUTPUT);

  //Ausgang über MosFet auf Magnetventil 2
  pinMode(StehwasserSpuelung, OUTPUT);

  //Ausgang über MosFet auf Magnetventil 3
  pinMode(Reinwasser, OUTPUT);

  //Ausgang über MosFet auf Magnetventil 4
  pinMode(Rohwasser, OUTPUT);

  //Ausgang für aktiven Piezo (Alarm für Feuchte_Behaelter und Feuchte_Filter und Quittierung Tastendruck)
  pinMode (Piezo, OUTPUT);

  //Alle Magnetventile ZU
  digitalWrite(Rohwasser, LOW);
  digitalWrite(Reinwasser, LOW);
  digitalWrite(MembranSpuelung, LOW);
  digitalWrite(StehwasserSpuelung, LOW);

  //Deklaration, bei welchen Clicks zu welcher Funktion gesprungen werden soll
  button.attachClick(Func_Anforderung);
  //  button.attachDoubleClick(Func_Doppelt);  //Wird noch nicht verwendet
  button.attachDuringLongPress(Func_Filterwechsel);

} //Ende Setup

//■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■​■■■■

//  HAUPTSCHLEIFE

void loop()
{
  //Überwachung des Tasters
  button.tick();
  //int A = 0;
  //if (A==1) button.attachDoubleClick(Func_Irgendwas);

}   //Ende Loop

//■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■​■■■■

//  FUNKTION WASSERAUSTRITT (NASS)
void Func_Nass()
{
  digitalWrite(Rohwasser, LOW);
  digitalWrite(Reinwasser, LOW);
  digitalWrite(MembranSpuelung, LOW);
  digitalWrite(StehwasserSpuelung, LOW);

  //Display löschen.
  lcd.clear();

  //LCD-Backlight einschalten
  lcd.backlight();

  //Cursor positionieren
  lcd.setCursor ( 0, 3 );

  //Textausgabe
  lcd.print("ALARM");

  //Cursor positionieren
  lcd.setCursor ( 1, 1 );

  //Textausgabe
  lcd.print ("WASSERAUSTRITT");

} //Ende Func_Nass

//■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■​■■■■

//  FUNKTION BEHÄLTER VOLL
void Func_Voll()
{

  //Magnetventil schließen
  //MV3 schließen
  digitalWrite(Reinwasser, LOW);

  //Display löschen.
  lcd.clear();

  //LCD-Backlight einschalten
  lcd.backlight();

  //Cursor positionieren
  lcd.setCursor ( 0, 1 );

  //Textausgabe
  lcd.print("BEHÄLTER VOLL");

  //Cursor positionieren
  lcd.setCursor ( 1, 0 );

  //Textausgabe
  lcd.print ("Gehe in Standby");

  //MV2 schließen
  digitalWrite(StehwasserSpuelung, LOW);

  //MV1 und MV4 verzögert schließen (Kurze Membran-Nachspülung)
  digitalWrite(MembranSpuelung, HIGH);
  digitalWrite(Rohwasser, HIGH);
  delay(Spuelzeit_Membran);
  digitalWrite(Rohwasser, LOW);
  digitalWrite(MembranSpuelung, LOW);

  //Zeitstempel für LastReinwasser wird "resettet"
  LastReinwasser = millis();

  //Display leuchtet noch kurze Zeit nach
  delay (Backlight);

  //LCD-Backlight ausschalten
  lcd.noBacklight ();

  //Taster-LED ausschalten
  digitalWrite(TasterLED, LOW);

} //Ende Func_Voll

//■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■​■■■■

//  FUNKTION MANUELLE ANFORDERUNG ÜBER TASTER
void Func_Anforderung()
{
  //Überwachung des Tasters
  button.tick();

  //LCD-Backlight einschalten
  lcd.backlight();

  //Taster-LED einschalten
  digitalWrite(TasterLED, HIGH);

  //Display löschen.
  lcd.clear();

  //LCD-Backlight einschalten
  lcd.backlight();

  //Cursor positionieren
  lcd.setCursor ( 0, 5 );

  //Textausgabe
  lcd.print("ZYKLUS");

  //Cursor positionieren
  lcd.setCursor ( 1, 3 );

  //Textausgabe
  lcd.print ("Reinwasser");

  delay(Meldung);

  //################################################################################​###########################

  //Reinwasser, wenn die Pause < Stehzeit_Grenzwert und Behälter leer
  while (Pause_Grenzwert - (millis() - LastReinwasser) < Stehzeit_Grenzwert && Voll == LOW)
  {
    digitalWrite(Rohwasser, HIGH);

    while (Fuellzeit_Grenzwert > (millis() - LastReinwasser))
    {
      digitalWrite(Reinwasser, HIGH);

      //Display löschen.
      lcd.clear();

      //LCD-Backlight einschalten
      lcd.backlight();

      //Cursor positionieren
      lcd.setCursor ( 0, 1 );

      //Textausgabe
      lcd.print("Behälter wird");

      //Cursor positionieren
      lcd.setCursor ( 1, 4 );

      //Textausgabe
      lcd.print ("gefüllt");

    } //Ende von while

    //Zeitstempel für LastReinwasser wird "resettet"
    LastReinwasser = millis();

    break;

  } //Ende von while

  //################################################################################​###########################

  //Stehwasserspülung, wenn die Pause >= Pause_Grenzwert dauerte und Behälter leer, dann Reinwasser
  while (Pause_Grenzwert - (millis() - LastReinwasser) >= Pause_Grenzwert && Voll == LOW)
  {
    digitalWrite(Reinwasser, LOW);
    digitalWrite(StehwasserSpuelung, HIGH);
    digitalWrite(Rohwasser, HIGH);

    //Display löschen.
    lcd.clear();

    //LCD-Backlight einschalten
    lcd.backlight();

    //Cursor positionieren
    lcd.setCursor ( 0, 1 );

    //Textausgabe
    lcd.print("REINWASSER");

    //Cursor positionieren
    lcd.setCursor ( 1, 1 );

    //Textausgabe
    lcd.print ("Stehwasserspül.");

    //Delay für die Stehwasserspüldauer
    delay(Spuelzeit_Stehw);
    digitalWrite(StehwasserSpuelung, LOW);

    // Reinwasserproduktion AN

    //Zeitstempel für LastReinwasser wird "resettet"
    LastReinwasser = millis();

    //################################################################################​###########################

    while (Fuellzeit_Grenzwert < (millis() - LastReinwasser))
    {
      digitalWrite(Reinwasser, HIGH);

      //Display löschen.
      lcd.clear();

      //LCD-Backlight einschalten
      lcd.backlight();

      //Cursor positionieren
      lcd.setCursor ( 0, 1 );

      //Textausgabe
      lcd.print("Behälter wird");

      //Cursor positionieren
      lcd.setCursor ( 1, 4 );

      //Textausgabe
      lcd.print ("gefüllt");

    } //Ende von while

    //Zeitstempel für LastReinwasser wird "resettet"
    LastReinwasser = millis();

  } //Ende von while

  //Display leuchtet noch kurze Zeit nach
  delay (Backlight);

  //LCD-Backlight ausschalten
  lcd.noBacklight ();

  //################################################################################​###########################

  //Membranspülung und Stehwasserspülung, wenn Pause > Stehzeit_Grenzwert & < Pause_Grenzwert und Behälter leer, dann Reinwasser
  while (Pause_Grenzwert - (millis() - LastReinwasser) >= Stehzeit_Grenzwert && Pause_Grenzwert - (millis() - LastReinwasser < Pause_Grenzwert && Voll == LOW))
  {
    digitalWrite(Reinwasser, LOW);
    digitalWrite(MembranSpuelung, HIGH);
    digitalWrite(Rohwasser, HIGH);

    //Display löschen.
    lcd.clear();

    //LCD-Backlight einschalten
    lcd.backlight();

    //Cursor positionieren
    lcd.setCursor ( 0, 3 );

    //Textausgabe
    lcd.print("REINWASSER");

    //Cursor positionieren
    lcd.setCursor ( 1, 1 );

    //Textausgabe
    lcd.print ("Membranspülung");

    //Delay für die Membranspüldauer
    delay (Spuelzeit_Membran);
    digitalWrite(MembranSpuelung, LOW);

    //################################################################################​###########################

    digitalWrite(StehwasserSpuelung, HIGH);
    //Delay für die Stehwasserspüldauer
    delay (Spuelzeit_Stehw);
    digitalWrite(StehwasserSpuelung, LOW);

    //Reinwasserproduktion AN
    digitalWrite(Reinwasser, HIGH);

    //Display löschen.
    lcd.clear();

    //LCD-Backlight einschalten
    lcd.backlight();

    //Cursor positionieren
    lcd.setCursor ( 0, 1 );

    //Textausgabe
    lcd.print("Behälter wird");

    //Cursor positionieren
    lcd.setCursor ( 1, 4 );

    //Textausgabe
    lcd.print ("gefüllt");

    //Zeitstempel für LastReinwasser wird "resettet"
    LastReinwasser = millis();

    //################################################################################​###########################

    while (Fuellzeit_Grenzwert > (millis() - LastReinwasser))
    {
      digitalWrite(Reinwasser, HIGH);

      //Display löschen.
      lcd.clear();

      //LCD-Backlight einschalten
      lcd.backlight();

      //Cursor positionieren
      lcd.setCursor ( 0, 1 );

      //Textausgabe
      lcd.print("Behälter wird");

      //Cursor positionieren
      lcd.setCursor ( 1, 4 );

      //Textausgabe
      lcd.print ("gefüllt");

    } //Ende von if

    //Zeitstempel für LastReinwasser wird "resettet"
    LastReinwasser = millis();

  } //Ende von if

}   //Ende Func_Anforderung

//■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■​■■■■

//  FUNKTION FILTERWECHSEL
void Func_Filterwechsel()
{
  //Überwachung des Tasters
  button.tick();

  //Display löschen.
  lcd.clear();

  //LCD-Backlight einschalten
  lcd.backlight();

  //Taster-LED einschalten
  digitalWrite(TasterLED, HIGH);

  //Display löschen.
  lcd.clear();

  //LCD-Backlight einschalten
  lcd.backlight();

  //Cursor positionieren
  lcd.setCursor ( 0, 5 );

  //Textausgabe
  lcd.print("ZYKLUS");

  //Cursor positionieren
  lcd.setCursor ( 1, 1 );

  //Textausgabe
  lcd.print ("Filterwechsel");

  delay(Meldung);

  //Magnetventile schalten
  digitalWrite(Reinwasser, LOW);
  digitalWrite(MembranSpuelung, HIGH);
  digitalWrite(Rohwasser, HIGH);

  //Display löschen.
  lcd.clear();

  //Cursor positionieren
  lcd.setCursor ( 0, 1 );

  //Textausgabe
  lcd.print("FILTERWECHSEL");

  //Display löschen.
  lcd.clear();

  //Cursor positionieren
  lcd.setCursor ( 1, 1 );

  //Textausgabe
  lcd.print ("Membranspülung");

  //Delay von 3min für die Membranspüldauer
  delay(180000);

  //################################################################################​###########################

  digitalWrite(MembranSpuelung, LOW);
  digitalWrite(StehwasserSpuelung, HIGH);

  //Display löschen.
  lcd.clear();

  //LCD-Backlight einschalten
  lcd.backlight();

  //Cursor positionieren
  lcd.setCursor ( 0, 1 );

  //Textausgabe
  lcd.print("FILTERWECHSEL");

  //Cursor positionieren
  lcd.setCursor ( 1, 1 );

  //Textausgabe
  lcd.print ("Stehwasserspül.");

  //Delay von 10min für die Stehwasserspüldauer
  delay(600000);

  //################################################################################​###########################

  digitalWrite(StehwasserSpuelung, LOW);

  //Zeitstempel für LastReinwasser wird "resettet"
  LastReinwasser = millis();

  //Display leuchtet noch kurze Zeit nach
  delay (Backlight);

  //LCD-Backlight ausschalten
  lcd.noBacklight ();

} //Ende Func_Filterwechsel

//■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■​■■■■

//  FUNKTION DESINFIZIERUNG DES FILTERSYSTEMS
void Func_Desinfizierung()
{

  //Überwachung des Tasters
  button.tick();

  //Display löschen.
  lcd.clear();

  //LCD-Backlight einschalten
  lcd.backlight();

  //Cursor positionieren
  lcd.setCursor ( 0, 5 );

  //Textausgabe
  lcd.print("ZYKLUS");

  //Cursor positionieren
  lcd.setCursor ( 1, 2 );

  //Textausgabe
  lcd.print ("Desinfektion");

  delay(Meldung);

  //Magnetventile schalten
  digitalWrite(Reinwasser, HIGH);

  for (byte i = 0; i < 4; i++)
  {
    digitalWrite(Rohwasser, HIGH);
    //Delay von 30s für die Spülphase (~250ml)

    //Display löschen.
    lcd.clear();

    //LCD-Backlight einschalten
    lcd.backlight();

    //Cursor setzen
    lcd.setCursor ( 0, 2 );

    //Textausgabe
    lcd.print("DESINFEKTION");

    //Cursor setzen
    lcd.setCursor ( 1, 1 );

    if (i == 0)
    {
      lcd.clear();
      lcd.setCursor ( 0, 1 );
      lcd.print ("Vorfilter 5my");
    }

    //################################################################################​###########################

    if (i == 1) {
      lcd.clear();
      lcd.print ("Aktivkohlefilter");
    }

    //################################################################################​###########################

    if (i == 2)
    {
      lcd.clear();
      lcd.setCursor ( 0, 1 );
      lcd.print ("Vorfilter 1my");
    }

    if (i == 3)
    {
      lcd.clear();
      lcd.setCursor ( 0, 2 );
      lcd.print ("Osmosefilter");
    }

    //################################################################################​###########################

    delay(30000);
    digitalWrite(Rohwasser, LOW);
    //Delay von 10min für die Einwirkphase
    delay(600000);
  } //Ende der for-Schleife

  //Abschaltung und Ende
  digitalWrite(Rohwasser, LOW);
  digitalWrite(Reinwasser, LOW);

  //Zeitstempel für LastReinwasser wird "resettet"
  LastReinwasser = millis();

  //Display leuchtet noch kurze Zeit nach
  delay (Backlight);

  //LCD-Backlight ausschalten
  lcd.noBacklight ();

} //Ende Func_Desinfizierung
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Frage zum AJ-SR04M Sensor Franz54 22 5.492 23.02.2019 22:51
Letzter Beitrag: Franz54
  Health-Solution mit Arduino: AD8232 Analog Heart Rate Sensor dilbert 4 879 15.01.2019 14:59
Letzter Beitrag: dilbert
  Wasser in einen Ht-Rohr dedektieren Fips 19 2.855 30.11.2018 11:06
Letzter Beitrag: Fips
  Hall Sensor Traktor 26 4.457 11.02.2018 15:49
Letzter Beitrag: Tommy56
  Temperatursensor von Seeed Grove - High Temperature Sensor donut 9 2.055 05.06.2017 23:00
Letzter Beitrag: Bitklopfer
  Touch Sensor als EIN-AUS Schalter HDT 15 3.936 23.04.2017 16:24
Letzter Beitrag: HDT
  Optische Maus als Sensor? Binatone 9 3.920 07.04.2017 13:55
Letzter Beitrag: Binatone
  Doppel Hall Sensor? Binatone 2 1.699 03.01.2017 06:50
Letzter Beitrag: Binatone
  Details zu Laser Sensor WS87005 Franz54 1 2.407 13.12.2016 18:04
Letzter Beitrag: Tommy56
  Gyroskop/Kompass Sensor AlphaRay 9 3.333 10.10.2016 14:41
Letzter Beitrag: AlphaRay

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste