EOS

Rilevatore fughe di gas Fai-da-Te: progetto Fartalyzer

Fartalyzer è un progetto che implementa la scheda Flip&Click della MikroElektronica per la misura di parametri quali la temperatura e livelli di gas metano. Una volta che i dati di interesse vengono acquisiti, un supporto flash permette di salvarli ogni 20 secondi. Oltre alla scheda Flip&Click vengono utilizzati i seguenti moduli Click MikroBUS: RTC2 Click, Thermo 3 Click, MicroSD Click e Methane Click. Quest’ultimo sfrutta la potenza di un sensore MQ-4 per la rilevazione di CH4 (metano), il campo di rilevamento è 200-10000 ppm. Il metano è un idrocarburo che si trova in natura sotto forma di gas, la molecola ha forma tetraedrica con angoli di legame di 109,5°. Il modulo Methane Click comunica con la scheda target attraverso la linea mikroBUS AN (OUT), ed è progettato per lavorare con una alimentazione di 5V. Gli altri moduli impiegati nel progetto sono analizzati anche in ulteriori articoli quali il progetto Master Chef Demo e l’etilometro.  

Introduzione

Il Methane click è formato da un sensore MQ-4 (Figura 1) con uno strato sensibile di diossido di stagno (SnO2), dove la conduttività aumenta con l'aumentare dei livelli di metano. Per calibrare il sensore viene utilizzato un piccolo potenziometro che permette di regolare la resistenza di carico del circuito sensore. Per una taratura precisa il sensore deve essere preriscaldato, impiegando circa 24h per raggiungere la giusta temperatura (Figura 2 e 3).

Figura 1: Caratteristiche del sensore MQ-4

Figura 1: Caratteristiche del sensore MQ-4

 

Figura 2: Modulo Sensore Methane Click

Figura 2: Modulo Sensore Methane Click

 

Figura 3: Schema elettrico del Modulo Methane Click

Figura 3: Schema elettrico del Modulo Methane Click con il sensore MQ-4

Il circuito di azionamento è molto semplice, l’importante è collegare l’alimentazione di 5 V e aggiungere una resistenza di carico; successivamente collegare l'uscita ad un eventuale ADC. Questo sensore ha un'alta sensibilità con tempi di risposta molto rapidi. Viene fornito in un package simile al sensore di alcol MQ-3. Le caratteristiche tecniche del sensore MQ-4 possono essere riassunte di seguito:

  • Alimentazione di 5V DC o AC.
  • Set-up con una tensione di riscaldamento.
  • Range di temperatura di lavoro: da -10°C a 50°C.
  • Consumo di circa 700 mW.
  • Dimensioni: diametro 20mm e altezza 23mm

Oltre al modulo sensore relativamente al metano, il progetto si compone di RTC2 Click: un real time clock; il sensore Thermo 3 Click: un sensore di temperatura digitale IC con un piccolo ingombro di soli 1,6 mm x 1,6 mm; e MicroSD Click.  Il sensore di temperatura è TMP102 (Figura 4 e 5) della Texas Instruments con una precisione di 0,5 °C e un campo di misura compreso tra -25 °C a 85 °C. Un ADC integrato 12-bit consente la risoluzione di misura fino a 0,0625 °C. Thermo 3 click comunica con la scheda target attraverso i pin I2C (SCL, SDA), e uno di allarme aggiuntivo (INT sulla configurazione mikroBUS di default).

fig5_thermo

Figura 4: Modulo Thermo 3 Click

 

Figura 4: Modulo Thermo 3 Click

Figura 5: Sensore TMP102 e relativo schema elettrico di controllo

MicroSD Click è una scheda di memoria nel fattore di forma mikroBus, dotato di uno slot per schede microSD come supporto di memorizzazione per i dispositivi portatili. L’interfaccia SPI standard di settore assicura una comunicazione con elevate velocità di trasmissione (Figura 6 e 7).

Figura 6: Modulo microSD Click

Figura 6: Modulo microSD Click

 

Figura 7: Schema elettrico del modulo microSD Click

Figura 7: Schema elettrico del modulo microSD Click

La Serial Peripheral Interface (SPI) è una specifica interfaccia di comunicazione seriale sincrona utilizzata per la comunicazione a breve distanza, soprattutto in sistemi embedded. Le applicazioni tipiche includono schede Secure Digital e schermi a cristalli liquidi.

Codice

Il firmware (Arduino) del progetto consta di 3 funzioni principali. La prima relativa all’acquisizione della temperatura, gli altri, invece, per il calcolo dei ppm per il livello del gas metano e la memorizzazione dei dati sulla MicroSD.

// Get Temperature
float get_temp()
{
  int temp;
  float temperature;

  Wire1.beginTransmission( TMP102_I2C_ADDR ); // Issue I2C start signal
  Wire1.write( 0 );
  Wire1.endTransmission();
  Wire1.requestFrom( TMP102_I2C_ADDR, 2 );
  //wait for response
  while ( Wire1.available() == 0 );

  temp = Wire1.read() << 4; temp |= Wire1.read() >> 4;

  Wire1.endTransmission();

  if ( temp & ( 1 << 11) )               // Test negative bit
    temp |= 0xF800;                      // Set bits 11 to 15 to logic 1 to get this reading into real two complement

  temperature = (float)temp * 0.0625;    // Multiply temperature value with 0.0625 (value per bit)

  return temperature;                    // Return temperature data
}

Per la temperatura, la funzione restituisce una variabile float espressa in gradi centigradi. Tutti i valori sono memorizzati nella MicroSD con l’indicazione del giorno, ora e livello ppm.

// Logger
void log_some_gas()
{
  File dataFile;

  dataFile = SD.open( "gasser.txt", FILE_WRITE );

  if( dataFile )
  {
     char tmp_txt[100];
     float current_ppm = calculatePPM();
     tmElements_t current_time;
        
     RTC.read( current_time );
     sprintf( tmp_txt, "Day %d - Hour %d: PPM %2.2f, Temp %3.2fC\n", 
              current_time.Day, current_time.Hour, current_ppm, get_temp() );

     dataFile.write( tmp_txt );
     dataFile.flush();
     Serial.print( tmp_txt );
     
     dataFile.close();
  }
    
  wakeup_flag = false;
}

I valori ppm sono espressi attraverso la funzione calculate_ppm() analoga a quella vista nel progetto master chef demo. Parti per milione (ppm) è una unità di misura adimensionale calcolata in rapporto alla massa molare per un milione, è impiegata nei sistemi di misura relativamente a grandezze omogene con bassi livelli di concentrazione.

//Calculation of PPM
double calculatePPM()
{
  double lgPPM;
  double ppm;                     // ppm
  double Vrl;
  double Rs;                      // Rs (Ohm) - Sensor resistance
  double ratio;                   // Rs/Rl ratio
#define Rl  5000.0                // Rl (Ohm) - Load resistance
#define Vadc_5  0.0048828125      // ADC step 5V/1024 4,88mV (10bit ADC)
#define Vadc_33 0.0032226562      // ADC step 3,3V/1024 3,22mV (10bit ADC)

  // Output voltage
  Vrl = (double)analogRead( METH_AN ) * Vadc_5; // For 3.3V Vcc use Vadc_33
  Rs = Rl * (5 - Vrl) / Vrl;                 // Calculate sensor resistance
  ratio = Rs / Rl;                           // Calculate ratio
  lgPPM = (log10(ratio) * -0.9) + 1.1;       // Calculate ppm
  ppm = pow(10, lgPPM);                      // Calculate ppm

  return ppm;
}

Lo schema a blocchi della funzione setup() e loop() è visualizzato nella figura 8, il codice può essere scaricato nel link riportato alla fine dell’articolo.

Figura 8: Schema a blocchi del firmware

Figura 8: Schema a blocchi del firmware

Conclusioni e considerazioni

I rilevatori di gas dannosi sono in grado di determinare la presenza di sostanze pericolose soprattutto in ambienti lavorativi. Il progetto proposto vuole essere un’idea per implementare la Flip&Click attraverso i suoi moduli sensori Click. Ulteriori varianti possono essere l’implementazione di un display quale OLED Click per la visualizzazione dei valori, oppure un Buzz Click per l’allarme sonoro qualora i valori ppm di metano superino una determinata soglia, così come una matrice di LED per implementare una interfaccia grafica visiva basata sull’illuminazione di alcuni LED che possono esprimere anche un’idea della quantità ppm di gas metano misurata. In accordo alle quantità di porte Click USB presenti nella Flip & Click, è possibile inserire ulteriori sensori della MikroElektronika quali Ozone click e LPG click. La flessibilità della scheda permette di implementare il progetto anche con Python utilizzando il tool Zerynth Studio scaricabile dal seguente link: http://www.zerynth.com/. La suite è composta da un IDE per la programmazione embedded, Virtual Machine RTOS e una App per la gestione mobile.

Allegati

Codice Arduino del progetto Fartalyzer

 

 

2 Commenti

  1. Maurizio Di Paolo Emilio Maurizio 29 settembre 2016
  2. Riccardo Ventrella Riccardo Ventrella 11 ottobre 2017

Scrivi un commento

EOS