Pentru detectia scurgerilor de gaze inflamabile putem folosi senzorul MQ6. Acest senzor detecteaza scurgerile de gaz GPL, gaz metan, hidrogen si chiar CO2.

    Modulul se alimenteaza cu o tensiune de 5V (obligatorie pentru functionarea elementului incalzitor din interiorul senzorului) si ofera 2 tipuri de iesiri: o iesire digitala care are un prag reglabil si o iesire analogica, iesire care ne ofera mult mai detaliat nivelul de gaz detectat in aer.

    O poza cu acest modul este mai jos:

 

 Conexiunea senzorului cu Arduino Uno se poate face simplu, folosind iesirea analogica a modulului la pinul A0 al placii de dezvoltare.

    Pentru o verificare rapida putem folosi urmatorul sketch, sketch care ne ofera informatii despre nivelul de gaze detectate in terminalul serial:

int mq6=A0;   //alocam pinul A0 pentru citirea datelor
int rezultat;
void setup()
{  
  Serial.begin(9600);   
  pinMode(mq6,INPUT);  //setam pinul A0 ca si pin de intrare
  Serial.println("Testare modul MQ-6");
  Serial.println("############################");
  delay(2000);                         
 }
void loop()
{
  rezultat = analogRead(mq6);       
  Serial.print("Rezultate returnate de catre senzor:");
  Serial.println(rezultat);
  delay(1000);                                   
}

    Rezultatul rularii acestui sketch se poate vedea mai jos:

    Dupa cum se observa la pornirea senzorului in aer curat rezultatul returnat este in gama 50-70. La detectia gazului de bricheta (folosit in teste) rezultatul returnat creste peste valoarea de 100, in functie de cat de mult gaz se detecteaza.

    Daca dorim sa folosim o varianta mai complexa de cod (cu o detectie mai precisa) putem folosi urmatorul cod.

#define MQ_PIN 0
#define RL_VALUE 20
#define RO_CLEAN_AIR_FACTOR 10
#define CALIBARAION_SAMPLE_TIMES 50
#define CALIBRATION_SAMPLE_INTERVAL  500
#define READ_SAMPLE_INTERVAL 50 
#define READ_SAMPLE_TIMES 5
#define GAS_LPG 0
#define GAS_CH4 1
float LPGCurve[3] = {3,   0,  -0.4}; 
float CH4Curve[3] = {3.3, 0,  -0.38};
float Ro =  10; 

void setup() {
  Serial.begin(9600);
  Serial.print("Calibrare... Va rugam asteptati\n");                
  Ro = MQCalibration(MQ_PIN);                    
  Serial.print("Calibrare realizata cu succes...\n"); 
  Serial.print("Ro=");
  Serial.print(Ro);
  Serial.print("kohm");
  Serial.print("\n");
}

void loop()
{
   Serial.print("GPL:"); 
   Serial.print(MQGetGasPercentage(MQRead(MQ_PIN)/Ro,GAS_LPG) );
   Serial.print( "ppm" );
   Serial.print("        ");   
   Serial.print("Gaz metan:"); 
   Serial.print(MQGetGasPercentage(MQRead(MQ_PIN)/Ro,GAS_CH4) );
   Serial.print( "ppm" );
   Serial.print("\n");
   delay(1000);
}


float MQResistanceCalculation(int raw_adc)
{
  return ( ((float)RL_VALUE*(1023-raw_adc)/raw_adc));
}

float MQCalibration(int mq_pin)
{
  int i;
  float val=0;
  for (i=0;i<CALIBARAION_SAMPLE_TIMES;i++) { 
    val += MQResistanceCalculation(analogRead(mq_pin));
    delay(CALIBRATION_SAMPLE_INTERVAL);
  }
  val = val/CALIBARAION_SAMPLE_TIMES; 
  val = val/RO_CLEAN_AIR_FACTOR;
  return val; 
}

float MQRead(int mq_pin)
{
  int i;
  float rs=0; 
  for (i=0;i<READ_SAMPLE_TIMES;i++) {
    rs += MQResistanceCalculation(analogRead(mq_pin));
    delay(READ_SAMPLE_INTERVAL);
  } 
  rs = rs/READ_SAMPLE_TIMES;
  return rs;  
}

int MQGetGasPercentage(float rs_ro_ratio, int gas_id)
{
  if ( gas_id == GAS_LPG ) {
     return MQGetPercentage(rs_ro_ratio,LPGCurve);
  } else if ( gas_id == GAS_CH4 ) {
      return MQGetPercentage(rs_ro_ratio,CH4Curve);
  }    
  return 0;
}

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

    Acest cod l-am gasit pe acest site si l-am modificat foarte putin.

    In urma rularii codului rezultatul se va putea observa in terminalul serial:

Nu sunt comentarii

Acest website foloseste cookie-uri pentru o experienta placuta in timpul navigarii.