07 outubro 2013

Sensor óptico reflexivo TCRT5000

Outro sensor da série "bom e barato" é esse Sensor Óptico Reflexivo TCRT5000 que chegou recentemente da FilipeFlop. É um daqueles sensores que eu considero essenciais na gaveta de qualquer "Arduinomaníaco".

Por menos de 5 reais, ou seja, por menos do que você pagaria por duas xícaras de café, você tem um sensor óptico reflexivo que você pode usar em sensores de movimento, interruptores, alarmes, contadores e robôs, apenas para citar alguns exemplos.

"- Ah, mas eu não sei o que é um sensor óptico reflexivo"

Tudo bem, eu também não sabia, pelo menos não com esse nome. Para entender como ele funciona, vamos dar uma olhada na estrutura do sensor, cujo datasheet você encontra neste link :

Sensor Óptico Reflexivo TCRT5000

Esse sensor tem 2 componentes no mesmo suporte : um led infravermelho (cor azul) e um transistor IR (fototransistor - cor preta), separados por uma pequena "parede". Quando algum objeto se aproxima do sensor, a luz infravermelha é refletida no objeto, "passa" para o outro lado e ativa o transistor :

Sensor Óptico TCRT5000 - Esquema e funcionamento


Perceba que o tipo de objeto que você quer detectar vai influenciar diretamente na operação do sensor, já que, quanto mais reflexivo o material, maior a distância que o sensor vai alcançar. Como exemplo, fiz um teste (sem precisão), onde o sensor foi acionado com um pedaço de papel (branco) à 23 mm, uma régua de metal foi detectada à 30 mm e, com um pedaço de madeira escura, o sensor nem foi acionado.

Para testar esse sensor óptico com o Arduino Uno R3, vamos primeiramente montar este circuito. Utilizei um resistor de 330 ohms para o led infravermelho e de 10K para o transistor :

Circuito teste sensor óptico TCRT5000
Carregue este programa, abra o serial monitor e aproxime objetos do sensor até que o objeto seja detectado. No serial monitor, o status muda de "Ausente" para "Detectado" :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// Programa : Teste sensor óptico reflexivo  
// Autor : Arduino e Cia  
   
int objeto = 0;  
   
void setup()  
{  
  pinMode(7, INPUT); //Pino ligado ao coletor do fototransistor  
  Serial.begin(9600);  
}  
   
void loop()  
{  
  objeto = digitalRead(7);  
  if (objeto == 0)  
  {  
    Serial.println("Objeto : Detectado");  
  }  
  else  
  {  
    Serial.println("Objeto : Ausente !");  
  }  
} 

Com o sensor devidamente testado e funcionando, vamos acrescentar um led ao circuito, e teremos um "interruptor óptico", que altera o estado do led (ligado/desligado), cada vez que um objeto é detectado :

Circuito interruptor óptico com TCRT5000 Arduino



 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
// Programa : Acionamento de led utilizando sensor óptico reflexivo  
// Autor : Arduino e Cia  
   
int sinalparaoled = 8; //Pino do led  
int pinosensor = 7;   //Ligado ao pino "coletor" do sensor óptico  
int leitura;      //Armazena informações sobre a leitura do sensor  
int estadoled = 0;   //Armazena o estado do led (ligado/desligado)  
   
void setup()  
{  
  pinMode(sinalparaoled, OUTPUT); //Define o pino do led como saida   
  pinMode(pinosensor, INPUT);   //Define o pino do sensor como entrada
}  
   
void loop()  
{  
  //Le as informações do pino do sensor
  leitura = digitalRead(pinosensor);   
  if (leitura != 1) //Verifica se o objeto foi detectado  
  {  
    while(digitalRead(pinosensor) != 1)  
    {  
     delay(100);  
    }  

    //Inverte o estado do led (ligado / desligado) 
    estadoled = !estadoled; 

    //Liga ou desliga o led conforme "estadoled" 
    digitalWrite(sinalparaoled, estadoled); 
  }   
}  
     

Como você pôde ver, este é um sensor barato e que pode ser usado nas mais variadas aplicações. Em um dos próximos artigos, vou utilizar este sensor juntamente com um display 7 segmentos para construir um contador.

Até lá !

56 comentários:

  1. Porque não funciona quando uso um resistor de 1K para o transistor ?

    ResponderExcluir
    Respostas
    1. Boa tarde Pedro,

      Testei com valores baixos de resistência e os objetos não são detectados. O valor da resistência influi na corrente que passa pelo transistor, e consequentemente influi na sua capacidade de detectar o sinal infravermelho. Com valores de resistência acima de 4,7 K o sensor já começa a funcionar adequadamente, mas você pode variar isso dependendo do seu projeto.

      Uma descrição completa desse sensor e suas características você pode encontrar nesse documento :

      http://www.vishay.com/docs/80107/80107.pdf

      Abraço !

      Excluir
  2. Olá Arduino muito bacana esse seu artigo....

    Seguinte, estou querendo fazer uma engenhoca ela não terá utilidade comercial e é mais por hobby.
    Quero detectar qdo uma esfera ao cair em um buraco e logo apos ser identificada pelo sensor e qual a posição do sensor 01, 02, 03 etc na tela do computador passado por uma placa lógica conectada via serial/usb..... Conheco programacao c#, C e visual basic, porem sou novo nesses dispositivos e não sei qual melhor sensor, se existe uma placa que se comunique com o computador para mostrar para tela essas informações.

    No link abaixo segue um rascunho do que falei.....Grato!

    http://uploads.im/X3Iz8.png

    ResponderExcluir
  3. Oi Alberto !

    Antes de mais nada, obrigado pela visita.

    Olha, pelo desenho que você fez, seria possivel usar esse sensor óptico mesmo. Se você não necessita de precisão, esse sensor já estaria de bom tamanho. Digo isso porque o alcance do sensor é limitado, uns 2 ou 3 cm.

    Se for uma esfera de metal, talvez você possa usar algum outro tipo de sensor de aproximação, mas tudo vai depender do desenho da sua solução, proximidade da esfera com o sensor, etc. Mas o Arduino tem sensores para (quase) tudo. rs

    Quanto à comunicação, creio que seria bem simples para você montar alguma coisa, pois conhece programação em C, e o Arduino se comunica com o computador via serial. Não há necessidade de hardware adicional : você monta uma aplicação que se comunica com o Arduino via porta serial, e essa aplicação mostra os dados na tela.

    Nesse link aqui tem um exemplo de programa em C que se comunica com o Arduíno. No caso, ele envia os dados para o Arduino e acende um led, mas creio que para você não seja difícil fazer alguma alterações e, no caso, receber dados :

    http://labdegaragem.com/profiles/blogs/crie-seu-pr-prio-programa-de-comunica-o-serial-em-c-tutorial-1?id=6223006%3ABlogPost%3A262925&page=2#comments

    Espero que ajude. Se precisar de mais alguma ajuda, fique à vontade para perguntar.

    Abraço !

    ResponderExcluir
  4. Entendi,
    A coisa é bem simples mesmo, e o desenho foi só para ter uma ideia do contexto. Creio que a distancia que vc citou está perfeita. Quero fazer o prototipo para um buraco e se der certo fazer mais sem buracos com 100 unidades de sensores de baixo custo. Minha duvida é se a placa lógica suporta essa quantidade...Grato!

    ResponderExcluir
    Respostas
    1. Oi Alberto,

      O Arduino Uno tem uma quantidade limitada de portas (14 digitais e 6 analógicas), e o Arduino Mega tem uma quantidade bem maior (54 digitais e 6 analógicas), mesmo assim não seria suficiente para o seu projeto.

      Uma solução seria usar 2 placas Mega, ou então algum tipo de multiplexador com o sensor, mas não sei se isso é possível ou viável, eletronicamente falando.

      Abraço !

      Excluir
    2. Entendi,

      pensa comigo, se eu pegar duas de 54 posso plugar as duas no pc para obter o resultado e nos buracos distrubuir os portas com 100 sensores.....Da certo isso?

      Excluir
    3. Bom dia Alberto,

      Não vejo problemas nesse tipo de configuração. A princípio, seria mais simples do que colocar algum tipo de chip e fazer multiplexação. Nesse caso de usar duas de 54, o trabalho seria apenas de monitorar as portas do Arduino e ver qual sensor é ativado.

      Não sei se daria certo, pois nunca mexi nesse tipo de configuração, mas é um bom experimento. :-)

      Abraço !

      Excluir
  5. Por gentileza, gostaria de uma informação: pretendo fazer um circuito para abrir a tampa de uma lixeira, a partir de que se aproxime dela. Esse sensor funcionaria?
    e-mail: meuviolino@hotmail.com
    Obrigado

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Eu recomendaria fazer com um sensor como o HC-SR04 (tenho vários artigos sobre ele aqui no site). Você consegue regular a distância de detecção, que pode variar de 5 centímetros até 4 metros, aproximadamente.

      Falo isso porque o alcance desse sensor óptico é limitado, algo em torno de 2 à 3 centímetros.

      Abraço !

      Excluir
  6. acha que eu consigo ligar o receptor com um resistor de 22k?

    ResponderExcluir
  7. E se eu quisesse colocar um buzzer ,como alarme ai após a detecção só pararia por comando,como ficaria a programação?

    ResponderExcluir
    Respostas
    1. Boa tarde Rafael,

      Você pode colocar um buzzer no lugar do led (ou acrescentar mais uma porta ao programa), e depois colocar um if para verificar se um botão foi pressionado e assim desligar a porta do buzzer.

      Abraço !

      Excluir
  8. gostei muito do artigo, mas queria saber se posso usar resistores de 300 em vez de 330ohm no led ir?

    ResponderExcluir
  9. Olá, fiz o mesmo esquema da imagem, a unica alteração foi no resistor do infravermelho que, por não ter, coloquei um resistor de 1k. O que ocorre é que o monitor serial mostra que o sinal para o pino 7 fica alternando entre ausente e detectado. O que pode estar ocorrendo?

    ResponderExcluir
    Respostas
    1. Boa noite,

      Ali no IR não tem jeito, o mínimo que funcionou pra mim foi o de 10K, fora isso, acontece o erro que vc teve aí.

      Abraço !

      Excluir
  10. Olá,

    e se eu quiser um sensor de alcance maior, de 2 metros por exemplo, o que eu poderia usar?

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Dependendo do seu projeto, pode ser utilizado um sensor ultrasonico HC-SR04, que detecta objetos à até 4m.

      Abraço.

      Excluir
  11. Olá,

    Se eu quiser usar este sensor para detectar medidas abaixo de 50cm, o que teria que fazer? ( OBS: não quero usar o HC-SR04 )

    ResponderExcluir
    Respostas
    1. Boa tarde,

      O HC-SR04 seria a melhor opção. Se você quer simplesmente detectar algum objeto abaixo de 50 cm, pode tentar limitar o alcance do sensor óptico por meio de resistores, mas a precisão ficaria comprometida.

      Abraço.

      Excluir
    2. Na linha de comando:
      Ultrasonic ultrasonic(9,8); // (Trig PIN,Echo PIN),
      deixe exatamente assim, pois quando se define como:
      Ultrasonic ultrasonic(9,8,6000); ele mede até 103 centímetros, ou seja o campo que está com o valor 6000 no exemplo, define a distância máxima, como sendo igual à distância vezes 58.

      Excluir
    3. Veja a linha de comando
      Ultrasonic ultrasonic(9,8); // (Trig PIN,Echo PIN), se estiver como:
      Ultrasonic ultrasonic(9,8,6000); está definindo distâncias de até 103 centímetros. Ou seja o campo exemplificado como 6000 é a distância vezes 58.

      Excluir
  12. Olá,

    Este sensor lê cartão magnético ou cartão com código de barras?

    ResponderExcluir
    Respostas
    1. Boa tarde Ethiane,

      Nunca testei para essa finalidade, mas creio que não funcione. Existem sensores especificos para leitura de código de barras.

      Abraço !

      Excluir
  13. Boa tarde, ótimo post, deu certo aqui, porém esse sensor tem muito pouco alcance, tem como aumentar esse valor? precisava que fosse de 1 a 6 cm...
    Ou seria melhor usar outro sensor? se sim, qual modelo..
    Desde de já Obrigado.

    ResponderExcluir
    Respostas
    1. Boa noite,

      Acho que você pode usar esse mesmo. Tente mexer na resistência do transistor (usei um de 10K). Algumas pessoas testaram e comentaram que alterando esse valor, você consegue aumentar o alcance. Vale a pena tentar.

      Abraço !

      Excluir
  14. Comigo nao funcionou, o valor da variavel objeto fica somente com valor 1 sem alterações.

    Teria outra forma de testar esse sensor? Recem comprado, primeiro uso. :-((((

    ResponderExcluir
    Respostas
    1. Boa tarde Pedro,

      Por favor reveja as ligações e também tente alterar o valor do resistor ligado ao sensor óptico.

      Abraço !

      Excluir
    2. Aqui tá a mesma coisa!

      Excluir
  15. Ola, queria saber se existe como calcular valores de tensão, tipo quanto mais perto do objeto mais tensão ou menos tensão, como é feito esse calculo ?

    ResponderExcluir
    Respostas
    1. Boa noite,

      Não entendi a sua pergunta. Você quer saber a tensão na saída do sensor ?

      Abraço!

      Excluir
    2. Boa noite, estou pensando em fazer um sistema de contagem de ovos em uma esteira e queria usar esse sensor, mas tenho uma dúvida e talvez alguém possa me ajudar. Nessa foto da pra ter uma ideia do problema:

      https://www.google.com.br/search?q=contador+de+ovos&espv=2&biw=1366&bih=643&source=lnms&tbm=isch&sa=X&ved=0CAYQ_AUoAWoVChMI4tS75P2xyAIVQ4aQCh1oWwoW#imgrc=ilxTu5yanEvYNM%3A

      Vejam que em algumas situações acontecem de passar dois ovos "colados' e mesmo que eu reduza a passagem dos ovos para que passe um de cada vez, pode ocorrer essa situação. Minha dúvida é: O sensor seria capaz de fazer a contagem de dois ou mais ovos que estivessem colados? Desde ja muito obrigado pela ajuda.

      Excluir
  16. Olá, Obrigado pelo tutorial.

    Como eu faço para acrescentar um servo, que quando uma mão se aproxima, ele se movimenta por 10 segunda e depois volta a posição anterior? Um Abraço

    ResponderExcluir
    Respostas
    1. Boa noite Eduardo,

      Obrigado. Vou montar um tutorial com esse sensor acionando um servo motor. Aguarde. :)

      Abraço!

      Excluir
    2. eu tambem preciso desse sensor acionando um servo! já existe esse tutorial? mande o link para mim por favor

      Excluir
  17. tem como fazer ele para contar voltas ou então pecas

    ResponderExcluir
    Respostas
    1. Boa noite,

      Tem sim, vou tentar juntar material para fazer um post sobre isso.

      Abraço!

      Excluir
  18. Olá boa noite.Poderia fazer um projeto desse de sensor óptico reflexivo+motores dc+codigo ? Tô tentando fazer um robo seguidor de linha...

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Por favor entre em contato utilizando o formulário de contato no lado direito da página. Vamos conversar.

      Abraço!

      Excluir
    2. Dá uma olhada nesse e vê a descrição. Lá tem dizendo em detalhes como construir. https://www.youtube.com/watch?v=-FoCBOEuszQ

      Excluir
  19. Boa tarde,
    Preciso fazer um leitor de gabarito usando o arduino.
    Esse sensor dará certo para ler o gabarito?

    ResponderExcluir
    Respostas
    1. Oi Lucas,

      Não sei como é o seu gabarito, mas a princípio não vejo problemas, vc só terá que bolar um jeito de "varrer" o gabarito para ver o que está marcado ou não.

      Abraço!

      Excluir
  20. Tem como regular o grau de reflectancia para que certos objetos de certo grau De reflexão sejam detectados ou não. Tem como eu ajustar pela massa do objeto também?

    ResponderExcluir
    Respostas
    1. Oi Fabricio,

      Nesse sensor realmente não há nenhum tipo de ajuste.

      Abraço!

      Excluir
  21. Como consigo a imagem do TCRT5000 para usar no Fritizing?

    ResponderExcluir
  22. Esse sensor é capaz de identificar (separadamente) plastico de papel???

    ResponderExcluir
  23. Olá! Esse sensor pode ser usado para substituir um potenciômetro? Estou construindo um pedal que me diz o quanto foi pressionado através do giro do potenciômetro, mas tenho medo de ele sofrer muito com o desgaste físico com o tempo. Por isso, queria substitui-lo pelo tcrt.

    ResponderExcluir
    Respostas
    1. Oi Cleyton,

      Sei não. Eu ficaria com o potenciômetro. rs

      Abraço!

      Excluir
  24. Se eu usar esse esquema eu consigo ver os valores que ele recebe no serial monitor?? Se sim qual é o valor dele em um papel preto e em um papel branco?
    Obrigado

    ResponderExcluir
  25. Olá! Você saberia me dizer se esse sensor em específico possui dois sinais? Gostaria de usá-lo como enconder para um controle de velocidade e posição.

    ResponderExcluir
  26. Ola, Estou fazendo essa experiencia, porem, quando ligo apenas o sensor, o mesmo apenas da a imagem "ausente".... Quando testo com o led, o mesmo nao funciona. estou usando um resistor de 330 para ligar o led, sera esse o problema?

    Vanessa

    ResponderExcluir