Hallo,
warum nimmst Du nicht einfach zwei Drucksensoren- und läßt sie in einem
Fensterdiskriminator laufen?
Meiner Meinung nach würde es die Sache auch "sicherer" machen.
Nur mal so…
Gruß und Spaß
Andreas
Der grundlegende Fehler ist deine Mittelwertbildung, glaub es doch endlich. Es bringt Nichts, wenn man in einer Schleife, die in 20ms "durch" ist, die Werte einsammelt und mittelt - dann hast du einen Mittelwert über die 20ms - das ist viel zu schnell und folgt damit immer noch den Sprüngen des Sensorsignales ziemlich direkt.
Mein Vorschlag sah vor, jeweils einen Teil des Mittelwertes bei jedem Haupt-Loop dazuzuholen, deshalb dieses "Schieberegister" (siehe meinen Beitrag oben). Wenn also der gesamte Loop mit einem Delay von z.B. 20ms versehen ist, werden nicht in 20ms alle Messwerte gemittelt, sondern alle 20ms kommt ein Teil dazu, DAS ist der entscheidende Unterschied.
Würde man diesen Puffer z.B. 500 Variablen groß machen, dann hättest du einen Mittelwert über eine Sekunde ...
switch (state)
{
case 0: // Pumpe Aus
digitalWrite(pumpenRelais, LOW);
break;
case 1: // Pumpe An
digitalWrite(pumpenRelais, HIGH);
break;
default:
problem();
}
}
}
Du setzt den Wert von "state" auf 0 und als Kommentar "Pumpe AN"
Nach dem Vergleich von Millis() mit previousMillis setzt Du "state" auf 1 und als Kommentar "Pumpe AUS"
Im anschließenden Switch schaltest Du aber genau entgegen gesetzt.
Und da wunderst Du Dich das die Pumpe nicht ausschaltet?
Hallo,
was mir noch auffällt…
Mit was rechnest Du da eigentlich? So wie es aussieht mit einem Wert, der von
A2 geliefert wird.
Dein Sensor hat einen Arbeitsbereich von 0 bis 12bar bei 0,5 bis 4,5v
Dünnes Eis…
bei der Auflösung von 0 bis 1023 sind das dann bei einem AD-Wert von 922 gleich
12 bar und bei einem AD-Wert von 103 dann 0bar.
Bei einer Schalthysterese 520/550 sind das dann 6,11 bis 6,55bar.
Bei einer Schalthysterese 350/550 sind das dann 3,62 bis 6,55bar.
Dünnes Eis Ende...
Ich würde das ganze erst einmal in "bar" umrechnen und dann einmal schauen,
wie genau die Pumpe denn den Druck halten kann.
Die wird einen Druck von z.B. von 3bar ja nicht 100%tig halten können.
Aus dieser Druck-Differenz mußt Du ja erst einmal raus. Dann hat auch der Sensor
eine bestimmte Fehler-Toleranz. Diese mußt Du in Deiner Berechnung mit
einbeziehen.
Wenn Du das schon "samplen" willst, dann mußt Du das in Deinem Arbeitsbereich
machen, der z.B. bei 3 bis 4bar liegt.
Das wäre dann der AD-Wert 308 bis 376.
Das sind 64 AD-Werte die Du erst einmal stabil einfangen mußt. Wenn Du nicht
weißt, was geliefert wird- und auch nicht, was Du brauchst, dann kannst Du mit
Deinen millis() rumhampeln bis das Rohr platzt.
Gruß und Spaß
Andreas
P.S. mal sehen ob das Eis hält...
P.P.S. ein "TrockenLaufSensor" ist eine gute Idee. Schau mal nach, was für
eine ED Deine Pumpe für die Laufzeit hat, vielleicht mußt Du sie nach einer
bestimmten Zeit abschalten.
Ich hatte das bereits im Einsatz, aber nach dem 4. Sensor stillgelegt, bis ich was besseres finde.
RunningMedian lib ist ideal dafür, weil beim Median Ausreißer eben nicht berücksichtigt werden. Bei Mittelwert schon. Wobei die Lib beides kann.
Per z.B. simpleTimer lib machst du alle 100 ms eine Messung und schreibst sie in den Median
Damit du überhaupt weisst, um welchen Wertebereich es geht (siehe ein Post vorher), lass dir per Testsketck alle 20ms die Messung seriell ausgeben und logge das mit. Schalte dann die Pumpe ein paarmal an und aus, damit du mehrere Messreihen bekommst.
Der Messbereich vom Sensor ist ungeeignet und erschwert das ganze nur.
Wenn du die Messreihen hast, ist egal, ob du in bar umrechnest oder die Rohwerte nimmst
Passende Hysterese nicht vergessen
Beim Hauswasserwerk bin ich auf einen Durchflusssensor umgestiegen, funktioniert so halbwegs. Dummerweise verengt er den Leitungsquerschnitt von 22 auf 13 mm. Sollte mal einen Bypass dran machen
Hallo,
"ist egal, ob du in bar umrechnest oder die Rohwerte nimmst"
Ich würde das schon in bar oder Wassersäule rechnen und anzeigen.
Wenn er ein Si-Ventil drinne hat das z.B. bei 4bar öffnet- aber knöcheltief
im Wasser steht, dann zeigt der Arduino ihm Max Druck 376 an.
Da kann er dann etwas mit anfangen??
Steht da aber 4 Bar, ist das Aussagekräftig.
Kann sein, das ich das alles überspitzt sehe, aber vor unbeaufsichtigtem
Wasser, Öl und Gas habe ich einen HöllenRespekt.
Gruß und Spaß
Andreas
mioPressControlIntervall.ino: In function 'void setup()':
mioPressControlIntervall:33: error: call of overloaded 'print(long unsigned int (&)())' is ambiguous
Hallo,
was macht ihr da eigentlich mit eurem "Hauswasserwerk"- wenn es denn eines ist?
Im groben funktioniert das doch so:
Ihr bohrt unsere schöne Erde an, stopft ein Rohr in das Loch, an das Rohr eine
Pumpe, dann ein Rückschlagventil, dann zum Speicher oder zur Brauchwasserstelle?
Der Durchflusssensor gehört doch vor die Pumpe, damit sie nicht trocken läuft?
Nach der Pumpe ein Rückschlagventil damit ein Druck aufgebaut werden kann?
So erzeugt ihr doch einen Arbeitdruck von z.B. 2 bis 4 bar?
Wenn kein Wasser entnommen wird, dann ist der MaxDruck 4 bar in der Anlage.
Wenn jetzt Wasser entnommen wird, dann sinkt dieser Druck langsam auf
unter 2 bar.
Also, weniger als 2 bar Pumpe an- mehr als 4 bar Pumpe aus.
Wenn jetzt eure Pumpen sich "andauernt" ein- und ausschalten, dann stimmt doch
etwas nicht an der Montage oder den Dimensionen eurer Hauswasserwerke??
Es ist doch nicht so, Pumpe an- zack 4 bar. Wasserhahn auf- zack 2 bar?
Oder sehe ich da etwas nicht richtig?
Gruß und Spaß
Andreas
Nicht doch, ich nutze Regenwasser Da wurde nur ein Loch für den Tank gegraben.
SkobyMobil:
Es ist doch nicht so, Pumpe an- zack 4 bar. Wasserhahn auf- zack 2 bar?
Da Wasser nicht komprimierbar ist, verhält sich das bei meiner Tauchdruckpumpe in etwa so. Ein Hauswasserwerk sollte die Zackigkeit durch komprimierbare Luft etwas abmildern. Auch der Hausanschluß fällt von 6 auf ca. 2 bar, wenn ein Wasserhahn geöffnet wird.
Ich habe auf die ursprüngliche Frage, warum der Sketch nicht funktioniert, geantwortet. Hier ist das Forum für Arduino und nicht für Gartenbewässerung oder Toilettenspülungen, denke ich zumindest. Wobei eine Gesamtbetrachtung des Projektes ja durchaus sinnvoll sein kann.
Ich bohrt unsere schöne Erde an, stopft ein Rohr in das Loch, an das Rohr eine
Pumpe, dann ein Rückschlagventil, dann zum Speicher oder zur Brauchwasserstelle?
Wenn tatsächlich "die Erde angebohrt wird" und die Pumpe saugen muss, ist ein Rückschlagventil ganz unten direkt hinter/im Ansaugsieb. Damit der Saugschlauch nicht trocken fällt.
Einfachste Installationen verzichten dann sogar auf das Rückschlagventil hinter der Pumpe und setzen statt dessen den Saugschlauch unter Druck, wenn die Pumpe abschaltet.
Es ist doch nicht so, Pumpe an- zack 4 bar. Wasserhahn auf- zack 2 bar?
Doch, wenn der Speicher kein Luftpolster hat.
Und auch mit Druckluftpolster: zwischen 3.7 und 4 bar zum Abschalten würde ein Durchfluss-Sensor fast 0 anzeigen. Da brauchst du auch eine gute Verzögerungszeit, wenn du per Durchfluss-Überwachung einen Trockenlaufschutz machen willst. So kommt es dann doch wieder Richtung Arduino.
Sonst brauchts keinen Durchfluss-Sensor.