SUPER-SENHA – FECHADURA ELÉTRICA MULTISENHAS (CODE LOCK) COM PIC 16F628A

0

As fechaduras elétricas em portões já são uma necessidade na vida moderna, em virtude da crescente onda de violência, generalizada em todo o mundo. Gostaria de montar uma com múltiplas senhas? Veja mais…

Veja o esquema abaixo da nova fechadura elétrica com multisenhas:

Este projeto visa atender prédios pequenos, podendo ser cadastrada até 128 senhas. Para guardar estas senhas, foi usado uma EEprom externa 24c08. Para indicação de mensagens do sistema, foi empregado um LCD 16×2 , com iluminação de fundo. Para confirmar um digito apertado e sequencias de digitação, foi utilizado um disco piezoelétrico para emitir os tradicionais ‘bips’. Para a construção do teclado, poderá ser usado chaves dactilares . Como opção, poderá ser empregado um teclado de telefone convencional. A saída do sistema emprega um rele, que controlará em seus contatos, a fechadura situado no portão. No geral, o circuito é bem simples, e uma pequena placa de circuito impresso deverá acomodar o circuito. Quanto a fonte de alimentação, ela deverá prover 12 volts para o rele, e 5 volts para o circuito. Poderá ser feita de forma convencional, com transformador, retificadores e capacitores, regulando com um 7805, ou usar fontes chaveadas. Fica a critério do hobista esta escolha.
Como ela funciona?
Para obter acesso as dependências, deverá ser digitado uma senha de 8 digitos (mais segura). Se ela for correta (ou está cadastrada), deverá acionar a fechadura do portão e será visto a mensagem: ‘ACESSO LIBERADO’ e ‘–BEM-VINDO–‘. Sobre este acionamento, foi previsto uma temporização, de alguns segundos e depois volta a desligar. Também, no código ASM, poderá optar por ser um acionamento pulsado (tec-tec-tec) ou continuo, neste período de temporização.
Caso a senha esteja incorreta, aparecerá a mensagem : “SENHA INCORRETA’. Após 3 tentativas (pode ser alterado no ASM), o sistema fica bloqueado por 1 minutos), por segurança. Este tempo também pode ser alterado no ASM, lembrando de alterar a mensagem também: ‘–BLOQUEADO–‘ e ‘AGUARDE 1 MIN…’.
Como cadastrar as senhas para os usuários?
Deverá ser designado alguém como administrador de senhas. Ele ficará com a ‘senha de administrador’, que permite fornecer uma senha provisória para cada usuário ( note que, ao compilar o ASM, você deverá alterar esta senha para uma diferente, por ela já ser conhecida por todos). Digitando a senha de administrador, o sistema pedirá o número do apartamento e 5 dígitos adicionais que comporam uma senha provisória. Ex. apto 45 – Digite a senha do ADM (neste ASM é ‘#741593#’), depois digite ‘045xxxxx’ , onde ‘x’ são números quaisquer entre 0 e 9 . Esta senha deverá ser fornecida e ser explicado que o usuário deverá trocar imediatamente por outra.
Como o usuário poderá trocar sua senha por outra?
Por usar uma senha pública digitando ‘#yyy759# ,onde y = número do apartamento. Ex. apto 4 – Digite ‘#004759#’. Será pedido a senha antiga para ser possível fazer a troca. Após digitar a senha do apto de forma correta, pedirá para digitar uma nova senha e depois, pedirá a confirmação. Todos os usuários devem conhecer esta senha pública, para que possam alterar suas senhas de tempos em tempos.
Ao digitar, será ouvido um ‘bip’ . Entre operações , será ouvido um ‘bip’ mais longo. Uma outra caracteristica é que, se começar a digitar e por algum motivo parar, depois de 20 segundos o sistema reseta. A iluminação do LCD aciona assim que uma tecla por apertada e desliga após o tempo sem digitar.
Obs: Esta montagem é didática apenas, sendo montada em placa de protoboard, sujeita a bugs ainda não observados. Esta sendo fornecido o arquivo ASM, que poderá ser alterado segundo as necessidades do hobista.

Segue o arquivo ASM:

SUPER_SENHA_ASM

Segue o arquivo HEX:

SUPER_SENHA_HEX

Curiosidades:
Como lidar com problemas da próstata
Mapeamento do céu: no passado e no presente
Alimentos nutritivos ao seu alcance
Tomar chá à moda chinesa
Como é viver acima das nuvens
Gota — causas e fatores de risco
O projeto maravilhoso da molécula de hemoglobina
O que fazer para dormir melhor
Pressão alta: prevenção e controle
Quem criou as leis que governam o Universo?
Como o árabe tornou-se a lingua dos instruidos
Mestres medievais da astronomia
Faça bom uso de sua curiosidade

Outros assuntos:
Como disciplinar seu filho adolescente
Por que eu me corto?
Desempenhem bem o papel de pais
Como fazer seu segundo casamento dar certo
O que acontece quando morremos?
Como criar filhos responsáveis
Como administrar o seu dinheiro
Ensine valores morais a seus filhos
Ensine seus filhos bons principios com atividades de colorir
Como posso ter ânimo para exercitar
Como posso controlar meu peso?
Entrevista com um bioquímico
Adolescentes- O que fazer se estou sofrendo bullying?
Como evitar ferir com palavras?
Como tratar seu cônjuge com respeito?

Até o próximo artigo!!!

Clique aqui para comentarios/sugestões fora deste tópico

0

32 comments

    1. 0

      Olá Babu!
      Esta rotina foi escrita em ‘asm’ e não está provida de algum ‘define’ facilitador para alterar o número de caracteres da senha. Portanto, tal modificação exigirá que você altere o programa ‘na unha’, em vários lugares diferentes espalhados em rotinas e subrotinas (como os relacionados com captura da digitação do usuário, gravação na eeprom, comparação, etc). Mas, uma senha de 8 dígitos é com certeza mais segura que uma de 4, apesar de dar mais trabalho para digitar ou memorizar.
      Cláudio

      1. 0

        Acabei mechendo no código grava senha entra com senha normal, porem ao desligar a bateria ele volta com a senha padrão!

        1. 0

          Olá Babu!
          Creio que está alterando a senha mas não esteja gravando definitivamente na eeprom. Verifique as rotinas de gravação, que deverá ser alterado para gravar 4 dígitos ao invés de 8.
          Claudio

    1. 0

      Olá Maiconaaj!
      Eu não disponho deste código em “C”, apenas em “ASM”. Altera-lo envolve refazer todo o projeto.
      Cláudio

  1. 0

    Boa noite, montei o seu projeto deu tudo certo, porem queria saber se tem como descadastrar a senha dos usuarios

    1. 0

      Olá Maujo!
      Você se refere quando sai um morador do apartamento e você deseja cancelar a senha dele, certo? Neste caso, o administrador cria uma senha provisória qualquer para aquele apartamento, cancelando o acesso da senha antiga. Quando for ocupado o apartamento, deverá criar uma nova senha provisória e passar para o morador , que alterará segundo o seu gosto, para uma nova senha. Saindo do apartamento, o administrador repete o cancelamento, por criar uma senha provisória qualquer para aquele apartamento.
      Cláudio

  2. 0

    Olá Cláudio.
    O vendedor estava mesmo a brincar comigo, tem confiança para isso.
    Tudo isto faz parte da aprendizagem, ainda tenho muito que aprender,e no percurso,”sinuoso”, às vezes, vou assimilando.Contando,sempre com a ajuda do mestre.
    Grato!
    Costa.

  3. 0

    Olá Cláudio.
    Eu penso que o vendedor está a brincar comigo,ele sabe que eu sou novato nestas andanças.
    Bem, já estou a abusar do seu tempo e bondade.mais uma vez,Grato.

  4. 0

    Olá Cláudio. Bom dia.
    Eu fui comprar a memória 24c08 e o vendedor perguntou-me se eu queria o numero de rastreamento.
    Podia-me informar se é necessário para este projeto.
    Não percebo nada de memórias.
    Se me puder ajudar-me.
    Grato.

    1. 0

      Olá Costa! As memórias vem sem nenhuma gravação ou seja , são ‘virgens’. Este número de rastreamento deve se referir as origens do lote de peças ou então, um número para acompanhar a entrega do componente quando feito via internet/correios, não tendo nada que ver com a montagem em sí. Pergunte ao vendedor o objetivo deste número de rastreamento.
      Cláudio

  5. 0

    Obrigado pela resposta – não, não é o que eu estou procurando.
    Como eu disse eu estou procurando —> 16F628+TECLADO+LCD com 1 senha para abrir apenas 1 porta e sem EEPROM.
    você poderia me dizer o que partes do programa tem que eliminar ASM?
    Saudações da Itália

    1. 0

      Olá 14021480!
      O programa deste ASM é um pouco mais complexo para fazer mudança para algo mais simples, por simplesmente eliminar partes. Vou ver se consigo algo mais simples ou adaptar de outro modelo. Se for bem sucedido, postarei…
      Claudio

      1. 0

        ok, obrigado – é exatamente o que eu estava procurando há algum tempo.
        Eu quero tentar a bordo proto – muito obrigado ajuda – grazie from italy

  6. 0

    😛 Saudações da Itália, eu sou um novato que gosta de ASM.
    Obrigado pelo que você faz. Estou muito interessado neste projeto, 16F628 + teclado + LCD seria difícil modificá-lo para ter um circuito mais simples, sem EEPROM externa e apenas uma senha para ser instalado em um único bloqueio?
    talvez em breve em seu site?
    OBRIGADO 😉

  7. 0

    Amigo ainda não consegui postar fora dos topicos como vc deseja , só uma ajuda sua estou tentando fazer um projeto em asm mesmo mas achei o começo muito complicado , tipo preciso ter um display de lcd e 3 botões de ajuste porem preciso também de uma 7a 8 saidas que seram ligados em relê , os tres botões ( MENU , + e – ) , o menua seleciona individual a saida , o + e – ajusta o tempo de cada saida de 0 a 10 minutos , dai pensei usar tempos em pic é complicado mas se eu fizer um contador que contasse e sabendo que 1 minuto tem 60s se eu contar 600 pulsos daria os 10 minutos , assim seu eu precisar de menos tempo ajustava antes , o principal é que depois de ajustado teria um quarto botão o start , assim tudo programado ele iria fazer a sequencia com os tempos programados . amigo nem sei como começo isso , vou ter que usar o watdog ? ou o timer 0 seria isso mesmo ?

    1. 0

      Olá Liliano!
      O WatchDog Timer (cão de guarda) tem o objetivo primário de evitar travamentos em um programa instável ou em situações em que existam muita interferência presente. Se o programa travar em um loop, após um tempo pré_determinado (ajustando o prescaller para o wdt), o sistema será resetado ou irá para o começo (reinício). Também, poderá ser usado para ‘acordar’ o microcontrolador quando estiver sendo executado a instrução ‘sleep’. Não é prático usa-lo para obter tempos. Já o timer 0 poderá ser usado para gerar uma interrupção de tempos em tempos, e nesta interrupção incrementar contadores que contarão o tempo. Se o microcontrolador possuir timer 1, também poderá ser usado da mesma forma, com ou sem interrupções.
      Pode ser usado também a filosofia de relógio de tempo real, onde comparamos o tempo carregado em um registrador e somamos com o tempo atual para gerar o valor que será usado para comparar e acionar a saída determinada. ex. Hora atual 12:40:13 e um registrador, que chamaremos de ‘ registrador 1’ com 00:10 ; soma os dois -> 12:50:13 , quando chegar este valor irá acionar a saída 1. Você poderá colocar no papel a sua idéia, passo a passo, do que ele terá de fazer e depois bolar a rotina para cada parte do programa. A parte mais dificil é conseguir o tempo exato de 1 segundo. Isto exige a escolha de cristal que favoreça uma divisão inteira. Alguns PICs podem usar o timer 1 com cristal adicional, no caso , um de 32768 khz (de relógio). Isto facilita muito obter valores de tempo para 1 segundo. Não sei se o que estou tentando explicar está dando para entender. Em resumo, escolha o método a usar para obter o tempo de 1 segundo em uma rotina de interrupção, depois na rotina principal, leia botões para programar e alterar os registradores de comparação e também, compare estes valores e acione as saídas, conforme a comparação , tudo em loop.
      Cláudio

      1. 0

        Muito boa explicação , agora sei de onde começar , mas ainda sou muito cru em asm , so quero tentar pois assim agente podera conversar e tocar ideias , o principio é achar o tempo exatode 1s , pensei que o delay fornecia o tempo exato mas sei que quando se programa um delay o restante do programa espera todo o tempo decorrido por isso não é ideal usar ele como tempo porem aquilo que te falei conheço pouco dai fiquei pensando como vai ser mesmo uma sequencia não teria problema em usar o delay pois imagino pressiona-se o botão start inicia uma rotina de saidas e tempos o problema é gerar um menu para ajustar esta rotina . vou ver o que faço dai te envio para uma eventual ajuda .
        agora por exemplo pra determinar um port como saida em C uso o comando trisio. portX=1;
        onde porx pode ser ortb ou porta ou c ou d ai por diante , é 1 quer dizer entrada no assembler euuso o comando bsf e bcf para isto ou para definir o que vai acontecer com a saida ?

        1. 0

          Olá Liliano!
          Isso mesmo.
          Você deve acertar o banco para o registrador ‘trisio’ (bank1) e setar o bit para entrada (bsf) ou resetar para saida(bcf).
          Claudio

  8. 0

    Não sei se ocorreu algum erro na montagem mas amigo por acaso não teria que ter ja uma senha que vc criou para eu poder mudar , pois qualquer senha que eu digitar ele da incorreta e como vou mudar se não cadastrei nada rssrsrsrsr, outra duvida se eu usar a memoria 24c04 funcionaria tb ? sei que a capacidade é menor ok

    1. 0

      Olá Liliano! Use somente o 24c08 pois dará problema se usar o 24c08. Use a senha adm #741593# para colocar novas senhas (leia o cabeçalho do ASM).
      Claudio

  9. 0

    BOM DIA CLAUDIO
    OBRIGADO PELA RESPOSTA.EU MORO EM SANTO ANDRE NA REGIÃO DO ABC PAULISTA E EU ACHO QUE NÃO TEREI PROBLEMAS PARA ADQUIRIR O PIC,ME ENDICARÃO O PIC 16F873A POI VOU UTILIZAR UM LCD PARA INDICAR TENÇOES POSITIVAS E NEGATIVAS,POREN NAO ESTOU ENCONTRANDO PROJETOS DE EQUIPAMENTOS QUE INDICÃO TENSÃO NEGATIVAS E EU NÃO TENHO MUITO CANHECIMENTO NESSA ÁREA.
    VOCE TERIA ALGUM PROJETO DESSE TIPO PARA ME DISPONIBILIZAR ? OU ALGUM SITE QUE ENCONTRAREI PROJETOS DESSE TIPO?
    UM ABRAÇO E AGRADEÇO DESDE JA

    1. 0

      Olá Zilion! Não tenho ainda projeto que meça tensões negativas. Mas existem vários sites que podem dar uma dica. Por ex. temos o artigo da ‘Revista Saber‘ que mostra um medidor de tensões multiplo para fonte ATX de PC. Quem sabe , você tira umas idéias.
      Claudio

    1. 0

      Olá Deivid! O comando ‘ return ‘ retorna de uma subrotina e o comando ‘retlw xxxxx ‘ retorna da subrotina com o valor escolhido no registrador ‘w’. Para retornar de uma subrotina , qualquer um deles pode ser usado, mas se desejar retornar um valor em ‘w’, deverá usar somente ‘ retlw’.
      Claudio

Comments are closed.