Durante a Primeira Imersão de Arte-Eletrônica que ocorreu em Florianópolis, montamos um Bafômetro com um sensor de álcool chamado MQ-3 e um Arduino, e utilizamos durante a festa do último dia. Você pode conferir algumas fotos nos posts anteriores. Depois que enviar o vídeo, recebi muitos emails de pessoas interessadas em saber como foi feito, e o código-fonte do programa, então resolvi remontar o circuito e explicar como você pode fazer um em sua casa.

Partes:

  • Arduino
  • 10x 5mm LEDs (Verde, Amarelo e Vermelho)
  • 100KΩ Potenciômetro (para calibrar o sensor)
  • 10x ≈ 220Ω Resistor (qualquer coisa entre 220Ω e 470Ω esta bom)
  • Protoboard
  • MQ-3 Sensor da Sparkfun

Algumas fotos do processo de montagem:

IMG_3025

IMG_3028

IMG_3029

IMG_3030

IMG_3042

IMG_3047

Para fazer os LEDs funcionarem, conectei eles em sequência do PinoDigital 2 até o 11 (10 LEDs ao total). Lembre-se de utilizar resistores entre 220Ω e 470Ω para cada led, como na imagem abaixo:

Para conectar o sensor, você deve ligar uma das pernas H em +5 Volts (utilize uma alimentação externa para isso, pois irá puxar muita corrente do arduino). E outra perna H no Terra.


O pino B (qualquer um deles) você conecta no Terra. Um dos pinos A conecte em um potenciômetro de 100KΩ como mostra a imagem abaixo. No mesmo pino em que você conecta o pino A, você deve colocar um fio indo até o Conversor Analógico/Digital do Arduino, que será onde leremos os dados do sensor.

Você pode baixar o .PDE AQUI.

/*

@ Code for interfacing Alcohol Gas Sensor MQ-3 with Arduino
@ Code by Daniel Spillere Andrade and Daniel Amato Zabotti
@ daniel@danielandrade.net / danielzabotti@gmail.com
@ www.DanielAndrade.net http://blog.danielandrade.net

*/

const int analogPin = 0; // the pin that the potentiometer is attached to
const int ledCount = 10; // the number of LEDs in the bar graph

int ledPins[] = {
10,9,8,7,6,5,4,3,2,1 // Here we have the number of LEDs to use in the BarGraph
};

void setup() {

for (int thisLed = 0; thisLed < ledCount; thisLed++) {
pinMode(ledPins[thisLed], OUTPUT);
}}

void loop() {
//This is the code to light up LED's
int sensorReading = analogRead(analogPin);

int ledLevel = map(sensorReading, 500, 1023, 0, ledCount);

for (int thisLed = 0; thisLed < ledCount; thisLed++) {

if (thisLed < ledLevel) {
digitalWrite(ledPins[thisLed], HIGH);
}

else {
digitalWrite(ledPins[thisLed], LOW);
} }}

Agora preparem a caipirinha
que a festa vai começar

Lembre-se, se dirigir não beba
se beber, me chame! :P

IMG_3052