Medindo distância com Sensor IR / Detector de obstáculos

Este é um projeto simples e funcional, ótimo para se utilizar em robôs. A proposta desse circuito é fazer um detector de obstáculos, não funciona para utilização como seguidor de linha.

Abaixo é mostrado como devem ser ligados os componentes. 

Para IR Receptor (Receiver) usei um IPX 81 e para o IR LED (Emissor) um LD 271.

O resistor de 56 K, eu não tinha, portanto usei um de 38 K e funcionou bem, tente manter próximo ao valor de 56 K que provavelmente funcionará corretamente o circuito. Esses valores de resistores foram projetados para serem usados com esses modelos de Emissor e Receptor, se for usar outros modelos, ai é bom consultar o datasheet do componente que você está usando. 

As leituras das distâncias obtidas foram bem próximas das medidas reais, acredito que dê para medir distâncias aproximadas até de uns 25 cm. 

Esse é o vídeo tosco, com câmera de churrasco que eu fiz, câmara e cinegrafista são lamentáveis (desculpa Tarantino).

https://www.youtube.com/watch?v=37zmXv10KKM&feature=share&l...

Está ideia foi retirada do blog de Legwinkij, o garoto fez um vídeo melhor do que o meu lá.

http://legwinskij.blogspot.sk/2011/03/arduino-ir-distance-sensor-up...

http://legwinskij.blogspot.com.br/2011/03/arduino-ir-distance-senso...

Código para Arduino :
int IRSense = A0;
int IRTrans = 2;
int valueAmbient = 0;

void setup() 
{
  pinMode(IRSense, INPUT);
  pinMode(IRTrans, OUTPUT);
  Serial.begin(9600);
  digitalWrite(IRTrans,LOW);
}

void ambient()
{
  digitalWrite(IRTrans,HIGH);
  delay(20); 
  valueAmbient = analogRead(IRSense);
  delay(20);
}

void loop() 
{
  ambient();
  digitalWrite(IRTrans,LOW);
  delay(20);
  int value = analogRead(IRSense);
  int value2 = round(value - valueAmbient);
  int dist = (((value2+15.0)/(value2*(value2+100.0)))*2000.0);  
  Serial.print(dist);
  Serial.print("cm.");
  Serial.println("");
  delay(20);
}

Código para Processing : (necessário apenas para um acompanhamento visual, para testes)

import processing.serial.*;
Serial Port;
String distance ="";
String data ="";
int index = 0;
PFont font;

void setup()
{
  size(700,400);
  Port = new Serial(this, "COM4", 9600);
  Port.bufferUntil('.');
  font = loadFont("Courier-48.vlw");
  textFont(font, 200);
}

void draw()
{
  background(0,0,0);
  fill(200,0,0);
  text(distance,50,100);
}

void serialEvent (Serial port)
{
  data = port.readStringUntil('.');
  data = data.substring(0, data.length() - 1);
  distance = data;
}

Exibições: 15403

Responder esta

Respostas a este tópico

Decepcionado com esse sensor porque ele fica totalmente maluco à luz do sol, ou seja, não funciona em ambiente com luz natural. 

Mas ainda assim, me recuso a pagar uma fortuna por esses sensores da Sharp.

Luis, será que se cobrir com um vidro ou acrílico escuro não melhora? (que é aplicado no controle remoto ...)

Abç

Ou se colocar modulado.. Fazer ele piscar e do outro lado colocar um capacitor em série. 

em vez de usar um led receptor de IR, é só colocar um fototransistor, aqueles receptores de televisão, ele funciona tranquilamente a luz do dia, ai vc faz como o Eduardo disse, modula!

Essa semana ainda eu faço o teste e posto aqui mesmo, estou no trabalho agora.

No mais, Abraço.

Estou tentando fazer com fototransistor, que só indica 38s.

Segundo o logista, é mesmo utilizados nos reparos dos televisores toshiba, eu presumi que seja 38Khz.

Os pinos que eu consegui identificar (praticamente por tentativa e erro):

1 - out

2 - Vcc

3 - Gnd.

Com essa configuração, consegui rodar esse sketch e identificar os pulsos de 3 controles.

Entretanto, não estou conseguindo bons resultados com o emissor, sendo que minha serial exibe os seguintes valores:

0cm.
316cm.
-282cm.
316cm.
-282cm.
-282cm.
-282cm.
-282cm.
0cm.
316cm.
316cm.
-282cm.
-282cm.

...

Alguma idéia?

Algum progresso no fototransistor?

Pra usar esse receptor sintonizado em 38khz, o led emissor tem que piscar nessa frequência  38khz para que seu receptor possa ve-lo. Mesmo assim, acredito que não ira funcionar, pois esse seu fototransitor tem saída digital, vai ver ou não, sem meio termo. 

Valeu, Jucelei.

Acabei não encontrando datasheet ou exemplos com esse 38s.

Quando rodei o esse link, estava utilizando a entrada digital, contando o intervalo dos pulsos, etc

Já, no exemplo proposto neste tópico, utilizam a entrada analógica para detectar ambiente e iluminação I.R.

Vou ver o que consigo e, se tiver um bom resultado, coloco como um adicional aqui.

Vamos ver se mais alguém

Sim, estamos esperando. kkk

Olá Luis, como eu faço para limitar o alcance em 10 Centímetros? Quero que ele movimente um servo quando for igual ou menor que 10 centímetros.

Parabens pela materia. Existe aqui no Brasil alguma loja com esses 2 componentes ?

IR Receptor (Receiver) usei um IPX 81 e para o IR LED (Emissor) um LD 271.

Obrigado

Alguém pode me explicar o calculo nas linhas abaixo?

 int value = analogRead(IRSense);
 int value2 = round(value - valueAmbient);
 int dist = (((value2+15.0)/(value2*(value2+100.0)))*2000.0);  

 

Enquanto ao sensor sharp da pra fazer um caseiro,mas nao da pra saber o nome do ci da foto,ja pesquisei aquelas letras que ta em cima do CI da imagem.

Anexos

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço