Sensor de Gas (MQ2) con Arduino UNO

Sensor de Gas analógico (MQ2)

sensor de gas

El sensor de gas analógico (MQ2) se utiliza en la detección de fugas de gas de equipos en los mercados de consumo y la industria, este sensor es adecuado para la detección de gas LP, i-butano, propano, metano, alcohol, hidrógeno, tiene una alta sensibilidad, un tiempo de respuesta rápido  Y dicha sensibilidad puede ser ajustada por el potenciómetro.

Este pequeño sensor de gas detecta la presencia de gas combustible y humo en concentraciones de 300 a 10.000 ppm. Incorpora una sencilla interfaz de tensión analógica que únicamente requiere un pin de entrada analógica del microcontrolador. Con la conexión de cinco voltios en los pines el sensor se mantiene lo suficientemente caliente para que funcione correctamente. Solo tiene que conectar 5V a cualquiera de los pines (A o B) para que el sensor emita tensión. La sensibilidad del detector se ajusta con una carga resistiva entre los pines de salida y tierra.

Estructura y configuración de MQ-2 sensor de gas, el sensor compuesto por micro tubo de cerámica Al2O3, capa sensible de Dióxido de Estaño  (SnO2), el electrodo de medida y el calentador se fija en una corteza hecha por el plástico y red de acero inoxidable. El calentador proporciona las condiciones de trabajo necesarias para el trabajo de componentes sensibles. La envoltura MQ-2 tienen 6 pines, 4 de ellos se utilizan para recoger las señales, y otros se utilizan 2 para proporcionar corriente de calentamiento.

  • Condiciones de trabajo
  • Voltaje de circuito: 5V
  • Voltaje de calentamiento: 5v
  • Resistencia de carga: puede ser ajustable
  • Resistencia del calentador: 33Ω ±5%
  • Consumo: menos de 800mW

 sensor de gas MQ2

A continuación se muestra las típicas características de sensibilidad del MQ-2 durante varios gases en su:

  • Temperatura: 20 ℃,
  • Humedad: 65%,
  • Concentración de O2 21%
  • RL = 5kΩ
  • Ro: resistencia del sensor a 1000 ppm de
  • H2 en el aire limpio.
  • Rs: resistencia del sensor en varias concentraciones de gases.

MQ2 MQ-2

Se muestra la dependencia típica del MQ-2 de la temperatura y la humedad.

  • Ro: resistencia del sensor a 1000 ppm de H2 en el aire  a 33% HR y 20 grados.
  • Rs: resistencia del sensor a 1000 ppm de H2  a diferentes temperaturas y humedades

Conexiones

La terjeta del sensor cuenta con dos salidas de datos, una digital (DO)y otra analogica (AO). La salida digital manda una señal en estado alto cuando el sensor llega a un nivel deseado, el cual puede ser ajustado por medio del potenciometro. La salida analogica va aumentado el valor del voltaje en  proporcion al nivel de gas que se detecta.

 sensor de gas

Si estas usando un Arduino UNO, la conexión seria como el siguiente caso, pero de cualquier manera puedes utilizar cualquier Arduino.

sensor de gas mq

Para obtener los datos en partes por millón (ppm) es necesario hacer la conversión con el siguiente programa.

Programación

 

#define         MQ1                       (0)     //define la entrada analogica para el sensor
#define         RL_VALOR             (5)     //define el valor de la resistencia mde carga en kilo ohms
#define         RAL       (9.83)  // resistencia del sensor en el aire limpio / RO, que se deriva de la                                             tabla de la hoja de datos
#define         GAS_LP                      (0)
String inputstring = "";                                                        //Cadena recibida desde el PC
float           LPCurve[3]  =  {2.3,0.21,-0.47};
float           Ro           =  10;
void setup(){
Serial.begin(9600);                                                                  //Inicializa Serial a 9600 baudios
 Serial.println("Iniciando ...");
   //configuracion del sensor
  Serial.print("Calibrando...\n");
  Ro = Calibracion(MQ1);                        //Calibrando el sensor. Por favor de asegurarse que el sensor se encuentre en una zona de aire limpio mientras se calibra
  Serial.print("Calibracion finalizada...\n");
  Serial.print("Ro=");
  Serial.print(Ro);
  Serial.print("kohm");
  Serial.print("\n");
}

void loop()
{
   Serial.print("LP:");
   Serial.print(porcentaje_gas(lecturaMQ(MQ1)/Ro,GAS_LP) );
   Serial.print( "ppm" );
   Serial.print("    ");
   Serial.print("\n");
   delay(200);
}

float calc_res(int raw_adc)
{
  return ( ((float)RL_VALOR*(1023-raw_adc)/raw_adc));
}

float Calibracion(float mq_pin){
  int i;
  float val=0;
    for (i=0;i<50;i++) {                                                                               //tomar múltiples muestras
    val += calc_res(analogRead(mq_pin));
    delay(500);
  }
  val = val/50;                                                                                         //calcular el valor medio
  val = val/RAL;
  return val;
}

float lecturaMQ(int mq_pin){
  int i;
  float rs=0;
  for (i=0;i<5;i++) {
    rs += calc_res(analogRead(mq_pin));
    delay(50);
  }
rs = rs/5;
return rs;
}

int porcentaje_gas(float rs_ro_ratio, int gas_id){
   if ( gas_id == GAS_LP ) {
     return porcentaje_gas(rs_ro_ratio,LPCurve);
   }
  return 0;
}

int porcentaje_gas(float rs_ro_ratio, float *pcurve){
  return (pow(10, (((log(rs_ro_ratio)-pcurve[1])/pcurve[2]) + pcurve[0])));
}

Configuración del puerto serial

 

Para cargar el programa e ingresar al monitor serial que ofrece el Arduino es necesario asegurarse que el puerto COM sea el correcto.  Para ello tenemos que acceder a “Administrador de dispositivos” desde la PC y verificar que el COM que nos muestra sea el mismo que marca el software de Arduino.

 terminal arduino com

En caso de que no coincidan el que muestra el “Administrador de dispositivos” con el marcado en el software podemos cambiarlo en la barra de herramientas.

gas_7

Una vez que este verificado el puerto serial solo damos click en la lupa que aparece en la parte superior derecha y automáticamente abre otra ventana que muestra el puerto serial.

terminal arduino

Nota: observe que la nueva ventana marca como título del COM de la tarjeta que corresponde al serial monitoreado.

Para analizar el comportamiento del sensor se colocó dentro de un recipiente cerrado y se dejó escapar gas de un encendedor y con la ayuda del puerto serial se pudo observar los datos obtenidos de los sensores de gas LP.

 Serial Arduino

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

      • una pregunta o duda que me surgio a mi, es por que en la ventana de puerto serial al momento de detectar gas me salen puras letras extranas y simbolos no entiendo que estoy haciendo mal?..

          • mira lo que pasa es que yo estoy haciendo pruebas con mi sensor es el mismo que pones aqui en la desrcipcion, y tambien estoy usando el mismo codigo que pusiste no le cambie nada, lo que hice fue copiar y pegar y cargarlo y a la hora de aplicarle gas al sensor me salen en la ventana de puerto serial este tipo de caracteres y simbolos “IòñEùÙ|UEÅîü:ðü:ðÿ[ðÿzðÿ:ðüñÿ:ðÿ:ðÿZðÿñþñü[ðþ[ðÿñÿñþzðÿZðÿSðþzðþZðÿ:ðþñþ[ðÿ[ðÿ:ðþ:ðþ:ðþñþñü”no se donde checar la velocidad que dices…

        • Acabo de cambiar el codigo de la pagina, parece ser que hay una discrepancia, en el codigo estaba 57600 pero en la imagen 9600, ya puedes copiarlo y pegarlo y deberia de funcionar. Me avisas como te fue.

          • de hecho de las dos maneras esta bien ya lo cheque muchas gracias, pero tengo otra duda ese codigo esta hecho solamente para que se detecte el gas lp? ya que yo eh estado tratando de aplicarle propano y butano pero no mide nada solo sale esto”
            Iniciando …
            Calibrando…
            Calibracion finalizada…
            Ro=3.15kohm
            LP:0ppm
            LP:0ppm
            LP:0ppm
            LP:0ppm

            tendra que ver el tipo de gas que le estoy aplicando al sensor?

      • muy buen tutorial, solo una consulta, por que ocupal la curva a LPGCurve {2.3,0.21,-0.47} que tengo entendido que hace referencia a 1000ppm=?? teniendo en cuenta que este sensor varia desde 200-10000ppm. me refiero que pudiste haber ocupado otra curva dependiendo de los ppm, de hay nace mi duda… por que no ocupar otra curva??

  1. gran tutorial, pero una duda… el sensor puede leer mas de un gas distinto a la vez? y si es asi… como deberia de ser la programacion???

    • Diego, el sensor es sensible a diferentes gases, solo que en mayor medida al que se supone que esta fabricado, por lo que si quisieras sensar otro gas te recomendaría usar otro módulo MQ que puedas estar monitoreando.

  2. Disculpa, el sesor puede medir varios tipos de gases, pero me gustaria saber si diseñaste ese codigo para la lectura del gas LP solamente? o puedo usar ese codigo para medir algun otro gas ?
    Y como le puedo hacer para que con ese codigo pueda identificar entre dos gases al mismo tiempo? se que son muchas dudas pero no estoy muy familiarizado con todo esto. gracias de antemano

    • Hola que tal sensor es sensible a diferentes gases, solo que en mayor medida al que se supone que esta fabricado, por lo que si quisieras sensar otro gas te recomendaría usar otro módulo MQ que puedas estar monitoreando. No podrias identificar 2 gases al mismo tiempo como te decia, ocupas 2 sensores MQ.

  3. Hola
    Disculpa cres que me podrías decir como cambiar la resistencia para variar la sensibilidad del sensor

    Habla de un potencio metro no se si es el que tiene el modulo o cambiar la resistencia interna del sensor y si puede detectar 1000 ppm

    Gracias

  4. Muchas gracias por el tutorial!
    Ayer lo construí y me anduvo, hasta que….parece que se me quemó el Arduino. Puede ser que haya demandado demasiado amperaje y se haya quemado el regulador de tensión o el mismo arduino?
    Vi en otros tutoriales, que alimentan con 5v al sensor directamente de una fuente, y esa misma fuente al Arduino al Vin y Grnd.
    Gracias
    Patricio

      • Gracias por tu pronta respuesta!
        Estaba probando el sensor lo más bien hasta que dejó de responder y el mismo arduino empezó a calentarse. Lo desenchufé de la fuente, desconecté todo, y lo enchufé a la computadora (ordenador) vía usb. Pero ya no responde nada, no me aparece el puerto y volvió a tomar temperatura el chip del arduino (no el regulador).
        Hoy cuando vuelva a casa, probaré de cambiarle el chip por uno que debo tener dando vueltas por ahí. Pero temo estropearlo también.

      • Efectivamente “drenó” demasiada corriente por el pin 5V. El MQ2 consume hasta 800mW la parte de la resistencia que lo calienta. Esto hizo que se quemara el estabilizador de voltaje del arduino.
        Lo correcto, y lo que hice, fue alimentar el sensor directamente de la fuente de 5V, y esta fuente alimentar al arduino (uno nuevo).
        Estaría bueno actualizar esto para que a nadie más le pase. Saludos

        • Patricio, me extraña, el sensor nunca debió de consumir tanta corriente, el pin de 5V del Arduino tiene suficiente capacidad para ese módulo. Seria bueno revisar bien que fue lo que paso.

          • No, el regulador del voltaje del arduino no está diseñado para tanto consumo, y en pocas horas se estropeará.
            Lo mejor es alimentarlo aparte con otro regulador de voltaje como el L7805CV.

  5. Disculpa a que te refieres con LPCurve [3] = {2.3 …}, que significan estos valores, ¿son tomados de la gráfica? porque no logro identificarlos

    • Es correcto el LPCurve[3]={2.3…} salen del datasheet del MQ, son 3 valores {x,y,m} con m= pendiente de la curva, x=log(ppm) , y=log(Rs/Ro) y m= log [(y2-y1)/(x2-x1)]. Siendo (x1,y1) un punto sobre la curva y (x2,y2) otro mas alejado

  6. Hola! Disculpa, necesita alguna librería? Uso el MQ-2 y necesito medir metano en ppm. Sigo los mismos pasos que aquí? Gracias, está excelente el artículo.

    • Sebsanta, dependiendo el sensor que tengas, y de que tipo de “humo” sea. Igual checa las hojas de datos de los sensores MQ y solo elige el que más se acerque a lo que quieras medir, una vez lo tengas funcionan prácticamente igual.

  7. Hay un tema que no entiendo. A ver si estoy en lo correcto, el pin analógico es para leer o sensar el gas o humo, con int nivel_sensor regulo donde quiero que se me active el buzzer y el potenciómetro del sensor para darle sensibilidad. Pero el pin digital que me activa??? o como lo configuro, en una palabra, para que sirve el pin digital?

  8. Hola, tengo el sensor mq7 y quisiera saber si son los mismos paso, o tengo que cambiar valores por la curva del datasheet

      • Hola, el MQ135 y me salen en 0 las particulas por millon, ahora estoy usando el MQ135 para medir C02 y todo me sale en 0, cambie la resistencia RL a 20K (el datasheet indica) y no me arroja ningun valor, pero si solo leo la lectura analogica me lanza valores al respirar cerca, ese es el codigo:

        #define MQ135 (0) //define la entrada analogica para el sensor
        #define RL_VALOR (20) //define el valor de la resistencia mde carga en kilo ohms
        #define RAL (9.83) // resistencia del sensor en el aire limpio / RO, que se deriva de la tabla de la hoja de datos
        #define GAS_CO2 (0)
        String inputstring = “”; //Cadena recibida desde el PC
        float CO2Curve[3] = {2.3,0.21,-0.47};
        float Ro = 10;
        void setup(){
        Serial.begin(9600); //Inicializa Serial a 9600 baudios
        Serial.println(“Iniciando …”);
        //configuracion del sensor
        Serial.print(“Calibrando…\n”);
        Ro = Calibracion(MQ135); //Calibrando el sensor. Por favor de asegurarse que el sensor se encuentre en una zona de aire limpio mientras se calibra
        Serial.print(“Calibracion finalizada…\n”);
        Serial.print(“Ro=”);
        Serial.print(Ro);
        Serial.print(“kohm”);
        Serial.print(“\n”);
        }

        void loop()
        {
        Serial.print(“C02:”);
        Serial.print(porcentaje_gas(lecturaMQ(MQ135)/Ro,GAS_CO2) );
        Serial.print( “ppm” );
        Serial.print(” “);
        Serial.print(“\n”);
        delay(200);
        }

        float calc_res(int raw_adc)
        {
        return ( ((float)RL_VALOR*(1023-raw_adc)/raw_adc));
        }

        float Calibracion(float mq_pin){
        int i;
        float val=0;
        for (i=0;i<50;i++) { //tomar múltiples muestras
        val += calc_res(analogRead(mq_pin));
        delay(500);
        }
        val = val/50; //calcular el valor medio
        val = val/RAL;
        return val;
        }

        float lecturaMQ(int mq_pin){
        int i;
        float rs=0;
        for (i=0;i<5;i++) {
        rs += calc_res(analogRead(mq_pin));
        delay(50);
        }
        rs = rs/5;
        return rs;
        }

        int porcentaje_gas(float rs_ro_ratio, int gas_id){
        if ( gas_id == GAS_CO2 ) {
        return porcentaje_gas(rs_ro_ratio,CO2Curve);
        }
        return 0;
        }

        int porcentaje_gas(float rs_ro_ratio, float *pcurve){
        return (pow(10, (((log(rs_ro_ratio)-pcurve[1])/pcurve[2]) + pcurve[0])));
        }

          • es que quiero implementar este codigo para la calibracion, pero se lo subo al arduino y todo me sale en 0

    • Idealmente si, es el tiempo de pre calentamiento para estabilizar el sensor. Igual puedes medir y hacer pruebas solo al conectarlo es suficiente ya que manda datos desde el inicio.

  9. saludos Hector, yo estuve batallando bastante con este módulo y
    la duda viene por parte de la fórmula:
    “(pow(10, (((log(rs_ro_ratio)-pcurve[1])/pcurve[2]) + pcurve[0])));”
    lo que pasa es que usa el logaritmo natural “log” y lo correcto seria cambiarlo por el logaritmo de base 10 “log10” para que así concuerde con la fórmula de linealización de las curvas del datasheet.
    le agradeceria bastante si podría revisar esta observación y que si tuviera algún tutorial sobre el sensor mq135 y como obtener el gas NH3 me pueda mandar el link gracias.

  10. Muy bueno, tendrás algún ejemplo con una rasperry pi y el código en Python solo para saber cómo calibrar y me de los datos igualmente en ppm. Saludos

      • Hola Hector,estamos trabajando con un MQ9 para detectar el monoxido de carbono pero nos hemos atascado en la conversión a ppm. Hemos visto que tienes muy bien definida la programación para la detección de lpg con el MQ2 y nos preguntamos si tendrías definida tambien la programación para el CO en MQ9.
        Gracias,un saludo

        • Hola otra vez,realmente nos da igual si tenemos que trabajar con un MQ2 o MQ7 para la lectura del CO,asi que nos vale cualquier programación definida para estos sensores con tal de poder hacer la medición correcta en ppm.
          Gracias de nuevo.

      • Hola Hector,el problema es que el esquema que aparece en este post es para la deteccion de “lp” y a nosotros nos interesa la medición de Co…
        Gracias.

        • Entonces si necesitas cambiar el sensor al MQ-7, si observas el MQ-2 no cambia su magnitud con Co, solo cambia el sensor y listo. Aunque para una calibración precisa siempre necesitas otro medido de Co para calibrar el sensor.

          • entonces quieres decir que con el MQ7 y el codigo del MQ2 puedo obtener la medición en ppm?

  11. Hola Hector
    Estoy haciendo el detector para tratar de medir CH4.
    No me queda claro si tengo que cambiar para mi caso la linea
    06 float LPCurve[3] = {2.3,0.21,-0.47};
    Desde Ya muchas gracias
    Foe Kohei

  12. Una pregunta, al momento que se realiza la conexión del pin analógico del arduino y el sensor, no debería ir una resistencia RL? En el datasheet menciona un RL pero la verdad no sé si es así.saludos

    • Hola Diego
      Yo estoy haciendo uno como comento arriba, la RL en los múdulos que figuran al inicio da la página ya vienen con una RL.
      En el caso de mi módulo la medí y me dió 1 Kohms.
      Yo estoy trabado con la línea que menciono 06 float LPCurve[3] = {2.3,0.21,-0.47}; que no interpreto que hace, pero en lo demás lo hice y anda bien con el módulo MQ2.
      Saludos

  13. Gracias por tu respuesta Foe Kohei,osea tengo la duda si la RL esta es solo para el pin digital del sensor, pero según consulté en una tesis, se necesita una resistencia de carga entre el pin del arduino y el sensor para obtener los voltajes de salida y luego realizar la conversión en ppm; yo ya lo realicé sin la RL pero no estoy seguro que sean correctos esos valores. Te recomiendo que revises este video en youtube: https://www.youtube.com/watch?v=QYSDSKn2Vf8 para el problema de esa línea de código(yo también lo estoy revisando porque no comprendo muy bien esa línea 06 float LP…), está en inglés pero fíjate en lo que dice y anda a las páginas web que utiliza para el código, yo también estoy usando el sensor MQ4, MQ7 y para CO2. Espero tus comentarios para apoyarnos.

    • Hola Diego, es correcto lo que comenta Foe el modulo que utilizamos en este tutorial ya tiene RL y Foe este codigo debe funcionar para este tipo de sensor y obtener sin dificultad los datos pero sobre la linea de codigo no recordamos su función pero es una declaración de datos para la variable espero que aclare mas tu duda seguiremos buscando para dar mejor apoyo

      • Gracias Saul por tu aclaracion, solo que me confundí un poco porque vi en una tesis esa resistencia,
        Bueno voy a tratar de explicar como saca esos valores para todas las personas que tengan dudas de 06 float LPCurve[3] = {2.3,0.21,-0.47}
        El 2,3 es el log(200), el 200 es de la hoja de datos del sensor. El 0,21 es un valor aproximado del log(1,6), el 1,6 sale de la hoja de datos del sensor, es decir cuando se tiene 200ppm el valor de Rs/Ro=1,6. El valor -0,47 es el valor de la pendiente, si recuerdan de geometría la pendiente(m) se calcula con m=(y2-y1)/(x2-x1), para poder calcular la pendiente se necesita dos puntos, en este caso solo tenemos un punto P(2,3 ; 0,21) por lo que se requiere otro punto, esto se obtiene con el valor maximo que sería 10000ppm con una Rs/Ro aproximado de 0,26(esto sale del datasheet), log(10000)=4 y log(0,26)= -0,59 por lo que el otro punto es Q(4 ; -0,59), entonces reemplazamos en la ecuación m=(-0,59-0,21)/(4-2,3)=-0,47.
        Saludos, espero haber sido lo más claro posible

        • Gracias Diego por tan buena respuesta muy dato tu respuesta esperamos que sea de ayuda a las demas personas que entren aqui, saludos

        • Hola Diego
          Hay varios datos que no logro entender, te explico:
          1º El log(200)dices que es 2,3, entonces si el log fuera 300 ¿Qué seria 3,3?(no logro entender como sale el 2,3).
          2º el 0,21 sale del log (1,6), el 1,6 entiendo que es a donde termina la línea del gas que estamos tratando(LPG)pero el ¿0,21?.
          3ºLa pendiente, el 0,26 ¿de donde sale?
          el log 10000 =4, el 4 ¿de donde sale ?
          el log 0,26 =-0,59 ¿el -0,59 ¿de donde sale?.
          Bueno, perdona mi torpeza pero si logro entender los cálculos de este sensor creo que poder sacar los del MQ-4 que es el que estoy utilizando para medir gas natural
          Gracias

          • Que tal Julio, respondo a este tipo de preguntas porque me ayudó full este blog jeje y se que mientras para una persona puede ser lo más fácil del mundo para otr@s puede resultar difícil. Verás primero debes tener la hoja de datos del sensor MQ-2 para que vayas verificando la información.La hoja de datos da una escala logarítmica así que debes fijarte el valor que representa cada línea.
            1)Verás, se tiene 200 ppm cuando Rs/Ro es aproximadamente 1,6 (estos valores corresponden a la recta de LGP del sensor MQ-2 de la hoja de datos). Log significa logarítmo, en cualquier calculadora científica encuentras esta opción. Pones el log(200) en tu calculadora y te saldrá 2,30. Si fuera log(300) sería 2,477 eso depende del cálculo.
            2) La misma explicación anterior. Pones en tu calculadora log(1,6) y te da 0,204, que en está página lo aproximan a 0,21
            3) EL 0,26 NO es la pendiente, eso se calcula más después. Se tiene 10000 ppm cuando Rs/Ro es aproximadamente 0,26(valor aproximado ya que el final de la recta esta entre 0,2 y 0,3); te acuerdas que la escala del datasheet tiene escala logarítmica entonces en la gráfica esta 0,1(luego sería 0,2; 0,3; 0,4 ………….0,6) después 1 (luego 2; 3; 4; ……..9) y posterior 10.Entonces log que significa logartímo (perdona mi insistencia jejeje ) pones en tu calculadora, log(10000) y te da 4; log(0,26)= -0,585 que le redondeas y te da -0,59.
            Por último la pendiente le calculas con la fórmula m=(y2-y1)/(x2-x1), los puntos son los que se calculó P(2,3 ; 0,21)
            Q(4; -0,59) y ya pues reemplazas y listo m=(-0,59-0,21)/(4-2,3)=-0,47.

            Saludos.

          • Muchas gracias por tu extensa explicación y sobre todo por tu tiempo.
            En un principio lo que hice es un copi pega de tu explicación y un copi pega de la grafica del MQ-2 y pegarlo en Word y imprimirlo, con la hoja empece a darle vueltas pero una de tantas torpezas mias es no entender que (log) es logaritmo.
            Lo único que logre sacar es el 1,6 y poco mas. Ahora ya tiene sentido todo

            Muchas Gracias de nuevo

  14. Hola, estoy haciendo pruebas con mi sensor y los valores que me arrojan es solamente 0 ppm por que no me sale ninguna medicion

  15. por mas que miro lo de la resistencia RL no se si hay que ponerla o no, y si hay que ponerla donde seria?.
    Mi proyecto es la realización de un detector de gas ciudad, para colocarlo en una cocina

    • Hola buen dia le comento, a esa misma pregunta han llegado mas usuarios, la tarjeta que hemos usado aqui ya incluia la resistencia RL, si gusta puede leer los comentarios estan un poco antes de este, y viendo lo que este usando puede considerar la respuesta

  16. Gracias por contestar, veo que la resistencia la lleva el modulo.
    El modulo que estoy usando es el MQ-4 que creo que es el mas indicado para detectar gas natural, el problema que estoy teniendo es el cambiar los parámetros según el datasheet.
    Lo estoy modificando según entiendo las explicaciones del amigo Diego pero al probarlo me detecta menos ppm que con los parámetros que originalmente vienen en tu programa.
    No se si podras echarme una mano.
    Un Saludo

  17. Una pregunta acerca del siguiente código.

    {
    return ( ((float)RL_VALOR*(1023-raw_adc)/raw_adc));
    }
    El RL_VALOR, a la final vendría a ser el voltaje de 5 voltios de Arduino? para obtener la concentración del gas en el rango de 0 a 5 voltios para luego transformarle a ppm? Lo que pasa es que estoy haciendo para el sensor MQ7 y en el datasheet dice que RL=10. La duda es: la variable RL_VALOR para el sensor MQ7 es 5 ó 10

  18. hola
    tengo un problema con el detector.
    Montado y alimentado por USB funciona de maravilla, el problema esta cuando lo quiero alimentar con una alimentación externa, a la hora de calibrar el RO que da es (inf kohm)y no da ninguna lectura ppm, pero si leo la lectura que da el pin de salida si da lectura del nivel de gas que esta detectando.
    Sabe alguien que es lo que puede estar ocurriendo,lo e alimentado externamente con un cargador de móvil (5v.) y una fuente de laboratorio y hace lo mismo con una que con otra.
    Un saludo

  19. Hola, quiero agradecerles inmensamente por el código, me ayudado mucho para entender la funcion del sensor… además, este codigo me ayudó a resolver una parte de la Tesis. Cordiales saludos a todos en especial a los integrantes de HETPRO; Hector Torres, Saul Jesus… Gracias por ayudar a todos con nuestras dudas.

  20. hola chicos que tal. mire, yo tengo dudas en el programa. en cuanto a lo valores que se le asigna a RL_VALOR (5), RAL (9.83) donde agarraron ese valor? y float Ro=10, no entiendo! les agradeceria que me apoyen. lo necesito para pasar mi materia. muchas gracias por el codigo. saludos y abrazitos 😉

    • Anna, RL_VALOR(5) es la resistencia de carga que se pone entre el pin de salida y GND, los valores RAL es la resistencia del sensor en el aire y Ro resistencia del sensor a 1000 ppm de H2 en el aire a 33% HR y 20 grados. Los últimos 2 fueron tomados de la hoja de datos. Saludos.