Sensor ótico TCRT5000 com Arduino

Neste artigo iremos falar sobre como utilizar o sensor ótico reflexivo TCRT5000 com o Arduino. Este sensor é barato e possui boas especificações para ser usado em pequenos projetos de robótica e automação. Vamos explicar como ele funciona e quais são as suas principais aplicações. Também vamos desenvolver um projeto com Arduino para mostrar como este funciona na prática.

Introdução

sensor ótico reflexivo TCRT5000 é um dos mais populares para utilizar em projetos com Arduino. O sensor é fabricado pela Vishay, uma tradicional fabricante de componentes eletrónicos. Recomendamos fortemente a leitura do datasheet do sensor aqui.

Trata-se de um sensor reflexivo que possui embutido um emissor infravermelho e um fototransístor. O emissor é um led infravermelho que emite um feixe de luz infravermelha. Já o fototransístor é o recetor que faz a leitura do sinal refletido. Ou seja, o led emite um feixe infravermelho que pode ou não ser refletido por um objeto e, caso o feixe seja refletido, o fototransístor identifica o sinal refletido e gera um pulso na sua saída.

Na figura 1 temos uma ilustração do sensor e o seu circuito eletrónico básico:

Figura 1: Ilustração de um TCRT5000 e do seu circuito básico. Fonte: Datasheet.

No circuito da figura 1, vemos o led infravermelho entre os terminais A e B e o fototransístor entre os terminais C e E. Na imagem do sensor é muito visível os dois componentes.

distância máxima de deteção não é grande, sendo em torno de 25mm (dois centímetros e meio), o que pode limitar um pouco a sua aplicação. O fototransístor vem com um filtro de luz ambiente, o que maximiza a identificação do feixe infravermelho refletido.

Vishay disponibiliza duas versões deste sensor: O TCRT5000 e o TCRT5000L. A única diferença é que o TCRT5000L possui os terminais mais longos. A corrente de saída para as duas versões não ultrapassa 1mA.

Na figura 2 temos o circuito de aplicação e um desenho que mostra como o sensor é utilizado para identificar objetos reflexivos.

Figura 2: Circuito de aplicação e ilustração de utilização prática do TCRT5000. Fonte: Datasheet.

Aplicações

As principais aplicações do sensor ótico reflexivo TCRT5000 são:

  • Elemento sensor de encoders óticos;
  • Deteção de materiais reflexivos como peças de metal e papel;
  • Identificação de obstáculos para robôs e peças móveis (desde que dentro da distância máxima);
  • Contagem de elementos reflexivos numa esteira transportadora;
  • Propósito geral: Qualquer aplicação em que seja necessário identificar um objeto dentro da distância de operação do sensor.

Agora que conhecemos como funciona o sensor, vamos aplicá-lo num projeto utilizando o Arduino.

Descrição do Projeto

Para aplicarmos o TCRT5000 com o arduino, vamos utilizá-lo para identificar e contar os objetos com superfície reflexiva. Vamos conectar o sensor ao arduino. Sempre que um objeto for identificado, irá acender um led vermelho para mostrar que um objeto foi percebido pelo sensor e vamos mostrar também o tempo decorrido entre cada leitura do objeto. Este tempo será usado para calcular a velocidade de uma bicicleta. Bicicleta? Sim! A ideia é instalar o sensor reflexivo e um elemento reflexivo na roda da bicicleta, de forma que a cada volta que a roda fizer o sensor será ativado uma vez.

Vamos para a montagem de hardware!

Aspectos de Hardware

Esta montagem é simples, sendo fácil conectar o TCRT5000 com Arduino. Primeiro, vamos à nossa lista de componentes.

Lista de componentes

A resistência de 330Ω será ligado no díodo infravermelho e o de 10K será ligado no fototransístor. Estes são os valores mais comummente usados, no entanto, você pode usar outras resistências da mesma ordem de grandeza.

Ligações de hardware

Na figura 3 temos como o circuito foi montado na breadboard. O coletor do fototransístor é ligado à resistência de 10K e numa entrada digital do Arduino. Esta entrada é a que vamos usar para identificar se o sensor percebeu algum objeto ou não. O emissor do fototransistor é ligado no GND.

O terminal positivo do led infravermelho é ligado por meio de uma resistência de 330Ω ao VCC e o seu terminal negativo é ligado no GND. Por fim, ligamos um led numa saída digital do arduino.

Figura 3: Montagem de hardware. Interface do arduino com o sensor reflexivo TCRT5000.

Agora precisamos de escrever o programa para fazer a leitura do sensor, contar o número de objetos identificados e acionar o led quando um objeto entrar no raio de leitura do sensor.

Aspetos de software

Na figura 4 temos a função void setup(). Ela inicia o pino que vamos usar para acionar o led como saída digital e um outro pino digital como entrada para podermos ler o sinal no coletor do fototransístor.  Inicia também a porta serial para poder mostrar na tela do monitor serial o tempo decorrido entre cada vez que um objeto é identificado.

No nosso caso, a variável led corresponde ao pino 10 e a variável saidaSensor corresponde ao pino 7,conforme a montagem da figura 3.

 

Figura 4: Função void setup() do programa

Na função void loop() fazemos a leitura do sensor utilizando a função digitalRead(). Logo após a leitura avaliamos num if se o sinal lido é baixo ou alto. Se o sinal for baixo, isto significa que o fototransístor não deteta, o que faz com que o pino conectado ao coletor fique conectado ao GND. Ou seja, um objeto está a refletir o sinal infravermelho para o fototransístor. Dentro do if usámos a função millis() para saber o tempo naquele exato momento. Este valor é usado para calcular o tempo decorrido entre uma deteção e outra. Ainda dentro do if, ativámos o led conectado ao arduino, para mostrar que houve uma deteção, e usamos a calcSpeed(), que foi implementada para calcular a velocidade da bicicleta (ou qualquer veículo sobre rodas).

Caso o sinal seja HIGH, significa que o fototransístor está aberto e nenhum objeto passou no raio de leitura do TCRT5000, assim, não fazemos nada, apenas atribuímos o último valor de tempo lido com a função milis() na variável lastTime. Esta variável armazena o momento da última deteção de um objeto, para que na próxima vez que um novo objeto for identificado, o tempo decorrido entre cada deteção seja calculado. A variável IsUpdated é usada para saber a primeira vez que o sensor foi ativado.

Figura 5: Função void loop() do programa

Por fim, na figura 6 temos a função calcSpeed, na qual utilizamos o tempo entre cada ativação do sensor para calcular a velocidade percorrida. Repare que usamos um buffer de N posições que armazena N velocidades. Caso N seja 10, por exemplo, vamos fazer 10 leituras com o sensor reflexivo. Ao fim das 10 leituras, o Arduino calcula a velocidade média e mostra na porta Serial.

Considerando que o sensor está afixado na roda, temos que utilizar a seguinte relação:

Velocidade = (Raio*2*PI/Tempo) * 1000

Para obter a velocidade em metros por segundo (m/s), o raio da roda deve estar em metros e o tempo entre uma ativação e outra do sensor deve estar em segundos. Lembre que a função milis() retorna o tempo em milissegundos, o que faz com que seja necessário fazer a conversão. O cálculo é feito para 10 leituras. Ao final, o Arduino soma todas as leituras e divide por 10 para obter o valor médio das dez últimas voltas que a roda deu.

Figura 6: Função void calcSpeed() do programa

Hora de Testar!

Agora basta carregarmos o programa no Arduino e com o circuito montado é hora de testar. Veja abaixo os valores que obtivemos no monitor serial.

Figura 7:  Velocidades médias calculadas a cada 10 leituras do sensor TCRT5000.

Considerações finais

O calculo do tempo entre uma deteção pode ser usado para calcular a velocidade de rotação de uma roda (uma roda de bicicleta ou eixo de motor por exemplo), além de outras aplicações. Saber montar o TCRT5000 de forma correta e como ler o seu sinal de saída (coletor do fototransístor) possibilita que o implemente em qualquer uma das aplicações para as quais o sensor foi feito.