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