Componentes Eletronicos

Sensor Óptico TCRT5000 com Arduino

Eletrogate 19 de junho de 20179 min

Introdução

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.

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.

Materiais necessários para o projeto com Sensor Óptico TCRT5000 e Arduino

 

link-carrinho-compras

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.

#define led 10
#define saidaSensor 7

int Time;
int lasTime;
int difference;
int IsUpdated;

void setup(){
   Time = lasTime = difference = 0;
   pinMode(led, OUTPUT); // Pino para ativar o led
   pinMode(saidaSensor, INPUT); // Pino para ler o sinal no coletor do fototransistor
   Serial.begin(9600); // Inicializa a porta serial com baud rate de 9600
}

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.

void loop(){
  bool leituraSensor = digitalRead(saidaSensor);

  if (leituraSensor == 0){
    Time = millis();
    difference = (Time - lastTime); // Calcula o tempo em segundos
    IsUpdated++;
    digitalWrite(led, HIGH);
    calcSpeed(difference, IsUpdated);
  }else{
    IsUpdated = 0;
    digitalWrite(led, LOW);
    lastTime = Time;
  }
  delay(10);
}

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.

void calcSpeed(unsigned long Time, int IsUpdated){
  int i;
  float vel;
  if (IsUpdated == 1){
    Serial.println("Tempo");
    Serial.println(Time);
    SpeedVector[counter++] = (Raio*2*PI/Time)*1000;
    if (counter == N){
      counter = 0;
      for (i=0; i<N; i++){
        vel =+ SpeedVector[i];
      }
      Serial.println("Velocidade(m/s) =");
      Serial.println(vel/N ,4);
    }
  }
}

Você também pode conferir o código completo e atualizado visitando o repositório desse post no GitHub da Eletrogate.


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.

Tenha a Metodologia Eletrogate na sua Escola! Conheça nosso Programa de Robótica Educacional.


Sobre o Autor


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.


Eletrogate

19 de junho de 2017

A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.

Tenha a Metodologia Eletrogate dentro da sua Escola! Conheça nosso Programa de Robótica nas Escolas!

Eletrogate Robô

Cadastre-se e fique por
dentro de novidades!