Electronic door lock dengan keypad






1.Tujuan

a. praktikan dapat menerapkan sebuah sistem menggunakan mikrokontroller.
b. praktikan dapat mengkombinasikan berbagai macam output, akumulator, display, dan berbagai media output lainnya menjadi sebuah alat.
c. praktikan dapat merancang suatu sistem menjadi sebuah alat.
d.Menggunakan keypad yang terintegrasi dengan kunci yang digerakkan oleh motor servo.


2.Alat dan bahan

  1. -Arduino MEGA 2560
  2. -Motor servo DC
  3. -Jumper
  4. -LM016L LCD
  5. -LED
  6. -resistoe 220ohm
  7. -Keypad 4x4


3.Landasan Teori

a. Arduino Uno
Arduino menggunakan keluarga mikrokontroler ATMega yang dirilis oleh Atmel sebagai basis, namun ada individu/perusahaan yang membuat clone arduino dengan menggunakan mikrokontroler lain dan tetap kompatibel dengan arduino pada level hardware. Untuk fleksibilitas, program dimasukkan melalui bootloader meskipun ada opsi untuk mem-bypass bootloader dan menggunakan pengunduh untuk memprogram mikrokontroler secara langsung melalui port ISP.

Arduino Uno adalah board mikrokontroler berbasis ATmega328 (datasheet). Memiliki 14 pin input dari output digital  dimana 6 pin input tersebut dapat digunakan sebagai output PWM dan 6 pin input analog, 16 MHz osilator kristal, koneksi USB, jack power, ICSP header, dan tombol reset. Untuk mendukung mikrokontroler agar dapat digunakan, cukup hanya menghubungkan Board Arduino Uno ke komputer dengan menggunakan kabel USB atau listrik dengan AC yang-ke adaptor-DC atau baterai untuk menjalankannya.




b.Motor servo DC

Motor servo adalah sebuah motor DC yang dilengkapi rangkaian kendali dengan sistem closed feedback yang terintegrasi dalam motor tersebut. Pada motor servo posisi putaran sumbu (axis) dari motor akan diinformasikan kembali ke rangkaian kontrol yang ada di dalam motor servo.


c.Keypad4x4


Dalam banyak aplikasi, seringkali diperlukan penggunaan tombol (key / button) sebagai media untuk meng-input-kan data angka maupun huruf. Secara interfacing, sederhananya bisa saja semua tombol itu hubungkan secara langsung satu persatu pada pin GPIO dari mikro, namun karena keterbatasan pin yang ada, maka diperlukan sebuah teknik untuk mengatasi masalah keterbatasan pin tersebut namun tetap dapat mengakomodir keperluan untuk memasukan data secara lengkap.
Untuk media input data numerik yang menggunakan 10 hingga 16 buah tombol bisa dilakukan dengan mengunakan teknik Multiplex Matrix Keypad. Tombol – tombol tersebut disusun sedemikian rupa membentuk sebuah matrik sehingga untuk semua tombol tersebut bisa dikontrol hanya dengan mengunakan 7-8 pin saja. 
Berikut contoh susunan matriknya :Keypad-3x4
Skema Keypad Matrix 3x4Keypad-4x4Skema Keypad Matrix 4x4 
Dengan teknik matrik diatas, maka kita bisa menghemat penggunaaan pin mikro, karena misalnya untuk matrix 4x4 (16 buah tombol) hanya diperlukan 8 pin saja untuk interfacing-nya.
Cara kerjanya cukup sederhana, misalnya ketika tombol S1 ditekan, maka COL1 dan ROW1 akan terhubung, jika S5 yang ditekan, maka COL2 dan ROW2 (matrix 3x4) atau COL1 dan ROW2 (matrix 4x4) akan terhubung. demikian seterusnya untuk tombol lainnya.

d.LCD 16*2
Liquid Crystal Display (LCD) adalah sebuah peralatan elektronik yang berfungsi untuk
menampilkan output sebuah sistem dengan cara membentuk suatu citra atau gambaran pada sebuah layar. Secara garis besar komponen penyusun LCD terdiri dari kristal cair (liquid crystal) yang diapit oleh 2 buah elektroda transparan dan 2 buah filter polarisasi (polarizing filter).


Gambar Penampang komponen penyusun LCD
Keterangan:
1. Film dengan polarizing filter vertical untuk memolarisasi cahaya yang masuk.
2. Glass substrate yang berisi kolom-kolom elektroda Indium tin oxide (ITO).
3. Twisted nematic liquid crystal (kristal cair dengan susunan terpilin).
4. Glass substrate yang berisi baris-baris elektroda Indium tin oxide (ITO).
5. Film dengan polarizing filter horizontal untuk memolarisasi cahaya yang masuk.
6. Reflektor cahaya untuk memantulkan cahaya yang masuk LCD kembali ke mata pengamat.
Sebuah citra dibentuk dengan mengombinasikan kondisi nyala dan mati dari pixel-pixel yang menyusun layar sebuah LCD. Pada umumnya LCD yang dijual di pasaran sudah memiliki integrated circuit tersendiri sehingga para pemakai dapat mengontrol tampilan LCD dengan mudah dengan menggunakan mikrokontroler untuk mengirimkan data melalui pin-pin input yang sudah tersedia.


Kaki-kaki yang terdapat pada LCD


4.Gambar Rangkaian


5.Program

#include <Keypad.h>
#include <LiquidCrystal.h>
#include <Servo.h>

Servo myservo;

LiquidCrystal lcd(A0, A1, A2, A3, A4, A5);

#define Password_Lenght 7 // Give enough room for six chars + NULL char

int pos = 0;    // variable to store the servo position

char Data[Password_Lenght]; // 6 is the number of chars it can hold + the null char = 7
char Master[Password_Lenght] = "123456";
byte data_count = 0, master_count = 0;
bool Pass_is_good;
char customKey;

const byte ROWS = 4;
const byte COLS = 3;
char keys[ROWS][COLS] = {
  {'1', '2', '3'},
  {'4', '5', '6'},
  {'7', '8', '9'},
  {'*', '0', '#'}
};
bool door = true;

byte rowPins[ROWS] = {1, 2, 3, 4}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {5, 6, 7}; //connect to the column pinouts of the keypad

Keypad customKeypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS); //initialize an instance of class NewKeypad

void setup()
{
  myservo.attach(9);
  ServoClose();
  lcd.begin(16, 2);
  lcd.print(" Arduino Door");
  lcd.setCursor(0, 1);
  lcd.print("--Look project--");
  delay(3000);
  lcd.clear();

}

void loop()
{
  if (door == 0)
  {
    customKey = customKeypad.getKey();

    if (customKey == '#')

    {
      lcd.clear();
      ServoClose();
      lcd.print("  Door is close");
      delay(3000);
      door = 1;
    }
  }

  else Open();
}

void clearData()
{
  while (data_count != 0)
  { // This can be used for any array size,
    Data[data_count--] = 0; //clear array for new data
  }
  return;
}

void ServoOpen()
{
  for (pos = 180; pos >= 0; pos -= 5) { // goes from 0 degrees to 180 degrees
    // in steps of 1 degree
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
}

void ServoClose()
{
  for (pos = 0; pos <= 180; pos += 5) { // goes from 180 degrees to 0 degrees
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
}

void Open()
{
  lcd.setCursor(0, 0);
  lcd.print(" Enter Password");
  
  customKey = customKeypad.getKey();
  if (customKey) // makes sure a key is actually pressed, equal to (customKey != NO_KEY)
  {
    Data[data_count] = customKey; // store char into data array
    lcd.setCursor(data_count, 1); // move cursor to show each new char
    lcd.print(Data[data_count]); // print char at said cursor
    data_count++; // increment data array by 1 to store new char, also keep track of the number of chars entered
  }

  if (data_count == Password_Lenght - 1) // if the array index is equal to the number of expected chars, compare data to master
  {
    if (!strcmp(Data, Master)) // equal to (strcmp(Data, Master) == 0)
    {
      lcd.clear();
      ServoOpen();
      lcd.print("  Door is Open");
      door = 0;
    }
    else
    {
      lcd.clear();
      lcd.print("  Wrong Password");
      delay(1000);
      door = 1;
    }
    clearData();
  }
}

6.Flowchart
Image result for flowchart electronic door lock keypad  arduino

7.Foto alat



8.Video rangkaian



9.Video alat

10.analisa
Alat ini bekerja dengan mengandalkan input berupa keypad 3x4 yang memasukkan kunci security yang telah diprogram di program arduino uno, apabila kuci security key nya benar maka arduino akan memerintahkan motor servo untuk berputar dan menarik tuas pintu sehingga pintu terbuka, display lcd menunjukkan apabila input security key di keypad anda benar atau salah.

11.Download


No comments:

Post a Comment