Fechadura com código sequencial para portão automático

O bloqueio baseado em senha para qualquer sistema de controle de acesso é muito comum hoje em dia. Se houver um bloqueio com senha para qualquer portão/porta, o portão ou porta só será aberto quando a senha correta for inserida. Principalmente em tal sistema o teclado numérico é fornecido para inserir a senha. O bloqueio de código sequencial difere aqui do sistema de bloqueio de senha normal. Não possui teclado numérico completo com 10 a 12 chaves. Em vez disso, possui apenas 2 a 3 interruptores. O usuário deve inserir a sequência correta de dígitos numéricos, assim como os bloqueios sequenciais disponíveis nas pastas. Quando os dígitos numéricos são organizados na sequência correta, ele é desbloqueado.

Neste projeto, o usuário deve primeiro definir a sequência correta de dígitos rolando-os de 0 a 9 pressionando apenas 1 botão, semelhante à rolagem e configuração de dígito na fechadura da pasta. O usuário deve definir todos os dígitos um por um para completar o código sequencial. O projeto é construído usando microcontrolador AT89C52. Ele usa LCD para exibir várias mensagens. O motor de passo é usado para ilustrar a abertura e o fechamento do portão.

Descrição do circuito

Diagrama de circuito do sistema de bloqueio de código sequencial baseado em microcontrolador 8051

Fig. 1: Diagrama de circuito do sistema de bloqueio de código sequencial baseado em microcontrolador 8051

·A porta P1 está configurada como entrada e 3 botões estão conectados aos pinos P1.0 a P1.2, portanto, quando o botão é pressionado, o pino obtém 0 como entrada

· A porta P0 é uma porta de saída e aciona os pinos de dados do LCD D0 – D7. Outros dois pinos da porta P2 P2.7 e P2.6 estão conectados aos pinos de controle do LCD Rs e E. O terceiro pino de controle RW está permanentemente conectado ao terra para fazer com que o LCD sempre habilite gravação

· Um potenciômetro de 1 K é conectado ao pino de controle de brilho Vee do LCD para variar seu brilho

· A porta P3, pinos P3.4 – P3.7, aciona o motor de passo através do chip driver do motor ULN2003A. O motor abre ou fecha o portão

· Um cristal de 12 MHz é conectado entre os pinos XTAL junto com dois capacitores de polarização de 33 PF. Ele fornece sinal de relógio para o microcontrolador

Operação do circuito:

· Quando o sistema é ligado, o portão é fechado e a mensagem é exibida no LCD como “Para abrir o portão, digite o código”

· Para inserir o código o usuário deve pressionar a tecla numérica. Ele tem que continuar pressionando a tecla numérica novamente para rolar todos os dígitos de 1 a 0. Assim como pressionar a tecla uma vez exibirá o dígito 1, pressionar a tecla duas vezes exibirá o dígito 2, da mesma forma 3, 4, 5,….. até 0 e novamente inicia a partir de 1

· Assim que chegar ao dígito desejado, para definir o dígito ele deve pressionar o segundo botão para definir o dígito como 1st dígito do código. Depois de definir o primeiro dígito, o cursor muda para a posição do segundo dígito

· Novamente, o usuário deve rolar os dígitos começando em 1 e chegar ao dígito desejado usando 1st botão. Defina o segundo dígito do código pressionando 2e botão

· Da mesma forma, o usuário deve definir um código de 4 dígitos. Depois que o código de 4 dígitos for definido, o usuário pressionará o botão Enter

· Quando o botão Enter é pressionado, o microcontrolador irá comparar o código inserido com o código programado

· Se corresponderem, o motor gira no sentido horário para abrir o portão e a mensagem é exibida no LCD como “portão aberto”. Após 5 segundos novamente o motor gira no sentido anti-horário para fechar o portão e o LCD exibe “gate close” e então novamente a mensagem padrão “To open gate Enter code” é exibida

· Mas se o código não corresponder, o motor para e a mensagem de aviso é exibida como “código errado”. Além disso, se o código errado for inserido 3 vezes, o sistema entra em loop infinito (isso significa que ele trava). Ele pode sair do loop somente quando o botão reset é pressionado para reiniciar o sistema novamente.

Código fonte do projeto

###


#include 

#incluir

#define ON 0

#define DESLIGADO 1

sbit rs = P2 ^ 7;

sbit en = P2 ^ 6;

sbit unlock_led = P2^0;

sbit lock_led = P2 ^ 1;

unsigned int number_count=0,code_num(4),code_digit=0,set_count=0,gate_flag=0;

unsigned int code_lock_num = 1122, tentativa = 0, reset_flag = 0;

void dly

{

int y,z;

para(z=0;z<100;z++)

para(y=0;y<1000;y++);

}

vazio motor_delay

{

intp;

para(p=0;p<2000;p++);

}

vazio wait_for_5_sec

{

int r,s;

para(r=0;r<100;r++)

for(s=0;s<10000;s++);

}

vazio lcd_delay

{

interno;

para(y=0;y<2000;y++);

}

void writecmd (caractere não assinado a)

{

lcd_delay ;

rs = 0;

P0 = uma;

en = 1;

en = 0;

}

void writedat (caractere não assinado b)

{

lcd_delay ;

rs = 1;

P0=b;

en = 1;

en = 0;

}

void writestr(caractere não assinado *s)

{

caractere não assinado l,i;

eu = strlen(s);

para (eu=0;eu

{

escreverdata(*s);

s++;

}

}

vazio lcd_init

{

escrevacmd(0x3C);

escrevacmd(0x0E);

escrevacmd(0x01);

writestr("Para abrir o portão");

escrevacmd(0xC0);

writestr("Digite o código:");

}

inicialização nula

{

P1=0xFF;

P0=0x00;

P2 = 0x00;

P3 = 0x00;

}

vazio open_gate

{

não assinado int i;

escrevacmd(0x01);

writestr("Portão aberto");

para(i=0;i<128;i++)

{

P3 = 0x8F;

atraso_motor ;

P3 = 0x4F;

atraso_motor ;

P3 = 0x2F;

atraso_motor ;

P3 = 0x1F;

atraso_motor ;

}

wait_for_5_sec ;

escrevacmd(0x01);

writestr("Portão fechado");

para(i=0;i<128;i++)

{

P3 = 0x1F;

atraso_motor ;

P3 = 0x2F;

atraso_motor ;

P3 = 0x4F;

atraso_motor ;

P3 = 0x8F;

atraso_motor ;

}

}

número vazio

{

if(set_count==0) writecmd(0xCB);

senão if (set_count==1) writecmd(0xCC);

senão if(set_count==2) writecmd(0xCD);

senão if(set_count==3) writecmd(0xCE);

número_contagem++;

if(número_contagem==1) {writedat(0x31);}

senão if(número_contagem==2) {writedat(0x32);}

senão if(número_contagem==3) {writedat(0x33);}

senão if(número_contagem==4) {writedat(0x34);}

senão if(número_contagem==5) {writedat(0x35);}

senão if(número_contagem==6) {writedat(0x36);}

senão if(número_contagem==7) {writedat(0x37);}

senão if(número_contagem==8) {writedat(0x38);}

senão if(número_contagem==9) {writedat(0x39);}

senão if(número_contagem==10){writedat(0x30);número_contagem=0;}

}

vazio set_number

{

set_contagem++;

code_num(código_dígito)=número_contagem;

número_contagem=0;

código_dígito++;

}

void enter_number

{

int não assinado tmp;

tmp= núm_código(0)*1000+núm_código(1)*100+núm_código(2)*10+núm_código(3);

if(tmp == código_lock_num)

{

desbloquear_led = LIGADO;

lock_led = DESLIGADO;

portão aberto ;

portão_flag=1;

set_count=0;

código_dígito=0;

tentativa=0;

}

outro

{

escrevacmd(0x01);

writestr("código errado");

tentativa++;

se(tentativa==3)

{

escrevacmd(0x01);

writestr("tentativas encerradas");

escrevacmd(0xC0);

writestr("Sistema travado");

reset_flag=1;

}

outro

{

escrevacmd(0xC0);

writestr("tente novamente");

portão_flag=1;

set_count=0;

código_dígito=0;

}

}

}

vazio principal

{

inicializar ;

novamente: lcd_init ;

portão_flag=0;

desbloquear_led = DESLIGADO;

lock_led = LIGADO;

voltar: P1=0xFF;

enquanto(P1==0xFF);

interruptor (P1)

{

caso 0xFE:

número ;

dly ;

quebrar;

caso 0xFD:

set_número ;

dly ;

quebrar;

caso 0xFB:

insira numeros ;

dly ;

quebrar;

}

if(reset_flag==1) vai para o infinito;

senão if(gate_flag==0) volta para trás;

senão vá para novamente;

infinito:enquanto(1);

}

###

Diagramas de circuito

Diagrama de circuito-8051-Sistema de bloqueio de código sequencial baseado em microcontrolador

Vídeo do projeto

Conteúdo Relacionado

Voltar para o blog

Deixe um comentário

Os comentários precisam ser aprovados antes da publicação.