Você está na página 1de 4

Exemplo de uma tranca eletrnica com microcontrolador PIC, monitorada por SENHA numrica cadastrvel.

1) ligao sugerida:

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 eletrnica (solenoide) mediante senha numrica AUTOR : Daniel Corteletti Projeto CUSCOPiC novembro de 2008 LED ABRE_PORTA LUZ END_SENHA pin_c0 pin_e0 pin_e1 100 // // // // pino do led do painel pino da solenoide da tranca pino da lampada externa (iluminao painel) endereo da senha na eeprom. 100 a 103

#define #define #define #define

int32 le_senha() // funcao que retorna senha lida. Se no 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 senha { 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 { // lao de solicitao da senha if (tentativas >= 3) // se tentativas excederem... { for (cont = 0; cont < 250; cont ++) // aprox. 4 minutos de alarme

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; // asterisco interrompe alarme } tentativas = 0; } delay_ms(50); while(TECLA_NADA) { if (time_luz > 0) // mantem luz ativa por algum tempo { time_luz --; delay_ms(10); } else { output_low(LUZ); // desliga luz externa } pisca ++; if (pisca == 50) lcd_putc("\fCUSCOTranca 0.1"); if (pisca == 170) lcd_putc("\f\nCUSCOTranca 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 de timeout para rotina de edio 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); } }

Projeto CUSCOPiC Daniel Corteletti Novembro de 2008

3)

FORMAS DE USO:

a) b) c) d) e) f) g)

Como padro, a senha inicial ZERO. Ao se pressionar qualquer tecla do teclado matricial, o rel da lmpada ir ativar. Ao se digitar a senha correta, o rel da porta ir ativar por alguns segundos. So permitidas at 3 tentativas. Caso a senha (que pode ter at 9 dgitos) no for digitada corretamente, o sistema entra em modo alarme (fica tocando o buzzer e emitindo o alarme) Pressionando-se o ASTERISCO em modo alarme por alguns segundos, o alarme interrompido. O alarme interrompido automaticamente aps aprox. 4 minutos e meio. Para se cadastrar uma nova senha, basta manter pressionado os botes ASTERISCO e SUSTENIDO por alguns segundos. Ser solicitada a senha antiga, e uma senha nova.

4) a) b) c) d) e)

Sugestes de melhoria

Via comunicao RS232, enviar dados um PC ou equipamento que poder registrar a entrada/sada e horrio em que isso ocorreu. Usar uma EEMRPOM serial para armazenar dados de acesso. Permitir cadastro de mais de uma senha numrica. Associar a senha leitura de um carto digital (RFID, Cdigo de barras, carto perfurado...) Adaptar o equipamento para uso como um registrador de ponto (relgio ponto), mediante adio de um RTC ou compatvel. 5) Mais informaes :

Entrem em contato via cuscopic@yahoo.com.br

Projeto CUSCOPiC Daniel Corteletti Novembro de 2008

Você também pode gostar