Shefarol Soluções Web

Fechadura com teclado matricial - Voltar

Fechadura com teclado matricial

Neste exemplo temos um sistema que através de um teclado matricial 4x4 permite a entrada de uma senha para abrir uma fechadura. O botão "*" fecha novamente a trava. Neste caso utilizaremos um micro servo motor 9g - SG90 de 180o para simular uma fechadura solenóide. Para indicar que está fechada o led RGB acenderá como vermelho, digitando corretamente a senha o led passará a ficar verde, você pode incrementar esse projeto utilizando um display LCD que mostrará o texto "fechado" ou "aberto", um buzzer para emitir um som quando pressionada uma tecla, etc.

Teclado matricial

 

Para este projeto faça o download das bibliotecas abaixo
CURIOSIDADE
O Teclado Matricial 4x4 foi desenvolvido para facilitar a entrada de dados em projetos microcontrolados. Este teclado possui 16 teclas, onde 10 delas são números, 4 são letras e 2 são caracteres especiais. Com ele podemos criar uma infinidade de projetos, tais como criar controles de acesso, teclados musicais, entre outros.

 

Sketch básico fechadura com teclado matricial
#include <Keypad.h>
#include <Servo.h>

Servo servo_Motor;
char* password = "456";
int position = 0;
int i = 0;

const byte ROWS = 4;
const byte COLS = 4;

char keys[ROWS][COLS] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};

byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};

Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);

const int ledvermelho = 12;
const int ledverde = 11;

void setup() {
  pinMode(ledvermelho, OUTPUT);
  pinMode(ledverde, OUTPUT);
  servo_Motor.attach(13);
  setLocked(true);
  servo_Motor.write(0);
}

void loop() {
  char key = keypad.getKey();
  
  // tecla para fechar a trava
  if (key == '*') {
    position = 0;
    
	// Fecha a porta
	setLocked(true);  
  }
  
  // verifica e confere cada tecla pressionada
  if (key == password[position]) {
    position++;
  }
  

  // verifica a quantidade de caracteres da senha
  if (position == strlen(password)) {
    
	// Abre a porta
	setLocked(false);  
  }

  delay(100);
}

void setLocked(int locked) {
  if (locked) {
    digitalWrite(ledverde, LOW);

	// Pisca o LED 5 vezes rapidamente
    for(i = 0; i < 5; i++){ 
      digitalWrite(ledvermelho, HIGH);
      delay(100);
      digitalWrite(ledvermelho, LOW);
      delay(100);
    }
    digitalWrite(ledvermelho, HIGH);
    servo_Motor.write(0);
    
  } else {
    digitalWrite(ledvermelho, LOW);

	// Pisca o LED 5 vezes rapidamente
    for(i = 0; i < 5; i++){ 
      digitalWrite(ledverde, HIGH);
      delay(100);
      digitalWrite(ledverde, LOW);
      delay(100);
    }
    digitalWrite(ledverde, HIGH);
    servo_Motor.write(90);
    
  }
}

 

Esquema de ligação

Esquema de ligação

 

Lista de materiais

 

Download das bibliotecas