Sensor de presença no Arduino: uma protoboard apertada e sensores analógicos agindo como digitais

Ler no Arduino o estado de um sensor digital de presença seria bem simples, então resolvi colocar outros elementos diferentes na configuração deste experimento.

Após fazer meu primeiro circuito com sensor analógico (o detector que acende 2 leds temporizados quando a luz do ambiente se apaga), notei que era uma boa oportunidade para testar mais um sensor: o de movimento, que permitiria adicionar ao mesmo circuito a função de acender quando alguém se mover no ambiente e a luz estiver apagada.

Como é um sensor digital e já veio montado numa placa com os adicionais necessários, seria muito fácil simplesmente conectá-lo ao circuito que eu já tinha, e passar a ler o pino do Arduino que fosse conectado ao pino do gatilho do sensor, da mesma forma que eu já lia o botão no experimento anterior.

Mas eu estou aqui para aprender, e não para ser eficiente ;-) Assim, optei por um experimento com um desafio a mais: montá-lo em uma breadboard tamanho PP, pouco maior que o Arduino Nano1.

Ficou como a imagem acima mostra. Em relação ao circuito anterior, saiu um botão e o segundo led, e entrou o sensor, que é a plaquinha com um domo, à direita. O sensor de luminosidade permaneceu conectado, assim como um dos leds.

Detalhando o circuito

Para entender a montagem do circuito, vamos usar o diagrama de blocos, a seguir:

Para maior clareza do diagrama, dividi os pinos do Arduino em 2 blocos, em vermelho. O bloco central, em azul, mostra os pinos do sensor infravermelho (PIR, passive infrared sensor) que detecta movimentação medindo a emissão de luz infravermelha dos objetos ao seu redor.

Começando pelo sensor PIR (bloco azul): seu pino identificado como VCC foi conectado ao pino +5V do Arduino, seu pino GND (terra) foi conectado ao GND do Arduino, e o pino OUT – que é o gatilho que fica HIGH quando a movimentação é detectada – foi conectado ao pino A5 do Arduino.

Neste ponto tem uma pegadinha, e um aprendizado que eu tive nessa experiência. Note que eu coloquei entre aspas o nome do pino A5 do Arduino, no diagrama acima. A razão é: embora seja um pino analógico – cuja função natural é receber números na faixa entre 0 e 1023, pela função analogRead –, eu o usei como se fosse um pino digital, porque facilitou a montagem na minha mini-protoboard. Para inicializar o pino A5 como se fosse uma entrada digital (na qual podem ser lidos os valores HIGH e LOW, com a função digitalRead), basta fazer como se faz com os pinos digitais: pinMode(A5, INPUT);.

Assim como ocorreu no nosso exemplo anterior, o pino de dados do sensor PIR também foi conectado a um resistor de 10KΩ conectado ao terra, para agir como um pull-down. Se você ainda não pesquisou sobre o importante papel dos resistores pull-up e pull-down, agora seria um bom momento.

Vamos agora ao sensor de luminosidade, nosso bom amigo fotoresistor (L1 no diagrama), já detalhado no artigo anterior. Trata-se de um sensor analógico que deixa chegar mais corrente ao Arduino quando está bem iluminado, e pouca corrente quando está escuro. Um dos terminais dele está conectado ao pino +5V do Arduino, e o outro à entrada analógica A7, e também a um resistor de 10KΩ ligado ao terra, pelo mesmo motivo do anterior: pull-down.

Completando a montagem, temos o led, cujo terminal mais longo está ligado ao pino digital 2 do Arduino, e cujo outro terminal está ligado a um resistor de 330Ω.

Sensores de presença: mais detalhes sobre o sensor PIR

Os sensores PIR operam de forma passiva, ao contrário de outros sensores de movimento e distância que são emitem alguma onda ou sinal e analisam o retorno, que são denominados ativos.

O sensor que eu usei já vem montado na forma de um módulo chamado DYP-ME003. É um circuito bastante funcional, com regulagens que permitem ajustar a sensibilidade e o tempo que o gatilho do módulo deve manter o estado HIGH após detectar um movimento.

Existem vários módulos similares a este, e em geral eles têm os mesmos 3 pinos (a ordem e o posicionamento deles pode variar): alimentação, terra e gatilho.

Eles não são caros, mas já anotei na minha agenda para voltar a esse assunto no futuro, fazendo um teste diretamente com o sensor (sem módulo), que custa alguns centavos. Para minha própria referência futura, anoto: testar com o sensor analógico D203S, que custa alguns centavos e exige, no mínimo, o apoio de um transistor que amplifique o seu sinal analógico. Testar com o LM358N? Preciso de um ganho de ~6000.

O programa

Vejamos a íntegra do programa utilizado:

/*  Sensor-acende-led: acende leds quando detecta movimento no escuro
  
    (c)  Augusto Campos 28.11.2014 - BR-Arduino.org
    Usage of the works is permitted provided that this instrument is retained 
    with the works, so that any entity that uses the works is notified of 
    this instrument. DISCLAIMER: THE WORKS ARE WITHOUT WARRANTY. */


const int limite_claridade=4; // sensor abaixo deste valor indica escuro
const int led_externo=2;      // pino do led
const int sensor_pir=A5;      // pino onde esta  sensor PIR digital
const int lim_timer=30000;    // ciclos para apagar o led

int contador=0;
int passo=0;
bool estaEscuro=false;

void setup() {
  pinMode(led_externo, OUTPUT);
  pinMode(sensor_pir, INPUT);
  acendeIluminadores();
}

void loop() {
  estaEscuro=(map(analogRead(7),0,1023,1,10)<=limite_claridade);
  if ((estaEscuro && (digitalRead(sensor_pir)==HIGH)) {
    acendeIluminadores();
  }   
  if (passo!= 0) controlaContador();
}

void acendeIluminadores() {
  digitalWrite(led_externo,HIGH); 
  contador=0;
  passo=1;
}

void controlaContador() {
  contador+=passo;
  if (contador==lim_timer) {
      digitalWrite(led_externo,LOW);
      passo=0;
  }    
}

A sua lógica repete a do experimento anterior e, por isso, não vou detalhar de forma completa – já expliquei em profundidade no artigo anterior.

Destaquei, em cores, os poucos pontos que mudaram. Comecemos pela linha em vermelho, que coloca o pin do sensor PIR em modo INPUT. O que ela tem de especial? Veja mais acima (em negrito) a definição da constante sensor_pir: é o pino A5, cuja natureza é ser um pino analógico. Aqui está um aspecto importante: quando colocamos um pino analógico (que retorna valores proporcionais à corrente recebida, entre 0 e 1024) em modo INPUT, ele passa a se comportar como um pino digital, que retorna valores LOW e HIGH apenas.

A linha em verde funciona da mesma forma que a variável estavaClaro do experimento anterior, mas no sentido inverso: agora ela testa se o ambiente está escuro, e armazena o resultado (verdadeiro ou falso) na variável estaEscuro.

Finalmente, a linha em marrom é a que testa as condições necessárias para acender o led: o pino conectado ao sensor PIR tem que estar em HIGH, e a variável estaEscuro precisa ser verdadeira.

Note que eu acendo o led e inicio um timer para apagá-lo, como no exemplo anterior. Você consegue identificar por que esse timer poderia ser dispensado neste experimento?

Neste circuito eu usei um Arduino, uma protoboard, um módulo sensor PIR digital de 3 terminais, 2 resistores de 10KΩ, um resistor de 330Ω, um fotoresistor e um led.

 
  1.  Tenho certeza de que daqui a pouco vou achar uma breadboard dessas algo bem espaçoso, mas no momento ela ainda é um desafio para mim ;-)

Comentar

Dos leds ao Arduino, ESP8266 e mais

Aprenda eletrônica com as experiências de um geek veterano dos bits e bytes que nunca tinha soldado um led na vida, e resolveu narrar para você o que descobre enquanto explora esse universo – a partir da eletrônica básica, até chegar aos circuitos modernos.

Por Augusto Campos, autor do BR-Linux e Efetividade.net.

Recomendados

Livro recomendado


Artigos já disponíveis

Comunidade Arduino

O BR-Arduino é integrante da comunidade internacional de entusiastas do Arduino, mas não tem relação com os criadores e distribuidores do produto, nem com os detentores das marcas registradas.

Livros recomendados