Diajukan Untuk Memenuhi Persyaratan Memperoleh Gelar Sarjana Sains Terapan Pada
Program Studi Teknik Elektro Industri Fakultas Teknik Elektro
Universitas Negeri Padang
Oleh
Subandi Saputra
NIM : 1302555/2013
1
HALAMAN PERSETUJUAN TUGAS AKHIR
1
HALAMAN PENGESAHAN TUGAS AKHIR
1
2
ABSTRAK
Subandi Saputra (2013/1302555) :“Rancang Bangun Absensi Elektronik Berbasis
Mikrokontroller Atmega328”
Pembuatan tugas akhir ini pada dasarnya bertujuan untuk (1)membuat mesin
absensi elektronik dengan sensor biometrik fingerprints scanner yang
berbasiskakan mikrokontroller atmega328. (2) Memperbaharui metode absensi
konvensional menjadi absensi digital, dan (3) Menentukan kinerja mesin absensi
berdasarkan hasil output sistem basis data pada mesin absensi ini.
Dalam pembuatan tugas akhir ini peulis menggunakan mikrokontroller
atmega328 sebagai pusat pengontrolan utama, sensor pembaca sidik jari sebagai
input utama, lcd sebagai penampil informasi waktu pada rangkaian real time clock,
dan rangkaian sdcard module sebagai sistem basis data yang digunakan untuk
menyimpan informasi pada saat absensi dilakukan.
Berdasarkan hasil pengujian rancang bangun absensi elektronik berbasis
mikrokontroller atmega328 adalah sebagai berikut, pertama alat ini dapat
digunakan sebagai pengganti sistem pengambilan absensi secara konvensional. Hal
ini disebabkan karena alat ini dilengkapi dengan sensor pembaca sisik jari sehingga
dalam pegambilan absensi tidak dapat diwakilkan, dan microsdcard module sebagai
sistem basis data sehingga data pada saat pengambilan absensi tidak mudah hilang.
Selain itu, alat ini juga telah dilengkapi dengan RTC sebagai sistem pengatur waktu
yang akan mencatat keterlambatan setiap user pada alat ini. kedua proses
pegambilan absensi (resensi) hanya dapat dilakukan setelah pengguna melakukan
proses registrasi.
Kata Kunci : Absensi, Elektronik, Atmega328, Biometrika, Sidik Jari.
1
KATA PENGANTAR
ِالرحيْم
َّ ِالرحْ َمن
َّ للا
ِّ ِسم
ْ ِب
Syukur Alhamdulillah penulis ucapkan kepada Allah SWT yang telah
melimpahkan Rahmat dan Karunia-Nya sehingga penulis dapat menyelesaikan
Tugas Akhir ini. Shalawat dan salam senantiasa dilimpahkan kepada panutan umat
manusia Nabi besar Muhammad SAW.
Tugas Akhir yang berjudul “Rancang Bangun Absensi Elektronik
Berbasis Mikrokontroller Atmega328” disusun sebagai salah satu syarat untuk
mendapatkan gelar Sarjana Sains Terapan Program Studi Diploma Empat
(D4)Teknik Elektro Industri pada Jurusan Teknik Elektro Fakultas Teknik
Universitas Negeri Padang.
Dalam penyelesaian Tugas Akhir ini tidak terlepas dari bantuan dan
dukungan berbagai pihak, untuk itu melalui tulisan ini penulis ingin menyampaikan
ucapan terima kasih dengan setulus-tulusnya kepada:
1. Bapak Drs. Aswardi, M.T. selaku pembimbing I yang telah memberikan
penulis.
2. Bapak Asnil, S.Pd, M.Eng dan Bapak Krismadinata, ST. MT, Ph. D., selaku
tim penguji yang telah memberikan masukan berupa kritikan dan saran demi
3. Bapak Dr. Hansi Effendi, ST, M.Kom. selaku Pembimbing Akademik (PA)
menyelesaikan perkuliahan.
4. Ketua dan Sekretaris jurusan Teknik Elektro UNP yang telah memberikan
bantuan, dorongan, petunjuk dan kemudahan sehingga Tugas Akhir ini dapat
diselesaikan.
Negeri Padang.
ii
6. Bapak dan ibu staf pengajar, karyawan dan karyawati Fakultas Teknik
7. Teristimewa untuk kedua orang tua penulis Situm dan Saban dan juga
saudara kandung penulis yaitu Feri Naldi, yang telah memberikan do’a dan
dukungan yang tak berhingga dalam masa perkuliahan hingga saat sekarang.
9. Keluarga besar Tanners Team yang telah mengajarkan banyak sekali tentang
10. Semua pihak yang turut membantu hingga selesainya Tugas Akhir ini yang
Semoga segala bantuan yang telah diberikan menjadi kebaikan dan di ridhoi
oleh Allah SWT. Penulis menyadari Tugas Akhir ini masih jauh dari kesempurnaan
,untuk itu kritik dan saran yang bersifat membangun penulis harapkan demi
kesempurnaan Tugas Akhir ini. Penulis berharap semoga Tugas Akhir ini dapat
memberikan sumbangan pemikiran dan ilmu pengetahuan yang bermanfaat bagi
penulis khususnya dan pembaca pada umumnya. Amiin.....
Penulis
iii
DAFTAR ISI
DAFTAR ISI
ABSTRAK .............................................................................................................. i
C. Batasan Masalah................................................................................ 3
E. Tujuan ............................................................................................... 3
F. Manfaat ............................................................................................. 4
A. Absensi .............................................................................................. 5
iv
3. Sistem absensi dengan menggunakan pemindai hidup ................. 7
2. Komunikasi ................................................................................. 11
v
2. Interfacing ................................................................................... 38
1. Pendaftaran .................................................................................. 57
2. Verifikasi ..................................................................................... 59
vi
C. Langkah Pengujian .......................................................................... 62
vii
DAFTAR TABEL
viii
DAFTAR GAMBAR
ix
Gambar 22 rangkaian secara keseluruhan ............................................................. 56
x
DAFTAR LAMPIRAN
xi
BAB I
PENDAHULUAN
A. Latar Belakang
saat ini begitu pesat terutama dalam bidang it yang semakin maju seiring
adalah tidak bekerjanya seorang pegawai pada saat hari kerja, karena sakit,
banyak atau sedikitnya seorang pegawai dalam mengambil cuti. Selain itu
absensi juga berfungsi untuk mengetahui jam masuk atau hari kerja pegawai.
absensi konvensional.
1
2
data mudah hilang dikarenakan tidak adanya sistem backup. Selain itu
konvensional selain itu absensi ini juga sudah memiliki sistem penyimpanan
absensi tersebut tidak dapat dilakukan jika kartu identitas hilang atau
tertinggal.
sebagai pengganti kartu identitas serta tanda tangan untuk melakukan proses
absensi dalam metode absensi. Untuk itu dibuatlah sebuah tugas akhir dengan
Mikrokontroller Atmega328
B. Identifikasi Masalah
C. Batasan Masalah
akhir ini.
orang.
D. Rumusan Masalah
batasan masalah di atas, maka rumusan masalah pada Tugas Akhir ini adalah
E. Tujuan
F. Manfaat
LANDASAN TEORI
Landasan teori adalah seperangkat definisi yang disusun rapi serta sistematis
A. Absensi
karyawan untuk hadir di tempat kerja pada hari kerja. Ketidakhadiran berbeda
menurut Faisal Ali Ahmad (2006, 11) mengatakan bahwa “Absensi adalah
perusahaan”.
5
6
bentuk digital sehingga absensi ini juga mudah dicurangi dengan cara
absensi ini biasanya menggunakan pemindai kode bar. Kode bar yang
tersebut murah akan tetapi memiliki kelemahan yaitu para pemilik kartu
samping itu jika kartu identitas tidak terbawa atau hilang maka pemilik
Sistem absensi ini memiliki sebuah alat elektronik yang akan memindai
Namun sistem absensi ini lebih mahal jika dibandingkan dengan sistem
yang sering terjadi adalah tidak terbacanya sidik jari dikarenakan sidik
jari basah atau tergores oleh karena itu dalam tugas akhir ini disarankan
untuk memakai sidik jari jempol kiri karena tangan kiri lebih dominan
sehingga tangan kiri akan bisa lebih terhindar dari goresan karena
kecelakaan.
8
B. Mikrokontroller Atmega328
atau sebagian besar elemennya dikemas dalam satu chip sehingga sering
dibuat semakin kompak dengan bahasa pemrograman yang juga ikut berubah.
Salah satunya adalah mikrokontroller AVR (Alf and Vegard’s Risc processor)
peripheral, dan fungsinya. Dari segi arsitektur dan instruksi yang digunakan,
kapasitas memori Flash nya yang sebesar 32 KB itulah chip ini diberi nama
9
1. Input/output (I/O)
6 pin input analog dan 14 pin digital input/output. Untuk 6 pin analog
pada program.
mengirim (TX) TTL data serial. Pin ini terhubung pada pin yang
trigger sebuah interrupt pada low value, rissing atau falling edge,
e. LED : 13. Pin ini dibuat untuk koneksi LED ke digital PIN 13.
Ketika pin bernilai HIGH, LED hidup, ketika pin bernilai LOW
LED mati.
komunikasi TWI.
analog Reference().
h. Reset
2. Komunikasi
yang tersedia pada pin digital 0 (RX) dan 1(TX). Sebuah ATmega328
USB dan muncul sebagai com port virtual untuk perangkat lunak pada
dan tidak ada driver ekstemal yang dibutuhkan. Namun, pada Windows,
sistem.
Development Enviroment).
tertentu.
13
struktur arduino
Void set up ()
LED
Void loop ()
while-Ioop
arduino:
operasinya.
ini :
X= Y /I x sama dengan y
if(x> 0 || y> 0)
if(!x> 0)
! (bitwise or)
1\ (bitwise xor)
- (bitwise not)
« (bitwise left)
»(bitwise right)
bisa diberi nama apa saja asalkan tidak sama dengan kode
program.
array.
sebuah string.
c. Fungsi
4. Fitur Atmega328
atmega328, yang mana setiap proses eksekusi data lebih cepat dari pada
sebagai bootloader.
USB atau dengan catu daya eksternal. Sumber daya dipilih secara
dapat dimasukkan pada pin header Gnd dan Vin dari konektor DAYA.
volt. Jika menggunakan tegangan kurang dari 6 volt tidak akan stabil.
Jika menggunakan lebih dari 12V, regulator tegangan bisa panas dan
beroperasi.
20
seperti objek, suhu, cahaya, suara, tekanan, dan sebagainya. Sensor dapat
Salah satunya seperti sidik jari yang merupakan sebagian dari teknologi
biometrika
Sifat yang dimiliki oleh sidik jari antara lain Perennial nature, yaitu
guratan-guratan pada sidik jari yang melekat pada kulit manusia seumur
hidup, Immutability, yaitu sidik jari seseorang tidak pernah berubah, kecuali
mendapatkan kecelakaan yang serius, dan Individuality, pola sidik jari adalah
unik dan berbeda untuk setiap orang. Ciri khas sidik jari yang digunakan
adalah guratan sidik jari yang dapat diidentifikasi dengan cara menganalisis
Secara umum sidik jari dibagi menjadi 3 tipe pola utama, yaitu
arch, loops, dan whorls. Selain ini hanyalah variasi dari kombinasi
ketiga pola ini. Tipe loops merupakan pola yang paling banyak
ditemukan pada manusia. Sekitar 60% sidik jari bertipe loops, 30%
3. Pengenalan Pola
suatu pola dengan pola lainnya. Ciri yang bagus adalah ciri yang
tinggi.
pada citra sidik jari. Minutia adalah sebuah karakteristik sidik jari yang
banyak ditemukan pada sidik jari. Pada dasarnya minutia ada dua
ekstraksi minutia ini, digunakan untuk proses matching antara sidik jari
Table. Hasil dari beberapa prosesnya dapat dilihat pada gambar berikut:
citra sidik jari. Minutia adalah sebuah karakteristik sidik jari yang
banyak ditemukan pada sidik jari. Pada dasarnya minutia ada dua
24
antara sidik jari penguji dengan sidik jari yang diuji. Proses matching
lokasi (x,y) dan sudut orientasi (theta). Pada dasarnya algoritma ini
Table
25
4. Fingerprint Recognition
mengambil gambar sidik jari, dan memutuskan apakah pola alur sidik
jari dari gambar yang diambil sama dengan pola alur sidik jari yang ada
pada database. Ada beberapa cara untuk mengambil gambar sidik jari
sistem sensor cahaya yang sama digunakan pada kamera digital dan
membentuk pola terang dan gelap dari sebuah gambar hasil scan sidik
jari seseorang. Pola terang dihasilkan oleh valley dan pola gelap
optikal, yang dapat mendeteksi sidik jadi dengan verifikasi yang sangat
sederhana. Modul sensor ini bekerja dengan otak utama berupa chip
(p. 229). Bentuk rangkaian atau konfigurasi dari pin LCD seperti yang terlihat
Pada layar LCD, setiap matrik adalah susunan dua dimensi pixel yang
dibagi dalam bentuk baris dan kolom. Setiap pertemuan baris dan kolom
adalah sebuah LED yang terdapat pada sebuah bidang latar, yang merupakan
elemen kaca bagian belakang dengan sisi dalam yang ditutupi oleh lapisan
elektroda transparan. Cairan yang digunakan memiliki warna cerah pada saat
hitam ketika tegangan diterapkan di antara bidang latar dan pola elektroda
yang terdapat pada sisi dalam lempeng kaca bagian depan. Menurut Setiawan
(2011: 25), “Keunggulan LCD adalah LCD hanya menarik arus yang kecil
(beberapa mikro ampere), sehingga alat atau sistem menjadi portable karena
dapat menggunakan catu daya yang kecil. Keunggulan lainnya yaitu tampilan
matahari.
text LCD dan graphic LCD. Text LCD adalah LCD yang hanya mampu
menampilkan huruf dan angka, sedangkan graphic LCD adalah LCD yang
variable resistor untuk memberi tegangan kontras pada matrik LCD. Agar
lebih jelas, pin-pin LCD dapat dilihat pada Tabel di bawah ini
28
proses internal, instruksi menulis data, instruksi membaca kondisi sibuk dan
instruksi membaca data. ROM pembangkit sebanyak 192 tipe karakter, tiap
karakter dengan huruf 5x7 dot matrik. Kapasitas pembangkit RAM 8 tipe
data. Perintah utama LCD adalah Display Clear, Cursor Home, Display
On/Off, Cursor On/Off, Display Character Blink, Cursor Shift, dan Display
Shift.
kolom dan baris dalam satu panel. Untuk membentuk pola, baik itu karakter
29
maupun gambar, ada kolom dan baris secara bersamaan digunakan metode
suatu kolom dan suatu baris secara bergantian dan cepat, sehingga seolah-
E. Power Supply
tegangan listrik untuk piranti lain, sedangkan menurut Grace Natali (2003, p.
43) berpendapat bahwa Power supply adalah sebuah rangkaian yang bekerja
radio atau tape kecil menggunakan baterai sebagai sumber tenaga namun
itu dibutuhkan suatu rangkaian yang dapat mengubah arus listrik bolak-balik
dari PLN menjadi arus listrik searah. Ada banyak jenis atau variasi rangkaian
1. Penyearah
(AC) menjadi DC yang berasal dari jaringan jala-jala listrik. Pada alat
sebelah kanan dan tanda tambah pada sebelah kiri. Selama setengah
dalam arah yang sama tanpa memperhatikan dioda mana yang sedang
1 𝜋
𝑉𝑑𝑐 = ∫ 𝑣 𝑠𝑖𝑛 𝜔 𝑡𝑑(𝜔𝑡)
2𝜋 0 𝑚
Jadi,
𝑉𝑚
setengah gelombang 𝑣𝑑𝑐 = = 0,318𝑉𝑚
𝜋
1 𝜋
𝑉𝑑𝑐 = ∫ 𝑉𝑚 𝑠𝑖𝑛 𝜔𝑡 𝑑(𝜔𝑡 )
𝜋 0
Jadi,
2𝑣𝑚
gelombang penuh 𝑉𝑑𝑐 = = 0,636𝑉𝑚
𝜋
1 𝑇
𝑉𝑟𝑚𝑠 = [ ∫ 𝑉𝐿2 (𝑡)𝑑𝑡]
𝑇 0
rumus :
32
1 𝜋
𝑉𝑟𝑚𝑠 = √ ∫ (𝑉 𝑠𝑖𝑛 𝜔𝑡)2 𝑑(𝜔𝑡)
2𝜋 0 𝑚
Atau,
𝑉𝑚
setengah gelombang 𝑉𝑟𝑚𝑠 = = 0,5𝑉𝑚
2
1 𝜋
𝑉𝑟𝑚𝑠 = √ ∫ (𝑉𝑚 sin 𝜔𝑡)2 𝑑(𝑑𝜔𝑡)
𝜋 0
Atau,
𝑉𝑚
gelombang penuh 𝑉𝑟𝑚𝑠 = = 0,707 𝑉𝑚
√2
2. Penurun Tegangan
lilitan yaitu lilitan primer (N1) dan lilitan sekunder (N2) yang dililitkan
pada suatu inti yang saling terisolasi atau terpisah antara satu dengan
yang lain. Besar tegangan pada lilitan primer dan lilitan sekunder
ditentukan oleh jumlah lilitan yang terdapat pada bagian primer dan
sekundernya.
𝑁1 𝑉2 𝐼2
= 𝑉1 . 𝐼1 = 𝑉2 . 𝐼2 = =
𝑁2 𝑉1 𝐼1
Keterangan:
- N1 = lilitan primer
- N2 = lilitan sekunder
F. Komponen Pendukung
ditransfer secara serial melalui bus dua jalur dan dua arah. RTC
bulan yang kurang dari 31 hari, termasuk koreksi untuk tahun kabisat.
cepat.
2. Microsd-card module
Micro SD, melalui sistem file dan antarmuka driver SPI, agar
GND Ground
konversi papan sirkuit dengan antarmuka 5V atau 3.3V, catu daya yang
G. Teknik Pemrograman
direkam.
c. Data value (nilai atau isi data), adalah data aktual atau
tentang seseorang.
2. Interfacing
onboard-chipsets,
3. Bahasa Pemrograman C
#include <stdio.h>
int main(void) {
printf("Hello, World!\n");
return 0;
}
BAB III
PERANCANGAN ALAT
A. Blok diagram
organisasi dengan adanya batasan pada sistem. Dalam hal ini blok diagram
berfungsi sebagai media yang terdiri dari suatu proses. Adapun blok diagram
40
41
a. Blok input pada perancangan alat ini adalah sidik jari dan pemindai
sidik jari
b. Blok catu daya pada perancangan alat ini adalah catu daya dc 5 volt
untuk memberikan catu daya pada blok input dan 12 volt untuk catu
B. Perancangan Mekanik
pembuatan tugas akhir ini, karena dengan perancangan mekanik barulah alat
dapat diuji. Perancangan mekanik pada pembuatan tugas akhir ini meliputi
1. Perancangan boks
akhir ini bagian kanan boks akan disediakan satu tombol yang
kemudian di dalam boks ini juga telah disediakan sebuah tampilan lcd
yang berfungsi sebagai output pada alat ini. Bentuk boks alat ini adalah
boks memiliki ukuran panjang 30 cm, lebar 15 cm, dan tinggi 15 cm.
43
44
rangkaian catu daya adalah papan pcb bolong atau biasa disebut papan
rangkaian RTC dan rangkaian LCD, yang akan dijelaskan sebagai berikut :
listrik untuk piranti lain, untuk mendukung kerja alat pada perancangan
tugas akhir ini. maka, dibuatlah sebuah catu daya yang memiliki
pola sidik jari yang dimiliki oleh manusia, rangkaian sensor fingerprint
Application)
6, equal 57600bps)
akhir ini LCD yang digunakan ialah LCD dot matrix dengan jumlah
16x 4 yang digunakan pada pembuatan Tugas Akhir ini memiliki 14 pin
yang mana pin 1 dan pin 5 harus di ground-kan untuk pin 4, 6, 11, 12,
Alamat dan data dikirim secara serial melalui 2 jalur dan 2 arah. Jam
tanggal, bulan serta tahun. Setiap akhir bulan secara otomatis tanggal
halnya dengan akhir tahun maka akan berubah sesuai tahun yang baru.
mengetahui adanya kesalahan pada catu daya dan secara otomatis akan
absensi pada tugas akhir ini dapat mengetahui waktu di mana absensi
D. Pembuatan Alat
Pembuatan alat pada Tugas Akhir ini dimulai dengan membuat layout
komponen. Proses yang dilakukan dalam pembuatan rangkaian ini antara lain
2. Pemindahan Jalur.
3. Proses Pelarutan.
pada permukaan PCB yang tidak dibutuhkan. Adapun alat dan bahan
yang diperlukan pada proses ini adalah pelarut Ferit Chloride (FeCh),
4. Pembersihan Ulang.
halus agar nanti pada saat penyolderan timah melekat dengan baik.
5. Pengeboran.
56
dipasang pada PCB (printed Circuit Board) dengan baik dan rapi.
6. Pemasangan Komponen.
E. Prinsip Kerja
1. Pendaftaran
tekan tombol panah keatas atau kebawah lalu tekan tombol ok untuk
jari dengan memperhatikan lampu LED yang bewarna hijau, lepas dan
2. Verifikasi
sama dengan jari di saat registrasi ) Citra Sidik jari yang diambil
dibandingkan dengan basis data yang ada. Bila data pada proses
verifikasi sama dengan data yang ada pada basis data maka proses
Namun bila data pada proses verifikasi tidak sama dengan data yang
ada pada basis data maka proses akan ditolak dan user harus
sebelumnya.
60
Suatu peralatan atau program dapat dikatakan bekerja dengan baik apabila
telah disertai dengan pembuktian terhadap fungsi kera dari peralatan tersebut. Pada
bab ini akan dijelaskan mengenai cara pengujian dari perangkat keras (hardware).
Dari pengujian ini akan didapatkan data-data maupun bukti-bukti hasil akhir dari
kenyataan bahwa perangkat keras yang telah dibuat bisa bekerja dengan baik dan
bukti-bukti tersebut dapat dilakukan analisa terhadap proses kerja yang nantinya
dapat digunakan untuk menarik kesimpulan dari apa yang telah dibuat dalam Tugas
Akhir ini.
perlu dilakukan adalah pengujian dan analisa alat yang bertujuan untuk :
program
61
62
sebagai berikut:
1. Multimeter
maupun DC pada rangkaian catu daya dan sistem minimum dari alat
2. Osciloscope
C. Langkah Pengujian
a. Catu daya
b. Mikrokontroller Atmega328
c. Rangkaian LCD
63
pengukuran.
a. Pengukuran Tegangan
yang digunakan pada tugas akhir ini dapat dilihat pada gambar di
bawah ini :
𝑉𝑠 − 𝑉𝑡
%𝑘𝑒𝑠𝑎𝑙𝑎ℎ𝑎𝑛 = 𝑥100%
𝑉𝑠
Di mana :
Diketahui :
- Vs = 5 VDC
- Vt = 5,06 VDC
𝑉𝑠−𝑉𝑡
Maka, %𝑘𝑒𝑠𝑎𝑙𝑎ℎ𝑎𝑛 = 𝑥100%
𝑉𝑠
5 − 5,06
= 𝑥100%
5
= −0,012%
- Vs = 12 Volt DC
- Vt = 12,09 Volt DC
𝑉𝑠−𝑉𝑡
Maka, %𝑘𝑒𝑠𝑎𝑙𝑎ℎ𝑎𝑛 = 𝑥100%
𝑉𝑠
12 − 12,09
= 𝑥100%
12
= −0,0075%
atas, maka rangkaian catu daya untuk keluaran 5 VDC telah dapat
66
c. Pengukuran Gelombang
Keterangan :
- VPP = 2,76 V
- Prd = 20,08 ms
- Vavg = 360 Mv
- Freq = 49,80 Hz
gelombang.
Keterangan :
- VPP = 1.80 V
- Prd = 9.96 ms
- V avg = 1.20 V
- Freq = 100.4 Hz
(kapasitor).
Kapasitor
berikut :
Keterangan :
- VPP = 280 mV
- Prd =--
- V avg = 720 mV
- Freq < 10 Hz
berikut :
Keterangan :
- VPP = 160 mV
- Prd =--
- V avg = 720 mV
- Freq <10Hz
a. Pengujian Rangkaian
parameter logika ‘0’ dan logika ‘1’ pada port I/O mikrokontroller
b. Pengujian Program
usb
minimum dengan pc
c. Analisa
bekerja pada tegangan logika low sebesar 0,02 v dan bekerja pada
untuk dipakai.
yang dipakai rusak atau dapat dipakai semestinya. LCD memiliki kaki
yang terdiri dari 8 pin jalur data, 2 pin power supply, 1 pin untuk
Vcc dan GND, maka LCD akan menyala seperti pada gambar.
tidak berarti LCD sudah dapat bekerja dengan baik. Perlu dilakukan
#include <LiquidCrystal.h>
void setup() {
lcd.begin(16, 2);
lcd.print("hello, world!");
74
void loop() {
// (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(0, 1);
lcd.print(millis() / 1000);
4. Pengujian RTC
RTC_DS1307 rtc;
void setup () {
while (!Serial); // for Leonardo/Micro/Zero
Serial.begin(57600);
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
if (! rtc.isrunning()) {
Serial.println("RTC is NOT running!");
76
// following line sets the RTC to the date & time this sketch was
compiled
// rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// This line sets the RTC with an explicit date & time, for example to
set
// January 21, 2014 at 3am you would call:
// rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
}
}
void loop () {
DateTime now = rtc.now();
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
77
Serial.println();
delay(3000);
}
78
#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>
79
int getFingerprintIDez();
void setup()
Serial.begin(9600);
finger.begin(57600);
if (finger.verifyPassword()) {
} else {
while (1);
getFingerprintIDez();
uint8_t getFingerprintID() {
uint8_t p = finger.getImage();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image taken");
81
break;
case FINGERPRINT_NOFINGER:
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
return p;
case FINGERPRINT_IMAGEFAIL:
Serial.println("Imaging error");
return p;
default:
Serial.println("Unknown error");
return p;
// OK success!
p = finger.image2Tz();
82
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image converted");
break;
case FINGERPRINT_IMAGEMESS:
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
return p;
case FINGERPRINT_FEATUREFAIL:
return p;
case FINGERPRINT_INVALIDIMAGE:
return p;
default:
Serial.println("Unknown error");
83
return p;
// OK converted!
p = finger.fingerFastSearch();
if (p == FINGERPRINT_OK) {
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("Communication error");
return p;
} else if (p == FINGERPRINT_NOTFOUND) {
return p;
} else {
Serial.println("Unknown error");
return p;
}
84
// found a match!
int getFingerprintIDez() {
uint8_t p = finger.getImage();
p = finger.image2Tz();
p = finger.fingerFastSearch();
// found a match!
return finger.fingerID;
pencarian pada software SFG Demo yang hasilnya dapat dilihat pada
gambar berikut :
pada lcd perintah atau informasi yang ditampilkan di dalam lcd, hasil
kartu mikro sd dan laptop sebagai pembaca file yang ada di dalam kartu
4. Amati LCD
reader.
baik.
88
program data fingerprint, program data LCD, program data RTC, dan
pemrograman
a. Deklarasi awal
#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(6,7,8,9,10,11);
#include "Wire.h"
#include <SPI.h>
#include <SD.h>
89
decimal
numbers
int jam;
int menit;
int detik;
int hari;
int bulan;
int tahun;
90
String waktu;
String tanggal;
uint8_t id;
int getFingerprintIDez();
uint8_t getFingerprintEnroll();
int sendlog=0;
int fingerlog;
String nama="";
String data;
String datasd;
int step;
int getid=1;
SoftwareSerial mySerial(2,3);
91
SoftwareSerial mySerial2(4,5);
Adafruit_Fingerprint finger =
Adafruit_Fingerprint(&mySerial);
uint8_t readnumber(void) {
uint8_t num = 0;
while (1) {
while (! Serial.available());
char c = Serial.read();
if (isdigit(c)) {
num *= 10;
num += c - '0';
validnum = true;
} else if (validnum) {
return num;
}
92
b. Konfigurasi
void setup()
pinMode(A0, INPUT);
pinMode(A1, INPUT);
pinMode(A2, INPUT);
pinMode(A3, INPUT);
digitalWrite(A0,HIGH);
digitalWrite(A1,HIGH);
digitalWrite(A2,HIGH);
digitalWrite(A3,HIGH);
lcd.begin(16,4);
lcd.clear();
lcd.setCursor(0,0);
lcd.setCursor(0,1);
lcd.setCursor(0,2);
lcd.setCursor(0,3);
delay(4000);
93
Serial.begin(9600);
mySerial2.begin(9600);
finger.begin(57600);
Wire.begin();
if (finger.verifyPassword()) {
} else {
while (1);
lcd.clear();
c. Program Loop
lcd.setCursor(0,2);
lcd.print(" ");
lcd.setCursor(0,3);
94
lcd.print(" ");
if(digitalRead(A0)==LOW)
step=2;
else if(digitalRead(A1)==LOW)
if(step==1)
step=3;
delay(1000);
else step=1;
if (step==1)
lcd.setCursor(0,2);
lcd.print("Enroll ID :");
lcd.print(getid);
delay(500);
if(digitalRead(A2)==LOW)
{
95
getid=getid-1;
if(getid<=0)getid=1;
else if(digitalRead(A3)==LOW)
getid=getid+1;
else if (step==2)
getFingerprintIDez();
else if(step==3)
id=getid;
while (! getFingerprintEnroll() );
delay(2000);
step=0;
if(sendlog==9)
{
96
if(fingerlog==1) nama="nama1";
lcd.setCursor(0,2);
lcd.print("ID :");
97
lcd.print(fingerlog);
lcd.setCursor(0,3);
lcd.print("Nama :");
lcd.print(nama);
datasd="Nama ";
datasd+=nama;
datasd+=data;
Serial.println(datasd);
mySerial2.print(datasd);
delay(2000);
lcd.setCursor(0,2);
lcd.setCursor(0,3);
lcd.print(" ");
delay(2000);
sendlog=0;
step=0;
lcd.setCursor(0,0);
98
lcd.print(" ");
lcd.setCursor(0,0);
lcd.print("Time : ");
lcd.print(waktu);
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print("Date : ");
lcd.print(tanggal);
displayTime();
uint8_t getFingerprintID() {
uint8_t p = finger.getImage();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image taken");
break;
case FINGERPRINT_NOFINGER:
99
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
return p;
case FINGERPRINT_IMAGEFAIL:
// Serial.println("Imaging error");
return p;
default:
// Serial.println("Unknown error");
return p;
// OK success!
p = finger.image2Tz();
switch (p) {
case FINGERPRINT_OK:
100
Serial.println("Image converted");
break;
case FINGERPRINT_IMAGEMESS:
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
return p;
case FINGERPRINT_FEATUREFAIL:
return p;
case FINGERPRINT_INVALIDIMAGE:
return p;
default:
Serial.println("Unknown error");
return p;
}
101
// OK converted!
p = finger.fingerFastSearch();
if (p == FINGERPRINT_OK) {
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("Communication error");
return p;
} else if (p == FINGERPRINT_NOTFOUND) {
return p;
} else {
Serial.println("Unknown error");
return p;
// found a match!
Serial.println(finger.confidence);
int getFingerprintIDez() {
uint8_t p = finger.getImage();
p = finger.image2Tz();
p = finger.fingerFastSearch();
// found a match!
Serial.println(finger.confidence);
fingerlog=finger.fingerID;
sendlog=9;
//return finger.fingerID;
void displayTime()
year;
&dayOfMonth, &month,
&year);
if (minute<10)
{
104
menit=0;
menit=minute, DEC;
if (second<10)
detik=0;
detik=second, DEC;
hari=dayOfMonth, DEC;
bulan=month, DEC;
tahun=year, DEC;
waktu=jam;
waktu+=":";
waktu+=menit;
waktu+=":";
waktu+=detik;
tanggal=hari;
105
tanggal+="/";
tanggal+=bulan;
tanggal+="/";
tanggal+=tahun;
data+=waktu;
data+=tanggal;
//==============
uint8_t getFingerprintEnroll() {
int p = -1;
lcd.setCursor(0,2);
Serial.println(id);
while (p != FINGERPRINT_OK) {
106
p = finger.getImage();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image taken");
lcd.setCursor(0,2);
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");
107
break;
{
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0); // set DS3231 register pointer to 00h
Wire.endTransmission();
Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
// request seven bytes of data from DS3231 starting from register
00h
*second = bcdToDec(Wire.read() & 0x7f);
*minute = bcdToDec(Wire.read());
*hour = bcdToDec(Wire.read() & 0x3f);
*dayOfWeek = bcdToDec(Wire.read());
*dayOfMonth = bcdToDec(Wire.read());
*month = bcdToDec(Wire.read());
*year = bcdToDec(Wire.read());
}
5. Program data SD-card
void setup() {
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
buzz();
Serial.begin(9600);
while (!Serial) {
109
; // wait for serial port to connect. Needed for native USB port
only
Serial.print("Initializing SD card...");
if (!SD.begin(4)) {
Serial.println("initialization failed!");
return;
Serial.println("initialization done.");
myFile = SD.open("absensi.txt");
if (myFile) {
Serial.println("absensi.txt:");
110
while (myFile.available()) {
Serial.write(myFile.read());
myFile.close();
} else {
buzz();
void buzz()
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
delay(200);
111
digitalWrite(8,LOW);
digitalWrite(9,LOW);
delay(100);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
delay(200);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
void loop() {
msg="";
while(Serial.available()) {
c=Serial.read();
msg+=c;
delay(10);
msgs=msg;
112
if (msgs=="")
else
if (myFile) {
Serial.print("Writing to absensi.txt...");
myFile.println(msgs);
myFile.close();
Serial.println("done.");
buzz();
} else {
113
}}}
pindahkan posisi saklar yang berada di bawah LCD ke posisi 1 atau ON,
ketika alat sudah siap beroperasi maka alat akan menampilkan nama alat,
nama penulis, dan waktu ketika alat dihidupkan setelah itu tekan tombol
berapa sisik jari akan didaftarkan, letakkan jari yang akan digunakan untuk
Saat pertama
kali
dihidupkan
lcd akan
menampilkan
nama penulis
untuk
beberapa saat
siap dioperasikan
Saat tombol OK
pemilihan nomor
list identitas
115
Perintah untuk
meletakkan jari
ke sensor setelah
pemilihan nomor
sensor belum
membaca akan
adanya jari
Saat sensor
mendeteksi
adanya jari,
letakkan jari
sekali lagi ke
sensor.
Saat proses
pendaftaran user
berhasil
dilakukan
116
Saat proses
pengambilan
resensi dilakukan
melihat kondisi tiap - tiap komponen di tiap prosesnya. Yang pertama kita
memastikan catu daya mendapat tegangan dari keluaran PLN 220 Vac. Catu
daya digunakan sebagai sumber tegangan untuk seluruh rangkaian yang ada.
Pada alat ini kita menggunakan catu daya bernilai sebesar 12 Vdc menuju
nama, nim, judul tugas akhir dari penulis, dan waktu ketika sistem
dihidupkan. Dan Sistem Absensi akan aktif setelah di tekan tombol start,
maka kita akan melakukan beberapa proses untuk bisa melalukan proses
Pertama LCD akan menampilkan nama alat dan nama penulis setelah
muncul jam, tanggal, bulan dan tahun kita harus melakukan registrasi terlebih
dahulu dengan cara menekan tombol OK lalu kita pilih nomor list pengguna
yang ada di sistem dari 1 sampai 20. Kemudian tekan tombol OK lagi lalu
letakkan sidik jari ke sensor kemudian lepaskan dan letakkan sekali lagi untuk
117
memverifikasi bahwa jari yang kita letakkan ke sensor itu adalah jari yang
tiap-tiap komponen pada tugas akhir ini telah berjalan dengan yang
diinginkan.
BAB V
A. Kesimpulan
serta perangkat lunak pada tugas akhir ini, maka dapat diperoleh kesimpulan
berikut :
proses registrasi.
118
119
B. Saran
Dalam pengerjaan dan penyelesaian Tugas Akhir ini tentu tidak lepas
dari berbagai macam kekurangan dan kesalahan, baik itu pada perancangan
sistem maupun pada proses pembuatan Tugas Akhir yang telah dibuat. Untuk
sensor pengenal biometrika yang lebih baik lagi dari segi spesifikasi
pengguna
yang digunakan, mulai dari ATmega, pin I/O digital, dan memori
DAFTAR PUSTAKA
Deddy Susilo. 2010. 48 jam Kupas Tuntas Mikrokontroller MC51 dan AVR.
Yogyakarta: Penerbit Andi.
Dony Saputra, Dian Fitriani, dkk. 2014. Akses Kontrol Ruangan Menggunakan
Saludin Muis. 2014. Perancangan Power Supply Switch Mode. Yogyakarta: Graha
Ilmu. Yogyakarta: Penerbit Andi.
121
Januari 2018
Terhulin Purba Tambak dan T. Ahri Bahriun. 2015. Perancangan Sistem Home
#include <LiquidCrystal.h>
LiquidCrystal lcd(6,7,8,9,10,11);
#include "Wire.h"
#define DS3231_I2C_ADDRESS 0x68
// Convert normal decimal numbers to binary coded decimal
byte decToBcd(byte val)
{
return( (val/10*16) + (val%10) );
}
// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val)
{
return( (val/16*10) + (val%16) );
}
int jam;
int menit;
int detik;
int hari;
int bulan;
int tahun;
String waktu;
String tanggal;
122
uint8_t id;
int getFingerprintIDez();
uint8_t getFingerprintEnroll();
int sendlog=0;
int fingerlog;
String nama="";
String data;
String datasd;
int step;
int getid=1;
// pin #2 is IN from sensor (GREEN wire)
// pin #3 is OUT from arduino (WHITE wire)
SoftwareSerial mySerial(2,3);
SoftwareSerial mySerial2(4,5);
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
uint8_t readnumber(void) {
uint8_t num = 0;
boolean validnum = false;
while (1) {
while (! Serial.available());
char c = Serial.read();
if (isdigit(c)) {
num *= 10;
123
num += c - '0';
validnum = true;
} else if (validnum) {
return num;
}
}
}
void setup()
{
pinMode(A0, INPUT);
pinMode(A1, INPUT);
pinMode(A2, INPUT);
pinMode(A3, INPUT);
digitalWrite(A0,HIGH);
digitalWrite(A1,HIGH);
digitalWrite(A2,HIGH);
digitalWrite(A3,HIGH);
lcd.begin(16,4);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" ABSENSI ");
lcd.setCursor(0,1);
lcd.print(" ELEKTRONIK ");
lcd.setCursor(0,2);
lcd.print("SUBANDI SAPUTRA ");
lcd.setCursor(0,3);
lcd.print(" 1302555 ");
124
delay(4000);
Serial.begin(9600);
mySerial2.begin(9600);
Serial.println("Adafruit finger detect test");
if (finger.verifyPassword()) {
Serial.println("Found fingerprint sensor!");
} else {
Serial.println("Did not find fingerprint sensor :(");
while (1);
}
// Serial.println("Waiting for valid finger...");
lcd.clear();
}
125
step=2;
}
else if(digitalRead(A1)==LOW)
{
if(step==1)
{
step=3;
delay(1000);
}
else step=1;
}
if (step==1)
{
lcd.setCursor(0,2);
lcd.print("Enroll ID :");
lcd.print(getid);
delay(500);
if(digitalRead(A2)==LOW)
{
getid=getid-1;
if(getid<=0)getid=1;
}
else if(digitalRead(A3)==LOW)
{
getid=getid+1;
}
126
}
else if (step==2)
{
getFingerprintIDez();
}
else if(step==3)
{
id=getid;
while (! getFingerprintEnroll() );
delay(2000);
step=0;
}
if(sendlog==9)
{
if(fingerlog==1) nama="nama1";
else if(fingerlog==2) nama="nama2";
else if(fingerlog==3) nama="nama3";
else if(fingerlog==4) nama="Nama4";
else if(fingerlog==5) nama="Nama5";
else if(fingerlog==6) nama="Nama6";
else if(fingerlog==7) nama="Nama7";
else if(fingerlog==8) nama="Nama8";
else if(fingerlog==9) nama="Nama9";
else if(fingerlog==10) nama="Nama10";
else if(fingerlog==11) nama="nama11";
127
else if(fingerlog==12) nama="nama12";
else if(fingerlog==13) nama="Nama13";
else if(fingerlog==14) nama="Nama14";
else if(fingerlog==15) nama="Nama15";
else if(fingerlog==16) nama="Nama16";
else if(fingerlog==17) nama="Nama17";
else if(fingerlog==18) nama="Nama18";
else if(fingerlog==19) nama="Nama19";
else if(fingerlog==20) nama="Nama20";
lcd.setCursor(0,2);
lcd.print("ID :");
lcd.print(fingerlog);
lcd.setCursor(0,3);
lcd.print("Nama :");
lcd.print(nama);
datasd="Nama ";
datasd+=nama;
datasd+=data;
Serial.println(datasd);
mySerial2.print(datasd);
delay(2000);
lcd.setCursor(0,2);
lcd.print(" Terimakasih! ");
lcd.setCursor(0,3);
lcd.print(" ");
128
delay(2000);
sendlog=0;
step=0;
}
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(0,0);
lcd.print("Time : ");
lcd.print(waktu);
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print("Date : ");
lcd.print(tanggal);
displayTime();
uint8_t getFingerprintID() {
uint8_t p = finger.getImage();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image taken");
129
break;
case FINGERPRINT_NOFINGER:
Serial.println("No finger detected");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
return p;
case FINGERPRINT_IMAGEFAIL:
// Serial.println("Imaging error");
return p;
default:
// Serial.println("Unknown error");
return p;
}
// OK success!
p = finger.image2Tz();
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");
130
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;
}
// OK converted!
p = finger.fingerFastSearch();
if (p == FINGERPRINT_OK) {
Serial.println("Found a print match!");
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("Communication error");
return p;
} else if (p == FINGERPRINT_NOTFOUND) {
Serial.println("Did not find a match");
return p;
} else {
Serial.println("Unknown error");
return p;
}
131
// found a match!
Serial.print("Found ID #"); Serial.print(finger.fingerID);
Serial.print(" with confidence of "); Serial.println(finger.confidence);
}
p = finger.image2Tz();
if (p != FINGERPRINT_OK) return -1;
p = finger.fingerFastSearch();
if (p != FINGERPRINT_OK) return -1;
// found a match!
Serial.print("Found ID #"); Serial.print(finger.fingerID);
Serial.print(" with confidence of "); Serial.println(finger.confidence);
fingerlog=finger.fingerID;
sendlog=9;
//return finger.fingerID;
}
132
void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte
dayOfMonth, byte month, byte year)
{
// sets time and date data to DS3231
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0); // set next input to start at the seconds register
Wire.write(decToBcd(second)); // set seconds
Wire.write(decToBcd(minute)); // set minutes
Wire.write(decToBcd(hour)); // set hours
Wire.write(decToBcd(dayOfWeek)); // set day of week (1=Sunday, 7=Saturday)
Wire.write(decToBcd(dayOfMonth)); // set date (1 to 31)
Wire.write(decToBcd(month)); // set month
Wire.write(decToBcd(year)); // set year (0 to 99)
Wire.endTransmission();
}
void readDS3231time(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0); // set DS3231 register pointer to 00h
Wire.endTransmission();
Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
133
// request seven bytes of data from DS3231 starting from register 00h
*second = bcdToDec(Wire.read() & 0x7f);
*minute = bcdToDec(Wire.read());
*hour = bcdToDec(Wire.read() & 0x3f);
*dayOfWeek = bcdToDec(Wire.read());
*dayOfMonth = bcdToDec(Wire.read());
*month = bcdToDec(Wire.read());
*year = bcdToDec(Wire.read());
}
void displayTime()
{
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
// retrieve data from DS3231
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth,
&month,
&year);
jam= hour, DEC;
if (minute<10)
{
menit=0;
}
menit=minute, DEC;
if (second<10)
{
detik=0;
}
detik=second, DEC;
134
hari=dayOfMonth, DEC;
bulan=month, DEC;
tahun=year, DEC;
waktu=jam;
waktu+=":";
waktu+=menit;
waktu+=":";
waktu+=detik;
tanggal=hari;
tanggal+="/";
tanggal+=bulan;
tanggal+="/";
tanggal+=tahun;
data=" Pukul ";
data+=waktu;
data+=" Tanggal ";
data+=tanggal;
}
//==============
uint8_t getFingerprintEnroll() {
int p = -1;
lcd.setCursor(0,2);
lcd.print(" Waiting finger ");
Serial.print("Waiting for valid finger to enroll as #"); Serial.println(id);
while (p != FINGERPRINT_OK) {
135
p = finger.getImage();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image taken");
lcd.setCursor(0,2);
lcd.print("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;
}
}
// OK success!
p = finger.image2Tz(1);
switch (p) {
case FINGERPRINT_OK:
136
Serial.println("Image converted");
lcd.setCursor(0,2);
lcd.print("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;
}
Serial.println("Remove finger");
lcd.setCursor(0,2);
lcd.print("Remove finger ");
delay(2000);
p = 0;
while (p != FINGERPRINT_NOFINGER) {
137
p = finger.getImage();
}
Serial.print("ID "); Serial.println(id);
p = -1;
Serial.println("Place same finger again");
lcd.setCursor(0,2);
lcd.print(" Place same ");
lcd.setCursor(0,3);
lcd.print(" 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;
138
}
}
// 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;
}
139
// OK converted!
Serial.print("Creating model for #"); Serial.println(id);
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;
}
140
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;
}
}
#include <SPI.h>
#include <SD.h>
File myFile;
char c;
String msg;
String msgs;
void setup() {
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
buzz();
// Open serial communications and wait for port to open:
141
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Serial.print("Initializing SD card...");
if (!SD.begin(4)) {
Serial.println("initialization failed!");
return;
}
Serial.println("initialization done.");
142
Serial.println("error opening absensi.txt");
}
buzz();
}
void buzz()
{
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
delay(200);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
delay(100);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
delay(200);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
}
void loop() {
msg="";
while(Serial.available()) {
c=Serial.read();
msg+=c;
delay(10);
}
143
msgs=msg;
if (msgs=="")
{
}
else
{
myFile = SD.open("absensi.txt", FILE_WRITE);
144