Sunday, July 10, 2011

Arduino Severino sebagai Password kunci elektronik

Aplikasi Arduino Severino sebagai  password kunci elektronik  (dalam demo ini kunci elektronik disimulasikan dengan LED), Input Password  melalui keypad 4x4, apabila password benar maka LED akan menyala dan LCD menampilkan informasi "ACCESS GRANTED", jika password salah LED tidak akan menyala dan LCD menampilkan informasi "ACCESS DENIED"

Demo Video:

Skema Wiring

List Program:
/*
 Password for electronics key 
 by: Aan Darmawan
 date : July 2011
 web: http://valfa.blogspot.com
*/
// include the library code:
#include <LiquidCrystal.h>
#include <Keypad.h> 
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
const int nada[8]={
  131,175,262,349,523,698,1047,1397};
char keys[ROWS][COLS] = {
  {
    '1','2','3','A'        }
  ,
  {
    '4','5','6','B'        }
  ,
  {
    '7','8','9','C'        }
  ,
  {
    '*','0','#','D'        }
};
char berita[16]={
  ' ',' ',' ',' ',
  ' ',' ',' ',' ',
  ' ',' ',' ',' ',
  ' ',' ',' ',' '};
char tampil[16]={
  ' ',' ',' ',' ',
  ' ',' ',' ',' ',
  ' ',' ',' ',' ',
  ' ',' ',' ',' '};
byte rowPins[ROWS] = {
  14,15,16,17}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {
  9, 8, 7, 6}; //connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
byte k=4,n=0;

String jawab,kunci="123456";

void setup() {
  pinMode(13,OUTPUT);
  pinMode(10,OUTPUT);
  digitalWrite(13,LOW);
  lcd.begin(16, 2);
  lcd.print("Password:");
}

void loop() {
  //check key pressed
  char key = keypad.getKey();
  if (key != NO_KEY){
    berita[n]=key;
    tampil[n]='*';
    tone(10, nada[k],250);
    n++;
    if(n>15){
      for(n=1;n<=15;n++)berita[n-1]=berita[n];
      n=15;
      berita[n]=' ';
    }
    lcd.setCursor(0, 1);
    lcd.print(tampil);
    noTone(4);
  }  
  if(key=='#'){
    // jawaban 6 digit pertama yang masuk dipindah ke string
    for(n=0;n<6;n++)jawab+=berita[n];
    if(jawab==kunci){    
      digitalWrite(13,HIGH);
      lcd.setCursor(0, 1);
      lcd.print("Access Granted !");
      tone(10, nada[7],1000);
    }
    else {
      lcd.setCursor(0, 1);
      lcd.print("Access Denied ! ");
      tone(10, nada[1],500);
    }   
    delay(1500);
    for(n=0;n<=15;n++){
      berita[n]=' ';
      tampil[n]=' ';
    }
    lcd.setCursor(0, 1);
    lcd.print(tampil); 
    n=0;
    jawab=String();
  }
  else digitalWrite(13,LOW);
  delay(100);
}

71 comments:

Anonymous said...

ini pake bahasa apa ya gan?
maaf ane masih nyubi neh.hehe..

Aan Darmawan H said...

Pake C++ Arduino Gan....

Unknown said...

gan bole tnya,,, saya dah coba program nya dan sukses tapi,, pengen coba led nya d ganti sservo yg 180 drajat,tp g sukses2,, mungkin bisa bantu untuk pin dan program nya,, terima kasih

Aan Darmawan H said...

@andre:
pin 10 yang sebagai tone ke speaker dipindah ke pin lain misah ke pin 13. kemudian pin 10 digunakan sebagai pengendali servo.
semua tone yang berkaitan dengan pin 10 di ganti dulu dengan nomor pin baru, kemudian
kurang lebih programnya di ubah sbb:
pada bagian include ditambahkan
#include
Servo mservo;

pada bagian setup() ditambahkan:
mservo.attach(10);

kemudian pada loop() instruksi:
digitalWrite(13,HIGH) diganti menjadi
mservo.write(10,180);

digitalWrite(13,LOW) diganti menjadi
mservo.write(10,0);


selamat mencoba....

Aan Darmawan H said...

koreksi:
tertulis:
#include

seharusnya:
#include "Servo.h"

kemudian tambahkan instruksi di bawah mservo.write(.....,.....) dengan delay(20); untuk memastikan proses gerak servo selesai

Unknown said...

udah gan,, cmn klo buat kunci pintu kan musti bolak balik, pngennna 2 password satu untuk 0-180 yg satunya 180-0,, ato nggak 1 password bisa 2x ,, saat pertama password benar d pakai 0-180 lalu saat password benar d tkan lagi jadi 180-0,, bagaimana y?


oh iya untuk arduino 1.0.3 bisanya, mservo.write (180) jd pin g d tulis lg,, mungkin sudah d attach,, trima kasih,, gan

Aan Darmawan H said...

@andrek: thanks koreksinya, betul harusnya mservo.write(sudut)....:-)

untuk passwordnya 1 tapi sekali on (0 - 180) ,lalu sekali off (180 -0) coba tambahkan suatu variabel penanda (variable switch) misalkan nama variabel sw, set awal sw=0 yang menandakan kondisi di 0
buat cek kondisi sbb:
kalau password benar dan sw =0 putar servo 0-180 dan sw diset jadi = 1 (sw=1)
kalau password benar dan sw =1 putar servo 180-0 dan sw diset jadi = 0 (sw=0)

mudah2an membantu ilustrasi ini... selamat eksperimen...

Unknown said...

nah itu gan masih bingung penempatan + deklarasinya variable switch,, maklium sangat awam bahasa c,, dr kmaren kepikiran seperti itu cmn servo jalan cmn d 0-180 ,, mau bkn lg ekh malah servo rusak,,, jujur ini buat tugas,,,stlah d pencet lagi baru password malah melanjut kan 180,, mungkin butuh servo yg 360 lebih enak,, bisa 0-180 , 180-360,, mungkin bisa bantu lebi lanjut untuk servo 180,,, trima kash sbanyak2 nya,, gan

Unknown said...

mas mau tanya klo ini artinya apa
char keys[ROWS][COLS] = {
{
'1','2','3','A' }
,
{
'4','5','6','B' }
,
{
'7','8','9','C' }
,
{
'*','0','#','D' }
};
char berita[16]={
' ',' ',' ',' ',
' ',' ',' ',' ',
' ',' ',' ',' ',
' ',' ',' ',' '};
char tampil[16]={
' ',' ',' ',' ',
' ',' ',' ',' ',
' ',' ',' ',' ',
' ',' ',' ',' '};


sama yang ini mas
char key = keypad.getKey();
if (key != NO_KEY){
berita[n]=key;
tampil[n]='*';
tone(10, nada[k],250);
n++;
if(n>15){
for(n=1;n<=15;n++)berita[n-1]=berita[n];
n=15;
berita[n]=' ';
}
lcd.setCursor(0, 1);
lcd.print(tampil);
noTone(4);
trimakasih

Aan Darmawan H said...

// mendefinisikan var key sesuai dengan peta posisi keypad
char keys[ROWS][COLS] = {
{
'1','2','3','A' }
,
{
'4','5','6','B' }
,
{
'7','8','9','C' }
,
{
'*','0','#','D' }
};
// var berita untuk menampung data password yang di ketik melalui keypad sedangan var tampil untuk menampilkan ke lcd dalam bentuk char "*"
char berita[16]={
' ',' ',' ',' ',
' ',' ',' ',' ',
' ',' ',' ',' ',
' ',' ',' ',' '};
char tampil[16]={
' ',' ',' ',' ',
' ',' ',' ',' ',
' ',' ',' ',' ',
' ',' ',' ',' '};


sama yang ini mas
// tunggu masukan data dari keypad yg ditekan , kemudian di tampung di var berita (maks 16 karakter) sedangkan untuk ditampilkan di lcd bentuk "*" pakai variabel tampil
char key = keypad.getKey();
if (key != NO_KEY){
berita[n]=key;
tampil[n]='*';
tone(10, nada[k],250);
n++;
if(n>15){
for(n=1;n<=15;n++)berita[n-1]=berita[n];
n=15;
berita[n]=' ';
}
lcd.setCursor(0, 1);
lcd.print(tampil);
noTone(4);
trimakasih

Unknown said...

if(key=='#'){
// jawaban 6 digit pertama yang masuk dipindah ke string
for(n=0;n<6;n++)jawab+=berita[n];
if(jawab==kunci){
digitalWrite(13,HIGH);
lcd.setCursor(0, 1);
lcd.print("Access Granted !");
tone(10, nada[7],1000);
}
else {
lcd.setCursor(0, 1);
lcd.print("Access Denied ! ");
tone(10, nada[1],500);
}
delay(1500);
for(n=0;n<=15;n++){
berita[n]=' ';
tampil[n]=' ';
}
lcd.setCursor(0, 1);
lcd.print(tampil);
n=0;
jawab=String();
}

gan mau tanya maksud program diatas saya kurang paham.

Aan Darmawan H said...

@Abdul R: intinya apabila tombol # ditekan maka diambil 6 karakter pertama dari var berita dan disimpan di var jawab , jika isi var jawab sama dengan kunci maka acess granted jika tidak access debnied, setelah itu var berita dan var tampil dikosongkan

Najoe said...

Salam gan.
gimana kalomau pake door lock?
circuitnya gimana? sama codenya.
mohon diajarin.

Aan Darmawan H said...

@Najoe: tinggal ganti Rangkain LED+Resistor dengan Rele 5V, on/off door lock nya dikendalikan oleh rele..
Silahkan berkeksperimen... :-)

Unknown said...

misi gan, kodingnya udahh dicoba & bisa. tapi mau ditambah pake sms gateway modem wavecom biar bisa buka dari hp, masih bingung kodingnya. mohon pencerahannya

Aan Darmawan H said...

tidak usah bingung, cari topik "arduino dan modem wavecom untuk sms gateway" di paman google, sudah ada yang membahasnya, pelajari.... kemudian eksperimen menggabungkannya.... selamat berkarya...

Ruru said...
This comment has been removed by the author.
Ruru said...

saya coba ganti outputnya ke selenoid 5volt kok ga bisa ya? mohon dibantu

Aan Darmawan H said...

umumnya selonoid membutuhkan arus besar, jadi harus pakai penguat dulu pada output misalnya pakai transistor atau IC driver uln2803 dan sumber teganganpun harus memadai

Catur I. Permadi said...

Permisi gan... Ane dah coba programnya, ane belom berhasil gan... Denied terus... Ane coba ganti led indikator berhasilnya pake servo tapi belum bisa juga mohon bantuanya dong gan... Apa karena ane pake arduino uno?

Aan Darmawan H said...

@Catur, menggunakan Arduino Uno juga bisa saja, passwordnya 123456 kan? coba cek lagi sketch programnya...

DeBuMi said...

slmt mlm pak, sy mau tny,,
sy cba ganti keypad ini dgn remote kntrol utk kndalikn bbrpa led. pin 13 utk kalibrasi (led kedip 5detik) & pin lainny(misal pin12) utk indikator apbila pasword benar, led di pin12 ON.
Nah, yg jdi prtnyaan sy, knp led di pin13 nyalanya terang tp di pin12(indikatorny) sangat redup y???
dari semua pin yg sy cba(trmasuk analog) jg tdk bsa, ttap redup. hny pin13 yg normal.
:D
Tmksh pak..

Aan Darmawan H said...

@DeBuMi: bisa kirimkan skema dan sketch programnya ke email, agar bisa saya pelajari? kirim ke valfa007@gmail.com

Shichi Dizzy said...

gan, klo ada tanda ini "avrdude: stk500_getsync(): not in sync: resp=0x00" masalahnya apa dan solusinya gimana gan??

Aan Darmawan H said...

cek serial komunikasinya (COM) sudah sinkrond engan setting IDE arduino? biasanya masalah usb to serial yg tidak "match" atau coba saat upload, setelah keluar informasi berapa byte hasil compilenya di layar monitor, tekan tombol reset pada arduino nya.

Unknown said...

Pak mau tanya, kalau saya mau sambungin ke Relay yang bisa digunakan untuk menghidupkan perangkat arus AC, seperti Lampu, TV, Kipas, dll. Bagaimana rangkaian Relaynya pak? Lalu relay yang digunakan type apa dan ukuran apa?

Terima Kasih Pak,,

Aan Darmawan H said...

@Galang: saya pernah jawab pertanyaan ini pada post sebelumnya, coba cari post sebelumnya, intinya: ganti Rangkain LED+Resistor dengan Rele 5V, on/off perangkat AC nya dikendalikan lelaui rele

Denny Hadiwibowo said...

gan, minta library keypad dan password arduino dong, thx

Aan Darmawan H said...

@Denny : Silahkan sedot di
https://www.dropbox.com/s/v2mx3qyj1tjb1yl/kpd_pass.rar

Unknown said...

gan, boleh minta list komponen ap saja yang di perlukan ?

Aan Darmawan H said...

@Mhd.Irfan: lihat langsung di wiring diagram di atas, saya rasa sudah jelas... :-)

Unknown said...

speaker nya berapa volt ya?

Aan Darmawan H said...

kalau speaker satuannya Ohm, bisa gunakan speaker 4 ohm,8 ohm ataupun 16 ohm kekuatan dayanya bebas, sederhananya pakai saja speaker yg sering digunakan di komputer

Unknown said...

maaf gan mau tanya kalo mau buat LED di pin 13 nyala terus dan mati kalau kita tekan "*" gimana caranya?? mohon bantuanya gan. terimakasih

Aan Darmawan H said...

@iwan, awalnya inisialisasi Dengan digitalWrite(13,HIGH) agar Led Nyala, selanjutnya saat menekan '*' set jadi LOW agar padam.
kurang lebih cara untuk memadamkannya sbb:
:
:
char key = keypad.getKey();
if (key=='*'){
digitalWrite(13,LOW);
}
:
:

selamat eksperimen....

Heru Rahmat M said...

mas, mau tanya dong, kalau bikin program biar arduino bisa baca dan kirim lagi data kayak gini, "$GPL,12.000,N,009.98,S,100.90"
gmn? ngambil data nya tiap yg dibatasi ama koma

Aan Darmawan H said...

@Heru: pelajari teknik parsing data (google aja banyak koq yang bahas tentang teknik parsing)
lalu pelajari fungsi String yang ada di IDE arduino, bisa lihat contoh2 nya di menu File->Examples->Strings, saya rasa bisa gunakan fungsi indexof() yang dikombinasikan dengan substring()

Selamat bereksperimen....

Unknown said...

pak, mau nanya kalau di sambungkan ke solenoid door lock, butuh relay apa gmn? kalau butuh, tipe relay yg bagaiamana?
terimakasih.

Aan Darmawan H said...

@anggi:betul pakai relay 5V,solenoid relaynya sambungkan ke pin 13 arduino dan ground (paralelkan dengan dioda 1n4002,anodanya hubungkan ke ground,katodanya ke pin 13), kemudian pakai sumber tegangan solenoid doorlock nya terpisah,yang diserikan ke switch relay dalam kondisi Normaly Open.

Unknown said...

mas, saya mau nanya? saya tambahkan sebuah code program sensor pir jika password benar, tetapi sensor tersebut tidak membaca mas, kecuali kita menekan tombol *. Pdahal seharusnya sensor itu lngsung mendeteksi secara otomatis. Bagaimana cara mengatasi itu mas? Makasih mas.

Aan Darmawan H said...

@Frisca: coba tampilkan list program tambahannya, supaya bisa kita diskusikan penyelesaiannya.

heriyanto said...

Permisi agan Aan, mau tanya niih..
Jika suatu waktu kita lupa dengan password yang sudah kita buat, bagaimana cara mengganti password yang lama dengan mengganti password yang baru dan program yang mana yang harus di tambahkan?
Dengan catatan untuk mengubah password yaitu hanya menekan tombol “*” pada keypad dan selanjutnya menekan 6 buah digit kode baru dan diakhiri dengan menekan tombol “#” pada keypad, jadi kelebihan pada alat agan terdapat pada fitur penggantian dan penyimpanan kode password baru, dimana penggantian kode password baru ini tidak diperlukan pemograman ulang melalui komputer namun dapat dilakukan secara langsung dari keypad dan ketika Arduino dimatikan (tidak diberi suplay) kode password yang sudah disimpan tidak akan hilang karena kode password baru disimpan di EEPROM.
Terima kasih.. :)

Aan Darmawan H said...

@Heriyanto, terima kasih atensinya, pertama saya sampaikan saya bukan kaskuser dan blog ini bukan untuk kaskuser saja tapi untuk umum, jadi ga perlu pakai kata agan.
saya hanya membagikan konsepnya saja, jadi silahkan dikembangkan sendiri, betul arah pemikiran anda bahwa memang harus menyimpan data password tersebut ke EEPROM untuk keperluan yg anda inginkan, saya setuju. Silahkan pelajari prinsip penyimpanan data ke EEPROM, kemudian silahan dikembangkan program di atas.

sulis said...

maaf pak, saya mau tanya. klo kita mau hidupkan terus pin 13 saat password benar gimana caranya ya? karna disini ketika password benar led nya hanya menyala beberapa detik saja trus mati.
dan bisakah kita buat perintah, jika password yg kita masukkan salah hingga beberapa kali, alrm akan berbunyi hingga password yg kita masukkan benar. terimakasih banyak

Aan Darmawan H said...

@Sulis, agar alarm bunyi terus, hapus instruksi baris ke 2 dari bawah [hapus instruksi : else digitalWrite(13,LOW); ], kalau untuk agar alarm bunyi terus setelah salah beberapa kali, harus ditambah variabel counter yang menghitung kesalahannya sudah berapa kalinya, selanjutnya gunakan instruksi if untuk menyalakan alarmnya, silahkan berkesperimen.......

Unknown said...

Mas saya sudah coba tpi kenapa tampilan di lcd saya ketika di tekan itu nebjadi 789cpassword bukan password saja

Aan Darmawan H said...

@yova: Coba cek lagi koneksi rangkaiannya, atau ada kemungkinan power supply nya kurang kuat.

Unknown said...

sudah ketemu pa ternyata masalhnya pada ..
char tampil[16]={
' ',' ',' ',' ',
' ',' ',' ',' ',
' ',' ',' ',' ',
' ',' ',' ',' '};
ketika sketch bagian itu di hapus tampilannya sesuai yg diinginkan.
tapi saya menemukan problem baru lagi pa, bagaimana pa kalau alarm nyala terus ketika pass buka kunci salah dua kali? baru belajar arduino pa mohon pencerahannya.

Aan Darmawan H said...

silahkan baca comment comment sebelumnya

Unknown said...

Mau nanya mas..bisa gk password nya diubah dari 6 digit menjadi 12 digit mas? Tanks mas

Unknown said...

Mau nanya mas..bisa gk password nya diubah dari 6 digit menjadi 12 digit mas? Tanks mas

Aan Darmawan H said...

@Dino, bisa saja, di ubah saja variabel kunci nya,dan looping penampung jawaban nya, silahkan bereksperimen

Unknown said...

Tanks mas

DAPAT UANG MUDAH DAN GAMPANG DENGAN ANDROID said...

Gan bisa kirmkan ke email sya ngak program nya? Emailnya : vickylovesari@gmail.com
Dan mau tanya ini gan itu kodenya bisa diganti" ngak? Thx artikelnya sangat membntu

Aan Darmawan H said...

list program di atas sudah lengkap, tinggal Copy &Paste saja, kalau yang dimaksud kode adalah password, bisa saja di ganti , silahkan dipelajarai sketch programnya dan diubah; ... selamat bereksperimen..

Unknown said...

sketch_sep19a:42: error: 'Keypad' does not name a type
sketch_sep19a.ino: In function 'void loop()':
sketch_sep19a:57: error: 'keypad' was not declared in this scope
sketch_sep19a:58: error: 'NO_KEY' was not declared in this scope

kenapa ya ? newbie kk, bantu ya . .

Aan Darmawan H said...

pastikan file Keypad.h nya sudah terinstall di folder library nya Arduino, kalau belum ada,file bisa dicari via google

Unknown said...

mas kalo pengin menggunakan passwordnya dua pake apa ya, seumpama password 1 buat buka pintu password 2 pake buka garasi

Unknown said...

tolong bantuannya mas.

Aan Darmawan H said...

banyak cara, contohnya variabel "kunci", dimodifikasi menjadi "kunci1" dan "kunci2" yang masing masing berisi password yg berbeda, kemudian pada pengecekan variabel kunci thd jawaban masing masing di cek , misal if(jawab==kunci1)...... lalu cek lagi if(jawab==kunci2)......
Jangan lupa pada hardware tentukan pin untuk buka garasinya...
Semoga menginspirasi, selamat bereksperimen

Unknown said...

mas saya sudah coba program yang di atas tapi masih belum berhasil,minta tolong mas untuk program door lock menggunakan keypad

Aan Darmawan H said...

@Rifqi, error nya di mana, bisa share programnya ?

Unknown said...

mas mau tanya utk program arduino ini apabila dikombinasi dengan penguncinya menggunak magnet induksi programnya bagaimana mas? tetap menggunakan password saat masuk dan keluar tinggal emmencet tombol push buton

Unknown said...

mas mau tanya utk program arduino ini apabila dikombinasi dengan penguncinya menggunak magnet induksi programnya bagaimana mas? tetap menggunakan password saat masuk dan keluar tinggal emmencet tombol push buton

Aan Darmawan H said...

@Ahmad, salah satu contoh aplikasinya, pin digital 13 disambungkan ke rele 5v dan menggerakan kunci magnet, untuk tombol keluar tambahkan switch di pin digital 18 (analog A4) dan set sebagai Input, modifikasi sketchnya.

Toko Laptop Bekas di Palembang said...

Gan mau tanya apakah bisa membuat kunci tersebut tanpa mengunci secara otomatis

Aan Darmawan H said...

@Tama, maaf saya tidak paham apa yang dimaksud kalimat " bisa membuat kunci tersebut tanpa mengunci secara otomatis" ?

Unknown said...

Pa bisa ga di program ditambahkan simbol * untuk menghapus angka yg telah dipencet ke password? Mohon bantuannya

Aan Darmawan H said...

@Irfan: bisa saja, idenya sbb:
diatas instruksi if(key=='#'){ ....
buat instruksi mengecek tekan tombol *, kalau tombol * yang ditekan hapus karakter yang terakhir masuk,kurang lebih prog/algoritmanya:
if(key=='*'){
// hapus karakter yang terkahir yg diisi
n=n-1;
berita[n]=" ";
tampil[n]=" ";
// tampilkan display
lcd.setCursor(0,1);
lcd.print(tampil);
}
tinggal disempurnakan sendiri,misal apabila pertama kali belum isi password, terus tekan *, program bagian ini tidak boleh bekerja..
selamat bereksperimen.....

hamzah said...

Misi mas, ada project proteusnya kah

Karya said...

Misi numpang tanya. Kalo kita di arduino passwordnya boleh lebih dari 1 kah? Atau memang hanya bisa satu password. Ga bisa pass1, pass2?