T µ0sdI Ri &$`jiI &$phI s`e+J +@hI Q#hI `e+J +@hI Qf Mf Nwd i &$g8I Pg`I h s`eJ` +g8I Pg`I h Gases – Aula Habitable

El grupo de gases está formado por cuatro integrantes, cuatro amigos. Nuestra misión es conseguir medir la concentración de gases presentes en nuestras aulas de la forma más precisa posible.

Para ello los alumnos de segundo de bachillerato del grupo de gases hemos estado durante tres meses adquiriendo conocimientos de distintos sitios web. ¿Nuestra motivación? Ser capaces de crear un código lo suficientemente bueno y preciso como para medir la calidad de aire y concentración de gases, para así ser conscientes de lo bien o mal que ventilamos el aula y optimizar los tiempos de ventilación.

De nosotros depende la seguridad y el confort de la clase. Un tiempo reducido de ventilación supondría un mayor riesgo de contraer el virus, y tener las ventanas abiertas todo el día supone caer en un estado de congelación abrupto y poco agradable.

ÍNDICE

1.¿Qué es un sensor?

1.1.¿Qué sensores vamos a usar?

1.1.1. MQ-135 y su funcionamiento.

1.1.2. MG-811 y su funcionamiento.

2. Construcción de los circuitos.

3. Fotos del proceso

4.Procedimiento experimental de calibración

5.Determinación de la curva de C02

6.Código del sensor MQ-135 para medición de CO2

7.Código del sensor MG-811para medición de C02

1. ¿QUÉ ES UN SENSOR DE GASES?

Un sensor de gas es un dispositivo que nos ayuda a medir la calidad del aire analizando la presencia de componentes químicos en él. Podemos conectar este dispositivo a un procesador como Arduino.

1.1. ¿QUÉ SENSORES VAMOS A USAR?

Para esto proyecto usaremos dos sensores:

  • MQ135: Sensor que mide la calidad del aire en Arduino. Es usado para la detección de contaminación en el medio ambiente. Puede detectar gases peligrosos como el amoníaco, dióxido de nitrógeno, alcohol, benzeno, dióxido y monóxido de carbono. El sensor mide la concentración en partes por millón (ppm).
  • MG811: Este es un sensor que mide las cantidades de CO2 que hay en el ambiente en partes por millón (ppm).
Amazon.com: Sensor de dióxido de carbono MG811, sensor de CO2, módulo de  sensor de gas.: Industrial & Scientific

2. CONSTRUCCIÓN DE LOS CIRCUITOS

La construcción del circuito será igual con los dos sensores, ya que tienen las mismas salidas.

DOUT – D9

AO – A0

GND – GND

Vcc – 5V

(imágenes obtenidas de https://www.luisllamas.es/arduino-detector-gas-mq/)

3. FOTOS DEL PROCESO

4.Procedimiento experimental de calibración

Para tomar los valores de calibración correctos diseñamos un experimento en el que, con el sensor , un medidor de CO2 comercial y un voltímetro soplamos dentro de una bolsa para que el sensor experimente una diferencia de C02 en un entorno controlado.

El experimento consiste en meter dentro de una bolsa de plástico el sensor y el medidor comercial. A la salida analógica del sensor conectamos la entrada de voltaje del voltímetro y así se nos proyecta el valor de voltaje que capta el sensor en cada momento.

Una vez en la bolsa, uno de nosotros sopla dentro para aumentar los niveles de CO2 dentro, y los comparamos con los del sensor comercial. Así podremos entonces conocer los valores correspondientes de voltaje.

5.Determinación de la curva de C02

6.Código del sensor MQ-135 para medición de CO2

#include «MQ135.h»
#define ANALOGPIN A0    //  Define Analog PIN on Arduino Board
#define RZERO 206.85    //  Define RZERO Calibration Value
MQ135 gasSensor = MQ135(ANALOGPIN);

void setup()
{
  Serial.begin(9600);
  float rzero = gasSensor.getRZero();
  //delay(3000);
  Serial.print(«MQ135 RZERO Calibration Value : «);
  Serial.println(rzero);
}

void loop() {
  float valorsensor = gasSensor.getPPM();
  float ppm=2500*valorsensor-50;
  delay(1000);
  digitalWrite(13,HIGH);
  Serial.print(«CO2 ppm value : «);
  Serial.println(ppm);
}

7.Código del sensor MG-811 para medición de C02

#define         MG_PIN                       (0)     //define which analog input channel you are going to use
#define         BOOL_PIN                     (2)
#define         DC_GAIN                      (8.5)   //define the DC gain of amplifier

/***********************Software Related Macros************************************/
#define         READ_SAMPLE_INTERVAL         (50)    //define how many samples you are going to take in normal operation
#define         READ_SAMPLE_TIMES            (5)     //define the time interval(in milisecond) between each samples in


/**********************Application Related Macros**********************************/
//These two values differ from sensor to sensor. user should derermine this value.
#define         ZERO_POINT_VOLTAGE           (0.14) //define the output of the sensor in volts when the concentration of CO2 is 400PPM
#define         REACTION_VOLTGAE             (0.09) //define the voltage drop of the sensor when move the sensor from air into 1000ppm CO2

/*****************************Globals***********************************************/
float           CO2Curve[3]  =  {2.602,ZERO_POINT_VOLTAGE,(REACTION_VOLTGAE/(2.585-2.845))};  

void setup()
{
    Serial.begin(9600);                              
    pinMode(BOOL_PIN, INPUT);                        
    digitalWrite(BOOL_PIN, HIGH);                  

   Serial.print(«MG-811 Demostration\n»);                
}

void loop()
{
    int percentage;
    float volts;

    volts = MGRead(MG_PIN);
    Serial.print( «SEN-00007:» );
    Serial.print(volts);
    Serial.print( «V           » );
    percentage=3000*volts-100;
Serial.print(percentage);


    /*percentage = MGGetPercentage(volts,CO2Curve);
    Serial.print(«CO2:»);
    if (percentage == -1) {
        Serial.print( «<400» );
    } else {
        Serial.print(percentage);
    }
 */

    Serial.print( «ppm» );  
    Serial.print(«\n»);

    if (digitalRead(BOOL_PIN) ){
        Serial.print( «=====BOOL is HIGH======» );
    } else {
        Serial.print( «=====BOOL is LOW======» );
    }

    Serial.print(«\n»);

    delay(200);
}

/*****************************  MGRead *********************************************
Input:   mg_pin – analog channel
Output:  output of SEN-000007
Remarks: This function reads the output of SEN-000007
************************************************************************************/
float MGRead(int mg_pin)
{
    int i;
    float v=0;

    for (i=0;i<READ_SAMPLE_TIMES;i++) {
        v += analogRead(mg_pin);
        delay(READ_SAMPLE_INTERVAL);
    }
    v = (v/READ_SAMPLE_TIMES) *5/1023 ;
    return v;  
}

/*****************************  MQGetPercentage **********************************
Input:   volts   – SEN-000007 output measured in volts
         pcurve  – pointer to the curve of the target gas
Output:  ppm of the target gas
Remarks: By using the slope and a point of the line. The x(logarithmic value of ppm)
         of the line could be derived if y(MG-811 output) is provided. As it is a
         logarithmic coordinate, power of 10 is used to convert the result to non-logarithmic
         value.
************************************************************************************/
int  MGGetPercentage(float volts, float *pcurve)
{
   if ((volts/DC_GAIN )>=ZERO_POINT_VOLTAGE) {
      return -1;
   } else {
      return pow(10, ((volts/DC_GAIN)-pcurve[1])/pcurve[2]+pcurve[0]);
   }
}