Esse projeto parece ser difícil mas não é. As bibliotecas que usamos e muito amigável e ao estuda-las percebemos que é fácil a sua manipulação. O objetivo é simular uma fechadura, onde o usuário aperta a tecla "#" e entra com o código, se aceito o relé desliga a alimentação e abre a porta, para trancar o processo e o mesmo.
Material:
- Arduino Mega
- protoboard
- fios
- display lcd 16x2
- relé
- keypad
- servo
- servo
- solenoide
- fonte externa
Esquemático:
Código:
#include <Password.h> //http://www.arduino.cc/playground/uploads/Code/Password.zip
#include <Keypad.h> //http://www.arduino.cc/playground/uploads/Code/Keypad.zip
#include <LiquidCrystal.h>
#include <Servo.h>
#define Luz 22 //Define o pino 22 como luz de fundo do LCD
LiquidCrystal lcd (34, 32, 30, 28, 26, 24); //Pinos do LCD
Password password = Password( "3550" ); //Senha
Servo myservo;
const byte ROWS = 4; //linhas
const byte COLS = 3; // colunas
// Configuraçao do teclado
char keys[ROWS][COLS] = {
{
'1','2','3' }
,
{
'4','5','6' }
,
{
'7','8','9' }
,
{
'*','0','#' }
};
// Coneta o keypad ROW0, ROW1, ROW2 e ROW3 com esses pinos do arduino.
byte rowPins[ROWS] = {
5, 4, 3, 2 };// Conecta keypad COL0, COL1 and COL2 com esses pinos do arduino.
byte colPins[COLS] = {
8, 7, 6 };
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup(){
lcd.begin(16, 2); //LCD 16x2
pinMode(Luz, OUTPUT);
digitalWrite(Luz, HIGH);
lcd.setCursor(0,0);
lcd.print("Aperte # e digite");
lcd.setCursor(0,1);
lcd.print(" a senha");
Serial.begin(9600);
keypad.addEventListener(keypadEvent); //adiciona um evento com o Keypad
pinMode(12, OUTPUT);
myservo.attach(9);
}
void loop(){
keypad.getKey();
}
//Eventos especiais
void keypadEvent(KeypadEvent eKey){
switch (keypad.getState()){
case PRESSED:
//lcd.clear()
// lcd.setCursor(0,0);
//lcd.print("Digite ");
Serial.print("Digite: ");
Serial.println(eKey);
switch (eKey){
case '*':
checkPassword();
break;
case '#':
password.reset();
break;
default:
password.append(eKey);
}
}
}
void checkPassword(){
if (password.evaluate()){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Senha Aceita ");
Serial.println("Sucesso");
delay(2000);
setup();
//Se codigo aceito led 13 acende
digitalWrite(12, 1);
myservo.write(180); // tell servo to go to position in variable 'pos'
delay(1000);
}
else{
lcd.setCursor(0,0);
lcd.clear();
lcd.print("Error! ");
lcd.setCursor(0,1);
lcd.print("Senha errada");
delay(2000);
setup();
Serial.println("Error!");
//Se codigo errado led 13 apaga
digitalWrite(12, 0);
myservo.write(90); // tell servo to go to position in variable 'pos'
delay(1000);
}
}
Nenhum comentário:
Postar um comentário