Arduino - Teclado - Fechadura Eletromagnética

Neste tutorial, vamos aprender como usar um teclado, uma fechadura eletromagnética e o Arduino juntos. Em detalhes, se um usuário digitar a senha corretamente no teclado, o Arduino ativa a fechadura eletromagnética.

O tutorial também fornece o código que ativa uma fechadura eletromagnética por um período de tempo e depois a desativa sem usar a função delay(). O código Arduino também suporta várias senhas.

Arduino teclado fechadura eletromagnética

Sobre o Teclado e a Fechadura Eletromagnética

Se você não conhece o teclado e a fechadura eletromagnética (pinagem, como funciona, como programar...), aprenda sobre eles nos seguintes tutoriais:

Diagrama de Ligação

Diagrama de ligação do Arduino com teclado e fechadura eletromagnética

This image is created using Fritzing. Click to enlarge image

Código Arduino - ativar a fechadura eletromagnética se a senha estiver correta

Os códigos abaixo ativam uma fechadura eletromagnética se a senha estiver correta

/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-keypad-electromagnetic-lock */ #include <Keypad.h> #define RELAY_PIN A0 // the Arduino pin that controls electromagnetic lock via relay #define ROW_NUM 4 // four rows #define COLUMN_NUM 3 // three columns char keys[ROW_NUM][COLUMN_NUM] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'*','0','#'} }; byte pin_rows[ROW_NUM] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad byte pin_column[COLUMN_NUM] = {5, 4, 3}; //connect to the column pinouts of the keypad Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM ); const String password_1 = "1234"; // change your password here const String password_2 = "56789"; // change your password here const String password_3 = "901234"; // change your password here String input_password; void setup() { Serial.begin(9600); input_password.reserve(32); // maximum password size is 32, change if needed pinMode(RELAY_PIN, OUTPUT); // initialize pin as an output. digitalWrite(RELAY_PIN, HIGH); // lock the electromagnetic lock } void loop() { char key = keypad.getKey(); if (key) { Serial.println(key); if (key == '*') { input_password = ""; // reset the input password } else if (key == '#') { if (input_password == password_1 || input_password == password_2 || input_password == password_3) { Serial.println("The password is correct => unlock"); digitalWrite(RELAY_PIN, LOW); } else { Serial.println("The password is incorrect, try again"); } input_password = ""; // reset the input password } else { input_password += key; // append new character to input password string } } }

Passos Rápidos

  • Conecte o Arduino ao PC por meio do cabo USB
  • Abra o Arduino IDE, selecione a placa e a porta corretas
  • Vá até o ícone Libraries na barra esquerda do Arduino IDE.
  • Pesquise “keypad” e, em seguida, encontre a biblioteca keypad de Mark Stanley, Alexander Brevig
  • Clique no botão Install para instalar a biblioteca keypad.
Biblioteca de teclado do Arduino
  • Copie o código acima e abra-o no Arduino IDE
  • Clique no botão Upload no Arduino IDE para carregar o código no Arduino
Arduino IDE - Carregar o Código
  • Pressione as teclas 8123 e pressione #
  • Pressione as teclas 1234 e pressione #
  • Veja o resultado no Serial Monitor e o estado da fechadura eletromagnética
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
The password is incorrect, try again The password is correct => unlock
Ln 11, Col 1
Arduino Uno on COM15
2

Explicação do Código

As senhas autorizadas são predefinidas no código Arduino.

Uma string é usada para armazenar a senha digitada pelos usuários, chamada de input string. No teclado, duas teclas (* e #) são usadas para fins especiais: limpar a senha e finalizar a senha. Quando uma tecla do teclado é pressionada:

  • Se a tecla pressionada não for uma das duas teclas especiais, ela é adicionada à input string
  • Se a tecla pressionada for *, a input string é limpa. Você pode usá-la para começar ou recomeçar a digitar a senha
  • Se a tecla pressionada for #:
    • A input string é comparada com as senhas predefinidas. Se corresponder a uma das senhas predefinidas, a fechadura eletromagnética é ativada.
    • Independentemente de a senha estar correta ou não, a input string é limpa para a próxima entrada

Código Arduino - ativar uma fechadura eletromagnética por um período de tempo se a senha estiver correta

O código abaixo ativa a fechadura eletromagnética por 5 segundos se a senha estiver correta. Após 5 segundos, a fechadura eletromagnética é desativada.

/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-keypad-electromagnetic-lock */ #include <Keypad.h> #include <ezOutput.h> #define UNLOCK_TIME 5000 // in milliseconds #define RELAY_PIN A0 // the Arduino pin that controls electromagnetic lock via relay #define ROW_NUM 4 // four rows #define COLUMN_NUM 3 // three columns char keys[ROW_NUM][COLUMN_NUM] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'*','0','#'} }; byte pin_rows[ROW_NUM] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad byte pin_column[COLUMN_NUM] = {5, 4, 3}; //connect to the column pinouts of the keypad Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM ); ezOutput relay(RELAY_PIN); const String password_1 = "1234"; // change your password here const String password_2 = "56789"; // change your password here const String password_3 = "901234"; // change your password here String input_password; void setup() { Serial.begin(9600); input_password.reserve(32); // maximum password size is 32, change if needed relay.high(); // lock the electromagnetic lock } void loop() { relay.loop(); // MUST call the loop() function first char key = keypad.getKey(); if (key) { Serial.println(key); if (key == '*') { input_password = ""; // reset the input password } else if (key == '#') { if (input_password == password_1 || input_password == password_2 || input_password == password_3) { Serial.println("The password is correct => unlock"); relay.high(); // set high before making a low pulse relay.pulse(UNLOCK_TIME); // deactivate the electromagnetic lock during UNLOCK_TIME duration } else { Serial.println("The password is incorrect, try again"); } input_password = ""; // reset the input password } else { input_password += key; // append new character to input password string } } }

Observe que o código acima usa a biblioteca ezOutput, que facilita o gerenciamento do tempo de forma não bloqueante. Você pode consultar o Guia de Instalação da Biblioteca ezOutput

Vídeo

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!