NEWS
Druckmessung
-
Na klasse! Bis dahin sieht's doch gut aus
Willst du jetzt als Nächstes testen ob sich der Analogwert im Arduino ändert wenn sich der Druck in deinem Sensor ändert, oder wollen wir uns dran machen die Daten über die Schnittstelle zu bringen?
-
Ich entschuldige mich gleich vorab, ich hab den Beitrag nur überflogen - vielleicht ist eh schon alles klar oder überflüssig.
Ich habe mich auch mal mit so einem Sensor gespielt - meine (sehr dürftige) Dokumentation findet ihr im Anhang.
Eigentlich sollte das auch mit Tasmota funktionieren - der A-D-Wandler (ADS1115) wird angeblich unterstütz.
LG Schubi
-
Naja- Tasmota bzw. MQTT überhaupt wäre schon eine Alternative. Dann braucht Rainer aber eine Netzwerkanbindung, also entweder ein WiFi-Shield für den Arduino (gibt's aber nicht für den Nano) oder gleich einen ESP8266 verwenden…
Ich glaube wir bleiben jetzt erstmal bei Rainers Aufbau mit dem 8bit-Schnittstellenmodul.
-
Willst du jetzt als Nächstes testen ob sich der Analogwert im Arduino ändert wenn sich der Druck in deinem Sensor ändert, `
Hab ich schon, aber stärker als bis 27 kann ich nicht pustenHabe jetzt auch noch an der Konfig des Sendemoduls gespielt, jetzt kommen Werte (230), aber die ändern sich beim Pusten fast gar nicht.
Außerdem verstehe ich die 7 möglichen Modi nicht ganz,
in der Bedienungsanleitung ist das auch nur knapp beschrieben
https://files.elv.com/Assets/Produkte/1 … 17_web.pdf
Gruß
Rainer
-
Ja ist schon klar - ich will da nicht klugscheißen - war nur als Zusatzinfo gedacht.
Ich werde jetzt aber aus gegebenem Anlass mal die Sache mit Tasmota probieren.
-
Ja ist schon klar - ich will da nicht klugscheißen - war nur als Zusatzinfo gedacht. `
Danke dafür!Ich nehme dir das ja auch nicht krumm - im Gegenteil.
ich bin halt mit Arduino, ESP & Co nicht allzu fit, und dachte in dem 8-Bit Sendemodul wäre bereits der 8-Bit A/D WEandler integriert, als ich ihn gekauft hatte.
Meine Idee war: anklemmen -> läuft
jetzt komme ich endlich meinem Ziel etwas näher.
Gruß
Rainer
-
Ja, hab so was befürchtet. Wer weiß bei wieviel Druck der Sensor dann mal 4,5 Volt liefert.
Als erstes lasse mal in der folgenden Zeile im Sketch:
sensorValue = analogRead(sensorPin)/4; //weil der Arduino mit 10 bit Auflösung misst, wir aber nur 8 bit übertragen können
das "/4" weg. Wenn der Wert offensichtlich nicht größer als ungefähr 100 ist brauchen wir ihn auch erstmal nicht teilen. Später musst du dann mal testen welche Werte bei echtem Wasserdruck ankommen, ggf. können wir die Referenzspannung des Analogeingangs heruntersetzen…
Mit der Konfig des Sendemoduls kenne ich mich leider auch nicht wirklich aus. Wie gesagt - hab kein solches Dingens.
Du hast geschrieben dass jetzt Werte kommen - stimmen die mit dem im Seriellen Monitor angezeigten Analogwert überein?
-
Das einfache zuerst:
@Thisoft:- stimmen die mit dem im Seriellen Monitor angezeigten Analogwert überein? `
nein!
25-27 im Arduino (manchmal 24)
230 in der WebUI, manchmal 229
ändert sich aber nicht beim pusten, wird da eher minimal niedriger - das kann aber daran liegen, dass das Sendemodul anscheinend einen Trigger braucht (siehe Modi)
/4 nehme ich jetzt raus
EDIT:
Wert liegt beim Arduino jetzt um ohne Druck bei 100 - in der WebUI bei 154
EDIT2: bei kräftigem pusten geht er im Arduino auf 109; in der WebUI auf 148
EDIT3: Habe in der Konfiguration die Eingänge des Moduls invertiert, jetzt passen die Werte!!!!
- stimmen die mit dem im Seriellen Monitor angezeigten Analogwert überein? `
-
OK.
Der Messwert bzw. die Differenz zwischen Pusten oder nicht ist noch nicht so ganz zu gebrauchen. Aber sei's drum. Kümmern wir uns erstmal um die Übermittlung. Mit den Modi wann was getriggert wird das wirst du vermutlich noch herausfinden müssen
Ändere mal im Arduino-Sketch die Setup-Prozedur wie folgt:
void setup() { Serial.begin(9600); for (int digitPIN = firstDigitPIN; digitPIN <= firstDigitPIN + 7; digitPIN += 1){ pinMode(digitPIN, OUTPUT); } Serial.println("Gestartet"); for (int testVal = 0; testVal <= 250; testVal += 10){ sendValue(testVal); delay(Zykluszeit*1000); } }
Damit wird beim Starten des Arduino ein Wert in Zehnerschritten hochgezählt und das solltest du ja relativ gut in der WebUI verifizieren können.
EDIT: -hab gerade dein EDIT3 gesehen. Dann ist das ja auch gut - bin ich wohl irgendwo mit Low- und High-Aktiv durcheinander geraten - musst du den Sketch nicht ändern… Dann wäre es gut wenn du als Nächstes ermitteln könntest was der Drucksensor für Werte im "Echtbetrieb" also mit Wasser liefert...
-
wenn du als Nächstes ermitteln könntest was der Drucksensor für Werte im "Echtbetrieb" also mit Wasser liefert… `
komme gerade aus dem Garten/Werkstatt weil ich das gerade verdrahte.Bis später
Rainer
-
Jetzt habe ich die Nase voll :((
das Sendemodul blinkt nur noch lang-kurz-kurz
Den Fehlercode finde ich nicht; die Seite bei HM inside existiert nicht mehr….
Ein frustrierter Rainer
-
Oh - das klingt gar nicht gut
Laut der Bedienungsanleitung https://files.elv.com/Assets/Produkte/1 … 17_web.pdf S.32 bedeutet das "Gerät defekt"
-
defekt ist nie etwas
Beim Löten hatte ich ja schon Probleme mit dem Sehen, habe jetzt nochmal schnell das Funkmodul nachgelötet (beim Einpacken war da wahrscheinlich Druck drauf) und jetzt läuft es wieder.
Ich brauche auch ne neue Lötspitze, die alte ist schon ganz rund vom bleifrei löten.
Bei einem Druck von etwa 1bar lt. analogem Messinstrument ist der Wert jetzt 159.
Dafür, dass er bei 0 bar bei 100 liegt ist die Spreizung fast für die Katz', wie hier schon vermutet wurde.
Eine "richtige" Kalibration wird wohl auch nicht so einfach sein. Optimal wäre das natürlich bereits im Arduino, alternativ hier im ioBroker.
Gottseidank läuft der Filter jetzt wieder, ich muss nämlich morgen früh dienstlich für 4 Tage weg - da gibt es sonst Haue.
Ich wollte nur schnell Zwischenstand melden und bringe unten alles in Ordnung - zum Umprogrammieren kann ich dann nächsten Sonntag wieder abbauen.
D A N K E
Rainer
-
Richtig - defekt ist (fast) nie was. Kaum macht man es richtig, schon geht es
Freut mich dass das erstmal wieder geht.
Die Kalibration bekommen wir hin im Arduino - natürlich ohne Genauigkeitsanforderungen von mbar Wenn jetzt bei 1bar der Wert 159 ist und wir bei einer Referenzspannung von 5V den Wert 1024 haben dann heißt das dass der Sensor bei 1bar ca.0,77 V liefert. Wir können jetzt die interne Referenzspannung noch auf 3,3V oder sogar 1,1V heruntersetzen. Wobei mir das mit 1,1V etwas riskant ist, dann müsstest du sicher sein dass nie mehr als 1,5bar anliegen sonst Arduino-RIP. Was ist denn der höchste Druck den deine Pumpe so schaffen könnte?
-
…und es kommt wie es kommen muss
ich wollte gerade den letzten Schliff setzen und dir die notwendigen Daten liefern und schalte von hier oben nochmal die Pumpe an....
Eigentlich genau dafür, wofür das ganze sein soll.
Bei der Montage des Sensors incl- T-Stück mit der heißen Nadel ist irgendwo ein "Leck" .
Nach dem Abschalten der Pumpe fließt das Wasser vom Dach der Garage aus dem Kollektor über die Pumpe zurück in den Pool (oder Teile davon und der Korb im Skimmer wird hochgedrückt und verkantet sich.
Wenn jetzt nicht genug Wasser nachkommt weil die Skimmerklappe nicht richtig öffnen kann läuft die Pumpe trocken, aber...
Wert bei Pumpe aus: 99
Wert bei Pumpe an: im Moment 159
Eben sprang der Druck zwischen 104 und 255!!
das sind die Moment, in denen die Pumpe wieder "packt", die Nadel des Messinstruments zittert da nur ganz kurz.
Schnell noch alles mögliche mit Teflonband nachgedichtet und einen Stein in den Skimmerkorb gelegt und hoffen, dass es durchläuft.
Hier mal ein Bild (vor dem Nachdichten):
EDIT:
und in ioBroker:
Wobei da jetzt nur ein Faktor und keine Geradengleichung drin ist. Nur bei stabilem Normdruck stimmt der Wert, bei 0 bar zeit es 0,64 bar anGruß
Rainer
-
Au weia - na hoffentlich bleibt das jetzt alles dicht und funktioniert wenn du 4 Tage nicht da bist!
Ich wollte dich da zu nichts hetzen - sorry…
Nun zu den Werten:
-
bei Pumpe aus, also kein Druck bedeutet der Wert 99 umgerechnet 0,5V - das entspricht exakt der Angabe im Datenblatt
-
bei Pumpe an, also 1bar der Wert von 160 scheint ja relativ stabil zu sein
-
wenn der Wert bei Druckspitzen auf bzw. über 255 geht dann bedeutet das dass der Sensor wohl gar nicht so schlecht ist und man sich wohl doch einigermaßen auf die Angaben lt.Datenblatt verlassen kann..
Nun mal theoretisch: lt. Datenblatt misst der Sensor von 0-1,2Mpa, also 0-12bar und gibt dementsprechend eine Spannung von 0,5-4,5V aus das bedeutet letztlich 4V/12bar = 0,333V/bar. Der gelesene Wert im Arduino entspricht 1024/5V = 204/V. Dementsprechend 68/bar.
Somit ergibt sich die folgende Formel:
Druck in bar = (Analogwert - 102)/68
Womit der Messwert 160 einen Druck von 0,85 bar bedeuten würde... Naja, ich denke da ist weder das Manometer noch der Sensor supergenau
Das mit Spannungsreferenz runterschalten geht beim Arduino Nano allerdings nicht so einfach wie ich gerade nachgelesen habe, da bietet wohl nur der Mega von Haus aus mehrere Möglichkeiten. Hier wäre nur die Möglichkeit einen externen Spannungsteiler als Referenz anzuschalten. Aber ich denke wir lassen das für's Erste, um zu erkennen ob kein - wenig -viel Druck anliegt sollte die vorhandene Konfiguration ausreichend sein.
Ich schreibe dann die Tage mal noch die Formel in den Sketch.
Vorerst wünsche ich dir eine erfolgreiche Dienstreise und ein dichtes Pumpensystem
-
-
Ich wollte dich da zu nichts hetzen - sorry… `
Nö, ich wollte es bis heute fertig haben.Naja, ich denke da ist weder das Manometer noch der Sensor supergenau `
gut ich hätte jetzt anders gerechnet um auf die Werte des Manometers zu kommen:Druck = (Messwert -99)/61
mit den Werten eher scheingenau.
Allerdings könnte auch das Manometer schon hin sein, ich bekomme bur noch ganz selten Werte im gelben Bereicht, früher ging es bis ins rote. Außerdem steht es bei "aus" auch noch bei ca. 0,2bar.
Vielleicht hol ich da mal ein neues.
Gruß und DANK!
Rainer
-
Hab ein bisschen quergelesen.
Ihr müsst die Ausgänge des Arduino negieren. Dann passen die Werte des Analog Eingangs im Arduino und die in der CCU zusammen.
Bei dem Modus des ELV Moduls: Ich würde Modus 4 mit 0.5s oder Modus 5 mit 1 Sekunde wählen.
Auch wenn die Pumpe nicht läuft, steht die Wassersäule im Rohr. D.h 1m Wassersäule = 0.1bar.
-
Danke!
@Goersch:Ihr müsst die Ausgänge des Arduino negieren. `
:lol:ich kann das nicht, dafür habe ich die Eingänge beim HM-Modul negiert.
Ich würde Modus 4 mit 0.5s oder Modus 5 mit 1 Sekunde wählen. `
ich hatte Modus5 mit 1 Sekunde genommen. - passt also!Auch wenn die Pumpe nicht läuft, steht die Wassersäule im Rohr. D.h 1m Wassersäule = 0.1bar. `
Das ist korrekt; im dynamischen zustand hebt sich der Vor und Rücklauf auf, aber im statischen zustand sicher nichtbei mir geht es etwa 5,5 Meter hoch auf die Garage = 0,55bar, im Moment zeigt der Sensor 0,62 bar an.
Es ist noch (fast) keinerlei Korrektur angewandt.
Gruß
Rainer
-
Hallo Rainer,
jetzt hatte ich dich schon fast ein wenig vergessen - sorry.
Hier erstmal der Sketch mit der Umrechnungsformel drin:
!
int sensorPin = A7; int firstDigitPIN = 2; int sensorValue = 0; int DruckValue = 0; ! const int Zykluszeit = 10; //Messintervall in Sekunden const int Nullpunkt = 102; //dieser Analogwert entspricht 0 bar const int Messfaktor = 68; //durch diesen Wert wird der Analogwert geteilt ! void sendValue(int intVal){ String binZahl; byte aktBit; for (int b = 0; b < 8; b += 1){ aktBit = bitRead(intVal, b); binZahl = aktBit + binZahl; digitalWrite(firstDigitPIN + b,(boolean) aktBit); } Serial.println("Binärwert = " + binZahl); Serial.println(""); } ! void setup() { Serial.begin(9600); for (int digitPIN = firstDigitPIN; digitPIN <= firstDigitPIN + 7; digitPIN += 1){ pinMode(digitPIN, OUTPUT); } Serial.println("Gestartet"); } ! void loop() { // read the value from the sensor: sensorValue = analogRead(sensorPin)/4; //weil der Arduino mit 10 bit Auflösung misst, wir aber nur 8 bit übertragen können Serial.println("Analogwert = " + (String) sensorValue); DruckValue = (sensorValue - Nullpunkt) / Messfaktor; sendValue(DruckValue); delay(Zykluszeit*1000); } !
Ich habe die Umrechnungszahlen am Anfang als Constanten deklariert, so dass du die wenn du möchtest auch gerne anpassen kannst.
Was das Negieren der Ausgänge betrifft denke ich kannst du das jetzt gerne so lassen dass du das im HM-Modul machst. Anderenfalls "kannst" du das bestimmt auch im Arduino-Sketch Dafür wäre das Ausrufezeichen in der folgenden Zeile verantwortlich:
digitalWrite(firstDigitPIN + b,!(boolean) aktBit);
Nun schau mal was du so für Werte erhältst und viel Spass beim Schwimmen