Tutorial: Sensor infra vermelho Sharp com Arduino - Infra Red Sharp Tutorial

|


Nesta aula vou demonstrar como usar o sensor infra vermelho da sharp.
Como detectar obstáculos gerando um bip e um piscar led.
Vamos lá?


 O sensor infra vermelho é bem prático e fácil de usar.
São três fios sendo um +5V,outro o GND(-) e um Vout(saída).


É possível perceber seu comportamento no gráfico abaixo:
Uma tensão é gerada no Vout proporcional a distância de um obstáculo. 
Veja um vídeo que analisa esse funcionamento. Aqui



Vamos para a montagem.
Para esse projeto será preciso:

1x Buzzer.
1x LED.
1x Sensor IR.
1x Arduino (qualquer modelo)
Fios.




Conecte fios na saída do sensor.

Faça a ligação com o arduino:


Veja como fica:


C1-Execute o código abaixo:


/*
Programa desenvolvido por:
Gamesh_
Leandro Mota
Dia: 08/07/2011
http://brasilrobotics.blogspot.com/

Descição:
Faz um led piscar com a proximidade de um objeto.
OBS: É permitido o uso e modificação deste código se refenrenciado.
*/




void setup() {
pinMode(0,INPUT);
pinMode(13,OUTPUT);
}


void loop() {
int ir = analogRead(0);


digitalWrite(13,HIGH);
delay(ir);
digitalWrite(13,LOW);
delay(ir);
}


Neste código a variável ir recebe o valor lido na porta analógica "0" do arduino e injeta como um  atraso delay(ir) fazendo o led piscar mediante esse atraso.
Veja o vídeo do seu funcionamento:


C2-Vamos fazer algumas modificações no código?

/*
Programa desenvolvido por:
Gamesh_
Leandro Mota
Dia: 08/07/2011
http://brasilrobotics.blogspot.com/




Descição:
Faz um led piscar com a proximidade de um objeto.
OBS: É permitido o uso e modificação deste código se refenrenciado.
*/
void setup() {


pinMode(0,INPUT);
pinMode(13,OUTPUT);


}


void loop() {


int ir = analogRead(0);


int BR = map(ir,0,800,300,0); // função map cria uma referência invertida


digitalWrite(13,HIGH);
delay(BR);
digitalWrite(13,LOW);
delay(BR);



}

Foi adicionada a função map() que permite fazer comparação de valores. Neste caso declaro que a variável "ir" que é gerada pelo sensor fornece valores entre "0" e "800". Informo também que o "0" deve ser o "300" e o "800" deve ser o "0". Assim quando o Vout do sensor for 0V terei 300 na variável BR, esta por sua vez é o atraso: delay(BR) temos então um atraso de 300ms para um objeto distante e um atraso de 0ms quando a proximidade é máxima.
É possível usar essa função para fazer relação diretamente proporcional ou inversamente proporcional.

Veja o vídeo:



Vamos agora adicionar um buzzer e gerar sons com a aproximação de um objeto?
Faça as ligações:


Veja como fica:


C3-Execute o código:


/*
Programa desenvolvido por:
Gamesh_
Leandro Mota
Dia: 08/07/2011
http://brasilrobotics.blogspot.com/




Descição:
Faz um bip com a proximidade de um objeto.
OBS: É permitido o uso e modificação deste código se refenrenciado.
*/


int BR,ir;
int Pin= 8;
int Note= 4186;


void setup() {


pinMode(0,INPUT);


}




void loop() {


ir = analogRead(0);


BR = map(ir,0,800,400,0);




int t_n = 1000/8;
tone(Pin, Note,BR);


int T =BR * 1.2;
delay(T);


noTone(Pin);


}

Basicamente a variável "BR" é tratada para dar um atraso adequado a nota que adotei como bip.
Neste desenvolvi um código simplificado e objetivo baseado na função tone() e exemplo Melody, padrão do Arduino.

Veja o vídeo:



Vamos então adicionar o LED e juntar o comportamento do led com o Bip do Buzzer.



Veja como fica:



C4-Execute  o código abaixo:


/*
Programa desenvolvido por:
Gamesh_
Leandro Mota
Dia: 08/07/2011
http://brasilrobotics.blogspot.com/

Descição:
Faz um led piscar com a proximidade de um objeto.
Um bip é gerado proporcional ao piscar do led.
OBS: É permitido o uso e modificação deste código se refenrenciado.
*/
int BR,ir;
int Pin= 8;
int Note= 4186;

void setup() {

pinMode(0,INPUT);
pinMode(13,OUTPUT);
}
void loop() {
ir = analogRead(0);
BR = map(ir,0,800,400,0);
int t_n = 1000/8;
tone(Pin, Note,BR);
int T =BR * 1.2;
digitalWrite(13,HIGH);
delay(T);
digitalWrite(13,LOW);
delay(T);
noTone(Pin);
}

Veja o vídeo:



Estude o código. Faça modificações e testes.
Você pode usar essa lógica para detectar metais sob o solo ou fazer seu robô informar o que está "vendo".
Na próxima aula estarei demonstrando uma aplicação muito interessante com base nesse código.
Aguardo seus comentário e dúvidas.

Documentação:
Códigos


Gostou do tutorial? Incentive mais tutoriais visitando:

5 comentários:

Anônimo disse...

Como eu posso diferenciar o que o sensor detecta de modo que o robo emita diferentes comandos de acordo com o que ele detecta?

Brasil Robotics disse...

olá

Não entendi bem o que quer saber.
Mas vou tentar:

O sensor vai informar um valor de 0V a 5V.
Dessa forma você sabe que( supondo 0V é 0cm e 5V é 2m ) se receber um valor de 1V vindo do sensor seu robô está a 1m de algum objeto.
Assim você cria um código que relaciona isso com uma tarefa.

Exemplo ilustrativo:
se(sensor a recebe 1V){
robô anda até o objeto
}

se (sensor recebe 0v){
girar 90° graus e andar rápido
}

Entede?
Estude o esse tutorial e os código que criei, assim aprenderá mais sobre esse sensores.

Entende?

Xis disse...

Link do primeiro vídeo fora do ar: http://youtu.be/V8DTEga7nQM

brn series disse...

Olá,

Bem legal este tutorial. Estou desenvolvendo um sistema que irá utilizar este sensor para identificar objetos próximos, então irei conectar a placa na porta USB e programá-lo de acordo com o que foi passado no tutorial e conectarei o sensor IR à placa. Eu conectando apenas à porta USB, sem essa placa de prototipação (é esse o nome?)funcionará normalmente?

Obrigado

Brasilrobotics disse...

basta ligar os pontos.
precisa do sensor e do arduino

 

©2010 Brasil Robotics | by Gamesh_