Analogen Wert vom Luftdrucksensor MPX5050DP in mb

Weiß einer wie ich den analogen wert vom Luftdrucksensor MPX5050DP in millibar (mb) umrechnen kann?
Was für eine Formel brauche ich dafür??

Mfg

strohhirn

Das Dingen kann 50kPa das sind 500 mbar dieser Sensor ist ein Differenzdruck Sensor also maximal ein Differenzdruck zwischen den beiden Druckeinhängen von 500mbar

Das Datenblatt http://www.freescale.com/files/sensors/doc/data_sheet/MPX5050.pdf sagt ganz oben rechts:

MPX5050, MPXV5050,MPVZ5050
0 to 50 kPa (0 to 7.25 psi)
0.2 to 4.7 V Output

und weiter unten:
Sensitivity: 90mV/kPa
und
Minimum Pressure Offset(0 to 85°C) @ VS = 5.0 Volts: Voff= min: 0.088V tipico: 0.2V max: 0.313V
Offset (Voff) is defined as the output voltage at the minimum rated pressure.

Grüße Uwe

Ich habe hier mal einen sketch gefunden den ich, bei dem ich alles unnötige enfert habe:

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);

int backLight = 13;
int mpxPin = 5;
int mpx;

float pkPa;

void setup() {
lcd.begin(20, 4);
pinMode(backLight, OUTPUT);
digitalWrite(backLight, HIGH);
}

void loop() {
mpx = (float)analogRead(mpxPin);
long pkPa = (mpx/(float)1023-0.04)/0.0018;

lcd.setCursor(0, 0);
lcd.print("mb ");
lcd.print(pkPa);
delay(1000);
}

Alles orange makierte habe ich verändert. Die eine 0 habe ich dazu geschrieben damit aus den kPa mb werden.
Das long habe ich davor gesetzt damit er mir nicht so viele dezimalstellen anzeigt.
Ich möchte aber das er mir 2 dezimalstellen nach einem , anzeigt. Wie mache ich dass?
Außerdem zeigt er am anfang immer ne nur eine null an, wenn ich den reinblase zeigt er z.B. 16 an und wenn ich denn wieder aufhöre 06 (bei 17 ,07 ; 28 ,8 ;12 ,2 ...)
Wie behebe ich das?

Und was muss ich machen damit im endeffekt mir einfach nur der druck in mb mit 2 dezimalstellen angezeigt wird??

Es gibt ganzzahlige Variable (Datentypen z.B. byte, int, long )
und es gibt Variable mit "Gleitkomma" - Datentyp (float)

Du hast eine globale
** **float pkPa;** **

und innerhalb loop() noch eine andere Variable

[b][color=orange]long [/color]pkPA;   [/b]

C erlaubt das, weil bei C Programmierer selber schuld sind, wenn sie auf ihre eigenen Fehler reinfallen :wink:

Ausserdem liefert Analog.read() immer einen int zurück, den du auch in einer int Variablen (mxp) ablegst.
Das (float) dazwischen macht zum Glück nichts kaputt, bringt aber auch nichts.

Wenn du statt der globalen Variable pkPa nur eine lokale float Variable definiert hättest, würde lcd.print(pkPa); vermutlich zwei Nachkommastellen ausgeben

Ob deine Formel richtig ist, und was dein Sensor während und nach dem Anblasen von sich geben sollte, kann ich nicht abschätzen. Bei dir kann es im Prinzip auch negativ werden !
"Voff= min: 0.088V tipico: 0.2V max: 0.313V" lese ich aber so, dass da was zu Kalibrieren ist.

@michael_x

Ok ich hab den sketch ma so verändert wie ich das verstanden habe :

include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);

int backLight = 13;
int mpxPin = 5;
int mpx;

void setup() {
lcd.begin(20, 4);
pinMode(backLight, OUTPUT);
digitalWrite(backLight, HIGH);
}

void loop() {
mpx = analogRead(mpxPin);
float mb = (mpx/1023-0.04)/0.0018;

lcd.setCursor(0, 0);
lcd.print("mb ");
lcd.print(mb);
delay(1000);
}

meintest du das so ??

Wenn ja, denn stimmt das schon mal das er nur 2 dezimalstellen anzeigt aber er zeigt jetzt immer -22.22 ohne eine änderung beim reinblasen.

aber er zeigt jetzt immer -22.22 ohne eine änderung beim reinblasen

-0.04/0.0018

Du bläst nicht stark genug :wink:

Vermutlich hast du was am mpxPin=5 angeschlossen, sonst würde analogRead(5) irgend einen wilden Wert anzeigen.
Hast du ein Messgerät und kannst messen, was dein Sensor ausgibt ?
Vermutlich siehst du genau 0V am pin A5.

schon gut ich hab jetzt die magische zahl 0.006 mit der ich teilen muss.
Ist nur noch der fehler mit den zahlen am ende , kann man sich aber wegdenken.

danke

Nein:
mpx/1023 gibt immer 0 (da mpx ein int ist. )

Ausserdem liefert Analog.read() immer einen int zurück, den du auch in einer int Variablen (mxp) ablegst.
Das (float) dazwischen macht zum Glück nichts kaputt, bringt aber auch nichts.

Schreib in deiner 5. Zeile
float mxp;

Sobald du einen Wert > 0 misst, wird das dann -21.68 oder größer ( mit deiner vorigen Formel. )