Tutorial: Bafômetro utilizando o Sensor de Gás(Álcool) com Arduino

Adquira estes componentes na Loja do Lab de Garagem

Olá Garagistas! No tutorial de hoje iremos demonstrar como utilizar os sensores de gás e também como você pode fazer um Bafômetro caseiro utilizando-se um Sensor de Álcool, Arduino e LEDs!

 

Materiais Utilizados:

1x Arduino

1x Sensor de Álcool

1x Protoboard

7x LEDs

6x Resistores 330Ω

1x Resistor 10KΩ

Alguns Jumpers

 

 

1. Os Sensores de Gás

Imagem 1 - Sensores de Gás

Todos os sensores de gás fornecidos pela SparkFun têm a mesma pinagem, e se você quiser pode utilizar um Breakout para não ser necessário fazer as ligações diretamente nos pinos do sensor, a pinagem do sensor e como deve ser feitas as ligações no mesmo podem ser vistas na imagem abaixo.

Imagem 2 - Pinagem Sensor de Gás


2. O Funcionamento

2.1) Sensor de Álcool:

O Sensor de Álcool irá funcionar como um potênciometro, só que ao invés de pegar a variação da resistência e transforma em valores decimais(0 a 1023) quando lido pelo Arduino, ele irá pegar a variação dependendo da concentração de Álcool que estiver em em seu sensor(0 a 1023).

 

2.2) LEDs (Bargraph):

Os 6 LEDs na aplicação vão ser utilizados para demonstrar a concentração de Álcool entregue pelo usuário, e eles vão acender indo do verde ao vermelho, passando pelo amarelo, dependendo da concentração de Álcool no sensor, como se fosse um Bargraph.

Animação 1 - Leitura do teor de álcool(simulada pelo potênciometro) demonstrada pelo Bargraph

 

2.3) Adaptações:

Nesse tutorial utilizaremos um antisséptico bucal(com álcool) para fazermos a demonstração da aplicação, e também reduzimos a variação de 0 a 1023 para 0 a 200 conforme a alteração abaixo:

"map(sensor, 01023, 0, qtdLED);para "map(sensor, 0200, 0, qtdLED);".

Para melhor calibração do sensor de álcool, tendo como aplicação um bafômetro mais preciso, siga este tutorial (em inglês).

3. O Sketch


#define qtdLED 6  //Declaração da quantidade de LEDs da aplicação
int LEDs[qtdLED]; //Vetor que guardará em cada posição o pino de saída para cada LED
int sensorPin=0; //Variável para guardar o valor lido pelo sensor
int tempo; //Variável para o tempo de leitura do sensor
int lidomaximo; //Variável para armazenar o maior valor lido durante a leitura
int i; //Variável de contagem
int j; //Variável de contagem

void setup()
{
  i=0;
  j=2;

  while(i < qtdLED) //Enquanto i for menor que a quantidade de LEDs que foi definida...
  {                 //...guarda no vetor um valor(começando de 2 e incrementando) equivalente a um pino digital
    LEDs[i] = j;
    i++;
    j++;
  }

for(i=0;i<qtdLED;i++) //Define os pinos dos LEDs(nesse exemplo de 2 ao 7) como saída
  {
    pinMode(LEDs[i], OUTPUT);
  }
  pinMode(13, OUTPUT); //Define o pino 13 como saída para nos indicar quando pode fazer-se o teste (LED Piscando)...
                       //...e quando o circuito estiver fazendo a leitura do sensor (LED Aceso)
}

void loop()
{
  PORTB = PORTB ^ 100000;  //Inverte o estado do pino digital 13 para dar o efeito de Blink(Piscagem)
  delay(100); //Delay para efeito de blink do LED, indicado que o teste pode ser feito pelo usuário
  int sensor = analogRead(sensorPin); //Lê o sensor e guarda na variável
  if(sensor >= 40) //Se a leitura for maior que 40 (valor escolhido para a demonstração utilizando-se um...
  {                //...antisséptico bucal)
    digitalWrite(13, HIGH); //Acende o LED Azul(Indicando que o sensor detectou um mínimo de álcool (sensor >= 40)
    lidomaximo = 0;         //Iniciar o valor máximo lido pelo sensor como 0
    for(tempo=0;tempo<=5000;tempo++) //Faz a leitura do sensor por 5 segundos...
    {                                //...a cada 1 milissegundo atualiza o maior valor lido pelo sensor.
      int sensor = analogRead(sensorPin);
      delay(1);
      if(sensor > lidomaximo)
      {
        lidomaximo = sensor;
      }
    }
    digitalWrite(13, LOW); //Após o termino da leitura, apaga o LED Azul
    int nivel = map(lidomaximo, 0, 200, 0, qtdLED); //Converte a escala de 0 a 200 do sensor em...
                                                    //...0 a 6(LEDs) e armazena na variável nível.
                                                    //OBS: Lembrando o que o sensor lê de 0 a 1023, pelo antisséptico...
                                                    //...ter um teor de álcool relativamente baixo, foi utilizado...
                                                    //...a escala de 0 a 200
    for(i=0;i<qtdLED;i++) //Compara todos os pinos dos LEDs com o valor convertido da escala...
    {                     //...Ex: Se meu nível convertido foi 5, então o os leds dos pinos 2 ao 6 irão acender
      if (i < nivel) //Compara o pino atual da contagem, e se for menor que o nível máximo convertido...
      {
        digitalWrite(LEDs[i], HIGH); //...Acende o LED
      }
      else //Compara o pino atual da contagem, e se for maior que o nível máximo convertido ...
      {
        digitalWrite(LEDs[i], LOW); //...Apaga o LED
      }
    }
    delay(10000); //Aguarda 10 segundos para o usuário conseguir fazer a leitura do bargraph
    for(i=0;i<qtdLED;i++) //Apaga todos os LEDs
    {
      digitalWrite(LEDs[i],LOW);
    }
  }
}

4. Montagem

Imagem 3 - Montagem da Aplicação

Referências:

http://electronicpiece.blogspot.com.br/2012/08/arduino-bargraph.html

Exibições: 18653

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de Kleber Marins em 4 fevereiro 2020 às 20:09

Olá, como faço para adicionar display 16x2 nesse projeto? help

Comentário de Rafael Leite em 5 fevereiro 2014 às 13:32

Fala pessoal tudo bem?

Sou novo, aqui e tenho um sensor que ja vem em uma placa com as saidas, GND, DOUT, AOUT e VCC, gostaria de saber para que cada uma serve e onde ligar cada uma... 

Obrigado

Comentário de carlos em 30 outubro 2013 às 11:34

Olá bom dia gostaria de saber como ficaria o esquema em uma placa de circuito impresso, temos que fazer o projeto mais não pode ser usado proto board alguma dica?

Comentário de TRINDADE em 15 julho 2013 às 13:17

como faço para calibrar meu sensor? e implementar um lcd. grato!!!!

Comentário de Eloir Olszeweski em 11 junho 2013 às 15:56

Olá, pode explicar o   PORTB = PORTB ^ 100000; 

Obrigado.

Comentário de burst em 27 maio 2013 às 18:49

LOOOUCO MESMO.... VOU POR NA EMPRESA

© 2021   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço