¿Cómo calcular el PPM del sensor de gas a partir de lecturas analógicas?

0

Soy nuevo en Arduino y en la electrónica en general. Estoy trabajando en el sensor de gas MQ 7 para probar el nivel de monóxido de carbono. Pero el problema es que todavía no puedo entender el concepto de convertir lecturas analógicas a PPM. Intenté seguir esto , pero algunas partes son muy claras, especialmente R0 = RS_air/(26+(1/3))

Hasta ahora, con mi código por debajo de la proporción que obtengo es entre 20 y 30. ¿Puede alguien ayudarme a completar el cálculo de PPM o indicarme la dirección correcta? Aquí está el Hoja de datos

Gracias de antemano

int gasAnalogPin = A0;

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

  pinMode(gasAnalogPin, INPUT);

}

void loop() {

 float sensor_volt;
 float RS_air;
 float R0; 
 float sensorValue = 0;


  // A) preparation
    // turn the heater fully on
    analogWrite(gasAnalogPin, HIGH); 
    // heat for 1 min
    delay(60000);

    // now reducing the heating power: turn the heater to approx 1,4V
    analogWrite(gasAnalogPin, 286.72); // 255x1400/5000
     // heat for 90 sec
    delay(90000);


  // B) reading    
    // CO2 via MQ7
    analogWrite(gasAnalogPin, HIGH); 
    delay(50); // Getting an analog read apparently takes 100uSec

  for(int i = 0; i <= 100; i++){
    sensorValue = sensorValue + analogRead(gasAnalogPin);

   }  
 sensorValue = sensorValue/100.0; //get the avarage value
 sensor_volt = sensorValue/1024*5.0;
 RS_air = (5.0-sensor_volt)/sensor_volt;
 R0 = RS_air/(26+(1/3)); // Not sure how they came up with this ?


 float RS_gas = 0;
 float ratio = 0;

  sensor_volt = 0;
  sensorValue = 0;
  sensor_volt = 0;

  sensorValue = analogRead(gasAnalogPin);
  sensor_volt = sensorValue/1024*5.0;
  RS_gas = (5.0-sensor_volt)/sensor_volt;
  ratio = RS_gas/R0; //Replace R0 with the value found using the sketch above

  Serial.print("PPM:"); // How to calculate PPM?


}
    
pregunta sparks

3 respuestas

1

Has malinterpretado el artículo de referencia. Los dos fragmentos de código no deben funcionar juntos en un bucle.

El primer código es control . Lee el sensor 100 veces, calcula el promedio y lo imprime. Esto debe hacerse en condiciones normales de aire, es decir, con concentraciones de gas detectables en sus niveles seguros. Toma el valor impreso y lo coloca en el segundo código.

El segundo código es lo que realmente se supone que debe ejecutarse continuamente en un bucle. Lee el sensor y lo compara con el valor de control obtenido previamente. Esto le da la concentración actual de gas relativa a las condiciones normales.

Tenga en cuenta que la mejor forma de hacerlo es reemplazar analogRead en el segundo código con bucle interno, similar al primero, para obtener un promedio de 10-50 lecturas consecutivas en lugar de una sola lectura.

ACTUALIZACIÓN

Para calcular el PPM actual, primero debe encontrar la resistencia del sensor RS. Normalmente se realiza mediante una fórmula simple para el divisor de voltaje: RS / RL = (V-Vs) / Vs, donde RL es resistencia de carga. Cuando se mide en aire limpio, el RS calculado se convierte en R0. El primer código usa esta ecuación, sin embargo, no tengo idea de por qué lo dividen por alguna constante. En mi opinión, la fórmula para la relación debe ser simple RS / R0 = RS_gas / RS_air. Sospecho que se supone que representa la ganancia de OP Amp utilizada en su circuito de alguna manera, pero sería inútil ya que la constante debería estar presente en el segundo código también, donde se cancelarían entre sí.

Con respecto al cálculo de PPM, lo primero que debe notar es que la relación entre RS / R0 y PPM se da en la escala log-log. Lo segundo es que la gráfica en esta escala es aproximadamente lineal. Hay varios métodos para lidiar con esto.

Puede tomar el gráfico de la hoja de datos y trazarlo en escala lineal. El resultado sería una curva exponencial y puede utilizar varias herramientas para encontrar ajuste exponencial para ello. Este artículo tiene ejemplos de aproximación exponencial y un código para algunos sensores.

También puede tratar el gráfico como una línea recta y = ax + b, pero sustituya x e y por sus logaritmos: log (y) = a * log (x) + b. Luego puede usar puntos en el gráfico en la hoja de datos para averiguar la pendiente (a) y el desplazamiento (b). Esto parece ser exactamente lo que está haciendo el autor del artículo al que se hace referencia (aunque no estoy seguro de que la fórmula resultante sea correcta).

Finalmente, parece que al artículo le falta una parte muy importante de la funcionalidad: el suministro de voltaje variable. Se supone que el circuito cambia entre 1.5V y 5V para que el sensor funcione correctamente, de acuerdo con la hoja de datos. Las mediciones se realizan a bajo voltaje, luego se calientan para limpiar los gases adsorbidos.

    
respondido por el Maple
1

Es tentador suponer que la hoja de datos del fabricante le brinda la solución en forma de una función de respuesta logarítmica de la que puede derivar un algoritmo, pero no es así. Un uso común de estos sensores es en una situación de tipo de alarma donde el integrador del sistema solo necesita saber cuándo el sensor alcanza un nivel predeterminado de PPM. Por lo tanto, es bastante fácil caracterizar la salida del sensor exponiendo el sensor a ese nivel de PPM repetidamente y midiendo la salida.

La conversión de la salida del sensor a PPM es algo complicada y requiere una comprensión profunda de las características de respuesta del sensor y casi siempre requiere calibración. Lamentablemente, las hojas de datos del fabricante para esos tipos de sensores no suelen proporcionar suficiente información y es necesario que caracterice la respuesta del sensor exponiendo el sensor a diferentes concentraciones del analito (gas), midiendo la salida (ya sea voltaje, resistencia, etc.) y ejecutando un análisis de regresión para determinar la función. Esto no es un asunto simple con los sensores MOS. Dos sensores del mismo fabricante pueden tener respuestas muy diferentes a la misma concentración de analito. Diferentes anchos de pulso, voltajes del calentador y resistencias de carga pueden afectar la salida. La precisión de los pasivos utilizados también es importante. Los sensores también requieren compensación de temperatura y humedad relativa para convertir adecuadamente la salida a PPM.

Para convertir la salida del sensor a PPM, debe caracterizar el transductor exponiéndolo a concentraciones conocidas del analito, medir la salida del sensor en cada concentración y desarrollar un algoritmo de mejor ajuste. Debe tener en cuenta el tiempo de integración (es decir, cuánto tiempo tarda el sensor en responder a la exposición al analito). La cantidad de niveles de concentración que elija dependerá de sus requisitos. Debe repetir este proceso varias veces para garantizar la repetibilidad O para desarrollar un margen de error conocido. Luego debe medir las características de respuesta de temperatura y humedad relativa o usar las cifras del fabricante como "mejor estimación" y aplicar estas compensaciones en el firmware al tener un sensor T + RH incorporado para generar las entradas de la función de compensación. Otros métodos para generar un valor de PPM incluyen el análisis de regresión con datos de otros instrumentos calibrados, colocados. También debe tener en cuenta las sensibilidades cruzadas, la deriva y la degradación del sensor. La degradación de la deriva y la respuesta es la razón por la que los sensores deben someterse a pruebas periódicas, calibrarse a intervalos regulares o desecharse después de un período de tiempo.

Luego, el ADC lineal de baja resolución en el arduino presenta un problema no trivial cuando se mide la salida logarítmica de un sensor como este.

Sin embargo, no has proporcionado suficiente información para responder la pregunta. Debe proporcionar requisitos como sensibilidad, resolución, rango, etc.

    
respondido por el ElDuderino
0

También leí el artículo en tu enlace. Hay muchos errores. MQ7 necesita variar el ciclo de calentamiento, por lo que es necesario modificar el sensor. Por favor lea este enlace.

enlace

Luego, debe enviar PWM para controlar el voltaje del calentador. Tampoco entiendo la ecuación R0 = RS_air / (26+ (1/3)). [RL se ignora en todas las ecuaciones porque se cancelarán entre sí cuando encuentre la relación.] R0 debería ser R0 = RS_air / x. x es la relación de la gráfica. Si ve en el gráfico, R0 es RS_Air valor a 100 ppm de CO. Por lo tanto, a 100 ppm RS / R0 = 1 porque tiene el mismo valor. No tenemos un laboratorio para establecer 100 ppm de CO para encontrar el valor real de R0. En aire limpio, estime que no hay CO, podemos medir RS y convertir a R0 = RS / x. Pero por qué dicen (26 + 1/3), debería ser alrededor de 4-5. Además, log10 (0.09) tiene un valor negativo y ppm = 100 * pow (log10 (40) / log10 (0,09), relación) parecen incorrectos.

    
respondido por el Wiroon

Lea otras preguntas en las etiquetas