Wasserstands Kontrolle in einer Wasser Versitzgrube

Fertige Geräte mit Bilden, Schaltungen, Programmen vorstellen.
Antworten
Benutzeravatar
Admin
Administrator
Beiträge: 1244
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Wasserstands Kontrolle in einer Wasser Versitzgrube

Beitrag von Admin »

Wir fangen das Regenwasser vom kompletten Hausdach in einer Regenwasser Taverne auf, die etwa 5qm³ fast. Das Wasser wird zum Garten giesen, und für die Kloospülung verwendet.

Wenn sie voll ist, läuft das Regenwasser in die Sickergrube über, aus der das Wasser dann im Garten versickert. Da ist allerdings ein Problem. Das Wasser versickert bei sehr starken Regen nicht schnell genug. Da diese Sickergrube unter einem Poolhaus liegt, wird im Falle dess Überlaufs der Boden des Poolhauses in Mitleidenschaft gezogen. Was natürlich nicht lustig ist, da der Holzboden dadurch kaputt geht. Ich dachte eigentlich die Sickergrube hat so um die 4 Meter Tiefe, aber das sind nur 2,5 Meter. :roll: Da wird klar, dass die bei Starkregen schnell mal voll ist. Also werden wir da vielleicht noch eine Tauchpumpe reinbauen, die von meinem Kotrollgerät dann eingeschalten wird, wenn das Wasser Richtung Oberkannte der Sickergrube steigt. Also kurz bevor das Wasser dann eh übergeht. Dann habe wir eine kontrollierten Überlauf. Die andere Möglichkeit wäre, wenn uns mein Kontrollgerät warnt, eine Tauchpumpe zur Schadensabwendung in die Sickergrube stellen, und dann manuell abpumpen.

Also habe ich mir die Tage das Gerät gebaut, das die Wassertiefe in der Sickergrube misst, und auf ein Display meldet. Der Sensor misst die Wassersäule die auf ihm lastet und gibt die Daten in 4-20mA aus. Betrieben wird der Sensor mit 24 Volt. Ausserdem sitzt das Gerät an der Glastüre vom Poolhaus. Ein sehr greller LED Ring mit 24 LEDs signalisiert nach Aussen den Wasserstand in Gefahrstufen. Diese Lichtblitze können wir von Haus aus sehen, wenn wir aus dem Fenster in den Garten schauen. Später mache ich vielleicht noch eine Erweiterung über WLAN aufs Handy.

Unter 0,5 Meter, zeigt es nur im Display die Höhe in cm an. Und der LED - Ring ist blau, seeehr Langsam blinkend.
Über 0,5 Meter, bis unter 1,0 Meter der LED Ring leuchtet Grün Langsam blinkend.
Über 1,0 Meter, bis unter 1,5 Meter der LED Ring leuchtet Gelb Schnell blinkend.
Über 1,5 Meter, bis unter 2,0 Meter der LED Ring leuchtet Rot Schnell blinkend.
Über 2,0 Meter, der LED Ring leuchtet Rot / Weiß abwechselnd Schnell blinkend. Das zeigt dann seeeehr deutlich, dass wir schnell was tun müßen.
Bei 2,5 Meter gibts Nasse Füße im Poolhaus !!

Schaltung, Bilder, Programm, bringe ich nach wenn ich es am Wochenende getestet habe.

Servus Franz :(V):

Hier ist mal ein erstes Bild von der Kiste mit dem Sensor. Das schwarze Kabel ist 6m lang und der Sensor kann in eine Wassertiefe von 5 Meter abgesenkt werden, und hat einen Messbereich bis 5 Meter.
.
Wasserpegel-Alarm_V01.jpg
Wasserpegel-Alarm_V01.jpg (952.67 KiB) 627 mal betrachtet
Benutzeravatar
Admin
Administrator
Beiträge: 1244
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Wasserstands Kontrolle in einer Wasser Versitzgrube

Beitrag von Admin »

Inzwischen habe ich die Messungen geändert, und die CPU Versorgung mit einem Fetten Kondensator 10.0000µF Stabilisiert. Die LED´s sind ja auch auf 5 Volt, und dadurch kommt durch das schnelle ein und aus der 24 LED´s Unruhe in die Messungen. Ich messe jetzt 5x im Abstand von 2 Sek. und nehme dann den Durchschnitt aus den 5 Messungen. So wird ein bischen stabiler. Das Display schalte ich dunkel, wenn der Pegel unterhalb 20cm ist, dass es nicht Tag und Nacht in Betrieb ist. Dass das Gerät am arbeiten ist, wird durch langsammes nacheinander ein und aus der 24 LED´s mit geringster Leuchtstärke angezeigt. Es muß ja immer Gewährleistet sein, dass das Gerät den Wasserpegel auch wirklich überwacht. Ich möchte daher immer sehen, ob es arbeitet. Bei Starkregen, hatten wir im Poolhaus schon mal extrem nasse Füße, weil das Regenwasser dort nicht schnell genug abgelaufen ist. So sehen wir jetzt immer, ob diese Versitzgrube gefährlich voll wird, und können rechtzeitig eine Tauchpumpe reinschmeissen.

Franz
Benutzeravatar
Admin
Administrator
Beiträge: 1244
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Wasserstands Kontrolle in einer Wasser Versitzgrube

Beitrag von Admin »

Hier ist mal der Schaltplan dazu. Ist was recht einfaches.
.
Wassertiefen Sensor bis 5 Meter.JPG
Wassertiefen Sensor bis 5 Meter.JPG (279.47 KiB) 206 mal betrachtet
Und das Programm dazu:

Code: Alles auswählen

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
// LCD Display I2C 4 Zeilen je 20 Zeichen einrichten
#include <LiquidCrystal_I2C.h> // LCD Display
// Displayadresse ist 0x27 oder 0x3F
LiquidCrystal_I2C lcd(0x3F, 20, 4);
// Welcher Pin des Arduino ist mit den NeoPixels verbunden?
#define PIN            6
// Wie viele NeoPixel sind an den Arduino angeschlossen?
#define NUMPIXELS  24

// Wenn wir die NeoPixel-Bibliothek einrichten, teilen wir ihr mit, wie viele Pixel und welcher Pin zum Senden von Signalen verwendet werden soll.
// Beachten Sie, dass Sie bei älteren NeoPixel-Streifen möglicherweise den dritten Parameter ändern müssen - siehe Strandtest
// Beispiel für weitere Informationen zu möglichen Werten.
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
int delayval = 40; // Schleifen Wartezeit
int i = 0;  // Wile Schleifenzähler
int i2 = 24; // Wile Gegenzähler
byte f = 0; // FarbDurchgangs Nummer
byte r = 0;
byte g = 100;
byte b = 0;
const byte ANALOG_PIN = A0; // Messeingang von Sesor
int Messwert = 0;
unsigned long Messwert2 = 0;
int Wasserstand = 0;
int Messwertx5 = 0;
int Ergebnis = 0;
byte Zaehler = 0;
unsigned long Sekundenablauf01 = 0; // Messung und Ausgabe 2 Sekunden
const unsigned long Pausezeit01 = 2000;
//##############################################################################
//########################## SETUP #############################################
//##############################################################################
void setup() {
  Serial.begin(9600);
  // Dies ist für Trinket 5V 16MHz, Sie können diese drei Leitungen entfernen, wenn Sie kein Trinket verwenden
#if defined (__AVR_ATtiny85__)
  if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
#endif
  // Ende des Sondercodes für Schmuckstücke

  //Eingang vom Sensor
  pinMode(ANALOG_PIN, INPUT);      // Eingang für Poti
  // NeoPixel-Bibliothek Initialisierung.
  pixels.begin();
  //-----------LCD Display Start----------------------------------------------
  lcd.begin();
  lcd.backlight();
  lcd.clear();
  //-----------Display Maske erstellen----------------------------------------
  lcd.setCursor (0, 0);            // Zeile 1
  lcd.print (F(" Wasserstand Melder "));
  lcd.setCursor (0, 1);            // Zeile 2
  lcd.print (F(" ################## "));
  lcd.setCursor (1, 3);            // Zeile 3
  lcd.print (F("Stand cm ="));
}
//############################################################################
//########################## LOOP ############################################
//############################################################################
void loop() {
  //--------------Analogen Eingang auslesen-----------------------------------
  if (millis() - Sekundenablauf01 >= Pausezeit01)  // 2 Sekunden abgelaufen?
  {
    Messwert = analogRead (ANALOG_PIN);
    if (Zaehler < 5)
    {
      Zaehler ++;
      Messwertx5 = Messwertx5 + Messwert;
    }
    if (Zaehler == 5)
    {
      Ergebnis = Messwertx5 / 5;
    }
    if (Zaehler == 5)
    {
      Zaehler = 0;
      Messwertx5 = 0;
    }
    if (Zaehler == 0)
    {
      Messwert2 = map(Ergebnis, 200, 1023, 0, 625);
      // -------------Umrechnung in cm Wassertiefe-------------------------------
      Wasserstand = (Messwert2 * 125) / 100; // Umrechung auf cm. Jede Stufe ist 1,25cm
      if ((Wasserstand < 1) || (Wasserstand > 300)) 
      {
        Wasserstand = 0;
      }
      if (Wasserstand < 20)
      {
        lcd.noBacklight();
      }
      else
      {
        lcd.backlight();
      }
      // ------------------Ausgabe aufs Display-----------------------------------
      lcd.setCursor (14, 3);
      lcd.print ("     ");
      lcd.setCursor (14, 3);
      lcd.print (Wasserstand);
    }
  }
  //--------------------------------------------------------------------------
  // Für einen Satz von NeoPixeln ist das erste NeoPixel 0, das zweite ist 1, bis hin zur Anzahl der Pixel minus eins.
  for (i = 0; i < NUMPIXELS; i++) {
    i2 = i2 - 1;
    // pixels.Color nimmt RGB-Werte, von  0,0,0 bis 255,255,255
    // Neustart Farbe blau einstellen
    if (f == 0) {
      r = 0; g = 0; b = 0; // Dunkel
    }
    pixels.setPixelColor(i, pixels.Color(r, g, b)); // Mäßig hellgrüne Farbe.
    pixels.show(); // Dadurch wird die aktualisierte Pixelfarbe an die Hardware gesendet.

    pixels.setPixelColor(i2, pixels.Color(r, g, b)); // Mäßig hellgrüne Farbe.
    pixels.show(); // Dadurch wird die aktualisierte Pixelfarbe an die Hardware gesendet.

    delay(delayval); // Verzögerung für einen bestimmten Zeitraum (in Millisekunden).
    if (i == 23) {
      i2 = 24;
      //delay(1000);  // 1 Sekunde stopp wenn Farbe voll
    }
  }
  //--------------------------------------------------------------------------
  //---------------LED Farben für die verschiedenen Wasserstände--------------
  //--------------------------------------------------------------------------

  //--------------------------------------------------------------------------
  //------------------Farben für unter 0,5 Meter Pegel = Dunkel-----------------
  //--------------------------------------------------------------------------
  if (Wasserstand < 50)
  {
    f++;
    if (f == 1) {
      // Dunkel
      r = 0; g = 0; b = 0;
      i = 0;
      i2 = 24;
    }
    if (f == 2) {
      // Dunkel
      r = 0; g = 0; b = 5; // Betriebsanzeige, wenn Wasser Pegel unter 50cm und Diplay aus.
      i = 0;
      i2 = 24;
    }
    if (f == 3) {
      f = 0;
      i2 = 24;
    }
    delayval = 500; // Schleifen Wartezeit
  }
  //--------------------------------------------------------------------------
  //--------------------Farben für größer 0,5 Meter Pegel = Grün----------------
  //--------------------------------------------------------------------------
  if ((Wasserstand >= 50) && (Wasserstand < 100))
  {
    f++;
    if (f == 1) {
      // Dunkel
      r = 0; g = 0; b = 0;
      i = 0;
      i2 = 24;
    }
    if (f == 2) {
      // Grün
      r = 0; g = 255; b = 0;
      i = 0;
      i2 = 24;
    }
    if (f == 3) {
      f = 0;
      i2 = 24;
    }
    delayval = 40; // Schleifen Wartezeit
  }
  //-------------------------------------------------------------------------
  //---------------------Farben für größer 1 Meter Pegel = Gelb--------------
  //-------------------------------------------------------------------------
  if ((Wasserstand >= 100) && (Wasserstand < 150))
  {
    f++;
    if (f == 1) {
      // Dunkel
      r = 0; g = 0; b = 0;
      i = 0;
      i2 = 24;
    }
    if (f == 2) {
      // gelb
      r = 255; g = 85; b = 0;
      i = 0;
      i2 = 24;
    }
    if (f == 3) {
      f = 0;
      i2 = 24;
    }
    delayval = 10; // Schleifen Wartezeit
  }
  //-------------------------------------------------------------------------
  //---------------------Farben für größer 1,5 Meter Pegel = Rot---------------
  //-------------------------------------------------------------------------
  if ((Wasserstand >= 150) && (Wasserstand < 200))
  {
    f++;
    if (f == 1) {
      // Dunkel
      r = 0; g = 0; b = 0;
      i = 0;
      i2 = 24;
    }
    if (f == 2) {
      // Rot
      r = 255; g = 0; b = 0;
      i = 0;
      i2 = 24;
    }
    if (f == 3) {
      f = 0;
      i2 = 24;
    }
    delayval = 10; // Schleifen Wartezeit
  }
  //------------------------------------------------------------------------
  //----------------Farben für größer 2 Meter Pegel = Rot / Weiß------------
  //------------------------------------------------------------------------
  if (Wasserstand >= 200)
  {
    f++;
    if (f == 1) {
      // Dunkel
      r = 0; g = 0; b = 0;
      i = 0;
      i2 = 24;
    }
    if (f == 2) {
      // Rot
      r = 255; g = 0; b = 0;
      i = 0;
      i2 = 24;
    }
    if (f == 3) {
      // Dunkel
      r = 0; g = 0; b = 0;
      i = 0;
      i2 = 24;
    }
    if (f == 4) {
      // Grell Weiß
      r = 255; g = 255; b = 255;
      i = 0;
      i2 = 24;
    }
    if (f == 5) {
      f = 0;
      i2 = 24;
    }
    delayval = 10; // Schleifen Wartezeit
  }
  //-----------------------------------------------------------------------
  // -----------------------LOOP Ende -------------------------------------
}
So verrichtet das Gerät im Moment bei mir seinen Dienst. Und läuft wunderbar.
Franz
Benutzeravatar
Admin
Administrator
Beiträge: 1244
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Wasserstands Kontrolle in einer Wasser Versitzgrube

Beitrag von Admin »

Ich hatte ein paar Kämpfe mit dem externen Netzteil 24 Volt 2 Ampere. Ich wollte dafür ein Steckernetzteil, denn eines mit extra Netzkabel ist nicht so toll zum benutzen. Da hängt immer ein Netzteil in der Gegend rum. Also ich habe eines bekommen von Völkner mit 24 Volt 2 Ampere. Das astrein funktioniert. Diese billgen China Kracher sind dafür nicht zu empfehlen. Die meisten Lieferanten haben diese Dinger schon nicht mehr im Programm, weil sie nicht wirklich zuverlässig funktionieren. Die brechen teilweise 2 Volt ein, bei der Last. Kommen gar nicht erst hoch, wenn sie unter Last hochfahren müßen. Kann man also nicht empfehlen. Das von Völkner ist Made in Taiwan und kostet das doppelte, aber das sollte es wert sein, weil es bei 2 Ampere nur um 200mV einbricht. Das ist schon eine andere Hausnummer als 2 Volt. Also dafür lieber bischen mehr Geld hinlegen un dafür dann weniger Stress haben.

Franz
Antworten

Zurück zu „Fertige Projekte Vorstellen“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste