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:
Como eu posso diferenciar o que o sensor detecta de modo que o robo emita diferentes comandos de acordo com o que ele detecta?
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?
Link do primeiro vídeo fora do ar: http://youtu.be/V8DTEga7nQM
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
basta ligar os pontos.
precisa do sensor e do arduino
Postar um comentário