brock

Tuesday, July 24, 2012

GAS LEAKAGE DETECTOR ALERT WITH MESSAGE TO MOBILE WITH GSM MODEM

Here is the ckt for gas leakage detection.gas sensor is directly connected to the microcontroller's ADC.
if gas is detected by the sensor ADC calculates how much amount of gas present in the air.If it is found a larger amount microcontroller switch ON an exhaust fan.At the same time a SMS send to the pre defined mobile number..

CODE
adc_lib.c
#include
#include
#define ADC_VREF_TYPE 0x00
// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input|ADC_VREF_TYPE;
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
void ADCinit()
{
ADMUX=ADC_VREF_TYPE;
ADCSRA=0x85;
}

uart_lib.c

#include
#include
#include
#define FOSC 4000000
void set_uartbaud(int BAUD)
{
        UBRRH = (unsigned char)((FOSC/16/BAUD-1)>>8);
        UBRRL = (unsigned char)(FOSC/16/BAUD-1);
        UCSRC|=(1<
        UCSRB|=(1<
}

void disable_uart()
{
        UCSRB&=~(1<
        UCSRB&=~(1<
}

void enable_uart_txcint()
{
        UCSRB|=(1<
}

void enable_uart_rxcint()
{
        UCSRB|=(1<
}

void enable_uart_udreint()
{
        UCSRB|=(1<
}

void disable_uart_txcint()
{
        UCSRB&=~(1<
}

void disable_uart_rxcint()
{
        UCSRB&=~(1<
}

void disable_uart_udreint()
{
        UCSRB&=~(1<
}

void sendchar_uart(char data)
{
        int temp;
        temp=UCSRA&(1<
        temp=temp>>UDRE;
        while(!temp)
        {

        }
        UDR=data;
}

char getchar_uart()
{
        // Wait until a byte has been received

        while((UCSRA&(1<

        // Return received data

        return UDR;

}

void sendstring_uart(char v[])
{
        int i;
        for(i=0;i
        {
                sendchar_uart(v[i]);
                _delay_ms(10);
        }
}



msg_display.c

#include "lcd_lib.h"

char A[200]=" ";
char B[20]=" ";
char E[10]="ATE0";
char T[20]="AT";
char c[20]="GAS LEAKAGE";
char h[20]="TEMP INCREASES";
char d[20]="+919999999999";//enter required number here
char e[20]="AT+CMGS=";
char f[20]="AT+CMGR=1";
char g[20]="AT+CMGD=1";
int i=0,j=0,k=0,l=0;
int status=0;
main(void)
{
        DDRB=255;
        LCDinit();
    LCDclr();
    ADCinit();
        set_uartbaud(9600);
        enable_uart_rxcint();
        sei();
        sendstring_uart(g);
                          _delay_ms(100);
                          sendchar_uart(0x0D);
                          _delay_ms(1000);
         sendstring_uart(E);
         _delay_ms(100);
         sendchar_uart(0x0D);
         _delay_ms(1000);
         sendstring_uart(T);
         _delay_ms(100);
         sendchar_uart(0x0D);
         _delay_ms(1000);
        while(1)
        {
                LCDcursorOFF();
                j=read_adc(0);
                LCDGotoXY(0,1);
                sprintf(B,"%2d     ",j);
                LCDdisplay(B);
                _delay_ms(100);
                 /*sendstring_uart(f);
                                  _delay_ms(100);
                                  sendchar_uart(0x0D);
                                  _delay_ms(1000);
        LCDGotoXY(0,0);
    LCDdisplay(A);
    LCDshiftRight(1);*/

   if(j>600)
    {
                        PORTB=0b00000011;_delay_ms(1000);
                        _delay_ms(1000);
                        _delay_ms(1000);
                        _delay_ms(1000);
                        //PORTB=2;_delay_ms(1500);
                        sendstring_uart(e);
                    _delay_ms(10);
                    sendchar_uart('"');
                    _delay_ms(10);
                    sendstring_uart(d);
                    _delay_ms(10);
                    sendchar_uart('"');
                    _delay_ms(10);
                    sendchar_uart(13);
                    _delay_ms(100);
                    sendstring_uart(c);
                    _delay_ms(10);
                    sendchar_uart(0X1A);
                    _delay_ms(10);
    }
    else
    {
            PORTB=0;
    }
        }
}
ISR(USART_RXC_vect)
{
        status=1;
        char c;
        c=UDR;
        if(c!=0x0D)
        {
                if(c!=0x0A)
                {
                        A[i]=c;
                        i++;
                }
        }
        if(i==300)
                i=0;
}