58
BAB III
REALISASI DAN PERANCANGAN
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.
Dari Blok Diagram dapat kita lihat apa saja yang diperlukan dalam perancangan alat diantaranya :
1. Sensor Fingerprint
Sebuah sensor yang dikemas dalam rangkaian integrasi sehingga perancang dimudahkan dalam mempergunakan sensor terhadap rangkaian. Sensor ini difungsikan sebagai alat pembaca sidik jari. Dimana sensor fingerprint ini akan terintergrasi dengan program pembacaan sidik jari yang terdapat pada arduino. SENSOR FINGERPRINT ARDUINO SOLENOID BATERAI LI- PO RELAY POWER SUPPLY
59 2. Power Supply 5 VDC
Merupakan rangkaian elektronika yang digunakan sebagai penurun tegangan ke 5 VDC, tegangan tersebut dibutuhkan arduino untuk menjalankan system pemograman.
3. Baterai Lithium Polymer
Berfungsi sebagai sumber yang akan digunakan untuk menyediakan listrik ke dalam power supply 5 VDC dan juga Solenoid
4. Arduino Uno
Merupakan induk program dari perangkat lunak untuk diaplikasikan dengan komponen atau rangkaian elektronika lainnya.
5. Relay
Berfungsi sebagai saklar pada sirkuit kelistrikan. Dimana relay pada kondisi ini digunakan untuk menggerakan solenoid.
6. Solenoid
Merupakan alat yang digunakan sebagai pembuka atau pengunci secara elektronik. Dimana apabila scanning sidik jari berhasil, maka solenoid akan bekerja.
3.2 Proses Perancangan Alat
Setelah memahami dan mempersiapkan peralatan sesuai dengan blok diagram, langkah-langkah selanjutnya membuat rangkaian dari masing-masing blok. Rangkaian- rangkaian yang akan dibuat meliputi:
a) Rangkaian sensor fingerprint dengan Arduino b) Rangkaian Catu Daya 5 VDC dengan Arduino c) Rangkaian Driver relay dengan Arduino
60 d) Rangkaian Solenoid dengan Arduino e) Rangkaian Keseluruhan
3.2.1 Rangkaian Sensor Fingerprint dengan Arduino
Sensor Fingerprint berfungsi sebagai input ( masukan ) sistem rangkaian
Arduino Uno. Dimana pin 1 sebagai VCC ( masukan tegangan), pin 2 dan 3 sebagai data yang dihubungkan ke Arduino Uno dan pin 4 sebagai GND. Sensor bekerja pada saat proses scan mulai berlangsung saat jari diletakkan pada lempengan kaca dan sebuah kamera CCD mengambil gambarnya. Pemindai memiliki sumber cahaya sendiri, biasanya berupa larik light emitting diodes (LED), untuk menyinari alur sidik jari. Sistem CCD menghasilkan gambar jari yang terbalik, area yang lebih gelap merepresentasikan lebih banyak cahaya yang dipantulkan (bagian punggung dari alur sidik jari), dan area yang lebih terang merepresentasikan lebih sedikit cahaya yang dipantulkan (bagian lembah dari alur sidik jari).
Sebelum membandingkan gambar yang baru saja diambil dengan data yang telah disimpan, processor scanner memastikan bahwa CCD telah mengambil gambar yang jelas dengan cara melakukan pengecekan kegelapan rata-rata piksel, dan akan menolak hasil pemindaian jika gambar yang dihasilkan terlalu gelap atau terlalu terang. Jika gambar ditolak, pemindai akan mengatur waktu pencahayaan, kemudian mencoba pengambilan gambar sekali lagi.
Jika tingkat kegelapan telah mencukupi, sistem scanner melanjutkan pengecekan definisi gambar, yakni seberapa tajam hasil scan sidik jari. Pemroses memperhatikan beberapa garis lurus yang melintang secara horizontal dan vertikal. Jika definisi gambar sidik jari memenuhi syarat, sebuah garis tegak lurus yang
61
berjalan akan dibuat di atas bagian piksel yang paling gelap dan paling terang. Jika gambar sidik jari yang dihasilkan benar-benar tajam dan tercahayai dengan baik, barulah pemroses akan membandingkannya dengan gambar sidik jari yang ada dalam database.
Spesifikasi Sensor Fingerprint
• Supply voltage : 3.6 - 6.0VDC
• Operating current : 120mA max
• Peak current : 150mA max
• Fingerprint imaging time : <1.0 seconds
• Window area : 14mm x 18mm
• Signature file : 256 bytes
• Template file : 512 bytes
• Storage capacity : 162 templates
• Safety ratings (1-5 low to high safety)
• False Acceptance Rate : <0.001% (Security level 3) Gambar 3.2 Sensor Fingerprint
62
• False Reject Rate : <1.0% (Security level 3)
• Interface : TTL Serial
• Baud rate : 9600, 19200, 28800, 38400, 57600
(default is 57600)
• Working temperature rating: -20C to +50C
• Working humidity : 40%-85% RH
• Full Dimensions : 56 x 20 x 21.5mm
• Exposed Dimensions (when placed in box): 21mm x 21mm x 21mm
triangular • Weight : 20 grams RX TX 5V GND
63
3.2.2 Rangkaian Catu Daya 5 VDC dengan Arduino
Catu daya merupakan rangkaian elektronika yang berfungsi untuk menyediakan daya pada peralatan elektronik. Komponen utama rangkaian catu daya yaitu Baterai lithium polymer, kondensator elektrolit ( elco ), IC Regulator 7805. Input tegangan 12 VDC dari baterai kemudian tegangan diturunkan melalu IC Regulator 7805, sehingga keluaran tegangan yang dihasilkan menjadi 5 VDC. Kemudian keluaran tegangan yang dihasilkan dari catu daya akan menjadi input pada Arduino Uno agar sistem dapat bekerja dengan baik
64
3.2.3 Rangkaian Driver Relay dengan Arduino
Relay pada dasarnya adalah sakelar yang membuka dan menutupnya ( open dan closenya) dengan tenaga listrik melalui coil relay yang terdapat di dalamnya. Pada awalnya sebuah relay di anggap memiliki coil/lilitan tembaga/cooper yang melilit pada sebatang logam, pada saat coil di beri masukan arus/ tegangan listrik/elektrik maka coil akan membuat medan elektromagnetik yang mempengaruhi batang logam di dalam lingkarannya tersebut untuk menjadikannya sebuah magnet.
65
Pada rangkaian ini dibutuhkan sebuah driver relay untuk menyearahkan tegangan sehingga dapat berfungsi dengan baik. Driver relay membutuhkan instruksi program agar dapat menjalankan fungsinya, maka pin yang digunakan pada pin Arduino adalah A0 sebagai output data. Jika data yang didapatkan adalah logik 1 atau kondisi benar, maka driver relay akan mengalirkan tegangan dari baterai sebesar 12 VDC ke solenoid, adapun skema rangkaian driver relay dengan Arduino sebagai berikut
66 3.2.4 Rangkaian Solenoid dengan Arduino
Solenoid akan bekerja pada kondisi pull down ( menarik ) apabila mendapatkan tegangan 12 VDC. Pada saat data fingerprint yang dimasukkan cocok dengan databse yg ada di Arduino, maka relay akan bekerja mengalirkan tegangan 12 VDC dari baterai menuju solenoid.
3.2.5 Rangkaian Sistem Kesluruhan
Setelah melakukan perancangan bagian dari rangkaian seperti catu daya, driver relay, fingerprint, baterai, solenoid dan Arduino. Kemudian melakukan
67
penggabungan semua sistem, dimana adapun skema rangkaian keseluruhan sistem sebagai berikut.
Fungsi pin pada Arduino :
- Pin 2,3 = Data Fingerprint
- Pin 8,9 = Dip Switch
- Pin A0 = Solenoid
- Pin GND = Ground catu daya
- Pin 5V = Tegangan 5v catu daya
68 3.2.6 Perancangan Mekanisme Gembok
Setelah melakukan perancangan rangkaian pada setiap bagian, kemudian perlu dilakukan perancangan mekanik sebagai penggerak gembok.
Pada Gambar 3.8 sistem mekanik yang dibuat terdiri dari box dengan ukuran 10x6 cm, sanggahan gembok di desain sedemikian rupa, roda berfungsi sebaga penahan sanggahan gembok agar tidak keluar, solenoid pada saat kondisi sebagai pengunci atau logik 0. Pada saat solenoid diberikan tegangan, kondisinya akan pull down atau pengunci akan terbuka.
69
Pada Gambar 3.9 diaplikasikan penggunaan switch yang berfungsi sebagai tombol on/off, sehingga sistem dapat bekerja efektif dan hemat daya.
Agar sistem dapat bekerja tentu dibutuhkan daya, untuk itu tegangan yang diperlukan untuk menggerakan solenoid sebesar 12 VDC dan rangkaian arduino sebesar 5 VDC. Dengan baterai lithium polymer 3.7v / 1000mAh sebanyak 3 baterai kemudian dirangkai secara seri sehingga menghasilkan tegangan sebesar 11.1
Gambar 3.9 Gembok dengan Switch
70
VDC, meskipun tegangan output tidak sesuai dengan tegangan yang dibutuhkan oleh solenoid, namun tegangan 11.1 VDC tetap dapat menggerakkan solenoid.
Setelah pemasangan switch button dan penempatan baterai lithium polymere pada bagian bawah box. Kemudian pemasangan kabel-kabel pada solenoid ke socket keluaran tegangan dari driver relay dan baterai ke socket input tegangan Arduino.
71
Pada bagian atas box di tempatkan board arduino uno yang telah di gabung dengan board catu daya 5VDC dan driver relay. Penempatan kabel diatur sedemikian rupa sehingga tidak banyak kabel yang melintang dan komponen yang berkesinambungan di inputkan ke setiap bagiannya pada arduino dan catudaya.
3.3 Perancangan Program ( Software )
Setelah proses perancangan rangkaian hardware selesai, kemudian langkah selanjutnya adalah membuat program. Baik atau buruknya hasil konversi ini sangat bergantung pada sistem software yang bagus. Pada proses pembuatan software, perancan menggunakan program arduino versi 1.0.5-r2. Buka program aplikasi arduino, kemudian buat program pada aplikasi arduino sketch.
72 3.3.1 Bahasa Pemrograman Arduino
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);// set pin13 sebagai output }
73 Loop
Setelah melakukan fungsi setup ( ), maka secara langsung akan melakukan fungsi loop ( ) secara berurutan dan melakukan instruksi-instruksi yang ada dalam fungsi loop ( ).
Contoh :
Serial begin ()
Statement ini digunakan untuk mengaktifkan komunikasi serial dan untuk set baudrate.
Contoh :
void loop() {
digitalWrite(13,HIGH); // aktifkan pin 13
delay(1000); // delay waktu selama 1 detik digitalWrite(13,LOW); // matikan pin 13
delay(1000); // delay waktu selama 1 detik }
void setup() {
Serial.begin(9600); // open serial port and set baudrate 9600 bps }
74 DigitalWrite (pin, value)
Digunakan untuk set pin digital. Pin digital arduino mempunyai 14 pin (0-13).
Contoh :
DigitalRead (pin)
Membaca nilai dari pin yang kita kehendaki dengan hasil HIGH atau LOW
AnalogRead ()
Papan arduino memiliki 6 channel, 10 bit analog ke digital, artinya kita dapat memsasukkan 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 sekitar 100 microseconds (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 :
digitalWrite(pin,HIGH); // set pin to HIGH //Do Something;
75 Contoh :
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 bekerja pada saat fungsi delay bekerja. Beberapa program berbasis pengetahuan biasanya menhindari penggunaan delay untuk kegiatan yang membutuhkan waktu lebih dari 10 miliseconds.
Contoh :
int analogPin = 3 // potentiometer wipper 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
}
76 serialPrintln(rate)
Mengirimkan data ke serial port
Variable
Variable adalah sebuah penyimpanan nilai yang dapat digunakan dalam program. Variable dapat dirubah sesuai dengan instruksi yang dibuat. Ketika mendeklarasikan variable harus diikut sertakan type variable serta nilai awal variable.
Contoh :
Variable Scope
Sebuah variable dapat di deklarasikan 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 di dalam program. Variable global di deklarasikan pada awal program sebelum fungsi setup ().
serialPrintln(100); // mengirimkan data 100
Type variableName = 0;
int inputVariable = 0; // mendefinisikan sebuah variable bernama inputVariable dengan nilai awal 0
inputVariable = analogRead(2); // menyimpan nilai yang ada di analog pin 2 ke input variable
77 Contoh penggunaan :
if..else
Operator if..else mengetes sebuah kondisi apabila tidak sesuai dengan kondisi yang pertama, maka akan mengeksekusi baris program yang ada di else. int value; // value adalah variable global dan dapat digunakan pada semua block function. void setup() { // no setup needed } void loop() {
for (int i=0; i<20;) // i hanya dapat digunakan dalam pengulangan saja {
i++; }
float f; // f adalah sebagai variable local }
78 For
Operator for digunakan dalam blok pengulangan tertutup.
pinMode (pin, mode)
Digunakan dalam void setup () untuk mengkonfirmasi pin apakah sebagai
input atau output. Arduino digital pins secara default di konfigurasi sebagai input
sehingga untuk merubahnya harus menggunakan operator pinMode(pin,mode). if (inputPin == HIGH) { //Laksanakan rencana A; } else { //Laksanakan rencana B; }
for (initialization; condition; expression) {
//doSomething; }
79 Function
Function ( fungsi ) adalah blok pemrograman yang mempunyai nama dan mempunyai statement yang akan dieksekusi ketika function dipanggil. Fungsi void setup ( ) dan void loop ( ) telah dibahas di atas dan pembuatan fungsi yang lain akan dibahas selanjutnya.
Cara pendeklarasian function :
Contoh :
pinMode(pin,OUTPUT); // set pin sebagai output digitalWrite(pin,HIGH); // pin sebagai source voltage
type functionName(parameters) { //Statement; } 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; // kembali ke nilai v }
80
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 dibuat, langkah selanjutnya adalah membuat program untuk masing-masing rangkaian seperti yang ditujukan pada diagram alur seperti di bawah ini :
Langkah untuk melakukan pendaftaran adalah dengan mengetikan nomor id pada serial monitor kemudian pindai sidik jari pertama dan ulangi sebagai verifikasi. Apabila verifikasi berhasil, maka data di simpan. Jika verifikasi gagal, maka ulangi pada ketik nomor id.
81
Pada flowchart di atas menjelaskan tentang proses operational gembok. Langkah nya dimulai dari menghidupkan alat dengan menekan tombol switch, kemudian pindai sidik jari yang telah terdaftar pada sensor fingerprint. Jika kondisi hasil pindaian sidik jari terhadap database adalah cocok, maka solenoid akan aktif dan gembok akan terbuka. Apabila pindaian sidik jari tidak cocok atau gagal maka LED akan menyala.
82 3.3.2 Program Pendeteksi Sidik Jari
Sesuai dengan fungsinya sensor fingerprint merupakan alat atau perangkat yang di gunakan untuk mendeteksi sidik jari manusia, alat ini akan bekerja jika ada sidik jari yang match dengan sidik jari yang terdapat dalam database. Sensor ini dikendalikan dengan menggunakan kontrol arduino, setelah selesai merakit rangkaian sensor fingerprint, selanjutnya membuat program pada sketch arduino 1.0.5-r2.
83 #include <Adafruit_Fingerprint.h> #include <SoftwareSerial.h>
int getFingerprintIDez();
// pin #2 is IN from sensor (GREEN wire) // pin #3 is OUT from arduino (WHITE wire) SoftwareSerial mySerial(2, 3);
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
int st_seting=0;
void setup() {
Serial.begin(9600);
Serial.println("fingertest");
// set the data rate for the sensor serial port finger.begin(57600);
84 if (finger.verifyPassword()) {
Serial.println("Finger Print terdeteksi!"); } else {
Serial.println("Fingerprint tidak ditemukan :("); while (1);
}
pinMode (A0,OUTPUT);//solenoid
digitalWrite(A0,LOW);//solenoid pull down pinMode(8,INPUT);//dip switch
pinMode(9,INPUT);//dip switch
digitalWrite(8,LOW);//dip switch initialize digitalWrite(9,LOW);//dip switch initialize // OPERATIONAL
if((digitalRead(8)==LOW)&(digitalRead(9)==LOW)){st_seting=0;
Serial.println("SYSTEM : OPERATIONAL "); }
85 3.3.3 Program Pendaftaran Sidik Jari
Diperlukan sebuah pendaftara sidik jari yang berguna sebagai data sidik jari manusia yang akan disimpan sebagai database. Sehingga sidik jari yang terdaftar dapat digunakan dengan kondisi apabila memiliki kesamaan data sidik jari manusia tersebut.
86 // registrasi
uint8_t getFingerprintEnroll(uint8_t id) { uint8_t p = -1;
Serial.println("Waiting for valid finger to enroll"); while (p != FINGERPRINT_OK) { p = finger.getImage(); switch (p) { case FINGERPRINT_OK: Serial.println("Image taken"); break; case FINGERPRINT_NOFINGER: Serial.println("."); break; case FINGERPRINT_PACKETRECIEVEERR: Serial.println("Communication error"); break; case FINGERPRINT_IMAGEFAIL: Serial.println("Imaging error"); break; default: Serial.println("Unknown error"); break; } }
87 // OK success! p = finger.image2Tz(1); switch (p) { case FINGERPRINT_OK: Serial.println("Image converted"); break; case FINGERPRINT_IMAGEMESS: Serial.println("Image too messy"); return p;
case FINGERPRINT_PACKETRECIEVEERR: Serial.println("Communication error");
return p;
case FINGERPRINT_FEATUREFAIL:
Serial.println("Could not find fingerprint features"); return p;
case FINGERPRINT_INVALIDIMAGE:
Serial.println("Could not find fingerprint features"); return p;
default:
Serial.println("Unknown error"); return p;
88
Sistem kontrol yang dirancang sebagai alat konverter serial ke usb hid menggunakan Chip mikrokontroller atmega8. Sistem ini yang akan memproses data masukan berupa serial kemudian dikeluarkan ke port USB sebagi data usb keyboard. Baik atau buruknya hasil konversi ini sangat bergantung pada sistem software yang bagung. dalam hal ini untuk pembuatan software saya menggunkan pemograman bahasa c dengan software editor arduino ide dan compiler avrgcc. Sistem kerja alat ini digambarkan dalam flochat dibawah ini.
Serial.println("Remove finger"); delay(2000); p = 0; while (p != FINGERPRINT_NOFINGER) { p = finger.getImage(); } p = -1;
Serial.println("Place same finger again"); while (p != FINGERPRINT_OK) { p = finger.getImage(); switch (p) { case FINGERPRINT_OK: Serial.println("Image taken"); break; case FINGERPRINT_NOFINGER: Serial.print("."); break; case FINGERPRINT_PACKETRECIEVEERR: Serial.println("Communication error"); break; case FINGERPRINT_IMAGEFAIL: Serial.println("Imaging error"); break; default: Serial.println("Unknown error"); break;
89 // OK success! p = finger.image2Tz(2); switch (p) { case FINGERPRINT_OK: Serial.println("Image converted"); break; case FINGERPRINT_IMAGEMESS: Serial.println("Image too messy"); return p;
case FINGERPRINT_PACKETRECIEVEERR: Serial.println("Communication error");
return p;
case FINGERPRINT_FEATUREFAIL:
Serial.println("Could not find fingerprint features"); return p;
case FINGERPRINT_INVALIDIMAGE:
Serial.println("Could not find fingerprint features"); return p;
default:
Serial.println("Unknown error"); return p;
90 // OK converted! p = finger.createModel(); if (p == FINGERPRINT_OK) { Serial.println("Prints matched!"); } else if (p == FINGERPRINT_PACKETRECIEVEERR) { Serial.println("Communication error"); return p; } else if (p == FINGERPRINT_ENROLLMISMATCH) { Serial.println("Fingerprints did not match");
return p; } else {
Serial.println("Unknown error"); return p;
91 p = finger.storeModel(id); if (p == FINGERPRINT_OK) { Serial.println("Stored!"); } else if (p == FINGERPRINT_PACKETRECIEVEERR) { Serial.println("Communication error"); return p; } else if (p == FINGERPRINT_BADLOCATION) { Serial.println("Could not store in that location"); return p;
} else if (p == FINGERPRINT_FLASHERR) { Serial.println("Error writing to flash");
return p; } else { Serial.println("Unknown error"); return p; } }
92 3.3.4 Program Aktif Solenoid
Pada bagian ini akan mengulas tentang pemrograman aktifasi solenoid 12VDC dengan arduino. Program ini dibuat agar solenoid dapat melakukan apa yang diperintahkan dari perencana seperti melakukan tarikan ( pull down) pada kondisi sidik jari manusia yang di tempelkan pada sensor fingerprint adalah sama ( match) dengan data yang ada pada database. Dijelaskan pada koding di bawah ini dimana kondisi sidik jari yang ditempelkan pada sensor fingerprint dengan database adalah match, maka program akan memberi kondisi digitalWrite pada port A0 sebagai HIGH, sehingga tegangan mengalir pada solenoid dari baterai yang telah di switch menggunakan relay. Tegangan akan mengalir selama 1 detik (delay 1000 ms), setelah mengalami delay, solenoid akan kembali pada kondisi standby.
// found a match!
Serial.print("Found ID #"); Serial.print(finger.fingerID);
Serial.print(" with confidence of "); Serial.println(finger.confidence); digitalWrite(A0,HIGH);
delay(1000);
digitalWrite(A0,LOW); return finger.fingerID;