Sensor óptico reflexivo TCRT5000 com Arduino
Outro sensor da série “bom e barato” é esse Sensor Óptico Reflexivo TCRT5000. É um daqueles sensores que eu considero essenciais na gaveta de qualquer “Arduinomaníaco”.
Por um custo muito baixo, 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:
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 :
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.
Conexão do TCRT5000 no Arduino
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:
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”:
// 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:
// 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); } }
Abaixo você confere o funcionamento desse sensor com Arduino, conforme mostrado neste post:
Como você pôde ver, este é um sensor barato e que pode ser usado nas mais variadas aplicações.
Confira outros posts utilizando o sensor TCRT5000 aqui mesmo no Arduino e Cia!
Porque não funciona quando uso um resistor de 1K para o transistor ?
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 !
Entendi, obrigado.
Valeu Pedro ! Obrigado pela visita.
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
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 !
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!
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 !
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?
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 !
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: [email protected]
Obrigado
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 !
acha que eu consigo ligar o receptor com um resistor de 22k?
Boa noite,
Sem problemas.
Abraço.
E se eu quisesse colocar um buzzer ,como alarme ai após a detecção só pararia por comando,como ficaria a programação?
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 !
gostei muito do artigo, mas queria saber se posso usar resistores de 300 em vez de 330ohm no led ir?
Boa noite,
No led pode sim. Abraço !
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?
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 !
Olá,
e se eu quiser um sensor de alcance maior, de 2 metros por exemplo, o que eu poderia usar?
Boa tarde,
Dependendo do seu projeto, pode ser utilizado um sensor ultrasonico HC-SR04, que detecta objetos à até 4m.
Abraço.
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 )
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.
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.
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.
Olá,
Este sensor lê cartão magnético ou cartão com código de barras?
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 !
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.
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 !
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. :-((((
Boa tarde Pedro,
Por favor reveja as ligações e também tente alterar o valor do resistor ligado ao sensor óptico.
Abraço !
Aqui tá a mesma coisa!
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 ?
Boa noite,
Não entendi a sua pergunta. Você quer saber a tensão na saída do sensor ?
Abraço!
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.
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
Boa noite Eduardo,
Obrigado. Vou montar um tutorial com esse sensor acionando um servo motor. Aguarde. 🙂
Abraço!
eu tambem preciso desse sensor acionando um servo! já existe esse tutorial? mande o link para mim por favor
tem como fazer ele para contar voltas ou então pecas
Boa noite,
Tem sim, vou tentar juntar material para fazer um post sobre isso.
Abraço!
Ola amigo, tambem gostaria de aprender a contar voltas.. na verdade minha aplicação é um pouco mais específica. não sei se é possivel. mas gostaria de contar as voltar que aquela engrenagem do hidrometro comum dá. para assim associar a um valor de medição me dando a quantidade de água que passa pelo interior do hidrômetro..
Olá boa noite.Poderia fazer um projeto desse de sensor óptico reflexivo+motores dc+codigo ? Tô tentando fazer um robo seguidor de linha…
Boa tarde,
Por favor entre em contato utilizando o formulário de contato no lado direito da página. Vamos conversar.
Abraço!
Dá uma olhada nesse e vê a descrição. Lá tem dizendo em detalhes como construir. https://www.youtube.com/watch?v=-FoCBOEuszQ
Boa tarde,
Preciso fazer um leitor de gabarito usando o arduino.
Esse sensor dará certo para ler o gabarito?
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!
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?
Oi Fabricio,
Nesse sensor realmente não há nenhum tipo de ajuste.
Abraço!
Como consigo a imagem do TCRT5000 para usar no Fritizing?
Esse sensor é capaz de identificar (separadamente) plastico de papel???
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.
Oi Cleyton,
Sei não. Eu ficaria com o potenciômetro. rs
Abraço!
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
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.
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
no Funciona trolo
ola gostaria de saber como fasso para ligar o led em um botao e desligar qando passar pela frente do sensor
Galera, existe uma forma de eu saber a qual distância o objeto chegou antes de tocar no sensor reflexivo? poderia ser com este ou com o sensor de distância sonar.
Exemplo: o sensor se aproximou de um objeto rápido tipo (100km) ele parou a que distância?
Olá, vou usar atrás de um acrílico leitoso a 2cm de distância e quando passar a mão sobre o acrílico faria uma sobra e acionaria um led. Será que funciona? Obrigado
Oi Edson,
Não sei se o TCRT5000 serviria, já que provavelmente ele vai detectar o acrílico. Uma opção é você colocar um emissor de um lado do acrílico e o receptor IR do outro, assim iria detectar quando o feixe de luz fosse interrompido.
Abraço!
Este Sensor sofre problema com interferências de luz externas como luz do sol Lanternas, etc?
Oi Leonardo,
Ele tem uma pequena proteção, mas sofre intererência sim.
Abraço!
Obrigado pela resposta, testei aqui e realmente sofre a interferência. Tentei utilizar enviando código na transmissão e recepção, mesmo assim sofre uma interferência.
Eu gostaria de saber se eu usar esse sensor eu poderia fazer o contrário.. Tipo, eu quero que o arduino faça uma contagem não quando detectar um objeto, e sim quando ele deixar de "ver o objeto"
E se ele não fizer isso, qual o sensor que eu utilizo ?
Buenos días te lo el siguiente problema la placa de entrada y salida de mi fotocopiadora dejo de activar un solenoide y un motor quiero saber si puedo utilizar este proyecto para detectar el papel y contar hojas para poder activar el solenoide y el motor y si es posible
Bem Explicado, tirou minha dúvida.
Obrigado!!!
Boa noite ,o meu TCRT 5000 É COM PLACA ,PRECISO USAR LED E TRANSISTOR PARA FUNCIONAR ?
Bom dia,
Provavelmente seu módulo já tem esses componentes, então não precisa. 🙂
Abraço!
Adilson
OLÁ…
estou tentando fazer um projeto com o sensor e um motor dc…para quando ele acender ligar o motor .ficar um determinado tempo e desligar sozinho ..
como posso ajustar isto na programação apartir deste teu modelo.. podes me ajudar!
meu email [email protected]
Olá, vocês sabem dizer qual a "frequência" de detecção esse sensor aguenta? Não sei se frequência é o termo correto, estou pensando em usar esse sensor como medidor de RPM de um motor ou roda (velocidade).
já viu no datasheet
Oi, boa tarde, eu fiz o meu código, porém só um dos sensores esta contando, o outro não, gostaria de saber o que eu errei aqui no meu código, desde já agradeço
#include
#include
int sensor1 ;
int contador = 1;
int sensor2;
int contador1 = 1;
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE);
void setup()
{
pinMode(7, INPUT);
pinMode(6, INPUT);
lcd.begin (16,2);
lcd.print(" 0 X 0");
}
void loop()
{
sensor1 = digitalRead(7);
if (sensor1 != 1 )
{
contador= contador++;
lcd.setCursor(5,0);
lcd.print(" ");
lcd.setCursor(5,0);
lcd.print(contador++);
while(digitalRead(7) != 1)
{ }
}
sensor2 = digitalRead(6);
if (sensor2 != 1)
{
contador1= contador1++;
lcd.setCursor(9,0);
lcd.print(" ");
lcd.setCursor(9,0);
lcd.print(contador1++);
while(digitalRead(6) != 1)
{}
}
}
Vocês são incríveis! Aprendendo muito com o material de vocês. Muito obrigado!
Valeu Victor!!!
Aguardamos sua visita sempre que possível. Publicamos novos posts regularmente. 😉
Abraço!
Adilson
Olá, meu nome é Lucas,
Gostaria de saber se posso usar esse sensor para detectar uma luz de um LED de um medidor de energia elétrica, ou uma luz infravermelha transmitida por uma fibra ótica. Ele seria mais indicado que um LDR? Abraço
Oi Lucas,
Esse modelo é mais indicado para usar por exemplo em robôs seguidores de linha ou até chaves de fim de curso, pois ele emite um sinal IR e espera o retorno.
Você tem a opção de usar um módulo sensor de luz como o TSL2561 ou o B1750. Tenho posts aqui no blog sobre eles, ok?
Abraço!
Adilson
Funciona sem arduino?
Funciona. Você vai ter que montar a parte eletrônica separadamente, mas funciona.
Abraço!
Adilson
Bom dia pessoal estou fazendo um basquete eletrônico para festas queria usar o arduíno com esse sensor para quando a pessoa jogasse a bola na cesta ele marcasse 2 pontos teria que ter 2 display tem como fazer
Bom dia,
Tem sim. Dê uma olhada nesse outro post aqui do Arduino e Cia:
https://www.arduinoecia.com.br/2017/11/placar-eletronico-arduino-modulo-max-7219.html
Abraço!
Adilson
Estou um fazendo um projeto com um sensor ldr e um led, no qual o sensor ao detectar uma bolinha de ping pong acende o led, porém queria que o led continuasse aceso após tirar a bolinha. Alguma dica do que eu possa fazer? Obrigada
Bom dia,
Retire o comando de desligar o led. Aí ele vai permanecer aceso. 🙂
Abraço!
Adilson
Boa noite, fiz um projeto parecido no meu canal no YouTube, se quiserem conferir e até avaliar https://youtu.be/9ewbj3dDB_Y
Bacana Lucas!
Sempre que precisar, estamos por aqui. 🙂
Abraço!
Adilson