Hola comunidad,
Soy nueva en el mundo de la electrónica y realmente me vendría bien un poco de ayuda. Estoy intentando diseñar un convertidor I/V para un sensor de presión NOSHOK (el link del datasheet https://www.farnell.com/datasheets/3932164.pdf).
Mi sensor funciona con la combinación de 2 cables de 4mA a 20mA la alimentación la hago con una fuente de 18V y el Arduino Nano lo estoy alimentando con un circuito con salida a 5VDC (uso el LM2596 para bajar los 24V a 5V - 2A).
Como indica el título quiero transformar la corriente a voltaje para hacer la lectura con mi Arduino nano en un rango de 0-4.5v para protección de sobre carga. Buscando y leyendo en varios foros encontré el OPAMP INA122 para hacer la conversión, pero no estoy segura de si es la opción correcta para este proyecto.
Para el código del arduino tengo esto hasta el momento:
#define PINMAP_ADC A0 /* ADC pin de entrada al arduino */
#define INTERVALL_MS 1000 /* 1s de intervalo entre lecturas */
#define SENSOR_FSR 100 /* Presión en psi por % del rango 4-20mA. 5000 psi que es el caso del sensor */
unsigned long previousMillis = 0;
void setup() {
//Inicio el serial con 9k6 8n1
Serial.begin(9600);
//Se va a verificar si el sensor está conectado
//Verificar el tiempo para asegurar el intervalo
//Si ya se cumplió, actualizar el tiempo con millis
while( (float)(analogRead(PINMAP_ADC)* (5.0 / 1023.0)) < 1.0 ){
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= INTERVALL_MS) {
previousMillis = currentMillis;
Serial.println("Sensor not connected....");
}
}
//Mostrar los valores en el CVS si el sensor está listo
Serial.println("Raw_ADC_Value[cnts,0-1023];Voltage[V,0-5];Current_FSR[%,0-100];Pressure[psig,0-5.000];SampleValid[bool,0-1]");
}
void loop() {
//Verificar el tiempo para asegurar el intervalo
//Si ya se cumplió, actualizar el tiempo con millis
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= INTERVALL_MS) {
previousMillis = currentMillis;
//Leer los datos del Sensor en el rango de 0...1023
//Ecala de los datos a un rango de 0...4.5V
//Lo escalammos a % (4-20mA/1-4.5V de Rango)
//Escalado a PSI
int rawAdcCnts = analogRead(PINMAP_ADC); //0...1023
float rawAdcVoltage = rawAdcCnts * (4.5 / 1023.0); //0...4.5
float scaledIPercen = ( rawAdcVoltage - 1 )*25.0; //0...100
float scaledIBar = scaledIPercen * SENSOR_FSR //0...FSR
//Verifica que el sensor esté conectado
//y que no tenga ningún error
if ( rawAdcVoltage >= 1.0 ){
//Muestra los valores en el monitor serial
Serial.print(rawAdcCnts);
Serial.print(";");
Serial.print(rawAdcVoltage);
Serial.print(";");
Serial.print(scaledIPercen);
Serial.print(";");
Serial.print(scaledIBar);
Serial.print(";");
Serial.println("1");
} else {
Serial.print(";");
Serial.print(rawAdcVoltage);
Serial.print(";;;");
Serial.println("0");
}
}
En cuanto al circuito después de mucha ayuda conseguí esto:
Pero aún no entiendo dónde conectar la fuente de 18V, ni porqué usan 2 OPAMP y quiero su opinión sobre qué OPAMP debería utilizar. Me sugirieron usar la salida de 5V del arduino para evitar ruido digital.
Si alguien pudiera ofrecer información adicional, consideraciones o ejemplos que deba tener en cuenta, se lo agradecería mucho. Estoy ansioso por aprender más.

