Sensor óptico TCRT5000 com Arduino

Neste post vamos mostrar como utilizar o sensor óptico 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, as suas principais aplicações e desenvolver um projeto com Arduino para mostrar como ler os sinais do sensor óptico com um Arduino.

Introdução

O sensor óptico reflexivo TCRT5000 é um dos mais populares para utilização 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 fototransistor. O emissor é um led infravermelho que emite um sinal nessa faixa do espectro. Já o fototransistor é o receptor 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. Caso o feixe seja refletido, o fototransistor identifica o sinal refletido e gera um pulso em 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 fototransistor entre os terminais C e E. Na imagem do sensor é muito visível os dois componentes.

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

A 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 mostrando 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 óptico reflexivo TCRT5000 são:

  • Elemento sensor de encoders ópticos;
  • Detecçã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 em 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 em um projeto utilizando o Arduino.

Descrição do Projeto

Para aplicarmos o TCRT5000 com o arduino, vamos utilizá-lo para identificar e contar o objetos com superfície reflexiva. Vamos conectar o sensor ao arduino. Sempre que um objeto for identificado, vamos 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. Esse 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 e não tem muito segredo para interfacear o TCRT5000 com Arduino. Primeiro, vamos à nossa lista de componentes.

Lista de componentes

  • Arduino UNO R3 + cabo USB;
  • Protoboard;
  • Sensor TCRT5000;
  • Led vermelho 5mm;
  • Resistor de 330;
  • Resistor de 10K;
  • Jumpers para ligação no protoboard;

O resistor de 330R será ligado no diodo infravermelho e o de 10K será ligado no fototransistor. Esses são os valores mais comumente usados, no entanto, você pode usar outros resistores da mesma ordem de grandeza.

Ligações de hardware

Na figura 3 temos como o circuito foi montado no protoboard. O coletor do fototransistor é ligado ao resistor de 10K e em uma entrada digital do Arduino. Essa entrada é que vamos usar para identificar se o sensor percebeu algum objeto ou não. O emissor do fototransistor é ligado em GND.

O terminal positivo do led infravermelho é ligado por meio de um resistor de 330R ao VCC e o seu terminal negativo é ligado em GND. Por fim, ligamos um led em uma saída digital do arduino.

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

Agora precisamos escrever nosso 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.

Aspectos de software

Na figura 4 temos a função void setup(). Ela inicializamos 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 fototransistor.  Inicializamos também a porta serial para podermos 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 tempo nós fazemos a leitura do sensor utilizando a função digitalReal(). Logo após a leitura nós avaliamos em um if se o sinal lido é baixo ou alto. Se o sinal for baixo, isto significa que o fototransistor está em fechado, o que faz com que o pino conectado ao coletor fique conectado ao GND. Ou seja, um objeto está refletindo o sinal infravermelho para o fototransistor. Dentro do if nós usamos a função milis() para saber o tempo naquele exato momento. Esse valor é usado para calcular o tempo decorrido entre uma detecção e outra. Ainda dentro do if, nós ativamos o led conectado ao arduino,para mostrar que houve uma detecção, e chamamos calcSpeed(), que foi implementada para calcular a velocidade da bicicleta (ou qualquer veículo sobre rodas).

Caso o sinal seja HIGH, significa que o fototransistor está aberto e nenhum objetivo 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 detecção de um objeto, para que na próxima vez que um novo objeto for identificado, o tempo decorrido entre cada detecçã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, nó vamos fazer 10 leituras de com o sensor reflexivo. Ao fim das 10 leituras, nós calculamos a velocidade média e mostramos na porta serial.

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

Velocidade = (2* *raio) / Tempo

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, somamos todas as leituras e dividimos por 10 para obter o valor médio das dez últimas voltas que roda deu.

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

Botando pra rodar!

Agora basta carregarmos o programa no Arduino e com o circuito montado colocar para roda. Veja abaixo os valores que obtivemos no monitor serial.

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

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

 

Considerações finais

Calculando o tempo entre uma detecçã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. Sabendo montar o TCRT5000 de forma correta e como ler o seu sinal de saída (Coletor do fototransistor) possibilita a você implementar qualquer uma das aplicações para as quais o sensor foi feito.

Aqui neste exemplo o velocidade foi apenas mostrada no monitor serial. Serial legal se você tivesse um display LCD bem no guidão da bicicleta para mostrar a velocidade. Esse é o desafio que fica para você. Complementar esse firmware enviando os dados para um display LCD e não para o monitor serial.

Confira nosso post sobre display LCD e aprenda a fazer! Boa Sorte!

Avaliações: 5.0. de 1 voto.
Por favor, aguarde...
Vitor Vidal
Vitor Vidal
Engenheiro eletricista, mestrando em eng. elétrica e apaixonado por eletrônica, literatura, tecnologia e ciência. Divide o tempo entre pesquisas na área de sistemas de controle, desenvolvimento de projetos eletrônicos e sua estante de livros.
  • Pingback: Display LCD + Módulo RF para detecção de presença - Blog Eletrogate()

  • Emerson Almeida

    Boa tarde ,muito boa sua explicação !
    Porém venho com uma duvida relacionada ao meu TCRT5000 que ja tem sua base própia ,gostaria de usa-lo sem LED e RESISTOR ,isso é possível? Ou é essencial o uso dos mesmos?

    Faça sua avaliação.
    Por favor, aguarde...
    • Vitor

      Boa noite, Emerson!

      Obrigado pelo seu comentário.

      O LED nós usamos no post apenas como sinalização do estado do sensor. Você pode tirá-lo sem problemas(mas nesse caso você não vai ter feedback visual sobre se as leituras do sensor).
      Os resistores conectados ao fotodiodo e ao fototransistor são necessários. Esses não é uma boa ideia tirar. Caso você tenha feito referência ao resistor ligado junto do LED para limitar a corrente dele, esse não tem problema tirar, afinal, se você tirar o LED não precisa mais dele. Ok?

      Abraço!

      Faça sua avaliação.
      Por favor, aguarde...
      • Emerson Almeida

        Muito obrigado por responder Vitor .ok.
        Como eu mencionei acima existe um módulo no meu sensor e tambem fiquei na duvida se com esse módulo eu preciso ter os resistores .

        Faça sua avaliação.
        Por favor, aguarde...
      • Emerson Almeida

        Seu Post esta muito bem elaborado ,justamente para o que eu preciso no trabalho da escola que é medir a velocidade de um carrinho de controle remoto !
        OBRIGADO!

        Faça sua avaliação.
        Por favor, aguarde...
  • Emerson Almeida

    Boa tarde Vitor por favor tem como me ajudar?
    Escrevi o cód conforme as figuras acima ,mas da falha de compilação no sketch

    A seguinte mensagem :
    ‘time’ Ass not declarar um tênis scope

    Faça sua avaliação.
    Por favor, aguarde...
    • Vitor

      Olá, Emerson!

      Parece que faltou declarar a variável time.
      Neste llink você pode baixar o código que usamos. Ele está compilando direitinho.

      https://drive.google.com/open?id=0B3_uUcOeQJ04bmJ5NUhYTzh3NzQ

      Se não funcionar ainda pode nos avisar.

      Faça sua avaliação.
      Por favor, aguarde...