Ayuda en programacion de arduino transducer de 0-150 psi

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);
}

COMO PODRIA LEER ME ESTE CODIGO BIEN, Y COMO SERIA SI COLOCO EL TRANSDUCER DE 0-24 VOLTIOS DC

Usa un divisor de voltaje para que al Arduino le llegue un voltaje máximo de 5V. Por ejemplo:

Me gustaria saber si mi código está bueno por que en mi pc no me. Corre

¿Te da errores de compilación?

¿No imprime? Si no imprime asegúrate de que el monitor está configurado a 9600 baud

Podría simularlo amigo con tu pc ya no encuentro el. Error aver si es mi pc

usted seria muy amable de simularlo yo creo que es mi pc me arroja errores de conexión y no puedo ver los errores de programación y de simulación.

Con gusto. Sólo te pido que leas las Normas del Foro. Especialmente el punto 7.

Y re-posteas tu código

Moderador:
Por favor, lee las Normas del foro y edita tu código/error usando etiquetas de código.
Ve a edición, luego selecciona todo el código que has publicado, lo cortas y click en </>


También edita el título.
Cosas como "Ayuda en programación...· son títulos no permitidos asi que debes editarlo y dejar algo como "Programación Traducer de 0-150 psi"
Y como no hay dos sin tres, no se permite que se escriba en mayúsculas. Seguramente no te has dado cuenta pero edita y usa minúsculas.
Gracias.

La función map() devuelve un valor entero entonces para

evalor = map(valor, 0, 1023, 0, 50); //mapeamos a 

no tiene sentido que evalor sea tipo float

Lo mismo pasa con psi

Saludos

A veces cuando leo esto me pregunto que ha pasado con la matemática?
Ecuación de la recta. Es algo que todos hemos visto en la secundaria.
Algo importante, map funciona con enteros asi que OJO!!.
Por lo visto constrain tmb. No tiene sentido usar funciones enteras cuando lees un sensor de presión.

Tienes un sensor que entrega 0 PSI a 0.5V y 150 PSI a 4.5V
La ecuación de la recta es y = m * x + b
Donde m es la pendiente = (y2 - y1)/ (x2-x1)
Tomemos y2 = 150 psi y1 = 0 PSI x2 = 4.5V x1 = 0.5V
m = (150 - 0) psi / (4.5 - 0.5)V = 150 PSI / 4 V
b es ordenada al origen y como para x = 0.5V tenemos y = 0 PSI entonces vale 0
y = 150.0 / 4.0 * (x -0.5) con lo cual salvamos el desplazamiento de x
cuando x = 0.5V tenemos 0 PIS
cuando x = 4.5V tenemos 150 PSI
traduzco en código sin map ni constrain que ademas no sirven para floats.

float valor = analogRead(A0)*5.0/1023.0; // lo único que sirve
float psi = 150.0/4.0*(valor - 0.5);

Listo.
Ahora cuando pongas el divisor de tensión no tendras 5V asi que debes corregir valor
En lo personal me gusta poner un preset de 5 o 10k y ajustar de modo que cuando tenga 24V reciba 5V exactos y no 4.9 que esta perfecto con valores de R fijas. Son opciones que cada uno puede o no optar por usar.

amigo me podría ayudar con este código por favor.

void setup() {
Serial.begin(9600);
}

void loop() {
int value150sensor = analogRead(A0);
int value500sensor = analogRead(A1);

float voltage150sensor = value150sensor * (5.0 / 1023.0);
float voltage500sensor = value500sensor * (5.0 / 1023.0);

long pressure150sensor = map(value150sensor, 102, 919, 0, 150);
long pressure500sensor = map(value500sensor, 102, 919, 0, 500);

Serial.print("150 PSI Transducer ADC Value: ");
Serial.println(value150sensor);
Serial.print("500 PSI Transducer ADC Value: ");
Serial.println(value500sensor);
Serial.print("150 PSI Transducer Voltage: ");
Serial.println(voltage150sensor);
Serial.print("500 PSI Transducer Voltage: ");
Serial.println(voltage500sensor);
Serial.print("150 PSI Transducer PSI: ");
Serial.println(pressure150sensor);
Serial.print("500 PSI Transducer PSI: ");
Serial.println(pressure500sensor);
Serial.println();
Serial.println();
Serial.println();
Serial.println();
Serial.println();

delay(2000);
}

¿En qué necesitas ayuda?

NECESITO SIMULAR ESTE CODIGO YA QUE EN MI PC NO FUNCIONA PARA MI SON MIS DRAIVER O VERIFICAR ESTE CODIGO YA QUE USTED TEIENE MAS EXPERIENCIA AVER SI ESTA MALO O TIEN ERROES GRACIAS AIGO.

Lo puedes simular en wokwi.com, usa potenciómetros en lugar de los sensores y listo.

Saludos

PD:

long pressure150sensor = map(value150sensor, 102, 919, 0, 150);
long pressure500sensor = map(value500sensor, 102, 919, 0, 500);

No tiene sentido que sean long, con que sean tipo int es suficiente.

Podría ayudarme con el. Código amigo

¿Y vos podés hacer lo que te pidió el moderador?
El título sigue sin editar, tus códigos siguen mal presentados y has vuelto a escribir en mayúsculas luego que se te aclaró que no está permitido.
Edita todo lo que has hecho mal y luego seguimos.

Saludos

Hola Mundo.

Espero que estén bien soy un nuevo en programación.

Esplico : tengo un transmisor de presión estática marca rosemunt modelo 3051 la cual tiene un rando de 0-500psi y quiero conectarlos en el pin análogo que sea.

Que me lo lea el arduino algo sensillo.

Extrae lo bueno de este hilo

considerando que el Rosemount entrega salida 4-20mA y para ello requieres un resistor de 250 ohms para cerrar el circuito y medir entre GND y el otro extremo de la R de 250 ohms.
Debe ser una R al 1% preferentemente.
En tu caso, con 4mA entrega 1V y con 20mA entrega los 5V de modo que debes hacer una recta diferente al caso que te he indicado.

Más que extraer lo bueno debería continuar con ese tema, creo...

Y por cierto, el código del citado tema funciona perfectamente.

Saludos