Contador

Alguns projetos de contagem utilizam semicondutores fotosensíveis (fotoresistências, fotodíodos ou fototransistores).

Em baixo poderá ver alguns trabalhos, bastante simples e de fácil execução.

Contador de visitantes usando led IR e fototransistor

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

O projeto consiste em contar o número de visitantes que entram e saem de uma sala, utilizando leds infravermelhos e fototransistores.

O sistema deverá 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 haja ninguém, apagar a luz.

Contagem_01

Essas informações serão apresentadas num display LCD 16×2, com a utilização do Arduíno a parte eletrónica fica muito reduzida, facilitando a instalação do projeto numa maquete.

No projeto, mostrado na foto acima, serão utilizados os seguintes componentes:

  • 1 led comum (para simular a luz da sala)
  • 2 leds IR 5mm
  • 2 fototransistores 5mm
  • 1 resistencia de 220R para o led comum
  • 2 resistencias de 220R para os leds IR
  • 2 resistencias de 220R para o coletor do fototransistor
  • 2 resistencias de 330R para o emissor do fototransistor
  • 1 display LCD 16×2 HD44780
  • 1 potenciometro de 10 K

O esquema de ligação do display é o mesmo que é utilizado no site Arduino e Cia (clique aqui para ver posts sobre display LCD). 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 :

Contagem_02

No circuito acima, cada fototransistor (em azul) tem a perna mais curta (o coletor) ligada ao positivo junto com uma resistencia de 220R, e a perna mais comprida (o emissor) ligada à porta do Arduino, com um resistencia 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 no nível alto enquanto estiverem a receber 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.

// 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 regista o estado do sensor de entrada
int valorirent = 0;
// Variavel que regista o estado do sensor de saida
int valorirsai = 0;
// Variavel que regista a quantidade de visitantes que entraram
int content = 0;
// Variavel que regista a quantidade de visitantes que sairam
int contsai = 0;
// Variavel que regista a quantidade de pessoas na sala
int contsala = 0;
// Variavel que regista 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 :

Contagem_03

Pode verificar o funcionamento desse projeto no vídeo no YouTube :

Anúncios