Jumat, 13 Juni 2014

LAPORAN SISTEM MIKROKONTROLER (Simulasi Pembuka Kunci Pintu Berpassword Berbasis ATMega16)

Simulasi Pembuka Kunci Pintu Berpassword Berbasis ATMega16

   
   A. Latar Belakang
Dizaman yang modern ini banyak sekali kemajuan yang dapat mempermudah aktifitas manusia. Tetapi disisi lain juga banyak terjadi penyimpangan dengan kemajuan juga. Sehingga penggunaan alat-alat berteknologi canggih harus tepat sasaran agar sesuai dengan fungsinya. Untuk bisa menangkis atau menghindari kerugian yang akan terjadi maka perlu suatu karya kreatifitas yang memiliki manfaat yang banyak. Salah satunya adalah dengan penggunaan alat Lock Door atau pengunci pintu. Alat ini merupakan Salah Satu jawaban agar bisa menjaga keamanan dan kerahasiaan suatu benda atau ruang yang diaanggap penting dari ancaman yang menimpanya. Lock Door memiliki peran yang sangat penting yang bisa di code atau dibuat password sehingga pintu yang dimaksud akan terbuka oleh orang-orang yang tepat. Sebagai contoh ruang dokumen kerahasiaan Negara maka hal ini sangat penting yang harus dijaga ketat agar tidak bocor keluar, maka oleh sebab itu orang yang masuk harus dari kalangan internal institusi tersebut.
System kerjanya adalah dengan mengunakan password yaitu memasukanya pada monitor dengan keypad yang tersedia. System akan membaca kode yang dimasukan jika cocok dengan program yang ada didalamnya maka pintu akan membuka. Sebaliknya jika kode yang dimasukan tidak cocok, maka pintu tidak akan tebuka. Pada rancangan proyek ini tidak menggunakan indicator output dengan pintu secara langsung akan tetapi menggunakan lampu led yang sifatnya sementara dan jika dipasang tinggal menambahkan pintunya. Apabila lampu led menyala menandakan pintu bisa terbuka sebaliknya apabila lampu led mati berarti pintu tidak bisa terbuka.

   B. Tujuan
Pembuatan proyek Lock Door ini bertujuan agar kerahasiaan suatu dokumen atau yang dianggap sesuatu yang rahasia dalam wadah/ruangan bisa terjaga dengan aman.

   C. Manfaat Pembuatan
Lock Door ini memiliki manfaat baik untuk keperluan individual ataupun kelompok/ institusi. Karena bisa membantu mengamankan suatu barang berharga atau sesuatu yang dianggap penting dan bisa memberi kemudahan dalam setiap aktifitas keluar masuk pintu tersebut.

   D. Skema Rangkaian
·       Gambar Rangkaian Jalur Proteus



·       Gambar Rangkaian Jalur PCB



   E. Langkah Pembuatan
1.     Alat dan Bahan
·       Resistor
·       Capasitor
·       LCD LM 016L
·       Keypad
·       IC Atmega 16
·       Kristal 12 MHz
·       Saklar 2 pin
·       dll
2.     Proses Pembuatan
a)     Design rangkaian dengan Proteus dan Ares
b)     Export hasil design Ares ke PDF kemudian print dengan kertas Glosi
c)     Siapkan setrika pada stop kontak dan siapkan PCB secukupnya
d)     Potong kertas glosi sesuai rangkaian dan tempelkan (sesuai ukuran) pada bagian tembaga PCB dengan gambar menghadap ke PCB
e)     Setrika bagian atas kertas glosi yang ditempel PCB sampai kira-kira jalur gambar PCB sudah nempel pada PCB ( + 10 menit)
f)      Masukan PCB pada air agar kertas glosi memisah dengan tembaga PCB
g)     Larutkan pelarut PCB FerryClorid dengan menggunakan air panas (lebih baik) atau dingin secukupnya
h)     Masukan PCB yang telah disetrika kedalam larutan tersebut
i)      Tunggu sampai tembaga pada PCB larut kecuali yang tertutup oleh gambar rangkaian
j)      Angkat PCB kemudian bor jalur-jalur komponen pada PCB (untuk memasukan komponen)
k)     Masukan komponen pada PCB dengan menggunakan Solder dan timah dengan rapi
l)      Potong bekas kaki-kaki komponen sehingga menjadi rapi dan tidak membahayakan    
m)   Masukan program rangkaian pada IC Atmega 16 kemudian jalankan sistem
                                                                               
   F. Program Rangkaian

#include <mega16.h>
#include <delay.h>
#include <stdlib.h>
#include <stdio.h>

float nilai=0, password=12345678;
char temp[12], array[10], i=0, indeks=0;
//variabel indeks digunakan untuk mendeteksi jika indeks=0 unlock, indeks=1 lock

// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>

void lock()
{
 while (indeks==0)
      {
      lcd_gotoxy(0,0);
      lcd_putsf("Please press =");
      lcd_gotoxy(0,1);
      lcd_putsf("to lock");
     
      PORTB = 0b11111011;
      delay_ms(30);
      if (PINB.7 == 0)
       {
        indeks=1;
        PORTD.0=1;//terkunci
        lcd_clear();  
        lcd_gotoxy(0,0);
        lcd_putsf("locked");
        delay_ms(1000);
        lcd_clear();
        }
      }
}

void enter()
{
if (nilai==password)
   {
   lcd_clear();
   lcd_gotoxy(0,0);
   lcd_putsf("unlocked");
   delay_ms(1000);
   i=0; nilai=0;
   PORTD.0=0;//kunci terbuka
   indeks=0; 
   }                      
else
   {
   lcd_clear();
   lcd_gotoxy(0,0);
   lcd_putsf("wrong password");
   delay_ms(2500);
   i=0; nilai=0;
   indeks=1;//karena password salah jadi masih terkunci
   }
}

void simpan_dlm_1variabel()
{
       if (i==1){nilai=array[i];}
        
       if (i>=2 && i<=8)
           {
           nilai=(nilai*10)+array[i];
           }  
}

void scanning_keypad()//scanning pendeteksian penekanan keypad
{
lcd_gotoxy(0,0);
lcd_putsf("enter u'r pass");

PORTB = 0b11111110;
delay_ms(30);
if (PINB.4 == 0) {i++; array[i]=1; simpan_dlm_1variabel(); delay_ms(300);}
if (PINB.5 == 0) {i++; array[i]=4; simpan_dlm_1variabel(); delay_ms(300);}
if (PINB.6 == 0) {i++; array[i]=7; simpan_dlm_1variabel(); delay_ms(300);}
if (PINB.7 == 0) {lcd_clear();i=0;nilai=0;delay_ms(300);}

PORTB = 0b11111101;
delay_ms(30);
if (PINB.4 == 0) {i++; array[i]=2; simpan_dlm_1variabel(); delay_ms(300);}
if (PINB.5 == 0) {i++; array[i]=5; simpan_dlm_1variabel(); delay_ms(300);}
if (PINB.6 == 0) {i++; array[i]=8; simpan_dlm_1variabel(); delay_ms(300);}
if (PINB.7 == 0) {i++; array[i]=0; simpan_dlm_1variabel(); delay_ms(300);}

PORTB = 0b11111011;
delay_ms(30);
if (PINB.4 == 0) {i++; array[i]=3; simpan_dlm_1variabel(); delay_ms(300);}
if (PINB.5 == 0) {i++; array[i]=6; simpan_dlm_1variabel(); delay_ms(300);}
if (PINB.6 == 0) {i++; array[i]=9; simpan_dlm_1variabel(); delay_ms(300);}
if (PINB.7 == 0) {delay_ms(300);}

PORTB = 0b11110111;
delay_ms(30);
if (PINB.4 == 0) {delay_ms(300);}
if (PINB.5 == 0) {delay_ms(300);}
if (PINB.6 == 0) {delay_ms(300);}
if (PINB.7 == 0) {enter();delay_ms(300);}
}

void tampil_lcd()
{
if (nilai>0)
    {
        ftoa(nilai,0,temp);
        lcd_gotoxy(0,1);
        lcd_puts(temp);
    }
}

void main(void)
{
PORTB=0xff;
DDRB=0x0f;

PORTD=0x00;//PD0 belogika low atau dlm keadaan unlock awalnya
DDRD=0x01;//PD0 sebagai output

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// LCD module initialization
lcd_init(16);
lcd_putsf("ElectrO-cOntrOl");
delay_ms(1500);
lcd_clear();

while (1)
      {
      lock();
      scanning_keypad();
      tampil_lcd();        
      };
}

   G. Analisis rangkaian
Mungkin teman-teman semua sudah tahu tentang aplikasi yang bernama pengunci pintu (door lock) berpassword, pada aplikasi ini sudah saya realisasikan pada hardware yang sesungguhnya dan berhasil. Tetapi ketika saya simulasikan tidak berjalan dengan baik, saya tidak tahu kenapa. Tapi itu tidak masalah yang penting sudah saya coba pada hardware yang sesungguhnya dan berhasil.
Motivasi pembuatan aplikasi ini adalah awalnya saya sedang browsing dengan mengunjungi salah satu forum mikrokontroler yang ada di Indonesia, disitu ada yang bertanya tentang penyimpanan input yang berasal dari keypad kedalam satu variabel, tetapi tidak ada yang menanggapinya bahkan memberikan saran pun tidak. Entah karena budaya tidak mau berbagi ilmu atau entah kenapa, saya kurang mengerti. Maka dari itu saya mencoba membuat aplikasi ini.
Kesulitan utama dari aplikasi ini adalah ketika seorang user memasukkan password dengan menggunakan keypad, kita harus dapat menyimpan input yang berasal dari keypad kedalam satu variabel. Misalnya user menekan 6, lalu 2, lalu 0 dan 4 berarti passwornya adalah 6204 (misalkan). Nilai tersebut harus dijadikan dalam 1 variabel yang kemudian akan dibandingkan dengan password yang sebenarnya. Jika user memasukkan password dengan benar maka akan membuka kunci, jika salah maka kunci tidak akan terbuka.
Untuk mengatasi masalah tersebut saya menggunakan array untuk mendeteksi berapa kali penekanan keypad dan angka berapa yang akan ditekan. Baiklah disini saya akan menjelaskan algoritma yang saya buat. Jika user menekan 6, lalu 2 lalu 0 dan 4 maka seperti ini logikanya :
Awalnya saya deklarasikan array sebagai berikut :
array[10], i=0;
saat terjadi penekanan angka 6 maka;
i++ (saya increamentkan) jadi i=1
kemudian angka 6 saya simpan pada variabel array[i] jadi array[1]=6
kemudian saat terjadi penekanan angka 2, maka:
i++ (saya increamentkan lagi) jadi i=2
kemudian angka 2 saya simpan pada variabel array[i] jadi array[2]=2
kemudian saat terjadi penekanan angka 0, maka:
i++ (saya increamentkan lagi) jadi i=3
kemudian angka 0 saya simpan pada variabel array[i] jadi array[3]=0
kemudian saat terjadi penekanan angka 4, maka:
i++ (saya increamentkan lagi) jadi i=4
kemudian angka 4 saya simpan pada variabel array[i] jadi array[4]=4
maka didapat array[1]=6, array[2]=2, array[3]=0, array[4]=4
kalo sudah didapat seperti diatas maka kita tinggal kumpulkan dalam satu variabel (nama variabelnya misalkan nilai) caranya:
saat i bernilai 1, i=1 kita hitung dengan rumus:
nilai=array[1]  //jadi nilai=6
saat i bernilai 2, i=2 kita hitung dengan rumus:
nilai=(array[1]*10)+array[2]  //jadi nilai=62
saat i bernilai 3, i=3 kita hitung dengan rumus:
nilai=(array[1]*100)+(array[2]*10)+array[3]  //jadi nilai=620
saat i bernilai 4, i=4 kita hitung dengan rumus:
nilai=(array[1]*1000)+(array[2]*100)+(array[3]*10)+array[4]  //jadi nilai=6204
sudah mengerti bukan, dari rumus-rumus diatas masih dapat disederhanakan, menjadi:
jika i=1
nilai=array[i]
jika i bernilai  if (i>=2 dan i<=8)
nilai=(nilai*10)+array[i]


       Banyaknya penekanan tombol saya batasi sampai 8 kali. Sebenarnya saya ingin membuatnya sampai 10 kali tetapi saat saya coba tidak berjalan dengan lancar saat penekanan ke 9 kali. 
Langsung ke cara kerjanya, gambar rangkaiannya bisa anda lihat dibawah ini. Saat pertama kali alat ini saya nyalakan maka dalam keadaan tidak terkunci (unlock), untuk menguncinya (lock) anda harus menekan tombol = (lihat gambar keypad dibawah). Setelah terkunci, jika anda ingin membukanya kembali anda harus memasukkan passwordnya (jika sudah mengetikan password tekan tombol + untuk memasukkannya). Jika benar maka akan membuka kunci, tetapi jika salah kunci tidak akan terbuka. Ketika sudah terbuka maka cara kerjanya kembali lagi ke awal. Sedangkan tombol ON/C saya gunakan untuk menghapus password jika salah dalam pengetikannya. Untuk indikator kuncinya saya menggunakan sebuah LED, jika LED menyala maka dalam keadaan tidak terkunci dan jika mati dalam keadaan terkunci.

   H. Kesimpulan
       1.     Lock Door memiliki manfaat untuk melindungi kerahasiaan suatu dokument atau sesuatu yang dianggap rahasia dengan memasang password pada Lock Door tersebut untuk membuka pintunya.
       2.    Kemudahan yang didapat dengan memasang Lock Door ini tinggal memasukan password pada keypad yang tersedia.
       3.   Kemudahan yang didapat dengan memasang Lock Door ini tinggal memasukan password pada keypad yang tersedia, sehingga hanya orang tertentu yang bisa membuka pintu berkode.


   I. Saran
              Sebaiknya memperhatikan setiap proyek yang sedang dikerjakan dengan serius, cermat dan teliti sehingga ketika pembuatan proyek yang selanjutnya bisa lebih optimal.