Kamis, 23 April 2015

Rangkaian Deteksi Kadar Alkohol Dengan Sensor TGS 822

          Perangkat detektor kadar alkohol pada minuman yang menggunakan sensor Figaro TGS 822 merupakan perangkat yang cocok dan sangat sensitif untuk mendeteksi alkohol dan juga berbagai gas yang mudah terbakar lainnya. Perangkat ini dilengkapi dengan IC 7805 dalam casing TO220 dengan unit power-plug 9 VDC, karena tidak akurat jika menggunakan unit power-plug 5 VDC, seperti yang terlihat pada gambar berikut ini.

*)klik gambar untuk memperbesar dimensi skema rangkaian

Gambar 1. Skema rangkaian detektor kadar alkohol dengan sensor TGS 822

          Sensor Figaro TGS 822 yang digunakan dalam pernagkat ini hanya memerlukan sekitar 130 mA untuk pemanas. Sobat blogger dapat mengatur R1 untuk kecerahan LED1 yang digunakan, sedangkan R2 adalah resistor yang paling penting, karena akan menentukan sensitivitas perangkat secara keseluruhan. Perangkat ini menggunakan VU meter yang biasa digunakan pada beberapa aplikasi audio. Dengan mengatur R3 sekitar setengah skala VU meter akan didapatkan tegngan 2 Volt di R2 dan sobat blogger dapat menambahkan mikroprosesor dan  rangkaian lainnya yang dapat menghasilkan bunyi alarm saat tegangan R2 melebihi 2,5 Volt, atau sobat blogger juga dapat menghilangkan rangkaian alarm tersebut jika  tidak menginginkan bunyi alarm terdengar.
          Dalam perangkat ini mikroprosessor memerlukan 3,3 Volt, yang berasal dari + 5 VDC pada dua dioda D1 dan D2. Mikroprosessor ini tidak membutuhkan kapasitor decoupling. Masukan PTA0 dan PTA1 adalah input analog, yang akan diproses oleh konvereter analog ke digital yang ada di dalam internal mikroprosessor. Ketika tegangan pada PTA0 melebihi tegangan pada PTA, maka bunyi alarm terdengar bip - bip - bip ......dst. Kode untuk program mikroprosessor pada perangkat detektor ini ditulis sebagai berikut :

/////////////////////////////////////////////////////////////////////////////////////////
// Module Name:  main.c
//
// Project Number / Name: 2210, Gas sensor
//
// Latest Change: June 2014
//
// Module Purpose:
// main file.
// Does all the work, this is the only user maintained file involved
//
// Dependancies
// See #includes list
//
// Change History:
//
/////////////////////////////////////////////////////////////////////////////////////////

#pragma DATA_SEG DEFAULT

#include <hidef.h>
#include "derivative.h"

unsigned char ICSTRM_FLASH @0xFFAF;

Bool Alarm = FALSE;
Bool SpkrOn = FALSE;
Bool Period = FALSE;
int Counter, Vgas, Vref;

//************************************************************************************************
// Timer 8 bit MTIM Interrupt Handler
//************************************************************************************************
void interrupt 12 Timers_MtimHandler (void)  // called at 4 kHz rate
{
               PTAD_PTAD2 = TRUE;     // diagnose
               MTIMSC_TOF = 0;        // clr Timer Overflow Flag
               if (Alarm && Period)
                               SpkrOn = !SpkrOn;    // toggle speaker
               else
                               {
                 SpkrOn = FALSE;      // no current through speaker
                 Period = FALSE;   
                 }
               PTAD_PTAD3 = SpkrOn;   // signal to speaker output
               if (++Counter > 1000)  // make periods of 1/4 second
               {
               Counter = 0;
               Period = !Period;      // once per 1/4 second
               }
              
               PTAD_PTAD2 = FALSE;    // diagnose
}

//************************************************************************************************
// AdConvert10
// Performs 1 10-bit A/D conversion
//************************************************************************************************
int AdConvert10 (byte channel)
{
               int Temp;
               ADCCFG = 0x18;              // clk div 1, long sampletime, 10 bit, busclk
               ADCSC1 = (channel & 0x1F);  // no interrupts, this starts the conversion
               while (!ADCSC1_COCO);       // wait until conversion complete
               Temp =  (ADCRH << 8) + ADCRL;
               return Temp;                
}                               

//************************************************************************************************
// Initialize Timer MTIM  (fixed 4 kHz)
//************************************************************************************************
void Timers_InitMtim (void)
{
               // assume busclock of 8 MHz
               MTIMCLK = 0x05;   // BUSCLK div 32 = 250 kHz
               MTIMMOD = 61;     // divide by 62 for 4000 Hz
               MTIMSC_TSTP = 0;  // clear STOP state
               MTIMSC_TOIE = 1;  // enable interrupts
}

//************************************************************************************************
// MAIN Entry point
// Initializes various registers and peripherals
// Then goes into an infinite loop performing the A/D conversions and
// comparisons to determine the Alarm State.
//************************************************************************************************
void main (void)
{
  // set clock mode
  ICSTRM = ICSTRM_FLASH;
  ICSC1 = 0x06;   // internal reference
  ICSC2 = 0x00;   // Busclock = Osc div 2  (8 Mhz)
  SOPT1_COPE = 0; // Disable watchdog

               Timers_InitMtim ();  
               PTADD = 0x0C;   // bit 0 and 1 are analog inputs, 2 and 3 are outputs
               APCTL1 &= 0x03; // disables digital I/O on pins 7 and 8

               EnableInterrupts;
 
               for(;;) // Forever do
               {
                               Vref = Vref - (Vref >> 4) + AdConvert10(1); // Leaking Bucket integration 1/16                       
                               Vgas = Vgas - (Vgas >> 4) + AdConvert10(0);
                               Alarm = (Vgas > Vref);
               }     
}

Gambar 2. Perakitan komponen rangkaian pada PCB

Gambar 3. Memasukan PCB rangkaian pada kotak kemasan

Gambar 4. Perangkat detektor kadar alkohol yang siap pakai

Tidak ada komentar:

Posting Komentar