domingo, 26 de agosto de 2012

Arduino - Chave Óptica



Chave óptica

Esta barra, indica o nível de dificuldade encontrado para cada experiência realizada.
sendo:
"VERDE", indicação de nível 1 a 5 (Fácil);
"AMARELO", indicação de nível 6 a 8 (Médio);
VERMELHO, indicação de nível 9 e 10 (Difícil);

Neste projetos iremos exemplificar o uso de chaves ópticas para acionar dispositivos e também como sensor para contagem de objetos e até mesmo controle de velocidade de objetos.


Uma chave óptica típica é um dispositivo em que existe uma fonte emissora, normalmente um LED infra-vermelho, e um receptor, geralmente um fototransistor, conforme mostra a figura abaixo. O dispositivo é montado de tal forma que entre o emissor e o receptor existe uma fenda onde pode ser introduzido um objeto. A introdução desse objeto interrompe o feixe de radiação do emissor, provocando uma mudança de estado do circuito.

Chave óptica comercial, diagrama interno





Circuito Típico com componentes discretos


As chaves ópticas são extremamente rápidas e têm a vantagem de não utilizarem contatos mecânicos que podem desgastar-se e ainda apresentarem problemas de repiques.

As chaves ópticas são usadas em automatismos, encoders de controle de movimento e robótica, e em muitas outras aplicações importantes relacionada a mecatrônica e opto-eletrônica.



As chaves ópticas são usadas também em mecanismos de segurança, diferente dos convencionais mas ainda assim muito semelhante ao funcionamento de uma chave e a sua fechadura. Nas chaves ópticas, a “chave” é um cartão com uma certa combinação ranhuras, que quando introduzida na “fechadura/fenda” permite abrir uma porta, um armário, dependendo daquilo que se quer proteger.

No nosso projeto, usaremos um cartão perfurado, para simular uma cremalheira ou até mesmo objetos, e assim poder contar ou verificar a velocidade de passagem de objetos.

Alguns modelos disponíveis:










MATERIAIS & COMPONENTES:

1 x Arduino Duemilanove, UNO ou MEGA
1 x BreadBoard
1 x Chave Óptica PHCT204
dataseheet: http://bioserver.cpgei.ct.utfpr.edu.br/disciplinas/microcontroladores/datasheets/PHCTX0X-chaveoptoeletronica.pdf
1 x resistor de 330 Ohms
1 x resistor de 10K Ohms
Cabos e Fios para as conexões

DIAGRAMAS & CIRCUITOS:

Abaixo o diagrama de interligação dos componentes.


Cartão usado para o teste de contagem e velocidade.



Esse cartão tem 8 passagem x 8 interrupções em 10cm de comprimento, isso significaria que:
se em 1 segundo eu conseguir contar os 16 estados completos, então o cartão estaria se deslocando a uma velocidade de 10 cm/s; poderiamos por exemplo, com um dente em uma roda, contar a quantidade de giros completos em RPM, e assim por diante.... existem vária utilizações para este tipo de projeto, use sua criatividade.





PROGRAMAÇÃO E SOFTWARE:

Você pode baixar o código completo para Arduino acessando o link:

http://www.4shared.com/file/uYoNHYoo/Chave_optica_1.html




Segue o código comentado:


/*
#####################################################################################
#   Arquivo:            Chave_optica_1.pde                                             
#       Micro-processador:  Arduino UNO ou Teensy++ 2.0      
#   Linguagem:    Wiring / C /Processing /Fritzing / Arduino IDE          
#
# Objetivo:           Sensor Optical Switch (chave óptica)
#  
# Funcionamento:    Contagem de Objetos, sistema de segurança
#                           com cartão de identificação perfurado, medida
#                           de velocidade de cremalheiras ou objetos,
#                           etc...
#
#
#
#   Autor:              Marcelo Moraes 
#   Data:               26/08/12
#   Local:              Sorocaba - SP
#
#####################################################################################

  Este projeto contém código de domínio público.
  A modificação é premitida sem aviso prévio.
 */


// deinições de variáveis
#define opticalPin 3
#define myDelay 1000

// executado na inicialização do Arduino
void setup(){
  Serial.begin(9600); // inicializa a comunicação serial
  pinMode(opticalPin, INPUT); // definição do pino do sensor
}

// loop principal do programa
void loop(){
  // definição de varial para temporização
  // pode armazenar temporização de até 50 dias
  // myDelay é o tempo que queremos comparar
  unsigned long endTime = millis() + myDelay;
  // faz a leitura do sensor e guarda como estado prévio
  byte previousState = digitalRead(opticalPin); 
  int counter = 0; // inicializa contador
  // enquanto for menor que "endTime" executa
  while(endTime > millis()){
    // coloca estado do pino como estado corrente
    byte currentState = digitalRead(opticalPin);
    // se o estado conrrente não for igual ao estado prévio
    if(currentState != previousState){
      counter++; // acrescenta 1 ao contador
      // faz estado prévio igual ao estado corrente
      previousState = currentState; 
    }// continua executando
  }
  // imprime contador no monitor serial
  // facilmente modificado se precisar imprimir em LCD
  // ou display 7 segmentos
  Serial.println(counter);
}
//FIM DA COMPILAÇÃO




VÍDEOS E TESTES:


video

Veja este vídeo no youtube e com uma melhor resolução:
http://www.youtube.com/watch?v=IsmYcm00z1s


Obrigado, e até o próximo Projeto!


Dúvidas e sugestões enviem para: arduinobymyself@gmail.com