Jumat, 04 Mei 2012

Pengunci Otomatis dengan Password

PENGUNCI PINTU (DOOR LOCK) BERPASSWORD MENGGUNAKAN KEYPAD DAN LCD DENGAN CODEVISION AVR

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.

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 (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. Saya tidak tahu kenapa? Jika teman-teman bisa memecahkannya tolong beri tahu saya!

Baiklah kembali lagi ke aplikasi yang akan kita buat. Langsung saja 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.


Berikut adalah listing program lengkapnya:

#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=0×15 ;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=0×00;//PD0 belogika low atau dlm keadaan unlock awalnya
DDRD=0×01;//PD0 sebagai output

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0×80;
SFIOR=0×00;

// LCD module initialization
lcd_init(16);

lcd_putsf(“ElectrO-cOntrOl”);
delay_ms(1500);
lcd_clear();

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

Jika ingin mendapatkan program dalam bentuk file CodeVision AVR dan file simulasi menggunakan proteus untuk aplikasi ini, silakan download pada link dibawah ini.

file codevision dan file simulasi proteus aplikasi door lock.

CATATAN: saat memasukkan password disarankan tidak diawali dengan angka 0, untuk lebih jelasnya lihat perhitungan untuk menjadikannya dalam satu variabel.

Semoga bermanfaat...

Sumber dari : http://elektro-kontrol.blogspot.com

Membuat Downloader AVR bentuk Parallel

Bagi temen-temen yang masih punya port parallel biasanya ada pada PC (personal computer), berikut adalah rangkaian downloader AVR menggunakan port parallel (biasa disebut LPT). Downloader ini support dengan Codevision AVR dan Ponyprog,  serta mendukung Atmega8535, Atmega8, Atmega16, dan Atmega32. (mungkin mendukung beberapa jenis Atmega lainnya, karena baru saya tes dengan chip yang baru saja disebutkan). Downloader parallel ini biasa disebut Kanda System STK200+/300.

CATATAN: dikarenakan tidak menggunakan IC buffer jadi disarankan agar kabel yang berasal dari port parallel ke mikrokontroler tidak terlalu panjang, yaitu sekitar maksimal 0,5 meter, karena dikhawatirkan terjadi drop tegangan dan data yang dikirimkan menjadi rusak.
Cara mensetting di CodeVision adalah sebagai berikut:
SETTINGPROGRAMMER → pilih Kanda System STK200+/300 dengan Port LPT1:378h
Cara mensetting di Ponyprog adalah sebagai berikut:
SETUP → INTERFACE SETUP → PARALLEL → pilih AVR ISP I/O → LPT1 → OK

Selasa, 01 Mei 2012

Lomba Untuk Anag SHIRO

Lomba akan di adakan Hari Jum'at
tnggal 4 Mei 2012...
waktunya.. pulang sekolah..

ini denah lintasannya...



untuk Hadiahnya...

akan deberikan spesial oleh.. pembimbing kita
"Pak. Anang Wahyu Hidayat"

Ayo semangat regg..
areg-areg "SHRO"

Minggu, 29 April 2012

untuk LTASC

ROBOT YANG MENGIKUTI LOMBA DI LTASC2012

yang pertama :

 
KID ROCK



yang kedua :
Bismillah
yang ketiga