Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Fechadura da porta baseada em senha

Componentes e suprimentos

Arduino UNO
× 1
teclado de membrana
× 1
Drivers de motor Texas Instruments Dual H-Bridge L293D
× 1
atuador linear
× 1

Sobre este projeto


Existem inúmeros sites que postaram este projeto e ele está presente em vários canais do youtube, e talvez até mesmo este site tenha alguns deles. Então, sendo honesto, não é nada original. Mas posso ser capaz de explicar e exibir de uma maneira mais simples e informativa.

O principal componente deste projeto é o teclado de matriz. Usei um teclado de membrana 4x4 que se parece com este:

As teclas do teclado são basicamente botões. Esses interruptores de botão são "fechados" quando pressionados e, uma vez que a força é liberada, eles voltam ao seu estado natural, ou seja, "abertos".

É assim que o teclado é conectado internamente como linhas e colunas. Quando, suponha que 1 é pressionado, a coluna 1 e a linha 1 são conectadas. Quando 9 é pressionado, r3 e c3 são conectados juntos.

A varredura é feita com 4 chaves configuradas como saídas e 4 chaves como entradas. Transformei todas as colunas em entradas usando resistores pullup de entrada e todas as linhas em saídas. Usando a programação, todas as linhas são reduzidas uma a uma, várias vezes por segundo. Portanto, quando uma tecla é pressionada, a coluna correspondente torna-se BAIXA. O estado dos pinos de entrada aos quais todas as colunas estão conectadas é lido várias vezes. Sempre que um estado LOW é lido, significa que uma tecla nessa coluna foi pressionada. Se uma certa linha é baixa e ao mesmo tempo uma certa coluna é baixa, então a tecla pressionada é determinada.

Por ex. se 1 for pressionado, a coluna 1 será baixa. E uma vez que cada linha fica BAIXA muito rapidamente, uma por uma, mesmo se você pressionar a tecla por um período muito curto, a linha 1 será encontrada BAIXA em algum momento e será determinado que 1 é pressionado. Se linha1 ==baixo &&coluna1 ==baixo, significa que 1 está pressionado.

Isso é mostrado no código 1 . Eu mesmo escrevi este código porque queria carregá-lo no quadro stm32 e a biblioteca KEYPAD não era compatível. Com este código, você entenderá o que expliquei acima. Ou você pode simplesmente usar a biblioteca do teclado e executar o exemplo de 'teclado personalizado'. Ambos servirão ao mesmo propósito. Mas esse código não explica o funcionamento.

Usando o monitor serial, cada tecla pressionada é exibida na tela. Isso é mostrado no vídeo 1 .

Depois que a determinação da chave funcionar bem, é hora de trabalhar na senha. É tão simples. O que eu fiz foi - fiz uma string "1234". Esta é a senha que eu defini. Agora, fiz outra matriz. Qualquer que seja o valor da chave, ele é armazenado neste array. Quando a contagem chega a 4, ambas as strings são comparadas. Se eles corresponderem - a senha está correta, caso contrário, não. Isso é mostrado no código 2 . Liguei um LED no pino 11. Então, que quando a senha estiver correta, ele brilha. É mostrado no vídeo 2 .

Agora, o componente que servirá de trava:atuador linear 12 V. Se parece com isso.

Ele é operado usando L293d IC, que também é comumente conhecido como o IC do 'driver do motor'. Este IC está conectado à alimentação de 12v. Ele recebe entradas do Arduino, ou seja, entrada de 5v, e dá saída de 12v para seus pinos de saída (aos quais o atuador está conectado). Portanto, quando a senha está correta, o pino 11 é definido como alto e o pino 12 é definido como baixo. Os pinos 11 e 12 são conectados às entradas do l293d. Conseqüentemente, o atuador é puxado para dentro e a porta se abre. mostrado no vídeo 3 .

Código

  • código 1
  • código 2
código 1 Arduino
Escaneando
 int linhas =4; int colunas =4; char readkey (void); char nfunc (void); # define c3 9 # define c2 8 # define c1 7 # define c0 6 # define r3 5 # define r2 4 # define r1 3 # define r0 2void setup () {Serial.begin (9600); pinMode (c0, INPUT_PULLUP); pinMode (c1, INPUT_PULLUP); pinMode (c2, INPUT_PULLUP); pinMode (c3, INPUT_PULLUP); pinMode (r0, OUTPUT); pinMode (r1, OUTPUT); pinMode (r2, OUTPUT); pinMode (r3, OUTPUT); pinMode (11, SAÍDA); pinMode (12, OUTPUT);} char readkey (void) {digitalWrite (r0, LOW); digitalWrite (r1, HIGH); digitalWrite (r2, HIGH); digitalWrite (r3, HIGH); if (digitalRead (c0) ==LOW) {delay (500); return '1';} else if (digitalRead (c1) ==LOW) {delay (500); return '2';} else if (digitalRead (c2) ==LOW) {delay (500); return '3';} else if (digitalRead (c3) ==LOW) {delay (500); return 'A';} digitalWrite (r0, HIGH); digitalWrite (r1, LOW); digitalWrite (r2 , HIGH); digitalWrite (r3, HIGH); if (digitalRead (c0) ==LOW) {delay (500); return '4';} else if (digitalRead (c1) ==LOW) {delay (500); return '5';} else if (digitalRead (c2) ==LOW) {delay (500); return '6';} else if (digitalRead (c3) ==LOW) {delay (500); return 'B';} digitalWrite (r0, HIGH); digitalWrite (r1, HIGH); digitalWrite (r2, LOW); digitalWrite (r3, HIGH); if (digitalRead (c0) ==LOW) {delay (500); return '7';} else if (digitalRead (c1) ==LOW) {delay (500); return '8';} else if (digitalRead (c2) ==LOW) {delay (500); return '9';} else if (digitalRead (c3) ==LOW) {delay (500); return 'C';} digitalWrite ( r0, HIGH); digitalWrite (r1, HIGH); digitalWrite (r2, HIGH); digitalWrite (r3, LOW); if (digitalRead (c0) ==LOW) {delay (500); return '*';} senão se (digitalRead (c1) ==LOW) {delay (500); return '0';} else if (digitalRead (c2) ==LOW) {delay (500); return '#';} else if (digitalRead (c3 ) ==LOW) {delay (500); return 'D';} return 'o';} char nfunc (void) {char key ='o'; while (key =='o') key =readkey (); return key;} void loop () {char key1 =nfunc (); if (key1) {Serial.print (key1);}} 
código 2 Arduino
senha
 int linhas =4; int colunas =4; int contagem =0; char readkey (void); char nfunc (void); # define c3 9 # define c2 8 # define c1 7 # define c0 6 # define r3 5 # define r2 4 # define r1 3 # define r0 2char senha [5] ="1234"; char digitado [5]; void setup () {Serial.begin (9600); pinMode (c0, INPUT_PULLUP); pinMode (c1, INPUT_PULLUP); pinMode (c2, INPUT_PULLUP); pinMode (c3, INPUT_PULLUP); pinMode (r0, OUTPUT); pinMode (r1, OUTPUT); pinMode (r2, OUTPUT); pinMode (r3, OUTPUT); pinMode (11, SAÍDA); pinMode (12, OUTPUT);} char readkey (void) {digitalWrite (r0, LOW); digitalWrite (r1, HIGH); digitalWrite (r2, HIGH); digitalWrite (r3, HIGH); if (digitalRead (c0) ==LOW) {delay (500); return '1';} else if (digitalRead (c1) ==LOW) {delay (500); return '2';} else if (digitalRead (c2) ==LOW) {delay (500); return '3';} else if (digitalRead (c3) ==LOW) {delay (500); return 'A';} digitalWrite (r0, HIGH); digitalWrite (r1, LOW); digitalWrite (r2 , HIGH); digitalWrite (r3, HIGH); if (digitalRead (c0) ==LOW) {delay (500); return '4';} else if (digitalRead (c1) ==LOW) {delay (500); return '5';} else if (digitalRead (c2) ==LOW) {delay (500); return '6';} else if (digitalRead (c3) ==LOW) {delay (500); return 'B';} digitalWrite (r0, HIGH); digitalWrite (r1, HIGH); digitalWrite (r2, LOW); digitalWrite (r3, HIGH); if (digitalRead (c0) ==LOW) {delay (500); return '7';} else if (digitalRead (c1) ==LOW) {delay (500); return '8';} else if (digitalRead (c2) ==LOW) {delay (500); return '9';} else if (digitalRead (c3) ==LOW) {delay (500); return 'C';} digitalWrite ( r0, HIGH); digitalWrite (r1, HIGH); digitalWrite (r2, HIGH); digitalWrite (r3, LOW); if (digitalRead (c0) ==LOW) {delay (500); return '*';} senão se (digitalRead (c1) ==LOW) {delay (500); return '0';} else if (digitalRead (c2) ==LOW) {delay (500); return '#';} else if (digitalRead (c3 ) ==LOW) {delay (500); return 'D';} return 'o';} char nfunc (void) {char key ='o'; while (key =='o') key =readkey (); return key;} void loop () {char key1 =nfunc (); if (key1) {typed [count] =key1; contagem ++; Serial.print (key1);} if (contagem ==4) {if (strcmp (digitado, senha) ==0) {Serial.println ("correto"); digitalWrite (11, ALTO); digitalWrite (12, BAIXO); atraso (250); digitalWrite (11, LOW);} else {Serial.println ("intruder");} count =0;}} 

Esquemas

Conecte o atuador onde o motor está conectado.
Conecte o pino 8 a 12v tecla pressionada exibida na tela VID_20160924_195032.mp4led brilha quando a senha está correta VID_20160924_200016.mp4O atuador é puxado para fora na caixa normal (ou seja, a porta está travada).
Quando a senha está correta, ela é puxada para dentro e a porta se abre VID_20160924_201528.mp4

Processo de manufatura

  1. Bank Vault
  2. Porta giratória
  3. Canal e eclusa
  4. Bloquear
  5. Estação meteorológica baseada no Raspberry Pi
  6. Faça uma porta de escritório com travamento automático com sensor de proximidade para smartphone
  7. Windows IoT:Porta de reconhecimento facial
  8. Arduino e autômatos celulares baseados em OLED
  9. Trava de porta inteligente usando página de login WiFi por Arduino e ESP8266
  10. Entendendo a configuração do mecanismo