Contador de visitantes usando led IR e fototransistor

Postado 11:47 14/08/2017 por Admin

fonte:http://www.arduinoecia.com.br/2014/09/contador-de-visitantes-ir-e-display-lcd.html

O projeto do post de hoje foi usado no ano passado em um TCC, onde o aluno precisava criar um sistema que contasse o número de visitantes em uma sala, utilizando led infravermelho e fototransistor.

O sistema deveria contar o número de pessoas que entraram na sala, quantas saíram, calcular o número de pessoas na sala e, caso não houvesse ninguém, apagar a luz.

contador de visitantes ir fototransistor


Essas informações deveriam ser apresentadas em um display LCD 16x2, e com a utilização do Arduino a parte eletrônica ficou bem reduzida, facilitando a instalação do projeto em uma maquete.

No projeto, mostrado na foto acima, foram utilizados os seguintes componentes:

  • 1 led comum (para simular a luz da sala)
  • 2 leds IR 5mm
  • 2 fototransistores 5mm
  • 1 resistor de 220R para o led comum
  • 2 resistores de 220R para os leds IR
  • 2 resistores de 220R para o coletor do fototransistor
  • 2 resistores de 330R para o emissor do fototransistor
  • 1 display LCD 16x2 HD44780
  • 1 potenciômetro de 10 K

O esquema de ligação do display é o mesmo que eu utilizei na maioria dos projetos aqui no site (clique aquipara ver outros posts sobre display LCD aqui no Arduino e Cia). Na porta 7 ligamos o fototransistor que será responsável pela contagem de entrada da sala, e na porta 6 o responsável pela contagem de saída. O led que simula a luz da sala está ligado à porta 10 :


IR fototransistor


No circuito acima, cada fototransistor (em azul) tem a perna mais curta (o coletor) ligada ao positivo junto com um resistor de 220R, e a perna mais comprida (o emissor) ligada à porta do Arduino, com um resistor de 330R fazendo a função de pull-down. O potenciômetro ajusta o contraste do display.

O programa verifica o estado das portas 7 (sensor de entrada da sala) e 6 (sensor de saída da sala), que se encontram em nível alto enquanto estiverem recebendo iluminação dos leds IR (que estão sempre ligados). Quando a iluminação IR é interrompida por algum objeto, o estado da porta vai à nível baixo (0 / LOW), e o contador é então atualizado.

Na parte superior do display, mostramos a quantidade de pessoas na sala, e o total de visitantes. Na parte inferior do display, temos o contador de entrada e de saída, apenas para informação e acompanhamento.


  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
// Programa : Controle de visitantes
// Autor : Arduino e Cia

// Pino de ligacao do sensor IR de entrada
int pinoirent = 7;    
// Pino de ligacao do sensor IR de saida
int pinoirsaida = 6;  
// Variavel que registra o estado do sensor de entrada
int valorirent = 0;   
// Variavel que registra o estado do sensor de saida
int valorirsai = 0;   
// Variavel que registra a quantidade de visitantes que entraram
int content = 0;      
// Variavel que registra a quantidade de visitantes que sairam
int contsai = 0;      
// Variavel que registra a quantidade de pessoas na sala
int contsala = 0;     
// Variavel que registra a quantidade anterior de pessoas na sala
int contanterior = 0; 
// Pino de ligacao do led que representa a luz da sala
int pinoledsala = 10; 


// Configuracao do display LCD
#include <LiquidCrystal.h> 
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); 
 

void setup()
{
  Serial.begin(9600);            
  // Seta o pino do sensor de entrada como ENTRADA
  pinMode(pinoirent, INPUT);     
  // Seta o pino do sensor de saida como ENTRADA
  pinMode(pinoirsaida, INPUT);   
  // Seta o pino do Led indicador de presenca como SAIDA
  pinMode(pinoledsala, OUTPUT);  
  // Informacoes iniciais do display
  lcd.begin(16, 2);
  lcd.setCursor(0,0);            
  lcd.print("Sala:0 ");          
  lcd.setCursor(9,0);
  lcd.print("Tot: 0");
  lcd.setCursor(0,1);
  lcd.print("Ent: 0");
  lcd.setCursor(9,1);
  lcd.print("Sai: 0");
}

void loop()
{
  // Seta a variavel valorirent com o status do sensor de entrada
  valorirent = digitalRead(pinoirent);    
  // Seta a variavel valorirsai com o status do sensor de saida
  valorirsai = digitalRead(pinoirsaida);  

  // Mostra as informacoes dos sensores no serial monitor
  Serial.print("entrada : ");
  Serial.print(valorirent);
  Serial.print(" saida : ");
  Serial.println(valorirsai);

  // Verifica se o estado do sensor de entrada foi alterado
  if(valorirent!=1) 
  {
    // Incrementa o valor do contador de entrada em 1 unidade
    content=content+1; 
    // Verifica se a pessoa/objeto para em frente ao sensor
    while(digitalRead(pinoirent)!=1) 
      { 
        delay(100);  
        Serial.println("Sensor de entrada parado !");
      }
    // Atualiza no LCD o valor do contador de entrada
    lcd.setCursor(5,1); 
    lcd.print(content); 
    // Atualiza no LCD o valor total de visitantes
    lcd.setCursor(14,0); 
    lcd.print(content); 
  }

  // Verifica se o estado do sensor de saida foi alterado
  if(valorirsai!=1) 
  {
    // Incrementa o valor do contador de saida em 1 unidade
    contsai=contsai+1; 
    // Verifica se a pessoa/objeto para em frente ao sensor
    while(digitalRead(pinoirsaida)!=1)
      { 
       delay(100); 
       Serial.println("Sensor de saida parado !");
      }
    // Atualiza no LCD o valor do contador de saida
    lcd.setCursor(14,1);
    lcd.print(contsai);   
  }

  // Calcula o numero de visitantes na sala
  contsala=content-contsai; 
  // Verifica se o numero atual de visitantes na sala foi alterado.
  if (contsala != contanterior)
  {
    lcd.setCursor(5,0); 
    // Imprime 2 posicoes em branco, para limpar o cursor na 
    // coluna 5, linha 0
    lcd.print("  "); 
    lcd.setCursor(5,0);
    // Atualiza no LCD o numero de visitantes na sala
    lcd.print(contsala); 
    // Apos atualizar no LCD, coloca na varivel CONTANTERIOR 
    // o valor atual de visitantes na sala (CONTASALA} 
    contanterior = contsala; 

    // Verifica se o valor do contador de pessoas na sala 
    // e maior do que 0
    if (contsala > 0) 
    {
      //Caso positivo, acende a luz/led
      digitalWrite(pinoledsala,1); 
    }
      else
    { 
      //Caso negativo, apaga a luz/led
      digitalWrite(pinoledsala,0); 
    } 
  }
}

Também para fins de acompanhamento, os valores dos sensores são mostrados no serial monitor. Caso alguma pessoa ou objeto pare em frente ao sensor, essa informação também é mostrada :

Serial Monitor - Dados IR

O funcionamento desse projeto você confere no vídeo abaixo :



Comentários


Faça o login para enviar uma mensagem