Hoje vamos conhecer o QRE1113, um sensor de objetos refletivo para seu robô. Este sensor é especial para fazer aquele seu robô ou automação que necessita detectar objetos sem contato. Dentro do QRE1113 há basicamente um diodo emissor de infravermelho e um fototransistor.
A luz infravermelha é emitida, bate no objeto a ser detectado e volta para o fototransistor. Tudo isso sem emitir luz visível, já que este sensor trabalha na faixa dos infravermelhos. Este sensor é analógico, o que significa que sua resposta é variável dentro da faixa de alimentação. Então no meu caso com o uso do ESP32, tenho 3,3V de alimentação. Isso significa que o QRE1113 vai ter uma saída entre 0V e 3,3V

Um detalhe bem importante sobre este sensor: seu range de detecção (distância) é bem pequeno, coisa de 5mm. O gráfico abaixo foi tirado do datasheet do QRE1113, relaciona sua corrente de coletor (normalizada) com a distância de detecção. Quando eu iniciei os testes com este sensor, achei estranho o fato dele “não funcionar”.
O que eu estava vendo e tive que descobrir foi o fato de que sua distância de detecção é muito pequena. No gráfico ela só vai até 5mm, uma distância que torna este sensor pouco prático para muitas aplicações. Uma das aplicações perfeitas para este sensor é em robôs seguidores de linhas, ele pode ser fixo próximo ao chão. Isso garante uma grande confiabilidade ao seu robô.

Hardware
Este pequeno módulo é bem barato e pode ser encontrado no meu link do Aliexpress. Seu datasheet está neste link, caso você seja curioso e queira dar uma conferida. Para o experimento de hoje nós vamos precisar de um microcontrolador, um resistor para LED e um LED, além do módulo QRE1113.
O microcontrolador pode ser literalmente qualquer modelo e tipo, tudo que precisamos é uma entrada analógica. No meu caso escolhi um ESP32-C6, que é o que tinha na bancada no momento do experimento. O diagrama esquemático do experimento está abaixo, bem como uma foto da montagem em protoboard.


Conforme já descrito acima, o QRE1113 usa apenas uma entrada analógica para funcionar. No nosso caso ainda vamos ligar um LED para indicar detecção de objetos. Então precisaremos de um pino a mais, no nosso caso D8. O nosso experimento fará o QRE1113 detectar aproximação de objetos e o LED acender para indicar tal acontecimento. Um sketch (código) bem simples apenas para demonstar um conceito.
Eu montei meu protótipo em uma protoboard de 400 pinos. Isso porque meu microcontrolador está montado sobre uma placa eletrônica que eu mesmo desenvolvi. Tal placa expões todos os pinos do Xiao ESP32-C6 em uma única linha. Mais informações sobre esta placa estão neste link.
Firmware/código
Nosso sensor de objetos refletivo será programado em código Arduino, no software IDE do Arduino. Eu estou utilizando a versão 2.3.8 nightly, porém qualquer versão acima da 1.8 funcionará. Não há necessidade de instalar nenhuma biblioteca na sua IDE, apenas as bibliotecas padrão do Arduino vão fazer nosso projeto funcionar.
Todo o código está neste Github e também visto abaixo. Eu estou utilizando apenas duas variáveis, analogValue que é um integer para valores analógico. Também sensorTime, que é uma long para guardar tempo entre execuções do código. Vejam que eu não utilizo delay(), então meu código nunca fica parada perdendo tempo.
int analogValue= 0;
long sensorTime= 0;
void setup() {
Serial.begin(115200);
pinMode(D8, OUTPUT);
}
void loop() {
if(millis() - sensorTime > 50){
sensorTime= millis();
analogValue= analogRead(A2);
Serial.println(analogValue);
if(analogValue < 2000){
digitalWrite(D8, HIGH);
}else{
digitalWrite(D8, LOW);
}
}
}
Durante a execução do código, só é feita alguma coisa a cada 50 milisegundos, no restante do tempo nada acontece. A cada vez que o programa entra no IF dos 50 milisegundos, é feita uma leitura analógica. Então este valor é impresso no monitor serial da IDE do Arduino. Então há outro IF, outra comparação: caso o valor lido seja menor que 2000, o LED D8 é ligado. Caso contrário ele permanece desligado.
Uma nota importante: o microcontrolador que estou usando é um Xiao ESP32-C6 da SeeedStudio. Ao invés de ler valores analógico entre 0-1024 ou 0-4096, ele lê entre 0-3300. Isso significa que há uma conversão direta, já que 3300 significam 3300 milivolts, ou 3,3V. Portanto um valor de comparação de 2000 significa 2000 milivolts, ou 2V.
Sensor de objetos refletivo
Fiz um vídeo para ilustrar o conceito explanado neste artigo. O vídeo está logo no início do artigo, volte lá para assistir. Em caso de dúvidas favor comentar ali no Youtube ou logo abaixo, na caixa de comentários.





