29
BAB III PERANCANGAN ALAT DAN PROGRAM 3.1
Persiapan Perancangan Alat Dalam bab ini membahas mengenai perancangan alat mulai dari
perancangan perangkat keras ( Hardware ) hingga perancangan perangkat lunak ( Software ) Untuk mempermudah dalam perancangan maka diperlukan sebuah blok diagram yang terlihat seperti gambar di bawah ini.
LCD 16 x 2 Sensor PIR
Green Bright
Arduino
Buzzer
Key Pad 3 x 4 Char Solenoid
Gambar 3.1 Diagram Blok Rangkaian Sistem Pengaman Ganda Kunci Elektronik Dari Blok Diagram dapat kita liat apa saja yang diperlukan dalam perancangan alat diantaranya : 1. Sensor PIR Sebuah sensor yang di kemas dalam rangkaian integrasi sehingga perancang di mudahkan dalam mempergunakan. Sensor ini difungsikan untuk pendeteksi gerakan.
30
2. Keypad 3 x 4 Berfungsi sebagai Input, dimana password sebagai kunci untuk membuka pintu di masukkan menggunakan keypad. 3. Arduino Deumilanove Merupakan induk program dari perangkat lunak untuk di aplikasikan sesuai kebutuhan. 4. LCD 16 x 2 Merupakan
indikator yang memberikan tapilan level air secara jelas
sehingga lebih mudah dari segi pembacaan. 5. Alarm Buzzer Sebagai tanda apabila salah memasukkan password atau sensor gerak ( PIR ) mendeteksi adanya suatu gerakan, buzzer ini sebenarnya hanya sebuah tranducer yang merubah sinyal listrik menjadi suara, seperti halnya pada load speaker 6. Solenoide 12 VDC Merupakan alat yang di gunakan untuk mengunci pintu secara elektronik.dimana bila password dimasukan dan benar maka solenoid akan bekerja.
3.2
Proses Perancangan Alat Setelah memahami dan mempersiapkan peralatan sesuai dengan blok
diagram, langkah selanjutnya membuat rangkaian dari masing – masing blok.Rangkaian – rangkaian yang akan dibuat meliputi ;
31
a) Rangkaian sensor gerak ( PIR ) dengan Arduino b) Rangkaian Keypad dengan Arduino c) Rangkaian LCD 16 x 2 dengan Arduino d) Rangkaian Buzzer e) Rangkaian solenoid 12 V DC
3.2.1
Rangkaian Sensor Gerak ( PIR ) Sensor gerak PIR berfungsi sebagai input ( masukan ) sistem rangkaian
Arduino deumilanove. Dimana kaki no 2 ( Data di hubungkan ke pin Arduino ( pin A0 sebagai input data ). Sensor ini akan bekerja jika ada seseorang yang berjalan melewati sensor , maka sensor akan menangkap pancaran sinar infra merah pasif yang dipancarkan oleh tubuh manusia yang memiliki suhu yang berbeda dari lingkungan sehingga menyebabkan material pyroelectric bereaksi menghasilkan arus listrik karena adanya energi panas yang dibawa oleh sinar infra merah pasif tersebut yang kemudian di bandingkan oleh sebuah rangkaian comparator sehingga menghasilkan output.
Gambar 3.2 Penampang PIR Spesifikasi Passive Infra Red : Input Voltage
: DC 4,5 – 20 V
Static Current
: 50 mikroAmpere
32
Output signal
: 0,3 V or 5 V ( output ketika mendeteksi )
Sentry Angle
: 110 degree
Sentry Distance
: max 7 m
Shunt for setting override trigger
: H – Yes , L - No
Gambar 3.3 Skema pin Sensor PIR
Gambar 3.4 Skema Rangkaian Sensor PIR dan Arduino
3.2.2 Rangkaian Keypad dengan Arduino Keypad merupakan salah satu perangkat elektronik, dalam sistem embedded ( microcontroller ), keypad merupakan salah satu jenis perangkat antar muka yang digunakan sebagai input sinyal. Pada rangkaian ini keypad di gunakan
33
untuk memamasukan password ( kata kunci ) yang sudah di set dalam pemrograman arduino.
Gambar 3.5 Skema Rangkaian Sensor keypad dan Arduino
Set point merupakan bagian masukan dalam system.Pada penggunaan keypad ini perancang hanya menggunakan 6 digit dari 12 digit sebagai kode rahasia untuk untuk membuka atau mengamankan pintu kecuali “ * “ dan “ # “.
3.2.3 Rangkaian LCD 16 x 2 dengan Arduino Untuk menampilkan keterangan system kerja alat seperti kode rahasia ( password key ), bila sensor gerak mendeteksi gerakan manusia, maka digunakan LCD 16 x 2 baris untuk menampilkan hasil dari instruksi. Pada rangkaian LCD sudah terdapat rangkaian driver sehingga bisa berfungsi dengan baik. Adapun skema rangkaian LCD dengan arduino sebagai berikut.:
34
Gambar 3.6 Skema Rangkaian LCD 16 x 2 dan arduino
Pada rangkaian LCD 16 x 2 port DB 4 s/d DB 7 dihubungkan dengan port digital arduino port 7 sampai dengan port 10, sedangkan untuk Vo LCD dihubungkan dengan potensio 10k – 20k Ohm untuk mengatur kecerahan dari LCD.
Masukan yang di perlukan untuk mengedalikan modul ini berupa bus data yang masih multiplek dengan alamat serta 4 bit sinyal kontrol. Sementara
35
pengendalian dotmatrik LCD dilakukan secara internal oleh controller yang sudah terpasang pada modul LCD.
Tabel 3.1 Fungsi Pin – Pin LCD
36
Gambar 3.7 Proses pengawatan LCD 16 x 2
3.2.4 Rangkaian Buzzer dengan Arduino Buzzer akan berbunyi saat instruksi tidak sesuai dengan prosedur, misalnya terjadi kesalahan dalam memasukan password atau bila sensor PIR mendeteksi adanya gerakan di dalam rumah.
Gambar 3.8 Skema Buzzer dan Arduino
37
3.3
Proses Perancangan Program ( Software ) Setelah proses rangkaian selesai dibuat langkah selanjutnya adalah
membuat program pada apliaksi program arduino IDE (Integrated Development Environment). Pada proses pembuatan program arduino IDE perancang menggunakan Arduino versi 1.0.1. Buka program aplikasi arduino IDE kemudian buat program pada aplikasi arduino IDE Sketch.
Gambar 3.9 Program Arduino IDE (Integrated Development Environment)
38
3.3.1 Bahasa Program Arduino IDE yang digunakan
Void (Setup) Fungsi setup ( ) hanya dipanggil satu kali ketika program pertama kali
dijalankan. Ini digunakan untuk pendefinisian mode pin atau memulai komunikasi serial. Fungsi setup ( ) harus diikut sertakan dalam program walaupun tidak ada statement yang dijalankan. Contoh :
void setup() { pinMode(13,OUTPUT); // mengset ‘pin’ 13 sebagai output }
Loop
Setelah melakukan fungsi setup ( ) maka secara langsung akan melakukan fungsi loop ( ) secara berurutan dan melakukan instruksi-instruksi yang ada dalam fungsi loop ( ).
39
Contoh : void loop() { digitalWrite(13, HIGH); // nyalakan ‘pin’ 13 delay(1000);
// pause selama 1 detik
digitalWrite(13, LOW);
// matikan ‘pin’ 13
delay(1000);
// pause selama 1 detik
}
Serial begin () Statement ini digunakan untuk mengaktifkan komunikasi serial dan
mengset baudrate. Contoh : void setup() { Serial.begin(9600);
//open serial port and set baudrate 9600 bps
}
DigitalWrite (pin, value)
Digunakan untuk mengset pin digital. Pin digital arduino mempunyai 14 (0 –13).
40
Contoh :
digitalWrite ( pin, HIGH ); // set pin to HIGH //DoSomething;
digitalRead (pin) Membaca nilai dari pin yang kita kehendaki dengan hasil HIGH atau LOW Value = digitalRead(pin);
// mengset ‘value’ sama dengan pin
//DoSomething;
Analog Read () Papan Arduino memiliki 6 chanel, 10 bit analog ke digital, artinya kita
dapat memasukkan tegangan antara 0 dan 5 volts pada nilai integer antara 0 sampai 1023. Kisaran input atau masukan dan resolusi dapat dirubah menggunakan analog reference. Untuk membaca analog input dibutuhkan dibutuhkan sekitar 100 microsecond (0.0001 s). Jadi rata – rata membacanya sekitar 10.000 kali dalam satu detik. Catatan : jika pin analog input tidak dapat terkoneksi dengan apapun nilainya akan kembali pada analogRead. Syntax : analogRead(pin)
41
Contoh : Int analogPin = 3 // potentiometer wiper middle terminal connected to analog pin 3 Void setup () { Serial.begin (9600); } Void loop () { Val = analogRead(analogPin); // Read the input pin Serial.println(val); //debug value }
Delay ( ) Menghentikan program untuk mengukur waktu (dalam millisecond ) yang
terspesifikasi pada parameter (ada 1000 milisecond dalam setiap detik). Pada saat mudahnya membuat LED berkedip dengan fungsi delay, beberapa sketch atau lembar kerja mengalami delay. Membaca sensor, perhitungan Matematika, atau memanipulasi Pin dapat berkerja pada saat fungsi delay bekerja. Beberapa program berbasis pengetahuan biasanya menghindari penggunaan delay untuk kegiatan yang membutuhkan waktu lebih dari 10 miliseconds.
42
Delay(1000);
// menunggu selama satu detik
Serial.Println (rate) Mengirimkan data ke serial port.
Serial.println(100);
// mengirimkan 100
Variable Variable adalah sebuah penyimpan nilai yang dapat di gunakan dalam
program. Variable dapat di rubah sesuai dengan instruksi yang kita buat. Ketika mendeklarisikan variable harus di ikut sertakan type variable serta nilai awal variable.
Type variableName = 0;
Contoh : Int inputVariable = 0;
// mendefinisikan sebuah variable bernama
inputVariable dengan nilai awal 0
inputVariable = analogRead(2); // menyimpan nilai yang ada di analog pin 2 ke inputVariable }
43
Variable scope Sebuah variable dapat dideklarasikan pada awal program sebelum void
setup ( ), secara lokal di dalam sebuah function, dan terkadang di dalam sebuah block statement pengulangan. Sebuah variable global hanya satu dan dapat digunakan pada semua block function dan statement didalam program. Variable global dideklarasikan pada awal program sebelum fungsi setup ( ). Contoh penggunaan:
int value; // ‘value’ adalah variable global dan dapat di gunakan pada semua block funtion void setup() { // no setup needed }
void loop() { for (int i=0; i<20;) // 'i' hanya dapat di gunakan dalam pengulangan saja { i++; } float f; // 'f' sebagai variable local }
44
If…else Operator if…else mengtest sebuah kondisi apabila tidak sesuai dengan
kondisi yang pertama maka akan mengeksekusi baris program yang ada di else. If ( inputPin == HIGH ) { //Laksanakan rencana A; } Else { //Laksanakan rencana B; }
For Operator for digunakan dalam blok pengulangan tertutup For ( initialization; condition; expression ) { //doSomethig; } //DoSomething;
45
pinMode (pin, mode) Digunakan dalam void setup ( ) untuk mengkonfigurasi pin apakah sebagai
Input atau Output. Arduino digital pins secara default di konfigurasi sebagai input sehingga untuk merubahnya harus menggunakan operator pinMode ( pin, mode ).
pinMode (pin, OUTPUT);
// mengset pin sebagai output
digitalWrite(pin, HIGH); // pin sebagai source voltage
Function Function ( fungsi ) adalah blok pemrograman yang mempunyai nama dan
mempunyai statement yang akan di eksekusi ketika function di panggil. Fungsi void setup ( ) dan void loop ( ) telah di bahas di atas dan pembuatan fungsi yang lain akan di bahas selanjutnya.
Cara pendeklarasian function : type functionName(parameters) { // Statement; }
46
Contoh: int delayVal() { int v; // membuat variable ‘v’ bertipe integer v = analogRead(pot); // baca harga potentiometer v /= 4; // konversi 0-1023 ke 0-255 return v; // return nilai v }
Pada contoh di atas fungsi tersebut memiliki nilai balik int (integer), karena kalau tidak menghendaki adanya nilai balik maka type function harus void. Setelah mengetahui bahasa pemrograman yang di buat langkah selanjutnya menbuat program yang untuk masing masing alat seperti yang ditunjukkan pada diagram alur seperti di bawah ini :
47
Gambar 3.10 Proses Kompilasi – linking dari Pemograman IDE
48
3.3.2 Program Pendeteksi gerakan Sesuai dengan fungsinya PIR merupakan alat atau perangkat yang digunakan untuk mendeteksi gerakan manusia, alat ini akan bekerja jika ada gerakan manusia yang melintasi
PIR. Sensor ini di kendalikan dengan
menggunakan control arduino, setelah selasai merakit rangkaian sensor gerakan langkah selanjutnya membuat program IDE pada sketch arduino 1.0.1.
Gambar 3.11 Program Motion Detection pada sketch Arduino
49
Program motion detection : Electronik Key With Password by: Handoko Sukamto date : Desember 2012
*/ // include the library code: const int pir = 14; //Sensor PIR dikoneksikan ke pin 14 int pirstate = 0; //Mendeklarasikan nilai awal dari PIR
void setup() { pinMode(pir,INPUT); }
//------------------------------------------------------//sub program untuk mendeteksi gerakan //-------------------------------------------------------
}
50
void motiondetection (){ pirstate = digitalRead(pir); //nilai dari pirstate diambil dari pembacaan sensor PIR if (pirstate == HIGH) { //jika pirstate = 1, maka digitalWrite(Buzzer,HIGH); //nyalakan Buzzer lcd.setCursor(0,0); lcd.print(" Ada orang
");
lcd.setCursor(0,2); lcd.print( " Dalam Rumah " ); delay (1000); lcd.clear(); lcd.print(" Enter Password "); digitalWrite(Buzzer,LOW); //Matikan Buzzer } else { //jika pirstate = 0, maka digitalWrite(Buzzer,LOW); //Matikan Buzzer } } void loop(){ motiondetection (); }
51
3.3.3 Program LCD 16 x 2 Pada bagian ini akan mengulas tentang pemrograman standar LCD 16 x 2 dengan arduino.Program ini di buat agar LCD ( Liquid Crystal Display ) bisa menampilkan apa yang dim au dari perencana seperti jika mendeteksi gerakan, atau saat memasukan kode rahasia ( password ) pembuka kunci. Contoh program LCD ( Liquid Crystal Display ) :
// include the library code:
#include
LiquidCrystal lcd(7, 8, 9, 10, 11, 12); lcd.begin(16,2); lcd.print(" Enter Password ");
void setup() { // set up the LCD's number of columns and rows: lcd.begin(16, 2); // Print a message to the LCD. lcd.print("hello, world!"); }
52
void loop() { // Turn off the cursor: lcd.noCursor(); delay(500); // Turn on the cursor: lcd.cursor(); delay(500); }
3.3.4 Program Buzzer Untuk menghubungkan Buzzer/piezo elements ke salah satu pin digital Arduino. Sebuah Buzzer akan menghasilkan suara ketukan setiap kali dialiri gelombang arus listrik. Pada saat menempatkan buzzer, perhatikan polaritas-nya (tanda +) jangan terbalik. Kaki dengan tanda +dihubungkan dengan pin 13 Arduino.
53
Berikut contoh programnya :
/* Piezo
This example shows how to run a Piezo Buzzer on pin 13 using the analogWrite() function.
It beeps 3 times fast at startup, waits a second then beeps continuously at a slower pace
*/ void setup() { // declare pin 13 to be an output: pinMode(13, OUTPUT); beep(50); beep(50); beep(50); delay(1000); }
54
void loop() { beep(200); }
void beep(unsigned char delayms){ analogWrite(13, 20);
// Almost any value can be used except 0 and 255
// experiment to get the best tone delay(delayms); analogWrite(13, 0); delay(delayms);
// wait for a delayms ms // 0 turns it off // wait for a delayms ms
}
3.3.5 Program Keypad Keypad di gunakan untuk memasukan kode rahasia ( password ) yang di rancang oleh perancang, sehingga harus di set pada pemrograman dengan menggunakan sketch arduino 1.0.1,
55
Berikut contoh program keypad :
*/ // include the library code: #include
const byte ROWS = 4; //four rows const byte COLS = 3; //four columns char keys[ROWS][COLS] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'*','0','#'} }; char berita[16]={ ' ',' ',' ',' ', ' ',' ',' ',' ', ' ',' ',' ',' ', ' ',' ',' ',' '}; char tampil[16]={ ' ',' ',' ',' ', ' ',' ',' ',' ', ' ',' ',' ',' ', ' ',' ',' ',' '};
56
byte rowPins[ROWS] = { 0,1,2,3}; //connect to the row pinouts of the keypad byte colPins[COLS] = { 4,5,6 }; //connect to the column pinouts of the keypad Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); byte k=3,n=0; char PIN[6]={'1','2','3','4','5','6'}; // our secret (!) number char attempt[6]={ 0,0,0,0,0,0}; // used for comparison int z=0; void setup() { lcd.begin(16,2); lcd.print(" Enter Password "); } //------------------------------------------------//Bila PIN benar, akan dieksekusi sub program ini : //-------------------------------------------------
void correctPIN() // do this if correct PIN entered { lcd.print("* Correct PIN *");