Arduino Keypad Password 6 Digit

Selamat Sore sahabat Arduino, pada sore ini saya akan berbagi pengalaman tentang keinginan untuk membuat alat yang sederhana tapi sangat bermanfaat dan pastinya Keren hehe. pada kesempatan ini saya membuat sebuah alat yang saya beri nama Keypad Password, alat ini hampir sama dengan postingan sebelumnya Arduino Password Door Lock Selenoid, Servo, LCD16X2, Keypad 4X3 
namun pada kesempatan ini saya membuat yang lebih sederhana yang hanya menggunakan 6 tombol, mungkin kita sering melihat pada sebuah Film yang berbau teknologi ada kalanya walaupun hanya membuka pintu atau mengaktifkan sebuah alat kita perlu memasukkan password. 

Alat ini memnggunakan kombinasi 6 Digit Angka yang difungsikan sebagai Code rahasia atau Password. Angka tersebut bisa kita rubah sesuai keinginan kita dengan menggunakan 6 kombinasi angka yang kita inginkan. 

Dengan menggunakan 6 kombinasi tentu sudah menyulitkan pengguna lain untuk menebak password kita, dan untuk Alat yang saya buat ini saya aplikasikan pada sebuah sepeda motor yang saya gunakan sebagai pengganti atau cadangan kunci kontak utama, jadi kita tidak perlu menggunakan kunci kontak untuk menghidupkan sebuah sepeda motor melainkan menggunakan sebuah Password yang kita masukkan ke alat yang telah kita pasang di motor kita. KEREN BUKAN..!!!

Mungkin alat ini akan menginspirasi teman-teman untuk membuatnya. Untuk skema rangkaian silahkan lihat pada gambat dibawah ini.



Untuk Source Code silahkan lihat dibawah ini.



================================== SOURCE CODE ==================================
#include "LiquidCrystal.h"
#include "EEPROM.h"
#include "Servo.h"

LiquidCrystal lcd(13, 12, 11, 10, 9, 8); 
Servo myServo;

int relay    = A1;
int buzzer   = A2;
int ledRed   = A3;
int ledGreen = A4;
int ledBlue  = A5;

int tombol1 = 2;   
int tombol2 = 3;
int tombol3 = 4;
int tombol4 = 5;

int Enter = 6; 
int Reset = 7;

int alamat = 0;
static unsigned long SaveTimer;
static unsigned long SaveDelay = (30 * 1000); 


char CODE[10] = "141213E"; //Digit Password
char Str[10]; 
char Panjang_Password = 6;
int Pos = 0;
bool Unlocked;
static unsigned long DisplayTimer; 
static unsigned long DisplayDelay = 200;


void setup() {

  myServo.attach(A0);
  
  int EEPROMCodeOK = true;
  for (Pos = 0; Pos <= (Panjang_Password); Pos++) {
    Str[Pos] =  EEPROM.read(Pos);
    if (!(strrchr("1123456789", Str[Pos]))) { 
      // not a valid code
      EEPROMCodeOK = false;
    }
  }
  Pos++;
  Str[Pos] =  EEPROM.read(Pos); 
  if (Str[Panjang_Password + 1] != 'E') EEPROMCodeOK = false; 
  if (EEPROMCodeOK) {
    Str[Panjang_Password + 2] = '\0';
    strncpy(CODE, Str, Panjang_Password + 1);
  }
  ClearCode();

  pinMode(buzzer, OUTPUT);
  pinMode(ledRed, OUTPUT);
  pinMode(ledGreen, OUTPUT);
  pinMode(relay, OUTPUT);
  pinMode(ledBlue, OUTPUT);

  pinMode(tombol1, INPUT_PULLUP);
  pinMode(tombol2, INPUT_PULLUP);
  pinMode(tombol3, INPUT_PULLUP);
  pinMode(tombol4, INPUT_PULLUP);

  pinMode(Enter, INPUT_PULLUP);
  pinMode(Reset, INPUT_PULLUP);

  lcd.begin(16, 2);
  lcd.setCursor(0, 0);
  lcd.print("== Dicky B_Mz ==");
  lcd.setCursor(0, 1);
  lcd.print(" Password Array ");
  delay(2000);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("== Dicky B_Mz ==");
  lcd.setCursor(0, 1);
  lcd.print("Password:");

  DisplayTimer = millis() + 200;
}


void loop() {
  
  Lock();
  
  Pos = constrain(Pos, 0, Panjang_Password);

  int buttonState1 = digitalRead(tombol1);  
  int buttonState2 = digitalRead(tombol2);
  int buttonState3 = digitalRead(tombol3);
  int buttonState4 = digitalRead(tombol4);

  int clButtonState = digitalRead(Reset);
  int enterButtonState = digitalRead(Enter);

  lcd.setCursor(9, 1);

  if (buttonState1 == LOW) {
    Str[Pos] = '1';
    Pos++;
    Str[Pos] = '\0';
    delay(250); 
    while (digitalRead(tombol1) == LOW); 

  }

  else if (buttonState2 == LOW) {
    Str[Pos] = '2';
    Pos++;
    Str[Pos] = '\0';
    delay(250); 
    while (digitalRead(tombol2) == LOW);

  }

  else if (buttonState3 == LOW) {
    Str[Pos] = '3';
    Pos++;
    Str[Pos] = '\0';
    delay(250); 
    while (digitalRead(tombol3) == LOW);
  }

  else if (buttonState4 == LOW) {
    Str[Pos] = '4';
    Pos++;
    Str[Pos] = '\0';
    delay(250); 
    while (digitalRead(tombol4) == LOW); 

  }
  else if (enterButtonState == LOW) {
    Str[Pos] = 'E';
    Pos++;
    Str[Pos] = '\0';
    delay(250);
    while (digitalRead(tombol1) == LOW); 
     if (strcmp (Str,CODE) == 0) {
      Unlocked = true;
      lcd.setCursor(0, 0);
      lcd.print("== Dicky B_Mz ==");
      lcd.setCursor(0, 1);
      lcd.print(" Access Granted");
      delay(2000);
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("== Dicky B_Mz ==");
      lcd.setCursor(0, 1);
      lcd.print("    Unlocked");
    } 
    else if (SaveTimer > millis() && (Pos + 1) == Panjang_Password) { 

      strcpy(CODE, Str);
      for (Pos = 0; Pos <= (Panjang_Password + 1); Pos++) {
        EEPROM.write(Pos, Str[Pos]);
      }
      lcd.setCursor(0, 1);
      lcd.print("Saving Code:");
      lcd.setCursor(0, 1);
      lcd.print(Str);

      Unlocked = true;
    }

    else { 

      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("== Dicky B_Mz ==");
      lcd.setCursor(0, 1);
      lcd.print(" Access Denied.");
       digitalWrite(buzzer, HIGH);
       digitalWrite(ledRed, HIGH);
      delay(2000);
       digitalWrite(buzzer, LOW);
       digitalWrite(ledRed, LOW);
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("== Dicky B_Mz ==");
      lcd.setCursor(0, 1);
      lcd.print("Password:");

    }

    while (Unlocked) {
      Unlock();
      if (digitalRead(Reset) == LOW) {
        delay(200);
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("== Dicky B_Mz ==");
        lcd.setCursor(0, 1);
        lcd.print("Password:");
        lcd.setCursor(0, 1);
        lcd.print("     Locked");
        delay(2000);
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("== Dicky B_Mz ==");
        lcd.setCursor(0, 1);
        lcd.print("Password:");
        Unlocked = false;
        SaveTimer = millis() + 30000;
      }
    }
    
    ClearCode();

    
  }

  else if (clButtonState == LOW) {
    delay(500);

    while (Reset == LOW);
    if ((millis() - SaveTimer) > 4500) {
      
    }
    
    ClearCode();
    
  }

  if ( (long)( millis() - DisplayTimer ) >= 0) {
    DisplayTimer += DisplayDelay;
    lcd.setCursor(9, 1); 
    lcd.print(Str);
    lcd.print("     ");

  }
}

void ClearCode() {
  
  Pos = 0;
  Str[Pos] = '\0';
  lcd.setCursor(0, 0);
  lcd.print("== Dicky B_Mz ==");
  lcd.setCursor(0, 1);
  lcd.print("Password:");
  
}

void Unlock() {

  myServo.write(0);
  digitalWrite(ledGreen, HIGH);
  digitalWrite(relay, HIGH);
  digitalWrite(ledBlue, LOW);
  
}

void Lock() {

  myServo.write(90);
  digitalWrite(ledGreen, LOW);
  digitalWrite(relay, LOW);
  digitalWrite(ledBlue, HIGH);

}



Video Hasil

No comments

Dicky B_Mz. Powered by Blogger.