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:
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, 0, 1023, 0, qtdLED);" para "map(sensor, 0, 200, 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
Comentar
Olá, como faço para adicionar display 16x2 nesse projeto? help
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
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?
como faço para calibrar meu sensor? e implementar um lcd. grato!!!!
Olá, pode explicar o PORTB = PORTB ^ 100000;
Obrigado.
LOOOUCO MESMO.... VOU POR NA EMPRESA
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por
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)