Hallo,
ich habe ein kleines Mathe Problem. Nicht Lachen. ist schon 40 Jahre her das ich sowas mal brauchte.
Die Situation:
Ich möchte rausfinden um wieviel sich die Schritte max 1023 ändern bei einem Anstieg um 0.1bar.
der Drucksensor hat bei 0 psi 0,5V und bei 5 psi 4,5V Ich weiss das bei 105 schritte 0 bar anliegen und eine Spannung von 0,51V.
Aber wie kann ich das in einer Formel berechnen, so das ich weiß es sind soviele schritte bei einem Anstieg um 0.1 bar? Kann mir da eventuell wer weiterhelfen?
Auch ist mir dann noch nicht ganz klar wie es weiter schaffe das ganze in eine Wasserhöhe zu berechnen.
0,1 bar sind 1,450376808 psi
5 psi sind also 0,344738 bar.
Der Sensor löst 5 psi bzw. 0,344738 bar mit 818 Schritte auf.
0,344738 bar / 818 Schritte = 0,00042144 bar je Schritt.
Druckänderung 0,1 bar in Schritte:
0,1 bar / 0,00042144 bar = 237,281700835 Schritte.
benötigst Du eine Änderung von 237 Zaehler für eine Darstellung von 0,1 bar.
Aus
0 psi = 0,5V und
5 psi = 4,5V
kannst Du eine Gerade der Form y = ax+b berechnen. Wobei X der Druck ist und Y die Spannung. U = psi * 4/5 +0,5
b ist dier Offset. Bei 0 psi hast Du 0,5V.
a ist dei Steigung. In diesem Fall (4,5V-0,5V)
Aus der Geraden kannst Du dann aus der gemessenen Spannung den Druck berechen. Umgeformt:
psi = (U -0,5V)*5/4
Aus den ausgelesenen ADC mußt Du die Spannung errechnen.
Die Formel ist U = Uref/1023ADC
Bei 5V Referenzspannung sind das
U = 5/1023 * ADC oder 0,00488ADC.
Das kannst Du in die obere Formel einsetzen ohne zwischendurch die Spannung berechnen zu müssen.
Ich will ja nicht Besserwisser sein.
Grundlegend deckt sich Dein Ansatz mit meinem. Zumal die angesetzen Werte übereinstimmen.
ABER:
psi ist doch nicht gefragt.
Ok da muß auch noch die Umrechnug von PSI nach bar rein.
Mein Beitrag sollte etwas mehr ausholen und beschreiben.
ot.
Ich habe gerade nachgeschaut für heute Mitternacht. Bei offenene Fenster und gegenüberliegenden Balkontür gerade 28°C am Radiowecker und 27°C am Termostat Heizung. Um 21:30 im Auto Außentemperatur 29°C (War vorher in Tiefgarage Einkauszentrum 27°C)
Ansonsten ganz offiziell
aktuel 25,2°C bei Tagesmaxtemperatur von ca 33°C.
Die Sonnenscheindauer ist wenig significant. Die zitierte Wetterstation liegt nahe am Berg und kriegt darum den halben Vormittags keine Sonne.
Es geht im Prinzip darum, ich habe ein Drucksensor der 5 psi hat. Jetzt wollte ich mit diesem anhand des wasserdruck, (wenn keine Pumpe läuft) eben die gerade anliegende wasserhöhe ermitteln. aber dies wird leider zu ungenau da ich gerne eine Angabe in mm hätte. die Angaben vom Sensor schwanken dann aber im cm bereich was nicht sehr hilfreich ist. Daher war mein Gedankengang der, ich nehme die Schritte und leite davon die Wasserhöhe ab.Aber ob das überhaut geht weiß ich ehrlich gesagt noch garnicht.
Der Fall ist: wenn ich eine Wasserhöhe von 1150mm habe und durch wasserbewegung in dem Becken schwankt die Angabe nicht im mm Bereich sondern im cm Bereich was für meine Zwecke nicht Förderlich ist da ich nur ein Fenster von 50mm nach oben und unten habe.
Aber vieleicht ist der 10bit adc vom arduino nicht aussreichend um soetwas genau darszustellen weil eben nur die 1024 schritte zur verfügung stehen.
Anderst schaut es bei dem 60psi sensor aus, der soll ja nur den Druck von einem Sandfilterkessel anzeigen und der liegt im Bereich von 0.1-1.1 Bar. da reicht der Arduino ja aus.
Es gibt auch 24-Bit-AD-Wandler, die Du per I2C an den Arduiono anklemmen kannst, falls Dir eine größere Auflösung hilft und die Schwankungen nicht bereits durch den Messaufbau bedingt sind.
@luzie 10m Wasserhöhe machen einen statischen Druck von 1bar. =1000mbar
10m =10000 mm = 1000 mbar
die Auflösung Deines Systems ist 0,42mbar (siehe Rechnung von my_xy_projekt)
Wenn Du das jetzt auf mm umrechnest
10000mm/1000mbar*0,42mbar=4,2mm.
Das ist dann so die Grössenordnung in der Du theoretisch messen kannst, wobei der Messwert um 1LSB wackeln kann. Wenn (viel) es mehr ist solltest Du untersuchen woran das liegt , oder eine gleitende Mittelwertbildung einbauen.
Wenn Du es genauer haben willst benötigst Du einen anderen AD Wandler.
Heinz
Kann ich machen wenn ich die neue Hardware da habe. habe die beiden unos heute zurückgeschickt. (Anderer Beitrag von mir) da sie nicht Funtionieren oder nur unzureichend.
derzeit schaut es so aus mit dem Code.
int getPressure (int channel, int type, int mittel)
{
float vcc, vsensor, result = 0, psi, bar;
for (int i = 0; i < mittel; i++)
{
vcc = analogReadBG(0x1f); // dummy Read
vcc = 1.1 * 1024 / analogReadBG(0x1e) * 1000; // Bandgab Referenz bestimmen 1.1 V Default
vsensor = (float) analogReadBG(DS_Pin[channel]) * vcc / 1024; // Messwert mit korrektem spannungsbeszug
result += vsensor;
}
psi = (float)(result / mittel) - 500; // in mV 0.5-4.5V spannungsdifferenz auf 0 - type PSI
if (psi < 500) {
psi = 500; // 0,5 mV => 0 PSi damit keine negativen drücke angezeigt werden
}
switch (type) {
case 60: psi = (type / 4.0) * (psi / 1000.0 + 7.5) * 100.0; break; // ADC1 // y 0 - 5 0-60 psi
case 5: psi = (type / 4.0) * (psi / 1000.0 - 0.625) * 100.0; break; // ADC0 // x 0.5 - 4.5V
default: // Fehler bei den Parametern
return 0;
}
bar = psi * 0.0689;
Serial.print(type);
Serial.print(" ");
Serial.print("Druck Channel "); Serial.print(channel); Serial.print(" in Bar:"); Serial.println(bar );
return (int)(bar);
}
Aber wie gesagt testen kann ich das erst wenn ich die neue Hardware da habe.
Aber aus sicherheitsgründen und zur kontrolle habe ich noch ein Digitalen drauf der mir 24V Schaltausgang liefert und direkt an meiner sps hängt und bei überschreiten des sollwertes die Pumpe auschaltet. Festo Digitaldruckschalter
Achtung da steht "statischer Druck".
Wenn was fließt ist das dann kein statischer Druck mehr. Da hat man wegen des Flußes Druckverluste hat und gleichzeitig durch Durchmesseränderungen und darum Flußgeschwindigkeitsänderungen auch Druckänderung in beiden Richtungen.
Wellen ändern den Druck in einer gewissen Tiefe im Wasser.
das mit der Flussgeschwindigkeit ist im Programm berücksichtigt. nicht auf dem Arduino sondern in der SPS. Sobald die Pumpe läuft wird der Wasserstand eingefrohren und nur der wert Angezeigt der ohne Pumpe gemessen wurde. Sonst würde ich eine Tiefe von 3,3Meter bei Laufender Pumpe haben. Auch wurde der Sensor so verbaut das es nur min. Schwankungen gibt. sie belaufen sich nun im +/- 5mm Bereich.
Ich hatte das ganze nun auch etwas umgestellt
Nun bekomme ich die Werte wenigsten in mm Angezeigt. Einzige Nachteil ist das, wenn ich den Sensor abziehe ich den Negativ wert von -168 angezeigt bekomme.
Warum machst Du das?
Du weisst doch, wie hoch die Auflösung ist.
Warum rechnest Du da x mal rum?
Ich würde den aufgelösten Analogwert nehmen.
Der Grundwert des ADC ist 102. Nur wenn dieser Wert erreicht wird, wird der in die Berechnung des Mittelwertes aufgenommen.
Dazu der obere Wert 920. Alles was darüber ist wird ebenfalls ausgeklammert.
Alternativ setzt Du bei unterschreiten auf 102 und bei Überschreiten auf 920.
Lege Dir für die Grenzwerte uint16_t Konstanten an.
Und erst wenn Du den Mittelwert daraus hast und alles andere abgehandelt ist, berechne den tatsächlichen Druck.
Nicht erst psi und dann aus psi bar.
Du verbrauchst zuviele float und das Ergebnis entspricht ebenfalls nicht Deinen Vorstellungen.