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