tranca

4
Projeto CUSCOPiC – Daniel Corteletti – Novembro de 2008 Exemplo de uma tranca eletrônica com microcontrolador PIC, monitorada por SENHA numérica cadastrável. 1) ligação sugerida:

Transcript of tranca

Page 1: tranca

Projeto CUSCOPiC – Daniel Corteletti – Novembro de 2008

Exemplo de uma tranca eletrônica com microcontrolador PIC, monitorada por SENHA numérica cadastrável.

1) ligação sugerida:

Page 2: tranca

Projeto CUSCOPiC – Daniel Corteletti – Novembro de 2008

2) Programa: #include <16f877.h> #device ADC=10 #use delay (clock=20000000) #define use_portb_lcd true #fuses HS, NOWDT, NOPROTECT, NOBROWNOUT, NOLVP, PUT // configura fuses #include <cuscostdio.h> // Objetivo: Controlar uma tranca eletrônica (solen oide) mediante senha numérica // AUTOR : Daniel Corteletti // Projeto CUSCOPiC // novembro de 2008 #define LED pin_c0 // pino do led do p ainel #define ABRE_PORTA pin_e0 // pino da solenoid e da tranca #define LUZ pin_e1 // pino da lampada externa (iluminação painel) #define END_SENHA 100 // endereço da senh a na eeprom. 100 a 103 int32 le_senha() // funcao que retorna senha lida. Se não há senha gravada, retorna senha = 0 { int32 aux; aux = int32_read_eeprom(END_SENHA); if (aux == 0xffffffff) return(0); return(aux); } void modo_grava_senha() // rotina para gravar senh a { signed int32 atual, nova, nova2; printf(lcd_putc,"\fTrocar senha!\nSOLTAR TECLAS!" ); delay_ms(200); while(!tecla_nada); delay_ms(200); printf(lcd_putc,"\fSenha atual\n=>"); atual = cusco_readkbd(1); if (atual == le_senha()) { printf(lcd_putc,"\fSenha nova\n=>"); nova = cusco_readkbd(1); if (nova >= 0) { printf(lcd_putc,"\fRedigite\n=>"); nova2 = cusco_readkbd(1); if (nova != nova2) { printf(lcd_putc,"\fERRO.\nSenhas diferem !"); delay_ms(1000); return; } output_high(LED); printf(lcd_putc,"\fGravando SENHA"); int32_write_eeprom(END_SENHA, nova); } } else { printf(lcd_putc,"\fSenha invalida!"); delay_ms(1000); break; } } void main() { signed int32 senha, time_luz=0; int tentativas, cont, pisca=0; lcd_init(); // inicializa display while(1) { tentativas=0; do { // laço de solici tação da senha if (tentativas >= 3) // se tentativas excederem... { for (cont = 0; cont < 250; cont ++) // aprox. 4 minutos de alarme

Page 3: tranca

Projeto CUSCOPiC – Daniel Corteletti – Novembro de 2008

{ lcd_putc("\fTENTATIVA DE\nVIOLACAO"); output_high(LED); sound(500,200); delay_ms(500); output_low(LED); lcd_putc("\fACESSO BLOQUEADO"); sound(800,200); delay_ms(500); if (tecla_ast && cont > 5) break; // a sterisco interrompe alarme } tentativas = 0; } delay_ms(50); while(TECLA_NADA) { if (time_luz > 0) // mantem luz ativa po r algum tempo { time_luz --; delay_ms(10); } else { output_low(LUZ); // desliga luz exter na } pisca ++; if (pisca == 50) lcd_putc("\fCUSCOTran ca 0.1"); if (pisca == 170) lcd_putc("\f\nCUSCOTr anca 0.1"); if (pisca % 64 == 0) output_high(LED); if (pisca % 64 == 4) output_low(LED); delay_ms(50); } if (tecla_sus || tecla_ast) { for (cont=200; cont > 0; cont --) { if (!tecla_sus && !tecla_ast) break; delay_ms(50); } if (cont == 0) { modo_grava_senha(); continue; } } output_high(LUZ); output_high(LED); time_luz = 1200; printf(lcd_putc,"\fInforme senha:\n->"); cusco_readkbd_timeout = 1; // liga recurso d e timeout para rotina de edição de teclado lcd_cursor_blink(); senha=cusco_readkbd(1); lcd_cursor_off(); tentativas ++; if (senha != le_senha()) { printf(lcd_putc,"\fERRO !!!"); output_high(BUZZER); output_low(LED); delay_ms(500); output_low(BUZZER); delay_ms(1000); output_high(LED); } } while(senha != le_senha()); output_high(ABRE_PORTA); lcd_putc("\fAcesso permitido\n****************" ); delay_ms(3000); output_low(ABRE_PORTA); delay_ms(1000); } }

Page 4: tranca

Projeto CUSCOPiC – Daniel Corteletti – Novembro de 2008

3) FORMAS DE USO:

a) Como padrão, a senha inicial é ZERO. b) Ao se pressionar qualquer tecla do teclado matricia l, o relé da lâmpada irá ativar. c) Ao se digitar a senha correta, o relé da porta irá ativar por alguns segundos. d) São permitidas até 3 tentativas. Caso a senha (que pode ter até 9 dígitos) não for digitada

corretamente, o sistema entra em modo alarme (fica tocando o buzzer e emitindo o alarme) e) Pressionando-se o ASTERISCO em modo alarme por algu ns segundos, o alarme é interrompido. f) O alarme é interrompido automaticamente após aprox. 4 minutos e meio. g) Para se cadastrar uma nova senha, basta manter pres sionado os botões ASTERISCO e SUSTENIDO por

alguns segundos. Será solicitada a senha antiga, e uma senha nova.

4) Sugestões de melhoria

a) Via comunicação RS232, enviar dados à um PC ou equi pamento que poderá registrar a entrada/saída e horário em que isso ocorreu.

b) Usar uma EEMRPOM serial para armazenar dados de ace sso. c) Permitir cadastro de mais de uma senha numérica. d) Associar a senha à leitura de um cartão digital (RF ID, Código de barras, cartão perfurado...) e) Adaptar o equipamento para uso como um registrador de ponto (relógio ponto), mediante adição de

um RTC ou compatível.

5) Mais informações : Entrem em contato via [email protected]