Fumar e álcool são perigosos para a saúde. Além disso, o consumo de álcool é uma das razões por trás de muitos incidentes anti-sociais. É por isso que fumar e consumir álcool são proibidos em muitas áreas, assim como em escolas, faculdades, hospitais e transportes públicos como ônibus e trens. Na verdade, este tipo de atividades deve ser proibida em todos os tipos de locais públicos. Apesar das regras de proibição, há muitos incidentes em que se descobre que as pessoas não cumprem as regras. Nesse caso, para a aplicação da lei, deve haver algum sistema para detectar a violação de tais leis e as autoridades devem receber um alerta atempadamente. Neste tutorial, foi projetado um sistema eletrônico para o mesmo.
Neste projeto é projetado um circuito eletrônico implantável que pode detectar o consumo de álcool em locais públicos pelo cheiro de álcool usando o sensor de álcool MQ3. Da mesma forma, o circuito programável está equipado com sensor de fumaça MQ6 para detectar fumo em locais públicos. O circuito possui módulo GSM-GPRS interligado que envia um alerta por SMS para a sala de controle policial ou órgão de fiscalização autorizado sobre a localização do local público onde é detectado consumo de álcool ou fumo apesar da proibição. O módulo também é equipado com uma campainha que começa a soar quando é detectado consumo de álcool ou fumo. A campainha funciona como um aviso e continua tocando até que o cheiro de álcool ou fumaça desapareça. Se, apesar do alerta da campainha por um longo período, o fumo ou o álcool forem retirados do local, um alerta por SMS é enviado às autoridades que podem chegar ao local para tomar as medidas cabíveis.
O dispositivo é construído em torno do AVR Atmega 32. O controlador é programado para ler os valores do sensor de álcool e fumaça e invocar o alarme sonoro e enviar um SMS via módulo GSM assim que os valores do sensor excederem os limites. O módulo GSM utilizado no projeto é o SIM900A. Um LCD de caracteres também faz interface no circuito do dispositivo para monitorar e calibrar os valores do sensor durante o teste do dispositivo. O módulo LCD e as seções de código relacionadas a ele podem ser removidos posteriormente, quando o dispositivo for testado finalmente e estiver pronto para implantação. O controlador AVR é programado e carregado com o código executável usando o AVR Studio. O dispositivo construído neste projeto funciona com bateria e usa uma bateria de 12V para funcionar. Este é um dispositivo portátil que pode ser reprogramado quando adequado e pode ser instalado em qualquer lugar.
Fig. 1: Protótipo de detector de álcool e fumo baseado em AVR Atmega32
Componentes necessários –
Figura 2: Lista de componentes necessários para o detector de álcool e fumo baseado em AVR Atmega32
Diagrama de bloco –
Fig. 3: Diagrama de blocos do detector de álcool e fumo baseado em AVR Atmega32
Conexões de Circuito –
O microcontrolador AVR Atmega 32 é o MCU instalado no dispositivo. O sensor de álcool MQ3, o sensor de fumaça MQ6, o módulo GSM SIM900A, a campainha e o display LCD fazem interface com o IC do controlador para construir o dispositivo. As conexões do circuito são as seguintes –
Fonte de Alimentação – O controlador assim como os demais módulos do circuito exceto o módulo GSM necessitam de alimentação de 5V para seu funcionamento. O microcontrolador AVR Atmega 32, sensor de álcool MQ3, sensor de fumaça MQ6 e LCD de caracteres funcionam em 5V DC, enquanto o módulo GSM-GPRS precisa de alimentação de 12V. Para fornecer energia ao circuito, é utilizada uma bateria de 12V. A energia da bateria é regulada para 5V e 12V DC usando CIs reguladores de tensão 7805 e 7812, respectivamente. O pino 1 dos CIs reguladores de tensão está conectado ao ânodo da bateria e o pino 2 deles está conectado ao terra. A saída de tensão regulada é extraída do pino 3 dos ICs. Um LED junto com um resistor pull-up de 10K Ω também é conectado entre o terra comum e o pino de saída para obter uma dica visual da continuidade da alimentação. A saída dos CIs reguladores é conectada aos pinos de alimentação dos respectivos módulos e controlador enquanto seu aterramento é conectado ao terra comum do circuito.
AVR Atmega 32 – Este é um microcontrolador baseado em AVR RISC de 8 bits. Ele vem em um pacote de 40 pinos e possui 2 KB de RAM, 32 KB de memória flash, 1 KB EEPROM, 32 pinos de entrada e saída de uso geral (GPIO), 8 canais ADC de 10 bits, um SPI, um UART e uma interface TWI no chip. O controlador possui três temporizadores integrados, dos quais 2 são temporizadores de 8 bits e um é um temporizador de 16 bits. O controlador opera até uma frequência de clock de 16 MHz. Ao executar instruções poderosas em um único ciclo de clock, o Atmega 32 atinge taxas de transferência próximas de 1 MIPS por MHz, permitindo que os projetistas do sistema otimizem o consumo de energia em relação à velocidade de processamento. O controlador está disponível em pacote Dual Inline (DIP) de 40 pinos. Confira o diagrama de pinos e a configuração dos pinos deste controlador AVR aqui.
Neste projeto são usados 13 pinos GPIO do controlador, dos quais 11 pinos são usados para fazer a interface com o LCD de caracteres, 1 pino é usado para fazer a interface com o sensor de álcool MQ3 e 1 pino é usado para fazer a interface com o sensor de fumaça MQ6. Os pinos RX e TX do controlador são usados para fazer interface com o módulo GSM SIM900A.
LCD 16X2: O display LCD 16X2 é usado para monitorar os valores do sensor. Ele faz interface com o microcontrolador AVR conectando seus pinos de dados à porta B do controlador. Os pinos de dados DB0 a DB7 do LCD de caracteres fazem interface com os pinos PB0 a PB7 do AVR Atmega 32, respectivamente. Os pinos RS, RW e E do LCD estão conectados aos pinos PC6, PC5 e PC4 do AVR respectivamente. As conexões do circuito do LCD de caracteres com o controlador AVR estão resumidas na tabela a seguir –
Fig. 4: Tabela listando as conexões do circuito entre o AVR ATMega32 e o Character LCD
Sensor de gás MQ6 – O sensor de gás MQ6 é um módulo sensor de gás. O módulo possui 4 pinos para interface, dos quais dois pinos são VCC e terra, um pino é saída analógica e um pino é via digital. O pino de saída analógica do módulo é usado para detectar o nível de concentração de vazamento de gás ou fumaça e faz interface com o pino de entrada analógica PA1 do controlador AVR. O sensor mede a concentração de gás ou fumaça em ppm de acordo com as seguintes fórmulas –
Concen = 1036,5*R^-2,392 Onde
Concen é a concentração de gás ou fumaça em ppm
R é a razão entre Rs, a resistência do sensor, e R0, que é a resistência a 1000 ppm a 20 graus Celsius e 65% de umidade
A resistência do sensor Rs é dada pelas fórmulas –
Rs = (1024/ADC_DATA-1)*RL onde
Rs é a resistência do sensor
ADC_DATA é uma leitura digital que varia de 0 a 1023
RL é uma resistência de carga que varia de 10K a 40K ohms
O sensor de seu pino analógico emite tensão analógica que é proporcional à concentração de gás ou fumaça em ppm. A tensão é detectada pelo controlador e convertida em um valor digital usando o canal ADC integrado. Para uma resistência de carga fixa, a leitura do ADC é diretamente proporcional à concentração de gás em ppm.
Na folha de dados é fornecida a relação entre concentração e resistência do sensor. Há um gráfico fornecido para condições normais de 20 graus Celsius e 65% de umidade onde Rs = R0 para a curva. Desta forma a concentração de gás em ppm torna-se igual à leitura do ADC. O controlador AVR possui canais ADC de 10 bits de comprimento, portanto, a leitura do ADC variará entre 0 e 1023. No projeto, o valor limite para detecção de fumaça é definido como 200, o que significa que se a concentração de fumaça em um local exceder 200 ppm, o controlador invocará o alerta.
Sensor MQ3 – MQ3 é um sensor analógico e digital que detecta o consumo de álcool pelo cheiro do hálito. O sensor possui quatro pinos – Saída Analógica, Saída Digital, VCC e Terra. O VCC e o aterramento estão conectados ao VCC e ao aterramento comuns. O pino de saída digital não é utilizado, portanto é mantido não conectado. A saída do sensor é extraída do pino de saída analógica que está conectado ao pino PA0 do controlador AVR. Tal como acontece com o sensor de gás, o controlador detecta a tensão analógica do sensor de álcool e converte-a em uma leitura digital usando o canal ADC integrado. Novamente, como os canais ADC têm 10 bits de comprimento no controlador AVR, a leitura digitalizada varia de 0 a 1023. O valor limite para a detecção de álcool é definido como 700. Quando o valor do sensor excede 700, o controlador invoca um alerta.
Módulo SIM900A GSM -SIM900A é um modem GSM GPRS de banda dupla que opera em frequências de 900 ou 1800 MHz. O modem possui porta UART integrada para conexão com um computador, SBC ou controlador. O modem possui uma taxa de transmissão configurável entre 9600 e 115200. A taxa de transmissão pode ser definida passando comandos AT para o modem por meio de comunicação serial. Este modem pode ser usado para fazer chamadas de voz, enviar e receber SMS e conectar-se à internet móvel. A conectividade com a Internet no modem é facilitada via GPRS e possui uma pilha TCP/IP para lidar com a conectividade com a Internet. O modem possui quatro terminais – RX, TX, VCC e terra. O pino VCC deve ser conectado a uma fonte de 12V DC. O modem possui regulador de tensão embutido, portanto também pode ser conectado a qualquer fonte de energia não regulamentada. O pino terra está conectado ao terra comum do circuito. Os pinos RX e TX (para comunicação serial com o controlador) fazem interface com os pinos TX e RX do controlador AVR. O modem envia e recebe dados através do UART.
Observe que o LCD de caracteres tem interface no circuito para monitorar os valores dos sensores durante a calibração dos sensores e o teste do circuito para a aplicação pretendida. O módulo LCD pode ser removido posteriormente e as seções de código escritas para ele também podem ser removidas do código-fonte se o tamanho do circuito tiver que ser reduzido.
Como funciona o circuito –
O funcionamento deste dispositivo é simples e direto. Depois que o dispositivo é ligado conectando uma bateria e instalado em um local, ele carrega o programa no chip. O programa AVR inicia a leitura dos dados do sensor de álcool MQ3 e do sensor de fumaça MQ6. Os pinos de saída analógica de ambos os sensores fazem interface com o controlador e a tensão analógica é detectada pelo controlador de ambos os módulos do sensor. A tensão analógica de ambos os sensores é convertida em valores digitais usando canais ADC integrados. Existem canais ADC de 10 bits no controlador Atmega 32, portanto as leituras do sensor variam de 0 a 1023. O valor digitalizado para o sensor de fumaça é diretamente proporcional à concentração de fumaça em partes por milhão. O limite para este sensor é definido como 200, portanto, quando a concentração de fumaça detectada pelo sensor excede 200, o controlador envia um alerta e aciona o alarme sonoro. O valor digitalizado do sensor de álcool é novamente proporcional à concentração de gás proveniente do cheiro do álcool. O valor limite para este sensor é definido como 700. Assim que a concentração de gás proveniente do cheiro de álcool exceder o valor de 700, o controlador envia um alerta e aciona o alarme sonoro. Para testar o sensor de álcool, é usado o líquido listerine cool menta, que contém algum teor de álcool.
Fig. 5: Imagem do detector de álcool e fumo baseado em AVR Atmega32
Durante o teste do circuito, os valores do sensor são passados para o display LCD onde podem ser monitorados para a calibração adequada do dispositivo.
Ao detectar o consumo de álcool pelo sensor MQ3 em um local, um alerta SMS é enviado para um número de celular codificado no código AVR com o texto “ALCOOL”. Da mesma forma, ao detectar fumaça pelo sensor MQ6 em um local, um alerta SMS é enviado para um número de celular codificado no código AVR com o texto “SMOKE”. A localização da instalação do dispositivo é considerada conhecida, caso contrário, um ID ou localização do dispositivo também pode ser enviado via SMS ao pessoal de segurança autorizado. Ao mesmo tempo, é acionada uma campainha que continua tocando até que o álcool ou a fumaça sejam retirados do local. O SMS é enviado após um atraso se fumaça ou álcool ainda forem detectados após o alarme sonoro.
Confira o guia de programação para saber como o controlador AVR lê os valores do sensor, compara-os com os valores limite e envia um alerta SMS e ativa a campainha quando os valores do sensor excedem seu limite.
Guia de programação –
Para programar o microcontrolador Atmega 32, o AVR Studio 4 e o compilador GCC são as ferramentas de software necessárias. Para aprender como o AVR Studio 4 é usado, consulte o seguinte tutorial –
Trabalhando com AVR Studio
Primeiro de tudo, arquivos de cabeçalho separados são importados para a inicialização do LCD e do ADC. O lcd.h e o adc.h estão incluídos para a programação do LCD e leitura de dados dos módulos sensores via ADC, respectivamente.
#include
#include
Para que os arquivos de cabeçalho funcionem, eles devem ser copiados para a seguinte pasta – C > WinAVR-20090313 > avr > include > avr e colar os arquivos de cabeçalho baixados na pasta.
Observe que no caminho WinAVR-20090313, 20090313 há um número anexado à pasta de instalação. Este número pode ser diferente numa instalação diferente do AVR Studio.
Após importar as bibliotecas necessárias, variáveis e constantes são definidas para denotar conexões de circuito com os sensores e módulo GSM. São definidos alguns arrays que armazenam os comandos AT que serão utilizados para configurar o módulo GSM e enviar SMS através dele.
A função main é chamada na qual os pinos do controlador com interface com o LCD são definidos como saída digital, enquanto os pinos com interface com os sensores são definidos como entrada analógica. Os canais LCD e ADC são inicializados usando as funções lcd_init e adc_init e algumas mensagens iniciais são passadas para o display LCD.
Um loop while infinito é chamado no qual o LCD é configurado para exibir os valores do sensor e os valores do sensor são comparados com os valores limite para enviar o alerta SMS apropriado.
Para enviar a mensagem de alerta para a sala de segurança a partir do modem GSM, os comandos AT devem ser passados para o modem. Primeiro, os comandos AT devem ser usados para definir a taxa de transmissão do modem para comunicação serial com o controlador. Os comandos AT são passados da seguinte maneira –
caractere não assinado cmd1 ={“AT”}
O seguinte AT é usado para verificar a resposta do modem GSM, independentemente de a conexão serial estar estabelecida ou não.
caractere não assinado cmd2 ={“AT+CMGF=1”};
Aqui o comando AT+CMGF=1 é usado para configurar o modem GSM no modo de texto SMS.
caractere não assinado cmd3 ={“AT+CMGS=”};
caractere não assinado cmd5 ={“094********”};
O comando AT+CMGS é usado para enviar o texto SMS para o número de celular específico que está codificado no programa AVR.
unsigned char cmd4 ={“Alerta de álcool detectado”};
Após configurar o modem GSM com comandos AT, é mencionado o conteúdo da mensagem que será enviada.
A função sendSMS é definida para ler elementos de arrays contendo comandos AT necessários para enviar alertas SMS e passá-los para o modem GSM usando comunicação serial. A comunicação serial entre o modem e o controlador é estabelecida chamando a função usartinit . Na função usartinit , a taxa de transmissão para comunicação serial é declarada e os bits no controle USART e nos registradores de status B e C são definidos para comunicação síncrona. No controle USART e no registro de status B, a habilitação do receptor (bit 4) e a habilitação do transmissor (bit 5) são definidas como altas para habilitar os pinos do receptor e do transmissor. o controle USART e o registro de status C são definidos para escrita definindo o bit URSEL como alto e ambos os bits de tamanho de caractere UCSZ0 e UCSZ1 são definidos como altos para configurar a transmissão e recepção de caracteres de 8 bits.
Confira o código completo e experimente.
Código fonte do projeto
###
//Program to #ifndef _ADC_H_ #define _ADC_H_ 1 #include
#include // This function is declared to initialize the Analog to Digital Converter of AVR microcontrollers void adc_init(void); //This function is declared to read the digital value of the ADC conversion int read_adc_channel(unsigned char channel); /*Function definations*/ void adc_init(void) { ADCSRA=(1< ###
Diagramas de circuito
Diagrama de Circuito-AVR-Atmega32-Detector de Fumo de Álcool |