Komfort Füllstandmessung mit Hydrostatik Sensor, OLED Display und HomeMatic Anbindung

Entwicklung und Bau von Hardware aller Art, die im HM-Umfeld eingesetzt werden kann

Moderator: Co-Administratoren

automation-fan
Beiträge: 20
Registriert: 25.12.2018, 15:36
Danksagung erhalten: 5 Mal

Re: Komfort Füllstandmessung mit Hydrostatik Sensor, OLED Display und HomeMatic Anbindung

Beitrag von automation-fan » 25.11.2019, 13:31

Hallo zusammen,

der von mir verwendete Sensor hat einen Messbereich von 0-5m und ist nur für Wasser geeignet. Das Kabel hat 6 m. Ich habe dieses dann verlängert und
die Auswerteeinheit in einem trockenen Kellerraum angebracht. Ist ja aufgrund der Stromschnittstelle unproblematisch.

Es gibt ihn auch für 0-10m mit 11m Kabel oder für Öl. Beide werden dann schon deutlich teurer als die von mir bezahlten 35 EUR.

Speziell bei der Verwendung in Heizöl würde ich ein Qualitätsprodukt vorziehen, aber da ist man dann schnell bei 150-300 EUR. Lohnt sich sicherlich nur für den professionellen Einsatz.

Gruss Automation-Fan

Benutzeravatar
NilsG
Beiträge: 1685
Registriert: 09.08.2013, 23:44
System: CCU
Hat sich bedankt: 381 Mal
Danksagung erhalten: 30 Mal
Kontaktdaten:

Re: Komfort Füllstandmessung mit Hydrostatik Sensor, OLED Display und HomeMatic Anbindung

Beitrag von NilsG » 25.11.2019, 14:02

Ok, Danke!

0-5m könnte ggf. reichen, da der Brunnen ja eh NIE komplett bis zum Deckel voll ist.

Auswerteeinheit im "trocknen Kellerraum" wird schon schwieriger; die müsste entweder im Brunnen bzw. am/im Schuppen - als Feuchtwarm - hängen :|
11m Kabel werden es aber locker sein müssen vom Brunnen bis zum/in den Schuppen.
Steht die Kabel-Länge in irgendeinem Verhältnis zu den Messwerten?!

Ließe sich da was "feuchtraumtaugliches" schaffen?!

Ich muss mich ja langsam, aber sicher mal mit einer Alternative befassen, sofern ich meine LevelJet nicht mehr zum Laufen bringe :| :cry:

Nils
Grüße und DANKE! 🍻

Nils

-----------------------------------------
CCU3 + 2x LAN-Gateway

automation-fan
Beiträge: 20
Registriert: 25.12.2018, 15:36
Danksagung erhalten: 5 Mal

Re: Komfort Füllstandmessung mit Hydrostatik Sensor, OLED Display und HomeMatic Anbindung

Beitrag von automation-fan » 25.11.2019, 19:39

Niels

11 m Kabellänge sollten kein Problem für die Genauigkeit werden, ist ja der Vorteil der 4-20mA Schnittstelle gegenüber einer Spannungsmessung.
Wenn du den Sensor wie ich über das HM Modul überträgst hast du eh nur 255 Werte zur Auflösung.

Ich hab meine Platinen noch mi Platinenlack versiegelt das sollte gegen Kondenswasser helfen. Denk aber dran wenn du dauerhaft misst brauchst du eine Stromversorgung, da die 4-20 mA je permanent fliesen. Mit ner Batterie wird das nix.

Gruß
Automation-Fan

Beowolf
Beiträge: 654
Registriert: 15.07.2006, 12:50
Wohnort: Greven
Hat sich bedankt: 13 Mal
Danksagung erhalten: 18 Mal

Re: Komfort Füllstandmessung mit Hydrostatik Sensor, OLED Display und HomeMatic Anbindung

Beitrag von Beowolf » 15.12.2019, 23:32

Bist Du mit der Anleitung, Software usw. schon weiter gekommen?
Ich würde den gerne nachbauen.

Im Moment habe ich dieses im Einsatz.

https://forum.iobroker.net/topic/16773/ ... lsonde/156

Ich würde Deine "Version" auch gerne mal testen

Grüße
Manfred

Beowolf
Beiträge: 654
Registriert: 15.07.2006, 12:50
Wohnort: Greven
Hat sich bedankt: 13 Mal
Danksagung erhalten: 18 Mal

Re: Komfort Füllstandmessung mit Hydrostatik Sensor, OLED Display und HomeMatic Anbindung

Beitrag von Beowolf » 15.12.2019, 23:35

Alexxx2005 hat geschrieben:
25.11.2019, 09:11
und kann man den für Heizöl nehmen ?

Grüße Alex
Ich habe auch so einen Pegelsensor. Den gibt es beim netten Chinesen auch für Heizöl.

https://forum.iobroker.net/topic/16773/ ... lsonde/157

https://de.aliexpress.com/item/32817435 ... 4c4deYKSwZ

Grüße
Manfred

automation-fan
Beiträge: 20
Registriert: 25.12.2018, 15:36
Danksagung erhalten: 5 Mal

Re: Komfort Füllstandmessung mit Hydrostatik Sensor, OLED Display und HomeMatic Anbindung

Beitrag von automation-fan » 06.01.2020, 21:04

Hallo,

So hatte über die Weihnachtsferien etwas Zeit und habe nun meinen 2. Füllstandmesser gebaut.
Der erste läuft seit Mai 19 ohne Störung und nun ist es an der Zeit meine 2. Zisterne damit auszurüsten-

Folgende Funktionen laufen bereits:
-Füllstand und Temperatur am Gerät anzeigen
-Füllstand an die HM-Zentrale senden und am PC und Handy anzeigen
-Sensorüberwachung, bei Störung am Gerät un in der HM anzeigen
-Email Benachrichtigung bei niedrigen Füllstand
-Remote Steuerung meiner Pumpe lokal am Füllstandmesser oder über die HM am PC/Handy

Hier schon mal die Doku für Interessierte. Wie gesagt, ich habe vor 20 Jahren das letzte mal programmiert. SW kann man bestimmt schlanker und komfortabler realisieren. Die SW läuft bei mir aber seit Mai 19 ohne Probleme.

Nächste Schritte:
Evtl. graph. Darstellung des Füllstand am OLED
Optimierung Email Benachrichtigung und Sensorüberwachung
Einbindung in Bewässerungsanlage und Berücksichtigung der Wettervorhersage
usw.
Fuellstand1.jpg
Temp1.jpg
Layout/Schaltung
Fuellstandanzeiger_V1_0.pdf
(998.9 KiB) 149-mal heruntergeladen
Füllstandsmessung.JPG
Gruß
Automation-Fan



Code: Alles auswählen

//*******************************************************************************************************
//***Füllstandmessung mit 4-20 mA Hydrostatic Sensor - Temperaturmessung mit BME280  und OELD Ausgabe***
//***                   Version 2.0.a 28.04.2019  Automation Fan                                     ***
//*******************************************************************************************************


//*** Anlagen Daten Zisterne 2, zur Kalibrierung: Sensor 23 cm über Boden (offset); 33 (55) cm = 1000 Liter gemesssen; 190(213)cm =5757 Liter = max Füllstand 

// *** Spannungsmessung, Umsetzung 4-20mA Sensor Wert in 8 Bit Wert zur Übergabe an Homematic ***

const auto DEBUG_ENABLE = true; // Debugmodus einschalten
const auto BAUD_RATE = 9600; // baud rate for monitoring [bits/s]
int Offset4mA =  51; // Offset sensor = 4,18 mA * 239 Ohm = 1 V; 1/5V * 1023=205/4=51
int Fuellstand_Liter = 0; // Füllstand zurücksetzen
int Zisterne_max = 15658; // theoretisches max Fassungsvermögen bei 5 Meter Füllstand der Zisterne in Liter
byte highByte, lowByte;
int Pause_Ausgabe = 20000; //Pause bis zum nächsten Durchlauf


// *** BME280 Sensor,  Temperaturmessung über I2C Bus  zur Ausgabe an OLED ***
#include <Wire.h> //I2C Bus
#include <SPI.h> //I2C Bus
#include <Adafruit_Sensor.h> //BME280
#include <Adafruit_BME280.h> //BME280
#define BME_SCK 13
#define BME_MISO 12
#define BME_MOSI 11
#define BME_CS 10
#define SEALEVELPRESSURE_HPA (1013.25)

int offsettemp = 1; //Korrekturwert Temperatur

Adafruit_BME280 bme; // I2C
unsigned long delayTime;


//*** OLED 128x64,  Kontrolldisplay zur lokalen Anzeige von Füllstand und Temperatur ***

#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);


// OLED Funktion ***
void textausgabe(void) {
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setCursor(10, 0);
  display.setTextSize(2); // Draw 2X-scale text
  display.println(F(""));
  display.print(F("  "));
  display.print(bme.readTemperature() - offsettemp);
  display.print(F(" C"));
  display.display();      // Show initial text
  delay(3000);
  display.clearDisplay();
  display.setTextSize(1); // Draw 1X-scale text
  display.setTextColor(WHITE);
  display.setCursor(10, 0);
  display.println(F(""));
  display.println(F("   Zisterne Garten "));
  display.println(F(""));
  display.println(F(""));
  display.setTextSize(2); // Draw 2X-scale text
  display.print(F("   "));
  display.print(Fuellstand_Liter);
  display.print(F(" l"));
  display.display();      // Show initial text
  delay(1000);


}


//*** Kontrollausgabe am Seriellen Monitor ***

void setup() {
  // put your setup code here, to run once:
  const auto DEBUG_ENABLE = true; // enable debug messages over serial port
  Serial.begin(9600);// Baudrate 9600

  //*** Spannungsmessung, Umsetzung 4-20mA Sensor Wert in 8 Bit Wert zur Übergabe an Homematic ***

  Serial.println(F(" "));
  Serial.println(F("***Fuellstandmessung 4-20mA***"));
  Serial.println(F("***Uebergabe 8Bit an HM***"));


  pinMode(LED_BUILTIN, OUTPUT);

  // HomeMatic 8-bit transmitter
  // set PB0 - PB4 and PD5 - PD7 to output
  DDRB |= 0b00011111;
  DDRD |= 0b11100000;

  if (DEBUG_ENABLE) {
    Serial.begin(BAUD_RATE);

  }

  // Serial.println(F("BME280 test"));

  bool status;

  // default settings
  // (you can also pass in a Wire library object like &Wire2)
  status = bme.begin(0x76);
  if (!status) {
    Serial.println("Could not find a valid BME280 sensor, check wiring!");
    while (1);
  }

  Serial.println("-- BME280 Sensor ok --");
  delayTime = 1000;


  Serial.println();

  //************************************************
  // OLED initialisieren
  // Serial.begin(9600);

  // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3C for 128x64
    Serial.println(F("SSD1306 allocation failed"));
    for (;;); // Don't proceed, loop forever
  }

  // Clear the buffer
  display.clearDisplay();


  //display.display(); // is NOT necessary after every single drawing command,
  // unless that's what you want...rather, you can batch up a bunch of
  // drawing operations and then update the screen all at once by calling
  // display.display(). These examples demonstrate both approaches...




  textausgabe();    // Draw test text
}



// *** Funktion Spannungsmessung, Umsetzung 4-20mA Sensor Wert in 8 Bit Wert zur Übergabe an Homematic ***
int Fuellstandsensor() {
  int i;
  int MessV = 0; // Spannungsmessung am Pin =0
  int MessVavg = 0; // Durchschnittswert der Spannungsmessung
  int MessVavg8bit = 0; // Durchschnittswert der Spannungsmessung auf 8 Bit umgerechnet
  for (i = 0; i < 20; i++) {
    MessV = MessV + analogRead(0); //- Offset4mA;   // sensor on analog pin 0
  }
  MessVavg = MessV / 20;    //  calculate the average
  MessVavg8bit = (MessVavg / 4) - Offset4mA;    // scale to 8 bits (0 - 255) and deduct 4mA offset
  return MessVavg8bit;
}




// ***Hauptprogramm***

void loop() {
  // put your main code here, to run repeatedly:
  int Fuellstand;

  Fuellstand = Fuellstandsensor();

  //Berechnung  Füllstand in Liter  und Ausgabe auf Seriellen Monitor
  Fuellstand_Liter = ((float)76.755) * Fuellstand;
  //Fuellstand_Liter = ((float)59.6535) * Fuellstand - float(4098);
  // Fuellstand_Liter = ((float)Zisterne_max / (float)254) * Fuellstand;

  // fl = ((float)maxSteps / (float)PotiMax) * sensorValue;
  // Step = (long)(maxSteps * sensorValue) / PotiMax;
  Serial.print (Fuellstand_Liter);
  Serial.print("\t");
  Serial.print(F("Liter"));
  Serial.println("");

  //Sensorüberwachung
  if (Fuellstand_Liter < 0) Serial.println (" Füllstansensor pruefen !");
  if (Fuellstand_Liter < 0) Fuellstand = 255; // Fehlerausgabe an HM
  if (Fuellstand_Liter > 1000) Serial.println (" genug drin !");;


  //*** Es werden 2 Ports benötigt, da PORDB teilweise für Debug verwendet wird ***

  lowByte =  Fuellstand & 0x1F; // Nur die unteren 5 Bit PB0-PB4
  PORTB = lowByte;
  // Serial.println (lowByte);//Ausgabe zu Testzwecken

  highByte = Fuellstand & 0xE0; // Nur die oberen 3 Bit PD5-PD7
  PORTD = highByte;
  // Serial.println (highByte); //Ausgabe zu Testzwecken
  Serial.print(F("8 Bit Wert: "));
  Serial.print("\t");
  Serial.println (highByte + lowByte);//Ausgabe zu Testzwecken


  // blink led - LED Ausgabe wenn Messung erfolgt ist
  digitalWrite(LED_BUILTIN, HIGH);
  delay(250);
  digitalWrite(LED_BUILTIN, LOW);



  //BME280 Ausgabe

  printValues();
  delay(delayTime);

  textausgabe();    // Draw scrolling text

  delay(Pause_Ausgabe);
}

void printValues() {
  Serial.print("Temperature = ");
  Serial.print(bme.readTemperature() - offsettemp);
  Serial.println(" *C");
  Serial.print("Humidity = ");
  Serial.print(bme.readHumidity());
  Serial.println(" %");

  Serial.println();
}

Benutzeravatar
NilsG
Beiträge: 1685
Registriert: 09.08.2013, 23:44
System: CCU
Hat sich bedankt: 381 Mal
Danksagung erhalten: 30 Mal
Kontaktdaten:

Re: Komfort Füllstandmessung mit Hydrostatik Sensor, OLED Display und HomeMatic Anbindung

Beitrag von NilsG » 06.01.2020, 21:14

Sehrt geil ...

Baust Du die auch "im Auftrag"?!?

Nils
Grüße und DANKE! 🍻

Nils

-----------------------------------------
CCU3 + 2x LAN-Gateway

automation-fan
Beiträge: 20
Registriert: 25.12.2018, 15:36
Danksagung erhalten: 5 Mal

Re: Komfort Füllstandmessung mit Hydrostatik Sensor, OLED Display und HomeMatic Anbindung

Beitrag von automation-fan » 06.01.2020, 21:27

Hallo Nils,

leider nein, dafür fehlt mit die Zeit. Obwohl ich weitestgehend Module verwende braucht man doch ca 2-3 h fürs Löten und nochmal 1/2 h für die mech Bearbeitung und das Lackieren.

Ab morgen bin ich wieder in der Firma eingespannt und dann geht nur noch Feintunning an dem Projekt. Würde zwar auch Spass machen aber.....

Gruß
Automation-Fan

Simulant
Beiträge: 31
Registriert: 13.03.2021, 19:19
System: CCU
Hat sich bedankt: 2 Mal
Danksagung erhalten: 1 Mal

Re: Komfort Füllstandmessung mit Hydrostatik Sensor, OLED Display und HomeMatic Anbindung

Beitrag von Simulant » 13.04.2021, 23:21

Moin,
der thread liegt ja schon eine Weile brach. Ich hole ihn trotzdem noch mal hoch.
Ich würde gerne meine Zisterne ebenfalls mit einem Drucksensor überwachen. Gefällt mir irgendwie besser als die UltraSchall Lösung.
Allerdings brauche ich eigentlich kein Display und auch sonst keine Zusatzfunktionen.
Mir reicht die Info des Füllstandes in der CCU.
Bin daher nicht sicher ob es sich für mich lohnt, die hier beschriebene Variante nachzubauen oder ob es ggf. was einfacheres gibt.
Jemand einen Tip??

Frage: Meine Zisterne ist ein liegender Zylinder mit "nur" 3500L, die Füllhöhe ist also nur ca. 1,5 m. Wenn ich es richtig verstanden habe
heißt das, vom Messbereich eines 5m Sensors, nutze ich nur 30%. Umgerechnet auf meine 3500L und eine Auflösung von 256/20mV das (bei einem Behälter mit geraden Wänden) eine Genauigkeit von ca. 41 Litern. Sehe ich das richtig?

Kurzes Update:
Die Frage hat sich erledigt. Hab mir statt dessen nach der Anleitung von Mathias https://github.com/mdzio/hm-currentloop
die "hm-currentloop" Platine zusammen gelötet. Das reicht für meine Anforderungen voll und ganz.
Danke für die vielen Rückmeldungen ;-)
Gruß,
Karsten
CCU3(RaspberryMatic) mit CUxD und Mediola und ca. 90 Komponenten (überwiegend HmIP)
dazu
Raspi 4 mit "Historian" und "AnalyzerXS" zur Überwachung der CCU

Antworten

Zurück zu „Hardwareentwicklung und Selbstbau von Aktoren und Sensoren“