Bem, com certeza todos já conhecem os famosos sensores de proximidade por infravermelho da SHARP que custam entre 20 e 30 euros lá fora:

Bom, eu fiz o meu por R$0,00 e vou ensinar como!
Primeiro recolher o material necessário:
- Sensor IR
- LED IR
- Transistor NPN (usei o BC547)
- Caneta velha
Como gosto de reciclar, encontrei logo 2 receptores de infravermelhos e alguns transístores em uma lataria velha que guardo aqui em casa. Os receptores são assim:

Estes vão ser os que vocês vão encontrar certamente, mas eles funcionam de maneira diferente. O Maior coloca "0 / LOW" em "out" enquanto não detecta infravermelho mas assim que detecta coloca "1 / HIGH". O pequeno funciona ao contrário. Decidi usar o pequeno pois é o que se adaptava melhor ao que queria fazer.
Com um tubo de caneta opaco, corte-o em duas partes com 5cm cada uma:

Com a pistola de cola quente, colei o Sensor IR a um lado dos tubos:

Fiz o mesmo com o outro tubo para o LED e em seguida colei os tubos um ao lado do outro:

Vamos agora às ligações. As ligações são bastante simples, o sensor tem 3 pinos, 2 para alimentação e o outro pino que ou tem o valor lógico 1 ou 0.
O sensor tem uma maneira engraçada de funcionar. O que estes sensores fazem é detectar variações de luz, por exemplo, quando pressionamos um botão em um controle remoto, o LED dele pisca com uma determinada frequência (+/- 33KHz) e o que o sensor da TV ou video detecta é esta variação. Estes sensores não detectam apenas, única e exclusivamente luz infravermelha, eles "apanham" tudo (são um pouco mais sensiveis ao IR claro). Se nós acendermos um LED IR em frente a este sensor veremos ele detectar qualquer coisa por um breve momento e a estabilizar logo em seguida, isto porque ele internamente "satura" a esse comprimento de onda. É por isso que quando estamos em casa, de luzes ligadas, conseguimos mudar de canal com o nosso controle remoto.

Para ligar o LED há um pequeno senão, como o valor no pino varia tão rápido, se ligarmos o LED direto, este parece que nem acende e sim desta forma nem precisamos de uma resitência. É aqui que entra o transístor, com ele conseguimos ter o LED a brilhar a todo o seu explendor e a frequência desejada!
Fica tudo mais ou menos assim:

É isto que temos de fazer então, colocar o LED IV a piscar (a qualquer valor na frequência dos KHz) e ver se o sensor detecta qualquer coisa!
Para colocar o LED a piscar decidi criar uma interrupção com um timer, de modo a que de cada vez que esta ocorresse acendia ou apagava o LED. Na função loop fico à espera que o sensor detecte alguma coisa. Simples não é?
Sketch:
#include
#define irx 2 // Sensor IR no pin digital 2
static boolean output = HIGH; // Variável para defenir o estado do LED de infravermelhos, é estática para ser usada durante a interrupção
void setup(){
pinMode(irx, INPUT); // Pin onde está o LED infravermelhos é pin output
Serial.begin(9600); // Iniciar comunicação Serial com o computador...
MsTimer2::set(5, flash); // Defenir intrrupções de 5 em 5 ms e durante a interrupção é chamada a função flash
MsTimer2::start(); // Iniciar interrupções
}
void loop(){
while(digitalRead(irx)); // Enquanto não houver nada no Sensor não sai daqui, o sensor coloca 1 quando n detecta nada e passa a 0 qd detecta algo
Serial.println("ICEBERG!"); // Oi.. Apanhou qualquer coisa... OH NÂO É UM ICEBERG... OH GOD, THE PAIN, CAN YOU FEEL THE PAIN?
// MAYDAY MAYDAY!
// - Alô diz iz German Cost Guard, can we help you? (Sotaque alemão)
// YES, YES! We're SINKING!
// - Okay so what are you sinking (thinking) about? (ahha XD)
}
void flash() { // Função chamda durante a interrupção
digitalWrite(12, output); // Anceder ou apagar o LED IR
output = !output; // Alterar o output...
}
#define irx 2 // Sensor IR no pin digital 2
static boolean output = HIGH; // Variável para defenir o estado do LED de infravermelhos, é estática para ser usada durante a interrupção
void setup(){
pinMode(irx, INPUT); // Pin onde está o LED infravermelhos é pin output
Serial.begin(9600); // Iniciar comunicação Serial com o computador...
MsTimer2::set(5, flash); // Defenir intrrupções de 5 em 5 ms e durante a interrupção é chamada a função flash
MsTimer2::start(); // Iniciar interrupções
}
void loop(){
while(digitalRead(irx)); // Enquanto não houver nada no Sensor não sai daqui, o sensor coloca 1 quando n detecta nada e passa a 0 qd detecta algo
Serial.println("ICEBERG!"); // Oi.. Apanhou qualquer coisa... OH NÂO É UM ICEBERG... OH GOD, THE PAIN, CAN YOU FEEL THE PAIN?
// MAYDAY MAYDAY!
// - Alô diz iz German Cost Guard, can we help you? (Sotaque alemão)
// YES, YES! We're SINKING!
// - Okay so what are you sinking (thinking) about? (ahha XD)
}
void flash() { // Função chamda durante a interrupção
digitalWrite(12, output); // Anceder ou apagar o LED IR
output = !output; // Alterar o output...
}
PLAGIO É FEIO!!
ResponderExcluirhttp://lusorobotica.com/index.php?topic=527.0
Não colocar o nome e link do autor, é roubar o trabalho dos outros! É CRIME no nosso País!
kkkkkkk
ResponderExcluiré cara... feio...
ResponderExcluir