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.

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.

modulo sensor de obstaculo

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:

funcionamento do sensor de obstaculo

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:

circuito sensor de obstaculo com Arduino

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