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).
Comentar
Código elegante limpo. Fiz aqui... e ficou show! Muito obrigada !
Gabriel, são os intervalos em que a variável "valores" está para cada um dos botoes apertados.
Alguem poderia me explicar o que sao esse valores? :
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; }
só testei o código virtualmente com algumas adaptações, mas acho que funcionará na prática
#define leitura A0
#define ledVerde 8
#define ledAzul 10
#define ledVerm 12
int nsenhas, ndigitos, temposeg, nerros, erros, a, b, c, d, e, f=1, g;
int *acertos, *senha2;
int **senha;
void setup() {
Serial.begin(9600);
pinMode(8, OUTPUT);
pinMode(10, OUTPUT);
pinMode(12, OUTPUT);
//Ajustes do programa
Serial.print("Quantas senhas deseja programar ? ");
nsenhas = botoes();
Serial.println();
Serial.print("Quantos digitos cada senha tera ? ");
ndigitos = botoes();
Serial.println();
Serial.print("De quanto sera o tempo de bloqueio ? ");
temposeg = botoes();
Serial.println();
Serial.print("Numero de tentativas erradas ? ");
nerros = botoes();
senha = (int**)(malloc(nsenhas*sizeof(int*)));
senha2 = (int *)malloc(ndigitos*sizeof(int));
acertos = (int *)calloc(nsenhas,sizeof(int));
//Gravacao das senhas do programa
for(a = 0; a < nsenhas; a++){
senha[a] = (int*)(malloc(ndigitos*sizeof(int)));
Serial.print("Digite a senha de numero ");
Serial.print(f);
Serial.print(":");
f=f+1;
for(b = 0; b < ndigitos; b++){
c = botoes();
if(c =! 10){
senha[a][b] = c;
if(b < ndigitos - 1){ Serial.print(" - "); }
}
else{ b = b-1; }
}
Serial.println();
}
}
void loop() {
digitalWrite(11, HIGH);
//Coleta da senha a ser comparada
for(a = 0; a < ndigitos; a++){
b = botoes();
if(b =! 10){
senha2[a] = b;
}
else{ a = a-1; }
}
digitalWrite(ledAzul, LOW);
//Comparacao das senhas e execucao da rotina de acertou ou errou
for(a = 0; a < nsenhas; a++){
for(b = 0; b < ndigitos; b++){
if(senha2[b] == senha[a][b]){
acertos[a] = acertos[a] + 1;
}
else{ b = ndigitos; }
}
if(acertos[a] == ndigitos){ g = 1; }
}
if(g == 1){ acertou(); }
else{ errou(); }
if(erros == nerros){ seguranca(); }
}
int botoes(){ //Rotina de leitura dos digitos
int valor, botao;
valor = analogRead(A0);
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;
}
void seguranca(){ //Rotina de seguranca
Serial.print("Bloqueado por ");
Serial.print(temposeg*60);
if(temposeg == 1){ Serial.println(" minuto"); }
if(temposeg > 1){ Serial.println(" minutos"); }
Serial.println();
for(a = 0; a < temposeg*60; a++){
digitalWrite(ledVerm, HIGH);
delay(500);
digitalWrite(ledVerm, LOW);
delay(500);
}
erros = 0;
}
void acertou(){ //Rotina de acerto
Serial.println();
Serial.println("Acertou");
Serial.println();
erros = 0;
for(a = 0; a < 5; a++){
digitalWrite(ledVerde, HIGH);
delay(100);
digitalWrite(ledVerde, LOW);
delay(100);
}
}
void errou(){ //Rotina de erro
Serial.println();
Serial.println("Errou");
Serial.println();
erros = erros + 1;
for(a = 0; a < 5; a++){
digitalWrite(ledVerm, HIGH);
delay(100);
digitalWrite(ledVerm, LOW);
delay(100);
}
}
meu amigo por favor me de a opção de cologar mais senhas
#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;
}
quando vc vai faser isso amigo
amigo vc poderia fase fase para mi estou com dificuldades sobre adicionar mais senhas obrigad...
amigo tem como vc faser esse pedaço de programa, eu temho muita dificuldade, estou presisando muito colocar outra senha, obrigado
Railson:
Sim, é possível. No bloco abaixo do comentário "//Comparacao com a senha escolhida" você teria que incluir um if para a segunda senha e um contador "resultado" para ela.
Eduardo:
não tenho aceso a esse tipo de fechadura, infelizmente.
Ismael:
também não vejo dificuldade em adaptar o código para um controle remoto. Veja se a interação com o controle remoto está correta. Sei problema pode ser com ele e não com essa parte do código.
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)