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.
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.
#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);
}
}