Tabla de contenido:

Monitor Arduino CO usando el sensor MQ-7: 8 pasos (con imágenes)
Monitor Arduino CO usando el sensor MQ-7: 8 pasos (con imágenes)

Video: Monitor Arduino CO usando el sensor MQ-7: 8 pasos (con imágenes)

Video: Monitor Arduino CO usando el sensor MQ-7: 8 pasos (con imágenes)
Video: SERIE SENSORES Y MODULOS #17: SENSOR GAS MQ - CALCULO DE PPM - CALIBRACION - MQ2 2024, Mes de julio
Anonim
Monitor de CO Arduino usando el sensor MQ-7
Monitor de CO Arduino usando el sensor MQ-7
Monitor de CO Arduino usando el sensor MQ-7
Monitor de CO Arduino usando el sensor MQ-7

Algunas palabras por qué se creó este instructivo: un día la madre de mi novia nos llamó a media noche porque se sentía muy enferma: tenía mareos, taquicardia, náuseas, presión arterial alta, incluso se desmayó por un tiempo desconocido (probablemente ~ 5 minutos, pero no hay forma de saberlo), todo sin ninguna razón aparente. Vive en un pequeño pueblo lejos de los hospitales (a 60 km de nuestro lugar, a 30 km del hospital más cercano, a 10 km sin ningún camino normal en el medio), así que corrimos hacia ella y llegamos poco después de la ambulancia. La hospitalizaron y por la mañana se sintió casi bien, pero los médicos no pudieron encontrar la causa. Al día siguiente tuvimos una idea: podría haber sido una intoxicación por CO, ya que ella tiene una caldera de agua a gas (en la foto) y estuvo sentada cerca de ella durante toda la noche cuando sucedió. Recientemente compramos el sensor de CO MQ-7, pero nunca tuve tiempo de armar un esquema para ello, así que este era el momento perfecto para hacerlo. Después de una hora de buscar instrucciones en Internet, me di cuenta de que no puedo encontrar ninguna guía que al mismo tiempo siga las instrucciones del fabricante del sensor proporcionadas en su hoja de datos y explique cualquier cosa (un ejemplo parecía tener un código bastante bueno, pero no estaba claro cómo aplicarlo, otros estaban demasiado simplificados y no funcionarían bien). Así que dedicamos aproximadamente 12 horas a desarrollar esquemas, hacer e imprimir carcasas en 3D, probar y calibrar el sensor, y al día siguiente fuimos a la caldera sospechosa. Resultó que los niveles de CO eran extremadamente altos y podrían ser fatales si el tiempo de exposición al CO fuera más largo. Entonces, creo que cualquier persona que tenga una situación similar (como una caldera de gas u otra combustión que ocurra dentro de un espacio habitable) debería obtener dicho sensor para evitar que suceda algo malo.

Todo eso sucedió hace dos semanas, desde entonces mejoré los esquemas y el programa bastante, y ahora parece ser razonablemente bueno y relativamente simple (no es simple en 3 líneas de código, pero aún así). Aunque espero que alguien con un medidor de CO preciso me brinde algunos comentarios sobre la calibración predeterminada que puse en el boceto, sospecho que está lejos de ser buena. Aquí hay una guía completa con algunos datos experimentales.

Paso 1: Lista de materiales

Lista de materiales
Lista de materiales

Necesitará: 0. Placa Arduino. Prefiero el clon chino de Arduino Nano por su excelente precio de $ 3, pero cualquier arduino de 8 bits funcionará aquí. Sketch utiliza algunas operaciones avanzadas de temporizadores y se probó solo en el microcontrolador atmega328, aunque probablemente también funcione bien en otros. Sensor de CO MQ-7. Más comúnmente disponible con este módulo de sensor Flying Fish, tiene que ejecutar una pequeña modificación, detalles en el siguiente paso, o puede usar un sensor MQ-7 separado.

2. Transistor bipolar NPN. Prácticamente cualquier transistor NPN que pueda manejar 300 mA o más funcionará aquí. El transistor PNP no funcionará con un módulo Flying Fish mencionado (porque tiene un pin del calentador soldado a la salida del sensor), pero se puede usar con un sensor MQ-7 discreto.

3. Resistencias: 2 x 1k (de 0.5k a 1.2k funcionarán bien) y 1 x 10k (es mejor mantener la precisión, aunque si es absolutamente necesario usar un valor diferente, ajuste la variable reference_resistor_kOhm en el boceto en consecuencia).

4. Condensadores: 2 x 10uF o más. Se requieren tantalio o cerámica, el electrolítico no funcionará bien debido a la alta ESR (no podrán proporcionar suficiente corriente para suavizar la ondulación de alta corriente). LED verde y rojo para indicar el nivel de CO actual (también puede usar un solo LED de dos colores con 3 terminales, como usamos en nuestro prototipo de caja amarilla) 6. Zumbador piezoeléctrico para indicar un nivel alto de CO 7. Placa de pruebas y cables (también puede soldar todo a los pines Nano o apretarlos en los enchufes Uno, pero es fácil cometer un error de esta manera).

Paso 2: Modificación del módulo o cableado del sensor discreto

Modificación de módulo o cableado de sensor discreto
Modificación de módulo o cableado de sensor discreto

Para el módulo, debe desoldar la resistencia y el condensador, como se muestra en la foto. Puede desoldar básicamente todo si lo desea: la electrónica del módulo es totalmente inútil, lo usamos solo como soporte para el sensor en sí, pero estos dos componentes evitarán que obtenga lecturas correctas, Si está utilizando un sensor discreto, conecte los pines del calentador (H1 y H2) a 5V y el colector del transistor correspondientemente. Conecte un lado de detección (cualquiera de los pines A) a 5V, otro lado de detección (cualquiera de los pines B) a la resistencia de 10k, al igual que el pin analógico del módulo en los esquemas.

Paso 3: Principio de funcionamiento

Principio de funcionamiento
Principio de funcionamiento
Principio de funcionamiento
Principio de funcionamiento

¿Por qué necesitamos todas estas complicaciones, por qué no conectar 5V, tierra y solo obtener lecturas? Bueno, no obtendrá nada útil de esta manera, desafortunadamente. y ciclos de calentamiento bajo para obtener las medidas adecuadas. Durante la fase de baja temperatura, el CO se absorbe en la placa, produciendo datos significativos. Durante la fase de alta temperatura, el CO absorbido y otros compuestos se evaporan de la placa del sensor, limpiándola para la siguiente medición.

Entonces, en general, la operación es simple:

1. Aplique 5V durante 60 segundos, no use estas lecturas para medir CO.

2. Aplique 1.4V durante 90 segundos, use estas lecturas para medir CO.

3. Vaya al paso 1.

Pero aquí está el problema: Arduino no puede proporcionar suficiente energía para ejecutar este sensor desde sus pines: el calentador del sensor requiere 150 mA, mientras que el pin Arduino no puede proporcionar más de 40 mA, por lo que si se conecta directamente, el pin Arduino se quemará y el sensor aún ganó no funciona. Por lo tanto, debemos usar algún tipo de amplificador de corriente que requiera una pequeña corriente de entrada para controlar una gran corriente de salida. Otro problema es obtener 1.4V. La única forma de obtener este valor de manera confiable sin introducir muchos componentes analógicos es utilizar el enfoque PWM (Modulación de ancho de pulso) con retroalimentación que controlará el voltaje de salida.

El transistor NPN resuelve ambos problemas: cuando se enciende constantemente, el voltaje en el sensor es de 5 V y se calienta para la fase de alta temperatura. Cuando aplicamos PWM a su entrada, la corriente está pulsando, luego es suavizada por el capacitor y el voltaje promedio se mantiene constante. Si usamos PWM de alta frecuencia (en el boceto tiene una frecuencia de 62.5KHz) y promediamos muchas lecturas analógicas (en el boceto promediamos más de ~ 1000 lecturas), entonces el resultado es bastante confiable.

Es fundamental agregar condensadores de acuerdo con los esquemas. Las imágenes aquí ilustran la diferencia en la señal con y sin condensador C2: sin él, la ondulación PWM es claramente visible y distorsiona significativamente las lecturas.

Paso 4: Esquemas y protoboard

Esquemas y protoboard
Esquemas y protoboard
Esquemas y protoboard
Esquemas y protoboard
Esquemas y protoboard
Esquemas y protoboard

Aquí están los esquemas y el ensamblaje de la placa de pruebas.

¡ADVERTENCIA! Se requiere la modificación de un módulo de conexión estándar. Sin módulo de modificación es inútil. La modificación se describe en el segundo paso

Es importante utilizar los pines D9 y D10 para los LED, ya que allí tenemos salidas de hardware Timer1, permitirá cambiar suavemente sus colores. Los pines D5 y D6 se utilizan para el zumbador, porque D5 y D6 son salidas del hardware Timer0. Los configuraremos para que sean inversos entre sí, por lo que cambiarán entre los estados (5V, 0V) y (0V, 5V), produciendo así sonido en zumbador. Advertencia: esto afecta la interrupción de tiempo principal de Arduino, por lo que todas las funciones dependientes del tiempo (como millis ()) no producirán resultados correctos en este boceto (más sobre esto más adelante). Pin D3 tiene una salida de hardware Timer2 conectada a él (así como D11, pero es menos conveniente colocar cable en D11 que en D3), por lo que lo estamos usando para proporcionar PWM para el transistor de control de voltaje. La resistencia R1 se usa para controlar el brillo de los LED. Puede ser de 300 a 3000 ohmios, 1k es bastante óptimo en brillo / consumo de energía. El resistor R2 se usa para limitar la corriente base del transistor. No debe ser inferior a 300 ohmios (para no sobrecargar el pin Arduino) ni superior a 1500 ohmios. 1k hay una elección segura.

La resistencia R3 se usa en serie con la placa del sensor para crear un divisor de voltaje. El voltaje en la salida del sensor es igual a R3 / (R3 + Rs) * 5V, donde Rs es la resistencia del sensor de corriente. La resistencia del sensor depende de la concentración de CO, por lo que el voltaje cambia en consecuencia. El condensador C1 se usa para suavizar el voltaje PWM de entrada en el sensor MQ-7, cuanto mayor sea su capacitancia, mejor, pero también debe tener una ESR baja, por lo tanto, cerámica (o tantalio) Aquí se prefiere el condensador, el electrolítico no funcionará bien.

El condensador C2 se usa para suavizar la salida analógica del sensor (el voltaje de salida depende del voltaje de entrada, y aquí tenemos un PWM de corriente bastante alto, que afecta a todos los esquemas, por lo que necesitamos C2). La solución más simple es usar el mismo capacitor que el transistor C1. NPN o conduce corriente todo el tiempo para proporcionar alta corriente en el calentador del sensor, o trabaja en modo PWM reduciendo así la corriente de calentamiento.

Paso 5: Programa Arduino

Programa Arduino
Programa Arduino

ADVERTENCIA: EL SENSOR REQUIERE CALIBRACIÓN MANUAL PARA CUALQUIER USO PRÁCTICO. SIN CALIBRACIÓN, DEPENDIENDO DE LOS PARÁMETROS DE SU SENSOR EN PARTICULAR, ESTE BOSQUEJO PUEDE ENCENDER LA ALARMA EN AIRE LIMPIO O NO DETECTAR LA CONCENTRACIÓN DE MONÓXIDO DE CARBONO LETAL

La calibración se describe en los siguientes pasos. La calibración aproximada es muy simple, la precisión es bastante compleja.

A nivel general, el programa es bastante simple:

Primero calibramos nuestro PWM para producir 1.4V estables requeridos por el sensor (el ancho adecuado de PWM depende de muchos parámetros como los valores exactos de la resistencia, la resistencia de este sensor en particular, la curva VA del transistor, etc., por lo que la mejor manera es probar varios valores y usar uno que se adapte mejor). Luego, ejecutamos continuamente un ciclo de calentamiento de 60 segundos y medición de 90 segundos. En la implementación se complica un poco. Tenemos que usar temporizadores de hardware porque todo lo que tenemos aquí necesita PWM estable de alta frecuencia para funcionar correctamente. El código se adjunta aquí y se puede descargar desde nuestro github, así como la fuente de esquemas en Fritzing. 3 funciones que manejan temporizadores: setTimer0PWM, setTimer1PWM, setTimer2PWM, cada una configura el temporizador en modo PWM con los parámetros dados (comentados en el código), y configura el ancho de pulso según los valores de entrada. manejar todo adentro. y establezca los valores de temporizador adecuados para cambiar entre calefacción de 5 V y 1,4 V El estado de los LED se establece mediante el conjunto de funciones LED que acepta el brillo verde y rojo en su entrada (en una escala lineal de 1 a 100) y lo convierte en la configuración del temporizador correspondiente.

El estado del zumbador se controla mediante las funciones buzz_on, buzz_off, buzz_beep. Las funciones de encendido / apagado encienden y apagan el sonido, la función de pitido produce una secuencia de pitido específica con un período de 1,5 segundos si se llama periódicamente (esta función regresa inmediatamente para no pausar el programa principal, pero debe llamarlo una y otra vez para producir un patrón de pitido).

El programa primero ejecuta la función pwm_adjust que encuentra el ancho de ciclo PWM adecuado para alcanzar 1.4V durante la fase de medición. Luego emite un par de pitidos para indicar que el sensor está listo, cambia a la fase de medición e inicia el bucle principal.

En el bucle principal, el programa comprueba si pasamos suficiente tiempo en la fase actual (90 segundos para la fase de medición, 60 segundos para la fase de calentamiento) y, en caso afirmativo, cambia la fase actual. También actualiza constantemente las lecturas del sensor usando suavizado exponencial: new_value = 0.999 * old_value + 0.001 * new_reading. Con tales parámetros y ciclo de medición, promedia la señal durante aproximadamente los últimos 300 milisegundos. ADVERTENCIA: EL SENSOR REQUIERE CALIBRACIÓN MANUAL PARA CUALQUIER USO PRÁCTICO. SIN CALIBRACIÓN, DEPENDIENDO DE LOS PARÁMETROS DE SU SENSOR EN PARTICULAR, ESTE BOSQUEJO PUEDE ENCENDER LA ALARMA EN AIRE LIMPIO O NO DETECTAR LA CONCENTRACIÓN DE MONÓXIDO DE CARBONO LETAL.

Paso 6: Primera ejecución: qué esperar

Primera ejecución: qué esperar
Primera ejecución: qué esperar

Si ensambló todo correctamente, después de ejecutar el boceto, verá algo como esto en el monitor de serie:

ajustando PWM w = 0, V = 4.93

ajustando PWM w = 17, V = 3.57PWM resultado: ancho 17, voltaje 3.57

y luego una serie de números que representan las lecturas del sensor de corriente. Esta parte está ajustando el ancho de PWM para producir el voltaje del calentador del sensor lo más cerca posible de 1.4V, el voltaje medido se deduce de 5V, por lo que nuestro valor medido ideal es 3.6V. Si este proceso nunca termina o termina después de un solo paso (lo que da como resultado un ancho igual a 0 o 254), entonces algo está mal. Verifique si su transistor es realmente NPN y está conectado correctamente (asegúrese de que utilizó la base, el colector, los pines del emisor correctamente; la base va a D3, el colector a MQ-7 y el emisor a tierra, no cuente con la vista de tablero de Fritzing, es incorrecto para algunos transistores) y asegúrese de que conectó la entrada del sensor a la entrada A1 de Arduino. Si todo está bien, debería ver en Serial Plotter de Arduino IDE algo similar a la imagen. Los ciclos de calentamiento y medición de 60 y 90 segundos de duración se ejecutan uno tras otro, con CO ppm medido y actualizado al final de cada ciclo. Puede llevar un poco de llama abierta cerca del sensor cuando el ciclo de medición esté casi terminado y ver cómo afectará las lecturas (según el tipo de llama, puede producir una concentración de CO de hasta 2000 ppm al aire libre, por lo que aunque solo una pequeña porción de en realidad entra en el sensor, aún encenderá la alarma y no se apagará hasta el final del siguiente ciclo). Lo mostré en la imagen, así como la respuesta al fuego del mechero.

Paso 7: Calibración del sensor

Calibración del sensor
Calibración del sensor
Calibración del sensor
Calibración del sensor

Según la hoja de datos del fabricante, el sensor debe ejecutar ciclos de calentamiento-enfriamiento durante 48 horas seguidas antes de que pueda calibrarse. Y debe hacerlo si tiene la intención de usarlo durante mucho tiempo: en mi caso, la lectura del sensor en aire limpio cambió aproximadamente un 30% en 10 horas. Si no tiene esto en cuenta, puede obtener un resultado de 0 ppm donde en realidad hay 100 ppm de CO. Si no desea esperar 48 horas, puede monitorear la salida del sensor al final del ciclo de medición. Cuando pase más de una hora, no cambiará por más de 1-2 puntos; puede dejar de calentar allí.

Calibración aproximada:

Después de ejecutar el boceto durante al menos 10 horas en aire limpio, tome el valor del sensor sin procesar al final del ciclo de medición, 2-3 segundos antes de que comience la fase de calentamiento, y escríbalo en la variable sensor_reading_clean_air (línea 100). Eso es todo. El programa estimará otros parámetros del sensor, no serán precisos, pero deberían ser suficientes para distinguir entre concentraciones de 10 y 100 ppm.

Calibración precisa:

Recomiendo encarecidamente encontrar un medidor de CO calibrado, hacer una muestra de 100 ppm de CO (esto se puede hacer tomando un poco de gas de combustión en una jeringa (la concentración de CO puede estar fácilmente en el rango de varios miles de ppm) y colocándola lentamente en un frasco cerrado con medidor calibrado y sensor MQ-7), tome la lectura del sensor sin procesar a esta concentración y colóquela en la variable sensor_reading_100_ppm_CO. Sin este paso, su medición de ppm puede ser incorrecta varias veces en cualquier dirección (aún está bien si necesita una alarma por concentración peligrosa de CO en el hogar, donde normalmente no debería haber CO, pero no es bueno para ninguna aplicación industrial).

Como no tenía ningún medidor de CO, utilicé un enfoque más sofisticado. Primero preparé alta concentración de CO usando combustión en volumen aislado (primera foto). En este artículo encontré los datos más útiles, incluido el rendimiento de CO para diferentes tipos de llamas; no está en la foto, pero el experimento final utilizó la combustión de gas propano, con la misma configuración, lo que resultó en una concentración de CO de ~ 5000 ppm. Luego se diluyó 1:50 para lograr 100 ppm, como se ilustra en la segunda foto, y se usó para determinar el punto de referencia del sensor.

Paso 8: algunos datos experimentales

Algunos datos experimentales
Algunos datos experimentales

En mi caso, el sensor funcionó bastante bien: no es muy sensible para concentraciones realmente bajas, pero lo suficientemente bueno para detectar algo superior a 50 ppm. Traté de aumentar la concentración gradualmente, tomando medidas y construí un conjunto de gráficos. Hay dos conjuntos de líneas de 0ppm: verde puro antes de la exposición al CO y verde amarillo después. El sensor parece cambiar ligeramente su resistencia al aire limpio después de la exposición, pero este efecto es pequeño. No parece poder distinguir claramente entre concentraciones de 8 y 15, 15 y 26, 26 y 45 ppm, pero la tendencia es muy clara, por lo que puede decir si la concentración está en el rango de 0-20 o 40-60 ppm.. Para concentraciones más altas, la dependencia es mucho más distintiva: cuando se expone al escape de una llama abierta, la curva sube desde el principio sin bajar en absoluto, y su dinámica es totalmente diferente. Entonces, para altas concentraciones, no hay duda de que funciona de manera confiable, aunque no puedo confirmar su precisión ya que no tengo ningún medidor de CO nominal. Además, este conjunto de experimentos se realizó con una resistencia de carga de 20k, y después de eso decidí para recomendar 10k como valor predeterminado, debería ser más sensible de esta manera. Si tiene un medidor de CO confiable y habrá ensamblado esta placa, comparta algunos comentarios sobre la precisión del sensor; sería genial recopilar estadísticas sobre varios sensores y mejorar las suposiciones de boceto predeterminadas.

Recomendado: