1 de abr de 2012

Construindo um contador de Visitas com um Sensor infravermelho (detector de movimento)

Radiação infravermelha
A radiação infravermelha foi descoberta em 1800 por William Herschel, um astrônomo inglês de origem alemã. Hershell colocou um termômetro de mercúrio no espectro obtido por um prisma de cristal com a finalidade de medir o calor emitido por cada cor. Descobriu que o calor era mais forte ao lado do vermelho do espectro, observando que ali não havia luz. Esta foi a primeira experiência que demonstrou que o calor pode ser captado em forma de imagem, como acontece com a luz visível.
Espectro eletromagnético de cores
Figura - 1 Espectro eletromagnético. Fonte  http://www.magnetosblog.com/efeitos-beneficio-do-infravermelho-longo  acessado em 01/04/20112

Sensor infravermelho – PIR (Passive infra-red)
Sensores infravermelhos começaram a ser usados por volta de 1940, originalmente desenvolvido para aplicações militares e cientificas.
Agora a tecnologia é usada largamente em diversos produtos comerciais como alarmes de detecção de intrusos, lâmpadas acionadas automaticamente, etc.
Os sensores modernos são altamente eficientes provendo conveniência, segurança e baixo custo.
Podem ser usados em qualquer lugar onde pessoas ocasionalmente caminham como corredores, garagens, jardins etc.

Como um sensor PIR funciona
Todos os sensores PIR detectam mudanças na radiação infravermelha que é emitida na forma de calor por diversos corpos como carros, seres humanos, animais etc.
Quanto maior o corpo mais radiação infravermelha é emitida e quanto mais radiação mais fácil é a detecção de movimento.

Podemos considerar o detector de movimento como uma chave ON - OFF controlada eletronicamente, toda vez que uma fonte de calor é detectada um sinal digital é enviado a saída (no caso do sensor usado um sinal de tensão ALTO +3,3V).

sensor detector infravermelho detecção
Figura - 2 Detecção de movimento. Fonte  http://www.glolab.com/pirparts/infrared.html  acessado em 01/04/20112

Conectando seu sensor ao Arduino.

A maioria dos módulos possuem 3 pinos na PCI, o layout dos pinos pode mudar mas basicamente são Alimentação – Saída – Terra (geralmente a descrição está escrito na  placa com silkscreen).

Faça um teste rápido alimentando seu sensor antes de conectá-lo ao arduino, caso ele não esteja mostrando uma saída de tensão coerente tente utilizar um resistor de Pullup (um exemplo pode ser visto no meu artigo sobre botões http://centralavr.blogspot.com.br/2011/04/primeiro-projeto-com-o-arduino-pisca.html )
Sensor Infravermelho detector infravermelho arduino
Figura 3 – Vista traseira do sensor

Especificações:
  • Tensão de entrada: DC 4.5 a 20V
  • Consumo sem detecção: 50uA
  • Tensão de saída 0,3V OFF e 3,6V ON
  • Ângulo de detecção: 110 graus
  • Distância de detecção: max 7 m
Montagem do circuito

Conecte o pino – do Módulo ao GND (terra) do Arduino
Conecte o pino + do Módulo ao 5V (Vdc) do Arduino
Conecte o pino OUT do Módulo ao pino 8 do Arduino
  
Código Fonte

#define sensor 8 // Define o pino 8 como detector de nível alto do sensor de presença
#include <LiquidCrystal.h> // Bilbioteca necessaria para utilizar o LCD

/* Biblioteca com funcoes para uso de um LCD baseado no Hitachi HD 44780 */
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
/* Define os pinos de ligacao do LCD ao arduino com esta ordem LiquidCrystal(rs, enable, d4, d5, d6, d7)  */
int detecta=0;
int valor_acumulado=0;


void setup()
{
   /*lcd.begin(cols, rows) */
   lcd.begin(20, 4); /* Tipo de LCD usado no meu caso de 20 colunas por 4 linhas */
   lcd.setCursor(0, 0); /* O Cursor iniciara na coluna zero linha 0 */
   lcd.print("    Central AVR!");
   lcd.setCursor(0, 2); /* O Cursor iniciara na coluna zero linha 2 */
   lcd.print("Detectados = 0"); /* Mensagem inicial indicando que nenhum movimento foi computado */
   lcd.print(" movs");
   pinMode(sensor, INPUT); /* Define o pino 8 como entrada */
}
  void loop()
    {
      if(digitalRead(sensor)==HIGH) /* Se algum objeto for detectado executa o bloco abaixo */
     {
      valor_acumulado=detecta+1;
      lcd.setCursor(0, 2); /* O Cursor iniciara na coluna zero linha 2 */
      lcd.print("Detectados = ");
      lcd.print(valor_acumulado); // imprime no LCD o número da detecção
      lcd.print(" movs");
      delay(8000); //espera 8 segundos até computar a proxima detecção (meu sensor fica 7 segundos em nivel alto)
      detecta = valor_acumulado; /* Guarda valor atual para ser incrementado na próxima detecção */
     }

    }

Resultado final 

circuito de detecção movimento infravermelho arduino
 Figura 4 – Vista geral da montagem


 Vídeo 1 – Contador de Visitas.

3 comentários:

  1. Como faço para incrementar de cada vez? Ou seja, só incrementa quando eu desativar o sensor e ativar novamente. Eu não quero ficar segurando e contabilizando.

    ResponderExcluir
  2. Não entendi muito bem sua dúvida, o sensor só contabiliza uma detecção por ver.
    Você gostaria de desligar o sensor?
    Se for isso é possível por uma chave (interruptor) no +5v do sensor, ou implementar uma lógica de leitura com um botão táctil.
    Se você ver meu texto falando sobre botões creio que você entenderá, criamos uma variável para ler o botão, quando ele for pressionado, criamos um loop While(1) onde será executado o código do sensor, dentro deste código podemos por uma condição de checagem do botão, se o mesmo for pressionado novamente a detecção de movimento é interrompida.

    ResponderExcluir
  3. como eu fasso para ao invez de usar lcd eu usar display de 7 segmentos??

    ResponderExcluir