Wednesday, December 9, 2015

Deteksi gas LPG dengan sensor MQ

Deteksi Gas LPG dengan sensor MQ-6




Membuat detektor kebocoran gas lpg ini sangat mudah karena sudah banyak modul nya, jadi modul itu hanya mengeluarkan tegangan 0 - 5 volt saja, 0 volt untuk nilai ppm 0  dan 5 volt untuk nilai 10000 ppm dengan kenaikan kurang lebih 200 ppm per 0,1 volt. jadi anda tidak perlu pusing2 memikirkan bagaimana ini dan itu tinggal buat aplikasi mikrokontroller yang sesuai dengan sarat itu. memang dengan banyak bermunculan penjual modul2 itu kemudahan memang sangat di rasakan tapi tidak ada salahnya untuk mengetahui bagaimana menggunakan sensor itu dan karakteristiknya

pada umumnya semua sensor MQ begini koneksinya jadi selalu ada heater di dalam sensor agar bekerja dengan baik , makanya terlalu dingin atau terlalu panas akan mengakibatkan error pada pembacaan sensor, jadi heater ini adalah bagian penting untuk sensor MQ ini

pada saat awal sambil menunggu suhu heater normal maka ada baiknya menunggu 1 menit sebelum di lakukan sampling atau jika pembacaan ppm sudah di atas 700ppm maka sudah bisa di lakukan sampling, kenapa harus 700ppm ? karena pada udara bebas biasanya nilainya 400-700ppm dan rata2 berhenti di 600 tapi ini biasanya harus di kalibrasi dengan alat aslinya agar mendapat nilai yang akurat.

dan kalibrasinya sebenarnya bukan itu saja karena linearitasnya juga mesti di test tapi karena saya tidak memiliki alat ukur LPG maka asumsi diatas bisa di pakai tapi jangan harap error yang kecil, maka jika menginginkan nilai akurat maka harus di buat procedure yang mengkompensasi masalah linearitas tersebut. yang mungkin nanti pada artikle yang lain saya akan membahasnya

pada modul yang di jual di pasaran tentunya tidak hanya seperti gambar diatas ada rangkaian op-amp nya atau ada penguatnya biasanaya gambarnya seperti ini :


jadi dengan 2 gambar seperti tadi maka anda sudah bisa mengkonversi dari gas menjadi tegangan, dan tinggal memusingkan bagaimana bentuk programnya, dan jangan khawatir teman saya akan memberikan garis besarnya dan hebatnya lagi akan saya berikan sebagai aplikasi open source yang bisa di kembangkan lagi



mari lihat video berikut agar lebih jelas :




dan jangan kawatir saya akan sertakan semua file termasuk file Proteusnya dan listing programnya pada akhir tulisan ini 

mari kita lihat listing program yang di buat dengan kompiler mikropascal 

program lpg;

var adc_rd,alarm : word;
var kp,kpd_temp,posisi,i : byte;
var nilai : real;

//timer
const _THRESHOLD = 2;
var counter : byte;


// Keypad module connections
var keypadPort : byte at PORTC;
var keypadPort_Direction : byte at DDRC;
// End Keypad module connections

// LCD module connections
var LCD_RS : sbit at PORTB2_bit;
var LCD_EN : sbit at PORTB3_bit;
var LCD_D4 : sbit at PORTB4_bit;
var LCD_D5 : sbit at PORTB5_bit;
var LCD_D6 : sbit at PORTB6_bit;
var LCD_D7 : sbit at PORTB7_bit;

var LCD_RS_Direction : sbit at DDB2_bit;
var LCD_EN_Direction : sbit at DDB3_bit;
var LCD_D4_Direction : sbit at DDB4_bit;
var LCD_D5_Direction : sbit at DDB5_bit;
var LCD_D6_Direction : sbit at DDB6_bit;
var LCD_D7_Direction : sbit at DDB7_bit;
// End LCD module connections

//alarm
var sirene : sbit at PORTA0_bit;

var txt1 : array[20] of char;
    txt2 : array[20]  of char;
    
    txt : array[10] of char;
    txt_cov : array[5] of char;

label  lompat;

procedure sampling(); iv IVT_ADDR_TIMER1_OVF; ics ICS_AUTO;
begin
if (counter >= _THRESHOLD) then
  begin
    adc_rd := ADC_Read(2);
    nilai := ((((5/1023)*adc_rd)* 2.15)*1000);
    if nilai > alarm then sirene := 0;
    if nilai < alarm then sirene := 1;
    FloatToStr(nilai, txt);
    txt2 := txt;
    lcd_out (2,1,txt2);
    lcd_out (2,9,'     PPM');
    counter := 0;              // reset counter
  end
else
  Inc(counter);                // increment counter
end;

begin

  Keypad_Init();                          // Initialize Keyp
  ADC_Init();
  Lcd_Init();                        // Initialize LCD
  
  DDA0_bit := 1;
  txt1 := 'Inisialisasi...';
  txt2 := '';

  Lcd_Cmd(_LCD_CLEAR);               // Clear display
  Lcd_Cmd(_LCD_CURSOR_OFF);          // Cursor off
  LCD_Out(1,1,txt1);                 // Write text in first row
  LCD_Out(2,1,txt2);                 // Write text in second row
  Lcd_Cmd(_LCD_FIRST_ROW);
  delay_ms (5000);
  adc_rd := 1023;
  counter := 0;
  while adc_rd >  150 do
  begin
    adc_rd := ADC_Read(2);
    nilai := ((((5/1023)*adc_rd)* 2.15)*1000);
    FloatToStr(nilai, txt);
    txt2 := txt;
    lcd_out (2,1,txt2);
    lcd_out (2,9,'     PPM');
    delay_ms (1000);
    inc (counter);
    if counter > 60 then break;
  end;
lompat:
  posisi := 0;
  counter := 0;
  txt1 := 'Sensor Gas LPG';
  txt2 := '';
  Lcd_Cmd(_LCD_CLEAR);
  LCD_Out(1,1,txt1);                 // Write text in first row
  LCD_Out(2,1,txt2);                 // Write text in second row
  hi(alarm) := EEPROM_Read(0x00);
  lo(alarm) := EEPROM_Read(0x01);
  //WordToStr(alarm, txt);
  
  SREG_I_bit := 1;               // Interrupt enable
  TOIE1_bit  := 1;               // Timer1 overflow interrupt enable
  TCCR1B := 2;                   // Start timer with 8 prescaler

  while (TRUE) do
    begin
      kp := 0;
      kp := Keypad_Key_Click();

      case kp of

          1: kp := 49;  // 1
          2: kp := 50;  // 2
          3: kp := 51;  // 3
          4: kp := 65;  // A
          5: kp := 52;  // 4
          6: kp := 53;  // 5
          7: kp := 54;  // 6
          8: kp := 66;  // B
          9: kp := 55;  // 7
         10: kp := 56;  // 8
         11: kp := 57;  // 9
         12: kp := 67;  // C
         13: kp := 42;  // *
         14: kp := 48;  // 0
         15: kp := 35;  // #
         16: kp := 68;  // D
         end;
      kpd_temp := kp;
      
      if kpd_temp = 65 then
        begin
          SREG_I_bit := 0;
          Lcd_Cmd(_LCD_CLEAR);
          txt1 := 'setting set point';
          LCD_Out(1,1,txt1);                 // Write text in first row
          for i := 0 to 4 do txt_cov[i] := '';
          txt := '';
          txt2 := '';
          txt_cov := '';
        end;

      if (kpd_temp > 47) and (kpd_temp < 58) then
        begin
          txt_cov[posisi] := kpd_temp;
          lcd_out (2, 1,txt_cov);
          inc (posisi);
        end;
        
      if kpd_temp = 66 then
        begin
          alarm := StrToWord (txt_cov);
        end;

      if kpd_temp = 67 then
        begin
          WordToStr(alarm, txt);
          lcd_out (2, 1,txt);
        end;
      
      if kpd_temp = 68 then
        begin
          posisi := 0;
          EEPROM_Write(0x00, hi(alarm));
          EEPROM_Write(0x01, lo(alarm));
          goto lompat;
        end;
        
    end;
end.

jadi anda bisa mendownload file project ini yang berisi listing program, file hex, simulasi proteus datasheet dll agar anda bisasecara bebas mengembangkan program ini. silahkan download disini

No comments:

Post a Comment