Tutorial: Dispositivo de identificação de senha com escada de resistores

O vídeo mostra e explica o hardware e software de um sistema de identificação de senha construído com um Arduino, alguns botões, leds e resistores. Abaixo você pode ver o Sketch utilizado no vídeo.

 

O Sketch
#define leitura A0
#define ledVerde 9
#define ledAzul 11
#define ledVerm 13

//Escolhendo a senha
int digitos = 6; //Numeros de digitos da senha
int senha[6] = {1,2,3,4,5,6}; //Colocar novamente o numero dentro dos [] e escrever a senha nos {}
int senha2[6]; //Colocar novamente o numero dentro dos []
int tempoSafe = 5; //Tempo (em minutos) de bloqueio

int botao, valor, resultado = 0, erros = 0, x, z;

void setup() {
  pinMode(9, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(13, OUTPUT);
  pinMode(A0, INPUT);
  Serial.begin(9600);
}

void loop() {

  //Leitura do que for digitado

  for(x = 0; x < digitos; x++){
    senha2[x] = botoes();
    if(senha2[x] == 10){ x = x - 1; }
    else{
      Serial.print(senha2[x]);
      if(x < digitos - 1){ Serial.print(" - "); }
      delay(500);
    }
    digitalWrite(ledAzul, LOW);
  }

  //Comparacao com a senha escolhida

  for(x = 0; x < digitos; x++){
    if(senha[x] == senha2[x]){ resultado = resultado + 1; }
  }

  //Resultado final

  if(resultado == digitos){
    Serial.println();
    Serial.println("Acertou");
    Serial.println();
    erros = 0;
    digitalWrite(ledVerde, HIGH);
    delay(1000);
    digitalWrite(ledVerde, LOW);
  }

  else{
    Serial.println();
    Serial.println("Errou");
    Serial.println();
    erros = erros + 1;
    digitalWrite(ledVerm, HIGH);
    delay(1000);
    digitalWrite(ledVerm, LOW);
  }

  if(erros == 3){ seguranca(); }
  resultado = 0;

}

//Funcao de leitura dos digitos
int botoes() {
  digitalWrite(11, HIGH);
  valor = analogRead(leitura);
  if(valor > 99 && valor < 105){ botao = 1; }
  else if(valor > 109 && valor < 115){ botao = 2; }
  else if(valor > 124 && valor < 130){ botao = 3; }
  else if(valor > 140 && valor < 148){ botao = 4; }
  else if(valor > 165 && valor < 172){ botao = 5; }
  else if(valor > 200 && valor < 205){ botao = 6; }
  else if(valor > 250 && valor < 255){ botao = 7; }
  else if(valor > 335 && valor < 340){ botao = 8; }
  else if(valor > 507 && valor < 512){ botao = 9; }
  else if(valor > 900){ botao = 0; }
  else if(valor == 0){ botao = 10; }

  return botao;
}

//Bloqueio em caso de muitas tentativas
void seguranca() {
  Serial.print("Bloqueado por ");
  Serial.print(tempoSafe);
  if(tempoSafe == 1){ Serial.println(" minuto"); }
  if(tempoSafe > 1){ Serial.println(" minutos"); }
  Serial.println();
  for(z = 0; z < tempoSafe*60000; z++){
    digitalWrite(ledVerm, HIGH);
    delay(500);
    digitalWrite(ledVerm, LOW);
    delay(500);
  }
  erros = 0;
}

 

O vídeo foi feito por um aluno meu do Colégio Villa Lobos (Amparo - SP). 

Exibições: 6097

Comentar

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)

Comentário de railson lisboa martins em 30 março 2014 às 2:09

amigo gostaria de saber se nesse código da escala de resistor tem como acrecentar mais de uma senha se da porfavor me de as instruções

Comentário de Eduardo castellani em 4 outubro 2013 às 11:59

LEGAL, mas seria legal, liga-lo a uma fechadura eletrônica com um teclado.

Comentário de Ismael Fossá em 21 setembro 2013 às 2:05

Leonardo parabéns, muito bom seu trabalho... peguei-o como exemplo e tentei incrementar a senha através de um controle remoto... onde em vez de clicar os botoes, ele compararia os botoes do controle remoto... fiz de tudo mas não consegui montar.

Comentário de Luis Paulo Rodrigues da S. Lima em 2 agosto 2013 às 10:13

Muito Show!

Mais uma daquelas idéias que você fica se perguntando porque nunca tinha pensado.

Obrigado por compartilhar.

Comentário de Yuri Lima Almeida em 26 julho 2013 às 0:22

Man, projeto Show, eu fiz aqui, mas tem só uma resalva...

 "if(tempoSafe == 1){ Serial.println(" minuto"); }
  if(tempoSafe > 1){ Serial.println(" minutos"); }
  Serial.println();
  for(z = 0; z < tempoSafe*60000; z++){
    digitalWrite(ledVerm, HIGH);
    delay(500);
    digitalWrite(ledVerm, LOW);
    delay(500);"

"  for(z = 0; z < tempoSafe*60000; z++){" Nesta parte o numero (60000) tá muito elevado, e o teclado bloquearia por 83,3 horas, então no meu eu troquei o 60000 por 18 que bloqueia por 1:30 mim, visto que o numero é multiplo de 5 ou seja 18*5=90 segundos.

Mas eu queria realmente agradecer pelo projeto que eu tava precisando mesmo de um desses e nem sabia por onde começar, parabéns e boa noite! :)

Comentário de Rodrigo José Araújo em 24 julho 2013 às 23:43

Cara perfeito gostei muito.. Excelente trabalho.

Comentário de MIRELLA LINS DIAS DOS SANTOS em 24 julho 2013 às 11:58

Muito bom, assisti o vídeo e assim que tiver a oportunidade vou testar. Você ta de parabéns.

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço