Lectura de transductor de presion

Muy buenas a todos! Estoy metido en un proyecto de control de presiones y he comprado los clasicos transductores chinos de 150psi que comienzan la lectura en 0,5 voltios con 0 psi y alcanzan su maximo de 150psi a los 4,5v. He estado rebuscando y buscando y no encuentro ningun codigo estandarizado. Este lo he escrito yo, no se si me valdra o no. Aun no puedo probarlo por temas logisticos (reducciones 1/8) pero queria quitarme primero la programacion.

Llevo muy poco en esto y es mi primer proyecto, teoricamente funcionaria?

void setup() {
  //Inicializamos la comunicación serial
  Serial.begin(9600);
 
}
 
void loop() {
 
int valor;
float evalor; 
float fvalor;
int psi;
float bar;

  valor = analogRead(A0);
  evalor = map(valor, 0, 1023, 0, 50); //mapeamos a voltios *10 para mayor resolucion
  fvalor = constrain (evalor, 5, 45); //acotamos las medidas a 0,5 7 4,5 voltios del transductor
  psi = map (fvalor, 5, 45, 0, 150); //mapeamos el voltaje a psi
  bar = (psi/14.504); //convertimos los psi en bares
  
  //Imprimimos por el monitor serie
  Serial.print("bares = ");
  Serial.println(bar, 1);
  delay(1000);
}

Gracias de antemano!

Pues funciona y da los valores correctos, lo he comprobado con un manometro.

Gracias.

Hombre que código estandarizado necesitas. Una simple linea recta donde cuando lees 0.5 es 0 y cuando lees 4.5 es FOndo de escala. Eso es algo que cualquiera que trabaja con sensores conoce.

Es una recta con ordenada al origen y pendiente conocida

Este es tu caso mas o menos.
Donde la recta cruza el eje X tenemos 0.5V y por ende 0 PSI del sensor
Donde la recta muestra el punto X2 tenemos los 4.5V y eso corresponde a 150 psi

Usaremos a X1 para saber como calcular cualquier punto de la recta o sea.. dada la lectura del ADC que presion corresponde.

Entonces el punto que cruza el eje X es 0.5V por ende si leyéramos 0.5V tu sabrias que eso es 0 PSI

Quiere decir que nuestra lectura esta desplzada siempre en 0.5V tal que (x-0.5) resuelve ese primer caso.
Tenemos una parte de la recta que es la ordenada al origen que sabemos que es 0

La segunda parte es averiguar la pendiente. La pendiente la sabemos

m = (150 PSI -0 PSI)/ (4.5 - 0.5)V = 150 PSI / 4.0V o sea 150/4 PSI/Volt

Quiere decir que nuestra ecuación es y = mx+b ecuación tipica de una recta donde
b = x-0.5
m = 150/4

y = 150/4 * (X - 0.5)

SImplifiquemos y demosle forma de programa Arduino
150/4 = 37.5

Donde X es la lectura del ADC o sea analogRead(A0) por ejemplo

float presion = 37.5 * (analogRead(A0) - 0.5);

Ahi tienes resuelto el problema.

Hombre agradezco tu esfuerzo, no obstante, solo era intencion de compartir el codigo y que alguien me dijera si habria algun problema porque no lo habia podido probarlo.

Pero tras probarlo dije que estaba correcto por si alguien tuvo la duda igual que yo y quisiera utilizarlo (evidentemente no para los expertos, sino para los que estan empezando, ya que aqui todo es una duda al principio). Ya que en el foro, buscando transductor o transducer... se lian a decir que si tal o cual y no e conseguido sacar nada en claro. Y le e dedicado tiempo a buscar, no es algo que haya dicho, paso...

No obstante te agradezco el esfuerzo, y el tiempo dedicado a la explicacion.

Saludos!

Mmmmm, tenia entendido que las entradas analogicas se median entre 0 y 1023... Usando digamos... 500 como lectura daria un resultado de float presion = 37,5 * (500-0.5) = 1873,25 ??

Ahh vaya me he quedado a mitad del camino.

Hice todas las cuentas con tensión y luego me olvido que pongo analogRead(A0) sin relacionar con la tensión

float presion = 37.5 * (5.0*analogRead(A0)/1023.0 - 0.5);

Para 500 cosa que serían 500*5/1023 = 2.44 Voltios corresponde 72.9 PSI