Emitir transductores de presión de lectura y obtener un valor flotante

1

Así que estoy intentando leer un transductor de presión de Honeywell un Arduino Mega and I Estoy obteniendo valores flotantes. He intentado conectar la línea directamente al Gnd y luego obtengo un 0 constante, pero de lo contrario simplemente flota. Tengo la línea de excitación (positiva) para el transductor conectado a la salida Arduino 5V, la línea común (negativa) conectada a Arduino Gnd y la línea de salida está conectada al pin analógico A8.

El código en el Arduino se ve así:

#include <Arduino.h>

int pressInput = A8;

void setup() {
  Serial.begin(9600); // set the baud rate
  pinMode(pressInput, INPUT);
}

void loop() {
  String input;
  if (Serial.available()) { // only run through loop if data has been sent
    input = Serial.readString(); // read the incoming data
    if (input == "press") {
        int pressValue = analogRead(pressInput);
        Serial.println(pressValue);
    }
  }
  delay(100); // delay for 1/10 of a second
}

Y me estoy comunicando con el Arduino a través de python y ese código parece:

def read_press():
    #Command to get the pressure value
    pressure_in_voltage = send_arduino_cmd("press")
    pressure_in_psi = 75.0 * (float(pressure_in_voltage)/1023.0) * 5.0 - 37.5
    #pressure = max pressure/(4.5V-.5V) * (voltage/max voltage) * 5V - offset (max pressure/(4.5V-.5V))
    return (pressure_in_psi)

Con este código, obtengo valores de presión aleatorios, por ejemplo:

133.321
102.529
165.945
93.365
117.558

¿Alguna idea sobre cómo depurar esto o qué podría salir mal en mi código Arduino? Intenté esto con tres de los mismos transductores y obtuve el mismo resultado, así que no creo que sea un fallo del equipo en ese lado. También he probado el voltaje en el + y - y es de 5 V HASTA QUE conecte la línea de salida y luego no puedo ver ningún voltaje en ninguna de las líneas. También conecté las líneas de tierra y comunes a una fuente de alimentación de 5V para garantizar que no fuera un problema con la alimentación de Arduino y obtuviera el mismo resultado.

    
pregunta clifgray

1 respuesta

2

El método analogRead () devuelve un entero entre 0 y 1023 en un swing de 0-5V. Su transductor produce un rango de 0.5V - 4.5V (de la hoja de datos a la que se vinculó). Eso es un swing de 4V. Por lo tanto, puede esperarse que analogRead () produzca valores que cubren desde aproximadamente 102 hasta aproximadamente 920. (10% o 0.5V de cada extremo).

El rango de presión de ese transductor es de 0 a 300 psi (nuevamente de la hoja de datos). Entonces me pregunto si 500 psi es una buena prueba, no sopló correctamente el dispositivo, pero eso está ciertamente fuera de su rango de linealidad. Si conecto 102 y 920 en tu fórmula, obtengo ~ 0 y ~ 300. Así que tu fórmula es buena. No puedo explicar por qué no cambia, aparte de que quizás dañó el dispositivo con una presión de al menos un 66% sobre su presión nominal.

Por favor vea esto también en la documentación:

  

Resistencias pullup   Los pines analógicos también tienen resistencias pullup, que funcionan de manera idéntica a las resistencias pullup en los pines digitales. Se habilitan mediante la emisión de un comando como   digitalWrite (A0, INPUT_PULLUP); // establecer pullup en el pin analógico 0   Sin embargo, tenga en cuenta que activar un pullup afectará los valores reportados por analogRead ().   Detalles y advertencias   El comando analogRead no funcionará correctamente si un pin se ha establecido previamente en una salida, por lo que si este es el caso, configúrelo nuevamente en una entrada antes de usar analogRead. Del mismo modo, si el pin se ha establecido en ALTO como salida, la resistencia de extracción se establecerá cuando se vuelva a activar una entrada.

Por lo tanto, es posible que desee eliminar el verbo INPUT_PULLUP si lo usó anteriormente.

EDIT

Creo que podría estar mal conectado: siguiendo la fórmula anterior, ~ 330 es lo que obtendrías si el pin digital tuviera ~ 5.0V. Así que tal vez quiera comprobar sus conexiones. Con algo de presión, un cable flexible en el pin del ADC debe mostrar < = 4.5V. Si no, entonces tienes algo mal conectado.

    
respondido por el TomServo

Lea otras preguntas en las etiquetas