segunda-feira, 15 de dezembro de 2014

Teclado Keypad + Senha + LCD + Solenoide

    Fala pessoal, época de férias é bom porque conseguimos fazer vários projetos. O post de agora é mostrar o uso de um teclado Keypad onde o usuário entra com uma senha e o display LCD mostrar se a senha está certa ou errada e aciona um selenoide por um relé.


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


Vídeo:




Nenhum comentário:

Postar um comentário