O sensor de obstáculo pode ser utilizado para automatizar certos sistemas. Por exemplo, fazer um controle de quantas pessoas saíram ou entraram em um ambiente. Sendo assim, vamos aprender o que é e como utilizá-lo com o Arduino.
Não deixe de ler o post sobre o transmissor e o receptor infravermelho.
O que é
Da forma como encontramos à venda na internet, o sensor de obstáculo consiste em dois LEDs infravermelhos paralelos. Esses dois LEDs são responsáveis por dizer se há ou não um objeto na frente do sensor. A foto abaixo mostra o exemplo de um módulo.
Entretanto, um outro sensor que tenha a capacidade de verificar se há algo em sua frente também pode ser considerado um sensor de obstáculo. Posso citar aqui o sensor de distância ultrassônico. A diferença básica é que, no caso de usar apenas dois LEDs infravermelhos, o circuito final é bem mais enxuto.
Funcionamento
O funcionamento por trás desse tipo de sensor é relativamente simples. Basicamente, um LED emissor de luz infravermelha fica aceso o tempo todo. E, paralelo a ele, existe um LED infravermelho receptor. Idealmente, a luz do emissor não chega diretamente ao receptor, já que os dois estão em paralelo. Na prática, a luz que chega lateralmente pode ser desconsiderada.
Dessa forma, é necessário que exista uma barreira na frente dos LEDs para que o raio de luz infravermelha do emissor seja refletido nela e chegue ao receptor. Esse processo é semelhante ao funcionamento do sensor de distância ultrassônico. A imagem abaixo ilustra o que foi falado:
Quanto maior for a distância entre os LEDs e o obstáculo, menor será a intensidade de luz infravermelha que conseguirá passar entre os LEDs. E, de acordo com a intensidade de luz no receptor, maior será a corrente que flui pelo LED (“gerada” devido a luz). Se um resistor estiver em série com este LED, haverá uma queda de tensão no resistor que será inversamente proporcional à distância do objeto.
Sendo assim, é possível até descobrir a distância do objeto ao sensor a partir da intensidade medida. O porém para este caso esta citado no tópico abaixo. É interessante notar que a utilização da luz infravermelha permite que o sistema fique invisível ao olho humano, inibindo qualquer poluição visual desnecessária.
Limitação
Apesar de ter um funcionamento bem interessante, o sensor de obstáculo tem uma limitação grave. Dado que ele trabalha com luz infravermelha, qualquer fonte de radiação infravermelha é capaz de influenciar o sensor.
Felizmente (ou não), o nosso corpo, que é um emissor de radiação infravermelha, não é capaz de atrapalhar o sensor significativamente (de acordo com testes que fiz). Porém, ainda temos a luz solar, que possui luz infravermelha, e ela atrapalha bastante o sensor. De acordo com meus testes, se o sensor receber luz indireta, que vem de uma janela aberta por exemplo, ele é capaz de detectar um objeto mesmo que não tenha nada na sua frente.
A distância máxima de detecção do sensor é bem pequena, pois, a partir de um certo valor, a luz infravermelha do ambiente se iguala à luz detectada pelo receptor. Enfim, esse sensor é recomendado apenas para aplicações em ambientes mais fechados com pouca iluminação solar. Um ambiente com janela fechada já deve ser suficiente.
Implementação no Arduino
Módulo sensor de obstáculo
Meu objetivo é utilizar o módulo que foi mostrado na imagem no início do post. Este módulo possui 3 pinos. Sendo 2 para alimentação e 1 para a leitura do sensor. No circuito do módulo, existe um comparador ligado ao receptor e ligado a uma tensão de referência. A tensão de referência é ajustada pelo potenciômetro da placa.
Desse modo, o pino de leitura indica nível alto para o caso do nível de tensão do receptor ser maior do que a tensão de referência. E indica nível baixo para o caso do receptor ter nível de tensão abaixo deste valor. O circuito típico do módulo pode ser visto abaixo:
De acordo com o circuito, temos o emissor ligado direto na alimentação com um resistor. E o receptor ligado em uma ponta do amplificador operacional, que, nesta configuração, está atuando como comparador.
Observe aqui que o fluxo de corrente no receptor causará uma queda de tensão no resistor R2, que é proporcional à intensidade de luz recebida (conforme foi dito anteriormente). E é justo a tensão dele que está ligada na entrada não inversora do amplificador operacional.
Na outra ponta do amplificador (entrada inversora) temos a ligação no potenciômetro, para ajustarmos a tensão de referência. Por fim, na saída do comparador existe um LED (normal) para indicar se o objeto foi detectado ou não.
Para exemplificar o uso do módulo, vamos criar uma lógica para acender um LED toda vez que um objeto passar na frente do sensor.
Circuito
O circuito é bem direto: é necessário ligar as alimentações do módulo (VCC e GND) nos pinos 5V e GND do Arduino respectivamente. E o pino de saída (OUT) deve ser ligado em um pino digital do Arduino. O LED que indicará a presença do objeto será o LED que já existe na plaquinha do Arduino UNO, que fica ligado ao pino 13.
Veja a ligação abaixo:
Programação
A lógica da programação é bem simples: basta detectar se o pino digital 2 está em nível alto ou baixo dependendo do que queremos. No caso do módulo mencionado, o nível baixo indica que há um objeto e o nível alto que não há (é o contrário do que foi explicado anteriormente). De qualquer forma, não vou explicar o passo a passo, já que os comentários do código são suficientes para entender o processo.
Mas vale fazer algumas observações: para o código funcionar, você deve colocar o obstáculo na frente do sensor e regular o potenciômetro do modulo até que o LED (que fica no módulo) acenda apenas à distância que você definiu. Ou seja, mais distante que o definido, o LED apaga, e menor ou igual a distância definida ele acende. E, claro, não deixe de observar as limitações citadas anteriormente.
Outro ponto importante: é totalmente possível utilizar as interrupções para detectar o sinal do sensor e economizar processamento e energia. Para mais detalhes, veja este post. E também daria para criar a lógica do programa sem utilizar o Arduino, apenas ligando a saída do sensor no cátodo do LED. Mas não fiz isso justamente para mostrar como ler o sensor no Arduino.
Código de exemplo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #define sensor 2 // Define o pino do sensor #define led 13 // Define o pino do LED void setup() { pinMode(sensor, INPUT); // Define o sensor como entrada pinMode(led, OUTPUT); // Define o LED como saída } void loop() { // Se o sensor detectou um objeto (nível baixo) if(digitalRead(sensor) == 0){ // Acende o LED por 2 segundos e apaga digitalWrite(led, HIGH); delay(2000); digitalWrite(led, LOW); } } |
Aplicações
O sensor de obstáculo, sendo o infravermelho ou não, possui algumas aplicações interessantes.
- Fazer controle de entrada e saída de pessoas em um ambiente.
- Com isso, dá para acender e apagar a luz de um cômodo de forma automática.
- Verificar a chegada de algum objeto.
- Detectar a invasão de alguém dentro de uma casa.
- Verificar a ausência de um obstáculo.
- Alguns robôs limpadores possuem o sensor de obstáculo em sua base e detectam sempre a presença do chão à frente. Quando o chão não for detectado (encontrou uma escada ou buraco por exemplo), ele para de andar e evita quedas.
Transmissor e receptor infravermelho
Como identificar se o sensor é emissor ou receptor?
Um único sensor de obstáculo possui ambos. A principal diferença entre os dois é a cor. Enquanto o receptor possui uma cor preta, o transmissor é transparente. Mas, em alguns casos, o receptor pode ser transparente também. Nesta situação, é aconselhável alimentar o LED (suposto receptor) em série com um resistor e uma bateria e utilizar uma câmera para verificar se ele acende ou não. Se ele acender é porque é um transmissor, senão ele pode estar queimado ou então é um receptor.
Olá colega, boa noite.
Esse sensor é confiável para se aplicar em um sistema de alarme?
Olá, boa noite!
Então, vai depender do ambiente em que você irá aplicá-lo. Assim como foi dito nas limitações, se for um ambiente ao ar livre, a luz do sol pode influenciar na leitura do sensor.
Outro detalhe: um objeto na cor preta pode ser que absorva a luz infravermelha do sensor, fazendo com que a luz não reflita de volta para o receptor e, com isto, o sensor não irá detectar a passagem do objeto por ele.
Ou seja, depende muito do seu cenário de aplicação.
Boa tarde
Estou construindo uma rampa para aplicação em sala de aula, gostaria de saber se a utilização de 4 sensores em um projeto funcionaria bem?
Boa noite, Henrique. Não entendi muito bem onde o sensor se encaixaria nesta aplicação, poderia explicar de outra forma?
Bom dia Fábio
Eu quero construir uma rampa de 2m e colocar quatro sensores e entre esses sensores correr um cronometro me informando o tempo gasto por um objeto entre os sensores para obter a velocidade média.
Bom dia,
Então, estou com o problema do sol no meu projeto, incidência de luz infravermelha. Você saberia me informar qual sensor substituiria esse para resolver o problema do sol? Desde já agrgadeço.
Boa tarde, Flávio. Infelizmente não vou saber te informar. Já vi até mesmo produtos vendidos no mercado tendo este tipo de problema. Mas você poderia utilizar um sensor ultrassônico no lugar.
Tive um problema muito idêntico. Estou a usar um sensor laser VL53L0x (utilizo o código open source pololu). Um pequeno senão: funciona por I2C por isso, na eventualidade de querer usar vários sensores no mesmo projeto, aconselho a usar também um multiplexer TCA9548, que trata de endereçar todos os sensores a ele ligados.
Olá, Jorge. Cheguei a substituir o sensor de obstáculo pelo VL53L0x em um projeto que fiz e foi bem melhor. Porém, fiz o controle dos endereços com a ajuda dos pinos XSHUT, não conhecia esta possibilidade do TCA9548. Bem interessante.
Inicialmente, também enderecei com os pinos XSHUT, mas é muito sensível a interferências (por exemplo, no momento em que ligas um aparelho qualquer na mesma tomada onde está ligada a alimentação do arduino), pois muitas vezes, perdia um ou outro endereço. Com o multiplexer, acabou-se esse problema. Até o código fica bem mais simples.
Muito bom saber desta informação de interferência, pois eu estava tendo problema com estes sensores e achei que era problema com o meu circuito. Vou considerar utilizar esse multiplexer futuramente… Muito obrigado, Jorge!
Peço desculpa por não ter cumprimentado… Boa tarde…
Sem problemas, meu amigo!
O sensor infravermelho funcionaria através de uma placa de acrílico transparente?
Olá, Mauricio. Pelo que pesquisei aqui, funcionaria sim.
Olá bom dia estou procurando um sensor duplo que marque a passagem de dois carros de autorama na pista a quantidade de voltas e o tempo de cada um individual em um display do tipo 16A02 azul .
seria possível?
e poderia ajudar a fazer este programa ?
posso até pagar se não for muito .
obrigado
Olá, Guaracy. Infelizmente, no momento, estou sem tempo para fazer projetos, mas posso te ajudar com dicas pontuais. Não existe uma só forma de fazer o que você quer, pois você pode utilizar diferentes sensores para detectar a passagem dos carros. Uma forma seria com o sensor de obstáculo mostrado no post, em que você colocaria um de cada lado e ajustaria a sensibilidade dele para pegar o movimento de apenas um lado. Outra forma seria fazendo a mesma coisa, porém com um sensor de distância. Nesse caso, poderia ser o sensor de distância ultrassônico ou o de distância a laser VL53L0X. Ou então você pode até colocar um imã nos carrinhos e usar um sensor de efeito hall de cada lado da pista. A partir disso, você montaria sua lógica com o display 16×2 que comentou. Claro que essa parte talvez seja a mais complicada, mas nada que você estudando exemplos de código online não resolva.