Adquira estes componentes na Loja do Lab de Garagem
Olá Garagistas! No tutorial de hoje, mostraremos como utilizar a chave óptica, e como demonstração utilizaremos ela para identificar cartões e liberar acesso, utilizando o serial monitor da Arduino IDE.
Materiais Utilizados:
1x Protoboard Mini - 170 Pinos
1. O Funcionamento
Figura 1 - Chave Óptica
Uma chave óptica geralmente é constituída de um emissor (LED Infravermelho) e um receptor (Fototransistor). O dispositivo é montado de forma que entre o Emissor e o Receptor exista uma fenda onde possa ser introduzido algum objeto. A introdução desse objeto nessa fenda, interrompe o feixe de luz, provocando uma mudança do estado lógico da chave óptica de 1 para 0.
As chaves ópticas são rápidas e têm a vantagem de não utilizarem contatos mecânicos, que com o tempo acabam se desgastando, são muito utilizadas na automação como fim de curso, em robótica, e em muitas outras aplicações importantes relacionadas a mecatrônica e opto-eletrônica.
Na imagem abaixo, você pode ver um tipo de aplicação utilizando a chave óptica, como mecanismo de segurança. Nela é utilizado um cartão com uma certa combinação de recortes, para que quando o cartão for introduzido na “fenda” do mecanismo, ele permita fazer algum acionamento como, abrir um portão, um armário, ou simplesmente liberar algum tipo de acesso.
Figura 2 - Exemplo de Aplicação Utilizando-se a Chave Óptica
Em nossa aplicação utilizaremos cartões com recortes retangulares, para que ao passar o cartão pela fenda da chave óptica, a mesma detecte os recortes, deixando a luz infravermelha passar e conte para cada recorte um pulso, e para cada cartão, dependendo da quantidade de recortes atribui-se uma ID.
Imagem 1 - Cartão com 1 recorte (ID 1)
2. A Montagem
3. O Sketch
#define sensor 8 //Define "sensor" com valor 8
int estado=0; //Variável que detecta o estado da chave óptica
int ID=0; //Variável para IDentificar qual cartão passou pelo leitor
int i=0; //Variável para contagem
void setup()
{
pinMode(sensor,INPUT_PULLUP); //Define o pino digital 8(sensor) como entrada...
//...habilitando o resitor de pullup
Serial.begin(9600); //Inicia a Serial
}
void loop()
{
while(i<200) //Fica lendo a chave óptica por 200 milissegundo
{
estado = digitalRead(sensor); //Lê o pino digital 8(sensor) e guarda o estado na variável estado
if(estado == 0) //Se o estado da chave ótica for igual a 0(Objeto entre a fenda)
{
i=0; //Zera a variável de contagem
ID = ID+2; //Incrementa +2 na ID
while(estado == 0) //Enquanto o estado da chave óptica estiver em 0(Objeto entre a fenda)
{
estado = digitalRead(sensor); //Lê o estado da chave óptica
}
}
delay(1); //Delay de 1 milissegundo
i++; //Incrementa a variável para contagem do tempo
}
switch(ID) //Pega a variável ID
{
case 4: //Se o valor na variável ID for igual a 4, libera acesso para a ID 4
Serial.println("Marco Mello"); //Escreve no serial monitor o Usuário dessa ID
Serial.println("ACESSO LIBERADO!"); //Escreve a mensagem "ACESSO LIBERADO!"
Serial.println(""); //Pula uma linha
Serial.println(""); //Pula uma linha
break; //Sai da comparação
case 6: //Se o valor na variável ID for igual a 6, libera acesso para a ID 6
Serial.println("Francisco Lourenco"); //Escreve no serial monitor o Usuário dessa ID
Serial.println("ACESSO LIBERADO!"); //Escreve a mensagem "ACESSO LIBERADO!"
Serial.println(""); //Pula uma linha
Serial.println(""); //Pula uma linha
break; //Sai da comparação
case 8: //Se o valor na variável ID for igual a 8, libera acesso para a ID 8
Serial.println("Usuario 3"); //Escreve no serial monitor o Usuário dessa ID
Serial.println("ACESSO LIBERADO!"); //Escreve a mensagem "ACESSO LIBERADO!"
Serial.println(""); //Pula uma linha
Serial.println(""); //Pula uma linha
break; //Sai da comparação
case 10: //Se o valor na variável ID for igual a 10, libera acesso para a ID 10
Serial.println("Usuario 4"); //Escreve no serial monitor o Usuário dessa ID
Serial.println("ACESSO LIBERADO!"); //Escreve a mensagem "ACESSO LIBERADO!"
Serial.println(""); //Pula uma linha
Serial.println(""); //Pula uma linha
break; //Sai da comparação
}
ID=0; //Zera a variável ID
i=0; //Zera a variável de contagem(tempo)
}
Referências:
https://www.sparkfun.com/products/9299
https://www.sparkfun.com/datasheets/Components/GP1A57HRJ00F.pdf
http://arduinobymyself.blogspot.com.br/2012/08/arduino-chave-optica...
Comentar
Primeiramente boa tarde a todos e parabéns pelo trabalho realizado aqui!
Sou iniciante no "Universo Arduino" e ainda estou impressionado com as possibilidades que ele nos propicia. Sou estudante de Engenharia Mecânica e estou me "arriscando" com esse pequeno notável! Rsrsrs
Já encontrei alguns desses sensores à venda prontos para utilizar no Arduino mas, gostaria de saber se é possível utilizar um sensor desses encontrados em impressoras, conforme comentado pelo Hallyson, e utilizá-lo com a mesma precisão que a impressora tem ao movimentar os eixos. Caso afirmativo e se possível, gostaria de alguma orientação.
Eu desmontei 1 das minhas impressoras "velhas" afim de coletar engrenagens e motores que utilizarei em um protótipo e me deparei com essas "belezinhas"! Elas podem ser muito úteis nesse projeto "Frankenstein".
Dês de já agradeço!
Desejo suscesso e muita Luz à Todos!
estou com varias chaves dessa , tem muito em impressoras!!! fica a dica!
Muito boa ideia nessa aplicacao! parabens....
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por
Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!
Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)