In meiner Zisterne kommen aktuell zwei Leitungen an: 1x CAT7 und 1x 3x1,5mm^2 Erdkabel.
Pumpe
Um die Pumpe anzuschließen, habe ich den Stecker vom Kabel entfernt und dann in einer Abzweigdose mit der Zuleitung verbunden. Hier habe ich extra eine Abzweigdose für den Außenbereich genommen, es wird ja doch recht feucht dort ;)
Hier hängt noch das CAT7 Kabel lose herum...
Ultraschall Sensor
Heute sollte dann CAT7 Kabel auch verwendet werden. Ich habe mich an diesem Artikel orientiert.
Hier die Einkaufsliste:
Code
Der Code aus o.g. Artikel hat bei mir leider nicht funktioniert, da erstens die Includes unvollständig sind und zweitens die Applikation immer auf die Serial Console gewartet hat.
Hier mein leicht modifizierter Code:
// Bibliotheken einbinden
#include <Ethernet.h>
#include <Arduino.h>
// Netzwerk Einstellungen
// Hier die eigene MAC-Adresse eintragen
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xEB };
// UDP Port zum Datenempfang Lox MS -> Arduino
unsigned int ARDUPORT = 7013;
// IP Loxone Miniserver
IPAddress MSIP(192, 168, 15, 148);
// UDP Port zum Datenversand Arduino -> Lox MS
unsigned int MSPORT = 7014;
// Daten-Puffer initalisieren
char packetBuffer[UDP_TX_PACKET_MAX_SIZE];
// UDP Instanz erzeugen
EthernetUDP Udp;
// Die aktiven Pins am Ultraschallsensor festlegen
#define echoPin 8 // Echo
#define trigPin 9 // Trigger
// Konstanteninitialisierung
int maxReichweite = 300; // Maximale Reichweite des US Sensors
int minReichweite = 0; // Minimale Reichweite des US Sensors
// Variablendefinition
long dauer;
float distanz;
char chardistanz[10];
void setup() {
Ethernet.begin(mac);
Udp.begin(ARDUPORT); // Start UDP
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
// Distanz auslesen
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
dauer = pulseIn(echoPin, HIGH);
//Distanz in cm umrechnen
distanz = dauer / 58.2;
// Auswertung von Minimum und Maximum
if (distanz >= maxReichweite || distanz <= minReichweite) {
}
else {
dtostrf(distanz, 4, 0, chardistanz); //Distanz fuer UDP Versand umwandeln
sendUDP(chardistanz); //Ergebnis an MiniServer senden
}
delay(5000); // Wartet 5000 Millisekunden bis zur naechsten Messung
}
//UDP-Befehl senden
void sendUDP(String text)
{
Udp.beginPacket(MSIP, MSPORT);
Udp.print(text);
Udp.endPacket();
delay(10);
}
Montage
Mal wieder in einer Abzweigdose, sitzt der Ultraschallsensor im Schacht und misst den Abstand zur Wasseroberfläche. Die Löcher habe ich professionell mit Heißkleber verschlossen.
Loxone Config
In Loxone habe ich einen virtuellen UDP Eingang für den Arduino auf Port 7013 angelegt und einen virtuellen Eingangsbefehl auf dem die Meßdaten empfangen werden.
Für die Berechnung nutze ich den Radius und Höhe des Wasserstands der Zisterne nach der Formel:
π * r² * h
Da meine Zisterne einen Radius von 119cm hat und eine Füllhöhe von 180cm ergibt sich folgende Rechnung:
π * 119^2 * 180-Füllstandshöhe
Formelbaustein der Loxone Config:
((180-I1)*I3*I2^2)/1000
Für die Auswertung & Darstellung nutze ich einen Statusbaustein:
Außerdem nutze ich die Auswertung des Füllstands für die Steuerung der Pumpe. Diese lässt sich nur aktivieren, wenn der Füllstand der Zisterne mindestens 1.000 Liter beträgt. Geschaltet wird die Pumpe entweder über einen virtuellen Schalter in der App oder einen Schalter im Hauswirtschaftsraum.
*Amazon Affiliate Link