terça-feira, 26 de janeiro de 2010

Construir um Sensor de proximidade por Infravermelho

   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...
}

3 comentários:

  1. PLAGIO É FEIO!!
    http://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!

    ResponderExcluir