Anda di halaman 1dari 116

SISTEM KONTROL KEHADIRAN BELAJAR MENGAJAR

DENGAN RFID DAN PENGENALAN WAJAH


BERBASIS RASPBERRY PI

Disusun oleh:

LARAS KUSUMA PUTRI


NIM. 3.32.19.0.14
MUHAMAD ANDRE LATIF QARIM
NIM. 3.32.19.0.15
ROBI PRASETIYO
NIM. 3.32.19.0.23
ZAKI MUTSANA
NIM. 3.32.19.0.26

PROGRAM STUDI TEKNIK ELEKTRONIKA


JURUSAN TEKNIK ELEKTRO
POLITEKNIK NEGERI SEMARANG
2022
SISTEM KONTROL KEHADIRAN BELAJAR MENGAJAR
DENGAN RFID DAN PENGENALAN WAJAH
BERBASIS RASPBERRY PI

Tugas akhir ini dibuat


untuk melengkapi sebagian persyaratan menjadai Ahli Madya

Disusun oleh:

LARAS KUSUMA PUTRI


NIM. 3.32.19.0.14
MUHAMAD ANDRE LATIF QARIM
NIM. 3.32.19.0.15
ROBI PRASETIYO
NIM. 3.32.19.0.23
ZAKI MUTSANA
NIM. 3.32.19.0.26

PROGRAM STUDI TEKNIK ELEKTRONIKA


JURUSAN TEKNIK ELEKTRO
POLITEKNIK NEGERI SEMARANG
2022
ii
iii
iv
KATA PENGANTAR

Puji syukur penulis panjatkan kehadirat Tuhan Yang Maha Kuasa atas limpahan
rahmat dan karunia-Nya sehingga laporan tugas akhir dengan judul “Sistem Kontrol
Kehadiran Belajar Mengajar dengan RFID dan Pengenalan Wajah Berbasis
Raspberry Pi” ini dapat terselesaikan. Laporan tugas akhir ini disusun untuk
memenuhi salah satu persyaratan untuk menyelesaikan Program Diploma III
Jurusan Teknik Elektro di Politeknik Negeri Semarang.

Penulis menyadari bahwa lancarnya tugas akhir dan penulisan laporan tidak lepas
dari bimbingan dan bantuan dari berbagai pihak. Oleh karena itu, penulis
mengucapkan terimakasih kepada :
1. Bapak Prof. Dr. Totok Prasetyo, B.Eng (Hons),. M.T., IPU selaku Direktur
Politeknik Negeri Semarang.
2. Bapak Yusnan Badruzzaman, S.T., M.Eng., selaku Ketua Jurusan Teknik
Elektro Politeknik Negeri Semarang.
3. Bapak Ilham Sayekti, S.T., M.Kom., selaku Ketua Program Studi Teknik
Elektronika Politeknik Negeri Semarang.
4. Bapak Dr. samuel BETA; Ing-Tech,. M.T. selaku Dosen Pembimbing I dan Ibu
Dra. Sri Astuti, M.M. selaku Dosen Pembimbing II yang telah memberikan
bimbingan dalam penyusunan tugas akhir ini.
5. Bapak Adi Wisaksono, S.T., M.M., sebagai Dosen Wali Elektronika 3A yang
telah memberikan arahan selama menempuh studi.
6. Seluruh dosen dan staff Program Studi Teknik Elektronika yang telah
memberikan ilmu dan banyak pengalaman selama menempuh studi.
7. Orang tua penulis yang telah memberikan doa dan dukungan.
8. Teman-teman Program Studi Teknik Elektronika khususnya kelas EK-3A yang
selalu memberikan semangat dan kebersamaannya dalam proses penyusunan
tugas akhir.
Semarang, Agustus 2022

Laras, Andre, Robi, dan Zaki

v
ABSTRAK

Pendataan kehadiran dosen dan mahasiswa Politeknik Negeri Semarang dilakukan


dengan menandatangani lembar kertas kontrol kehadiran yang disediakan oleh
PBM. Terdapat kekurangan yaitu kertas memiliki sifat mudah basah, robek dan
hilang, jam kedatangan dosen dan mahasiswa tidak terdokumentasi, Kaprodi tidak
dapat menyumpan data lengkap kehadiran dosen dan mahasiswa karena lembar
kertas kehadiran selalu diperbarui tiap minggu. Kontak sentuh telapak tangan pada
kertas seharusnya dihindari untuk mencegah menyebarnya virus yang tidak
diketahui. Untuk itu, dibuat sebuah sistem kontrol kehadiran belajar mengajar
dengan RFID dan pengenalan wajah berbasis Raspberry Pi yang diterapkan pada
Laboratorium Digital Politeknik Negeri Semarang. Tujuan pembuatan sistem ini
untuk memudahkan penentuan kompensasi mahasiswa, memudahkan rekapitulasi
data kehadiran melalui penyimpanan data. Raspberry Pi 3B+ digunakan sebagai
pemroses masukan dan luaran. Sistem dilenbgkapi pembacaan suhu oleh sensor
MLX-90614. Untuk mengukur objek pengukuran, digunakan sensor HC-SR04.
Setelah parameter terpenuhi, sistem melakukan pembacaan kartu identitas dosen
atau mahasiswa yang terdaftar pada sistem untuk mengisi kehadiran. Tombol tekan
1 di dalam ruangan untuk membuka akses kamera web melakukan pengenalan
wajah. Tombol tekan 2 untuk membuka pintu dari dalam ruangan. Layar 3.5” untuk
menampilkan perintah dan data. Untuk mendukung keamanan ruangan, pembuka
dan pengunci pintu hanya dapat dilakukan oleh Kaprodi, dosen pengampu, dan staf
laboratorium. Nama, NIM/NIP, keterangan terlambat atau tidak, akses kehadiran,
waktu kehadiran tercatat pada pangkalan data awan.
Kata Kunci: GY906-14, HC-SR04, kamera web, penyimpanan data awan ,
Raspberry Pi 3B+, RFID.

vi
ABSTRACT
Data collection on the attendance of lecturers and students at the Semarang State
Polytechnic was carried out by signing the attendance control sheet provided by
the PBM. There are drawbacks, namely the paper is easily wet, torn and lost, the
arrival hours of lecturers and students are not documented, the Head of Study
Program cannot store complete data on the attendance of lecturers and students
because attendance sheets are always updated every week. Palm touch contact on
paper should be avoided to prevent the spread of unknown viruses. For this reason,
a teaching and learning attendance control system was made with RFID and
Raspberry Pi-based facial recognition which was applied to the Digital Laboratory
of the Semarang State Polytechnic. The purpose of making this system is to facilitate
the determination of student compensation, facilitate the recapitulation of
attendance data through data storage. Raspberry Pi 3B+ is used as input and
output processor. MLX-90614 sensor used to temperature mesurement. HC-SR04
sensor used to measurement object. After the parameters are met, the system reads
the identity card of the lecturer or student registered in the system to fill in
attendance. Push button 1 in the room to open the webcam access to do facial
recognition. Push button 2 to open the door from inside the room. 3.5” screen for
displaying commands and data. To support room security, door opening and
locking can only be done by the Head of Study Program, lecturer, and laboratory
staff. Name, NIM/NIP, information late or not, attendance access used, attendance
time recorded in the local database.
Keywords: GY906-14, HC-SR04, local database, Raspberry Pi 3B+, RFID,
webcam.

vii
DAFTAR ISI

PERNYATAAN KEASLIAN TUGAS AKHIR ... Error! Bookmark not defined.

HALAMAN PERSETUJUAN ............................. Error! Bookmark not defined.

HALAMAN PENGESAHAN .............................. Error! Bookmark not defined.

KATA PENGANTAR ......................................................................................... v

ABSTRAK ......................................................................................................... vi

DAFTAR ISI .................................................................................................... viii

DAFTAR TABEL .............................................................................................. xi

DAFTAR GAMBAR ......................................................................................... xii

DAFTAR LAMPIRAN ..................................................................................... xiv

DAFTAR SINGKATAN ................................................................................... xv

BAB 1 PENDAHULUAN ................................................................................... 1

1.1 Latar Belakang ............................................................................................... 1

1.1.1 Perumusan Masalah..................................................................................... 2

1.1.2 Tujuan ....................................................................................................... 2

1.1.3 Manfaat ....................................................................................................... 3

1.2 Batasan Masalah ............................................................................................ 3

1.3 Sistematika Penulisan ..................................................................................... 4

BAB 2 TINJAUAN PUSTAKA ........................................................................... 5

2.1 Posisi Penelitian ............................................................................................. 5

2.2 Topik Terkait ................................................................................................. 8

2.3 Pemroses ...................................................................................................... 10

2.3.1 Raspberry Pi .............................................................................................. 10

2.4 Masukan dan Luaran .................................................................................... 14

2.4.1 Radio Frequency Identification (RFID) ..................................................... 14

viii
2.4.2 Pendeteksi Wajah (Kamera Web) .............................................................. 16

2.4.3 Pengukur Jarak (Sensor HC-SR04) ............................................................ 17

2.4.4 Pengukur Suhu (Sensor Suhu MLX-90614) ............................................... 19

2.4.5 Penampil Data (Tampilan Kristal Cair TFT 3.5 inchi) ............................... 21

2.4.6 Penggerak Gerendel Elektrik (Relai) ......................................................... 22

2.4.7 Pengunci Pintu (Gerendel Elektrik) ........................................................... 23

BAB 3 KEGIATAN PELAKSANAAN ............................................................. 24

3.1 Tahap Perancangan ...................................................................................... 24

3.1.1 Analisis Kebutuhan ................................................................................... 24

3.1.2 Desain Sistem............................................................................................ 25

3.2 Tahap Pembuatan Perangkat Keras dan Perangkat Lunak ............................. 27

3.2.1 Bagian Mekanik ........................................................................................ 27

3.2.2 Pemroses (Raspberry Pi 3)......................................................................... 29

3.2.3 Catu Daya ................................................................................................. 32

3.2.4 Pembaca RFID USB 13.56 MHz ............................................................... 33

3.2.5 Kamera Web C170 HD ............................................................................. 35

3.2.6 Sensor Ultrasonik HC-SR04 ...................................................................... 39

3.2.7 Sensor Suhu MLX90614 ........................................................................... 41

3.2.8 Tombol Tekan ........................................................................................... 43

3.2.9 Penampil Data Tampilan Kristal Cair TFT ................................................ 45

3.2.10 Penggerak................................................................................................ 48

3.2.11 Pangkalan Data Awan ............................................................................. 50

3.3 Tahap Pengukuran dan Pengujian Alat ......................................................... 51

3.3.1 Pengukuran Catu Daya .............................................................................. 52

3.3.2 Kalibrasi Sensor Jarak ............................................................................... 53

3.3.3 Kalibrasi Sensor Suhu ............................................................................... 53

ix
3.3.4 Pengukuran Tombol Tekan........................................................................ 54

3.3.5 Pengukuran Relai ...................................................................................... 54

3.3.6 Pengujian RFID......................................................................................... 55

3.3.7 Pengujian Kamera Web ............................................................................. 56

3.3.8 Pengujian Sensor Pengukur Suhu .............................................................. 57

3.4 Spesifikasi Alat ............................................................................................ 58

3.5 Penerapan Alat ............................................................................................. 59

BAB 4 ANALISIS DAN PEMBAHASAN ........................................................ 62

4.1 Analisis ........................................................................................................ 62

4.2 Pembahasan ................................................................................................. 62

BAB 5 KESIMPULAN ...................................................................................... 64

DAFTAR PUSTAKA ........................................................................................ 65

x
DAFTAR TABEL

Tabel 2.1 Perbandingan Tinjauan Pustaka ..........................................................7


Tabel 3.1 Analisis Kebutuhan Alat .....................................................................25
Tabel 3.2 Daftar Pin Raspberry Pi 3B+ yang digunakan .....................................29
Tabel 3.3 Spesifikasi Raspberry Pi 3B+ .............................................................30
Tabel 3.4 Spesifikasi RFID USB 13.56 MHz .....................................................33
Tabel 3.5 Spesifikasi Kamera Web C170 HD .....................................................36
Tabel 3.6 Konfigurasi Sensor Ultrasonik dan Raspberry Pi 3B+.........................40
Tabel 3.7 Konfigurasi Sensor Suhu dan Raspberry Pi 3B+ .................................42
Tabel 3.8 Spesifikasi Sensor HC-SR04 ..............................................................42
Tabel 3.9 Konfigurasi Tombol Tekan dan Raspberry Pi 3B+..............................44
Tabel 3.10 Spesifikasi Tampilan Kristal Cair TFT 3,5” ......................................45
Tabel 3.11 Spesifikasi Relai 1 Saluran ...............................................................48
Tabel 3.12 Spesifikasi Gerendel Elektrik ...........................................................49
Tabel 3.13 Hasil Pengukuran pada Catu Daya ....................................................52
Tabel 3.14 Hasil Kalibrasi pada Sensor Jarak .....................................................53
Tabel 3.15 Hasil Kalibrasi pada Sensor Suhu .....................................................53
Tabel 3.16 Hasil Pengukuran pada Tombol Tekan .............................................54
Tabel 3.17 Hasil Pengukuran pada Relai ............................................................54
Tabel 3.18 Hasil Pengujian Jarak Baca Pembaca RFID ......................................55
Tabel 3.19 Pengujian Kamera Web ....................................................................57
Tabel 3.20 Hasil Pengujian Sensor Pengukur Suhu ............................................57
Tabel 3.21 Hasil Pengujian Suhu Berdasarkan Jarak ..........................................58
Tabel 3.22 Spesifikasi Alat ................................................................................59

xi
DAFTAR GAMBAR

Gambar 2.1 Raspberry Pi 3B+ ...........................................................................11


Gambar 2.2 Bagian Raspberry Pi 3B+ ................................................................12
Gambar 2.3 Tata Letak GPIO Raspberry Pi 3B+ ................................................13
Gambar 2.4 Pembaca RFID USB .......................................................................14
Gambar 2.5 Cara Kerja RFID.............................................................................14
Gambar 2.6 Kartu RFID Pasif dan RFID Aktif...................................................15
Gambar 2.7 Tampilan cip dan antena RFID .......................................................15
Gambar 2.8 Kamera Web C170 HD ...................................................................17
Gambar 2.9 Sensor HC-SR04 ............................................................................17
Gambar 2.10 Cara Kerja Sensor Ultrasonik ........................................................18
Gambar 2. 11 Waktu Kerja Sensor Ultrasonik ....................................................19
Gambar 2.12 Sensor Suhu MLX90614...............................................................20
Gambar 2.13 Skematik Sensor MLX90614 ........................................................21
Gambar 2.14 Tampilan Kristal Cair TFT 3.5 inchi .............................................21
Gambar 2.15 Relai .............................................................................................22
Gambar 2.16 Struktur dan Simbol Relai .............................................................22
Gambar 2.17 Gerendel Elektrik..........................................................................23
Gambar 3.1 Diagram Metode Penelitian Air Terjun ...........................................24
Gambar 3.2 Blok Diagram Alat..........................................................................26
Gambar 3.3 Desain Alat Tampak Depan ............................................................27
Gambar 3.4 Desain Alat dengan Pintu Tampak Depan .......................................28
Gambar 3.5 Desain Alat Tampak Belakang ........................................................28
Gambar 3.6 Pin pada Raspberry Pi 3B+ .............................................................29
Gambar 3.7 Diagram Alir ..................................................................................31
Gambar 3.8 Rangkaian Catu Daya Tersaklar 12V/5A dan Penurun Tegangan
5V/3A ...................................................................................................32
Gambar 3.9 Rangkaian RFID USB 13.56 MHz dengan Raspberry Pi 3B+ .........33
Gambar 3.10 Program Menjalankan Pembaca RFID USB 13.5 MHz .................35
Gambar 3.11 Rangkaian Kamera Web C170 HD dengan Raspberry Pi 3B+ .......35
Gambar 3.12 Program Menjalankan Kamera Web C170 HD ..............................39
Gambar 3.13 Rangkaian Sensor HC-SR04 dengan Raspberry Pi 3B+ ................40

xii
Gambar 3.14 Program Menjalankan Sensor Ultrasonik HC-SR04 ......................40
Gambar 3.15 Rangkaian Sensor Suhu MLX90614 dengan Raspberry Pi 3B+ .....41
Gambar 3.16 Program Menjalankan Sensor Suhu MLX90614 ...........................43
Gambar 3.17 Rangkaian Tombol Tekan dengan Raspberry Pi 3B+ ....................43
Gambar 3.18 Program Menjalankan Tombol Tekan ...........................................44
Gambar 3.19 Rangkaian Tampilan Kristal Cair TFT 3.5 inchi dengan Raspberry
Pi 3B+ ...................................................................................................45
Gambar 3.20 Program Menjalankan Tampilan Kristal Cair TFT ........................47
Gambar 3.21 Rangkaian Modul Relai 1 saluran dengan Raspberry Pi 3B+ .........48
Gambar 3.22 Program Menjalankan Pengunci Pintu ..........................................49
Gambar 3.23 Program Menjalankan Database ....................................................50
Gambar 3.24 Tampilan Pangkalan Data Awan ...................................................51
Gambar 3.25 Titik Pengukuran ..........................................................................52
Gambar 3.26 Proses Pengenalan Raut Wajah dengan Kamera ............................56
Gambar 3.27 Grafik Perbandingan .....................................................................58
Gambar 3.28 Menghubungkan Steker Ke Tegangan Jala-Jala.............................59
Gambar 3.29 Mengukur Suhu ............................................................................60
Gambar 3.30 Dosen Melakukan Presensi Menggunakan Kartu RFID .................60
Gambar 3.31 Mahasiswa Melakukan Presensi Menggunakan Kartu RFID .........61
Gambar 3.32 Hasil Data Presensi .......................................................................61

xiii
DAFTAR LAMPIRAN

Lampiran 1 Daftar Komponen

Lampiran 2 Rangkaian Keseluruhan

Lampiran 3 Tata Letak Komponen

Lampiran 4 Papan Rangkaian Tercetak

Lampiran 5 Diagram Blok

Lampiran 6 Diagram Alir

Lampiran 7 Diagram Pengawatan Sistem

Lampiran 8 Gambar Mekanik

Lampiran 9 Program Alat

Lampiran 10 Datasheet

xiv
DAFTAR SINGKATAN

ADC = Analog to Digital Converter

AIDC = Automatic Identification and Data Capture

ARM = Advanced RISC Machines

CSI = Camera Serial Interface

DC = Direct Current

DSI = Display Serial Interface

Easy VR = Easy Voice Recognition

fps = frame per second

FTP = File Transfer Protocol

GB = Giga Byte

GHz = Giga Hertz

GPIO = General Purpose Input Output

GSM = Global System for Mobile

HDMI = High Definition Multimedia Interface

ID = Identity

IoT = Internet Of Things

JPG = Joint Photographic Experts Group

Kaprodi = Kepala Program Studi

KHz = Kilo Hertz

LAN = Local Area Network

LCD = Tampilan Kristal Cair

LED = Light Emitting Diode

xv
MikroSD = Secure Digital Memory Card

NC = Normally Close

NO = Normally Open

OpenCV = Open Source Computer Vision Library

PBM = Proses Belajar Mengajar

PCB = Printed Circuit Board

PHP = Hypertext Prepocessor

PWM = Pulse Width Modulation

QoS = Quality of Service

RFID = Radio Frequency Identification

RGB = Red Green Blue

RTC = Real Time Clock

SCL = Serial Clock

SDA = Serial Data

Sensor PIR = Sensor Passive Infrared Receiver

SMS = Short Message Service

SoC = System on a Cip

TFT = Thin Film Transistor

USB = Universal Serial Bus

WiFi = Wireless Fidelity

www = World Wide Web

xvi
BAB 1 PENDAHULUAN

1.1 Latar Belakang

Daftar hadir mahasiswa pada kegiatan belajar mengajar Program Studi Teknik
Elektronika di Politeknik Negeri Semarang merupakan suatu data yang direkap
guna mengetahui jumlah kehadiran, ketidakhadiran, dan keterlambatan mahasiswa
maupun dosen pada saat perkuliahan. Dosen dan mahasiswa memiliki catatan daftar
hadir menggunakan kertas yang biasanya dilaporkan kepada pengelola PBM
(Proses Belajar Mengajar) selaku pengolah data. Kegiatan presensi mahasiswa
masih dilaksanakan secara manual, dosen harus memanggil nama mahasiswa satu
persatu yang kemudian kertas daftar kehadiran harus ditandatangani oleh
mahasiswa. Daftar kehadiran yang masih menggunakan kertas ini memiliki
kekurangan, yaitu tidak validnya data yang masuk seperti ketidaktelitian dosen saat
melakukan absensi sehingga mahasiswa yang hadir tidak dicatat maupun
sebaliknya, kertas yang mudah rusak dan hilang sehingga dapat merugikan
mahasiswa dan dosen, lalainya mahasiswa dalam melakukan absensi, manipulasi
data (tanda tangan) yang dapat dilakukan oleh mahasiswa maupun dosen ketika
tidak hadir, jumlah akhir presensi mahasiswa yang tidak sesuai dengan kenyataan.

Dari beberapa permasalahan tersebut, muncul gagasan untuk membuat “Sistem


Kontrol Kehadiran Belajar Mengajar dengan RFID dan Pengenalan Wajah
Berbasis Raspberry Pi”. Alat ini dirancang untuk sistem presensi digital pada
Laboratorium Digital Program Studi Teknik Elektronika di Politeknik Negeri
Semarang. Hasil data presensi digital ini dapat diunduh kapan saja melalui
pangkalan data awan sehingga memudahkan pengelola PBM dan Kepala Program
Studi (Kaprodi) dalam memantau kegiatan aktivitas dosen di Laboratorium Digital
sesuai dengan jadwal kegiatan pembelajaran. Sebelum memasuki laboratorium,
dosen dan mahasiswa harus mengecek suhu terlebih dahulu menggunakan sensor
suhu MLX-90614 untuk mengantisipasi adanya virus Covid-19 pada masa ini.
Untuk membuka pintu laboratorium menggunakan kartu RFID (Radio Frequency
Identification) yang hanya dapat diakses oleh dosen pengajar, Kaprodi, dan staf
laboratorium. Mahasiswa dapat melakukan presensi menggunakan kartu RFID
pasif yang didekatkan ke pembaca RFID. Jika mahasiswa tidak membawa kartu

1
2

RFID, mahasiswa dapat menggunakan kamera web dengan meminta izin dosen
terlebih dahulu. Hasil data presensi dapat disimpan, diunduh, dan diolah di
pangkalan data awan sehingga menghasilkan informasi presensi. Dengan adanya
sistem presensi digital membuat presensi mahasiswa dan dosen lebih efisien dan
akurat. Selain itu, ruang laboratorium juga lebih aman setelah kegiatan
pembelajaran sudah selesai.

1.1.1 Perumusan Masalah

Berdasarkan uraian di atas, terdapat rumusan masalah yang harus


diperhatikan,yaitu:

1. Bagaimana merancang sistem kontrol kehadiran belajar mengajar pada


laboratorium digital?
2. Bagaimana cara kerja sistem kontrol kehadiran dosen dan mahasiswa pada
laboratorium digital?
3. Bagaimana cara menyimpan data kehadiran mahasiswa maupun dosen pada
pangkalan data awan dan dapat diakses dengan jaringan lokal pada waktu
tertentu ?

1.1.2 Tujuan

Tujuan dari perancangan tugas akhir ini yaitu:

1. Membuat alat untuk sistem kontrol kehadiran belajar mengajar di


Laboratorium Digital Program Studi Teknik Elektronika Politeknik Negeri
Semarang.
2. Dapat memahami cara kerja dan pengoperasian sistem kontrol kehadiran dosen
dan mahasiswa di Laboratorium Digital Program Studi Teknik Elektronika
Politeknik Negeri Semarang.
3. Dapat menyimpan secara otomatis data kehadiran mahasiswa dan dosen
menggunakan pangkalan data awan.
3

1.1.3 Manfaat

Manfaat dari perancangan yang dilakukan dari tugas akhir ini yaitu:

1. Kehadiran pada kegiatan belajar mengajar di Laboratorium Digital Program


Studi Teknik Elektronika Politeknik Negeri Semarang dapat dikontrol dengan
otomatis dan lebih efisien.
2. Dosen dan mahasiswa dapat mengoperasikan sistem kontrol kehadiran dosen
dan mahasiswa di Laboratorium Digital sesuai dengan jadwal kegiatan PBM.
3. Kaprodi dapat menyimpan data kehadiran dosen dan mahasiswa secara
otomatis melalui pangkalan data awan.

1.2 Batasan Masalah

Batasan masalah terhadap pembuatan Sistem Kontrol Kehadiran Belajar Mengajar


dengan RFID dan Pengenalan Wajah Berbasis Raspberry Pi, yaitu:

1. Alat digunakan di ruangan Laboratorium Digital Program Studi Teknik


Elektronika di Politeknik Negeri Semarang.
2. Pembacaan data meliputi pembacaan sensor inframerah MLX-90614, ID pada
kartu atau kartu RFID, saklar sentuh, kamera, dan Raspberry TFT tampilan
kristal cair.
3. Jangkauan pembacaan suhu pada sensor inframerah MLX-90614 berjarak
kurang dari 5 cm.
4. Alat ini hanya dapat diakses oleh Kaprodi, dosen terkait, dan mahasiswa
dengan kartu RFID atau foto wajah yang telah terdaftar.
5. Alat ini menyimpan secara otomatis data kehadiran mahasiswa dan dosen
menggunakan pangkalan data awan.
6. Alat ini tidak dapat beroperasi untuk mengunduh data kehadiran apabila kartu
mikroSD dilepas dari Raspberry Pi.
7. Alat ini harus tersambung dengan internet agar dapat mengirimkan data atau
informasi secara waktu nyata sehingga lokasi pemasangan harus terjangkau
koneksi internet.
8. Alat ini harus terhubung dengan catu daya agar dapat menyala sehinga lokasi
pemasangan harus terjangkau arus listrik.
4

1.3 Sistematika Penulisan

Sistematika penulisan laporan tugas akhir ini adalah sebagai berikut :

BAB I PENDAHULUAN
Dalam bab ini berisi tentang latar belakang, rumusan masalah, tujuan, manfaat,
batasan masalah, dan sistematika penulisan laporan tugas akhir.

BAB II TINJAUAN PUSTAKA

Dalam bab ini membahas tentang penelitian terkait dan penjelasan mengenai teori-
teori penunjang yang dijadikan landasan dan rujukan perhitungan dalam
mengerjakan tugas akhir ini.

BAB III KEGIATAN PELAKSANAAN


Dalam bab ini menjelaskan urutan perancangan alat berdasarkan cara kerja sistem
diagram blok dan secara keseluruhan, kemudian dilanjutkan dengan pembuatan
benda kerja, baik elektronik, mekanik serta pembuatan program, dan pengukuran
sistem.

BAB IV ANALISIS DAN PEMBAHASAN


Dalam bab ini membahas tentang pengujian hasil dari kerja alat, dengan analisa
benda kerja dan pembahasan meliputi komponen mekanik serta komponen elektrik
berdasarkan parameter masing-masing komponen.

BAB V KESIMPULAN
Dalam bab ini berisi tentang pernyataan singkat dan tepat yang dijabarkan dari hasil
analisis dan pembahasan, tanpa perlu penulisan saran dan pengembangan lebih
lanjut.

DAFTAR PUSTAKA

LAMPIRAN
BAB 2 TINJAUAN PUSTAKA

2.1 Posisi Penelitian

Berkaitan dengan judul yang ditentukan tersebut, berikut ini beberapa penelitian
yang berhubungan dengan tugas akhir, diantaranya yaitu:

1. Nurfitriyana, A. (2016) membuat skripsi dengan judul Prototipe Voting


Elektronik Menggunakan Kartu RFID dan Verifikasi Sidik Jari Berbasis
Mikrokontroler Arduino Mega 2560. Perangkat ini menggunakan
mikrokontroler Arduino Mega sebagai pengolah data. Masukan pada alat e-
vote berupa pembaca RFID, pembaca sidik jari, dan RTC. RTC digunakan
sebagai acuan waktu, pembaca RFID digunakan untuk membaca data e-KTP,
pembaca sidik jari digunakan untuk membaca sidik jari pemilih. Modul WiFi
digunakan untuk masuk ke dalam jaringan wifi yang telah terhubung dengan
internet. Koneksi ini diperlukan agar alat dapat berkomunikasi dengan peladen.
Tampilan kristal cair TFT berfungsi sebagai perangkat antarmuka.
2. Ariyanti , S., Adi, S. S., & Purbawanto, S. (2018) membuat Sistem Buka Tutup
Pintu Otomatis Berbasis Suara Manusia. Alat ini dibuat menggunakan
mikrokontroler Arduino Uno sebagai pemroses. Suara adalah sebagai masukan
sistem dengan menggunakan sensor suara yaitu mikrofon sebagai pendeteksi
suara. Data output dari sensor suara akan diteruskan ke Easy VR sebagai
pengenalan suara. Luaran sistem ini menggunakan motor servo sebagai
penggerak pintu dan solenoid sebagai pengunci pintu.
3. Daulay & Alamsyah (2019) membuat alat Monitoring Sistem Keamanan Pintu
Menggunakan RFID dan Sidik Jari Berbasis Web dan Database. Pada
penelitian ini kartu RFID dan sidik jari akan dibaca oleh modul mikrokontroler
untuk dapat dicocokkan dengan pangkalan data awan. Data-data absensi akan
dikirimkan ke peladen web untuk dapat diakses dimana saja. Untuk
menggerakkan pintu digunakan selenoid. Jika sidik jari dan kartu yang
dicocokkan tidak sesuai dengan data yang sudah tersimpan dalam program,
maka akan muncul tampilan sidik jari atau kartu anda salah. Jika sidik jari dan
kartu sesuai dengan data yang sudah tersimpan dalam program maka pintu akan
membuka.

5
6

4. Nasir, M., Usmardi, U., & Rachmawati, R. (2019) membuat Sistem Monitoring
Absensi Perkuliahan dengan Menggunakan RFID Berbasis Raspberry Pi.
Perekapan absensi secara manual membutuhkan waktu yang cukup lama dan
kemungkinan dapat terjadi kesalahan pendataan dalam proses perekapan
absensi. Penerapan teknologi RFID pada sistem absensi mahasiswa
menggunakan kartu RFID yang berfungsi untuk mengirimkan kode informasi
dan pembacaan data masukan menggunakan modul RC522. Kemudian dari
module RC522 akan dibaca dan diproses oleh Raspberry PI B+. Aplikasi
sistem absesnsi ini dibuat menggunakan bahasa pemrograman python dan
PHP. Berdasarkan hasil pengujian, jarak deteksi maksimal kartu RFID
mahasiswa terhadap modul RC522 adalah 4-5 cm. Dalam penelitian ini juga
menggunakan metode QoS (Quality of Service) untuk mengukur parameter
waktu tunda yang dihasilkan dalam satu jaringan yang digunakan. Hasil
pengujian yang telah dilakukan dalam penelitian ini dengan jarak 1-7 meter
dan memperoleh kualitas sinyal sangat bagus dengan rata-rata waktu tunda
dihasilkan 80 ms.
5. Hidayat, (2020) membuat Rancang Bangun Sistem Absensi dengan Multi
Pengenalan Wajah Berbasis Raspberry Pi 4 dengan SMS Notifikasi
Menggunakan Algoritma Haar Cascade. Alat ini bertujuan untuk
memanfaatkan teknik pengenalan wajah yang terekam di kamera sebagai
masukan data untuk sistem absensi berbasis Raspberry dengan memanfaatkan
pustaka pengenalan wajah dari pengembang yaitu OpenCV dan bahasa
pemrograman PHP untuk antarmuka web dengan notifikasi SMS. Teknologi
yang digunakan adalah Raspberry Pi4.
6. Oktaviarini, K. N., Annyndra, B. A., & Yusanti, L. (2021) membuat Aplikasi
Keamanan Rumah Berbasis IoT. Sistem ini menggunakan Raspberry Pi yang
berfungsi sebagai komponen pengendali utama untuk memantau rumah dengan
membaca sensor magnetik, sensor PIR, dan kamera yang digunakan untuk
memantau rumah, dan tambahan dalam menggunakan pengunci selenoid yang
dapat dikontrol oleh Raspberry Pi dalam mengunci pintu secara otomatis.
Semua data akan terbaca lalu dikirim ke peladen selanjutnya tampil pada
aplikasi perangkat lunak yang ada di ponsel pengguna.
7

Berdasarkan latar belakang dan tinjauan di atas, hasil perbandingan dengan alat
yang berjudul Sistem Kontrol Kehadiran Belajar Mengajar dengan RFID dan
Pengenalan Wajah Berbasis Raspberry Pi dapat dilihat pada Tabel 2.1 Perbedaan
tugas akhir. Alat ini menggunakan Raspberry Pi 3 sebagai pemroses, e-KTP atau
kartu RFID, pembaca RFID, kamera web, dan tampilan kristal cair TFT sebagai
masukan. Dan hasil luaran yaitu tampilan kristal cair TFT, relai, dan selenoid.
Selain itu, hasil rekapan data kehadiran akan disimpan pada pangkalan data awan.

Tabel 2.1 Perbandingan Tinjauan Pustaka

Tugas akhir yang


Perbandingan [1] [2] [3] [4] [5] [6]
akan dibuat
Masukan
Kartu RFID √ √ √ √
Pembaca RFID √ √ √ √
Sensor suara √
Modul pengenalan suara √
Sensor sidik jari √ √
Modul RTC √
Tampilan kristal cair
√ √
TFT
GSM SIM 800L √
Saklar √
Sensor HC-SR 04 √ √
Sensor magnetik √
Sensor PIR √
Kamera √ √
Pemroses
Raspberry Pi 3 √ √ √ √
Raspberry Pi 4 √
Arduino Uno √ √
Arduino Mega √
Keluaran
Relai √ √
Motor servo √
Solenoid √ √ √ √
LED √
Bel √
Ponsel
Pangkalan data awan √ √ √ √ √
Modul Wifi ESP01 √
Tampilan kristal cair
√ √
TFT
Pengeras Suara √
8

SMS √
Tampilan Kristal Cair √
Kartu mikroSD √
Website √

Keterangan:
1. Nurfitriyana, A., (2016)
2. Ariyanti, S., Adi, S. S., & Purbawanto, S. (2018)
3. Daulay, N. K., & Alamsyah, M. N., (2019)
4. Nasir, M., Usmardi, U., & Rachmawati, R., (2019)
5. Hidayat, R., (2020)
6. Oktaviarini, K. N., Annyndra, B. A., & Yusanti, L., (2021)

2.2 Topik Terkait

OpenCV (Open Source Computer Vision Library) adalah sebuah pustaka perangkat
lunak yang ditujukan untuk mengolah citra atau gambar dan video yang ditangkap
oleh alat perekam (seperti kamera web) yang dikonversi dari analog ke digital lalu
diolah di dalam komputer. OpenCV merupakan salah satu cabang kecerdasan
buatan yang digunakan untuk pengembangan atau analisis isi suatu gambar.
Pengembangan OpenCV diawali oleh Intel dan sekarang didukung oleh Willow
Garage dan Itseez. OpenCV memiliki antarmuka yang mendukung bahasa
pemrograman C++, C, Python, dan Java termasuk untuk sistem operasi Windows,
Linux, Mac OS, iOS, dan Android. OpenCV dirancang untuk efisiensi dalam
komputasi dan difokuskan pada aplikasi sistem waktu nyata. Ditulis dalam C++
yang dioptimalkan, dengan perpustakaan dapat memanfaatkan pengolahan pada
prosesor inti majemuk (multi-core processing). Penggunaan OpenCV mulai dari
seni interaktif, meliputi inspeksi penambangan (mines inspection), stitching maps
di web sampai dengan robotika maju (advanced). (Permana & Destriana, 2018)

Berikut adalah beberapa fungsi opencv yang digunakan dalam penelitian ini
(Ivanjul.com, 2018):
1. cv2 imread(): digunakan untuk membaca gambar.
2. cv2.IMREAD_COLOR: memuat gambar berwarna.
3. cv2.IMREAD_GRAYSCALE: memuat gambar dalam mode grayscale.
4. cv2.imshow (): untuk menampilkan gambar di jendela. Jendela secara otomatis
sesuai dengan ukuran gambar.
9

5. cv2.waitkey(0): untuk mempertahankan jendela agar tetap menampilkan


gambar.
6. cv2.destroyAllWindows(): untuk menutup jendela lain yang sedang terbuka.
7. cv2.imwrite(): untuk menyimpan gambar.
8. cv2.flip(img, -1): untuk merubah rotasi gambar sebesar 180°.
9. cv2.VideoCapture(0): untuk menangkap video.

Algoritma OpenCV

Haar Cascade digunakan untuk proses pendeteksi wajah digunakan algoritma haar
cascade. Secara umum, haar-like feature digunakan dalam mendeteksi objek pada
gambar digital. Istilah Haar menunjukkan suatu fungsi matematika (Haar Wavelet)
yang berbentuk kotak, prinsipnya sama seperti pada fungsi Fourier. Awalnya
pengolahan gambar hanya dengan melihat dari nilai RGB setiap piksel, namun
metode ini ternyata tidaklah efektif. Kemudian dikembangkan lagi sehingga
terbentuk Haar Like feature. Haar-like feature memproses gambar dalam kotak-
kotak, dimana dalam satu kotak terdapat beberapa piksel. Pada setiap kotak
kemudian diproses dan menghasilkan perbedaan nilai yang menandakan daerah
gelap dan terang. Nilai-nilai tersebut akan dijadikan dasar dalam pemrosesan
gambar. Cara menghitung nilai dari fitur ini adalah dengan mengurangkan nilai
piksel pada area putih dengan piksel pada area hitam. Untuk mempermudah proses
penghitungan nilai fitur, algoritma Haar menggunakan sebuah media berupa
Gambar Integral (Integral Image). Gambar Integral adalah sebuah citra yang nilai
tiap pikselnya merupakan penjumlahan dari nilai piksel kiri atas hingga kanan
bawah. Sebagai contoh piksel (a, b) memiliki nilai akumulatif untuk semua piksel
(x, y). Dimana x ≤ a dan y ≤ b. Dalam menggunakan metode haar carcade ada
beberapa jenis citra gambar yang dapat diolah salah satunya yaitu grayscale (Al
Aidid & Pamungkas, 2018).
10

2.3 Pemroses

2.3.1 Raspberry Pi

Raspberry pi memiliki bermacam tipe, salah satunya yaitu raspberry pi model


model A yang memiliki satu buah USB port dan 256MB SDRAM. Port pada
boardnya terdiri dari:
 Full size SD card
 HDMI output port
 Composite video output
 1 USB port
 26 pin header GPIO, I2C dll
 3.5mm audio jack
 1 Camera interface port (CSI-2)
 1 LCD display interface port (DSI)
 1 mircoUSB power connector untuk menyalakan perangkat
Karena tidak terdapat ethernet atau USB port ekstra pada model ini, maka model
ini menggunakan konsumsi daya yang lebih rendah dari model B/B+. Kemudian
dirilis pada November 2014, ini adalah varian 'plus' dari model A. Memiliki 40
GPIO pin, satu USB board, tanpa ethernet dan 256MB SDRAM. Juga memiliki
form factor yang lebih kecil dari model yang lain dengan panjang 65mm. Sebagai
tambahan, model ini memiliki sirkuit power supply yang lebih baik yang
memungkinkan perangkat USB yang memerlukan daya besar untuk digunakan pada
Raspberry dengan mode hot-plugged. Composite video connector yang menonjol
besar telah dihilangkan dan digantikan dengan jack audio/video 3.5mm. SD Card
full size juga diganti dengan versi yang lebib robust yaitu slot microSD. Selain
beberapa macam tersebut, juga terdapat jenis Compute Modul diperuntukan bagi
penggunaan industri, merupakan versi potongan yang hanya menyertakan chip
BCM2835, 512MB SDRAM dan 4GB eMMC flash memori, dalam form factor
berukuran kecil. Modul ini dihubungkan dengan papan dasar menggunakan
konektor 200 pin DDR2 SODIMM yang telah dimodifikasi dan bukan merupakan
perangkat yang kompatibel dengan SODIMM, namun hanya menggunakan
konektor yang sama dengan SODIMM. Semua fitur dari BCM2835 dipaparkan
11

melalui konektor SODIMM, termasuk dua buah kamera dan LCD port, sementara
model A dan B hanya memiliki satu. Compute modul diharapkan dapat digunakan
oleh perusahaan yang berharap untuk dapat mempercepat proses pengembangan
dari produk baru, berarti hanya papan dasarnya saja yang perlu dibuat, dengan
periperal yang sesuai, dan dengan Compute modul yang menyediakan CPU,
memori dan penyimpanan dengan perangkat lunak yang teruji dan terpercaya.
Berikut ini adalah gambar Raspberry Pi 3B+ yang ditunjukkan pada Gambar 2.1.

Gambar 2.1 Raspberry Pi 3B+


(Sumber: https://www.soselectronic.com/products/raspberry-pi/raspberry-pi-3-
model-b-1-292268.)

Raspberry Pi adalah sebuah komputer papan tunggal (single-board computer)


berukuran kartu kredit yang di kembangkan oleh Raspberry Pi Foundation yang
berada di United Kingdom. Raspberry Pi telah dilengkapi dengan semua fungsi
layaknya sebuah komputer lengkap, menggunakan SoC (System-on-a-cip) ARM
yang dikemas dan diintegrasikan di atas PCB. Perangkat ini menggunakan kartu
mikroSD untuk proses booting dan penyimpanan jangka panjang. (Bambang, dkk.,
2015).
12

Gambar 2.2 Bagian Raspberry Pi 3B+


(Sumber: http://www.cilsy.id/)
Raspberry Pi mempunyai masukan dan luaran antara lain :

 HDMI, dihubungkan ke tampilan kristal cair TV yg mempunyai porta HDMI


yang dapat dihubungkan ke monitor PC atau TV digital.
 Video analog (porta RCA), dihubungkan ke Televisi sbg alternatif jika tidak
menggunakan monitor PC .
 Keluaran Audio, untuk keluaran ke pengeras suara atau perangkat jemala.
 2 buah porta USB, digunakan untuk perangkat USB biasa seperti papan ketik,
mouse, dll.
 Mikro USB, untuk masukan atau daya.
 Pin I/O digital, untuk berbagai keperluan seperti membaca sensor, dll.
 Porta CSI (Camera Serial Interface), berada dekat dengan LAN dan digunakan
untuk modul kamera.
 DSI (Display Serial Interface), untuk modul tampilan kristal cair.
 Porta LAN (network), jika ingin menggunakan internet.
 Slot kartu SD, untuk kartu mikroSD memori yang menyimpan sistem operasi
berfungsi seperti hardisk pada PC.
13

Gambar 2.3 Tata Letak GPIO Raspberry Pi 3B+


(Sumber: (http://www.labelektronika.com/2018/06/mengenal-raspberry-pi-3-
model-b-plus.html)
Raspberry Pi 3 memiliki 40 Pin, diantaranya:
 24x - GPIO pin
 1x - Serial UARTs (RPi3 hanya mencakup mini UART)
 2x - SPI bus
 1x - I2C bus
 2x - 5V pin daya
 2x - 3.3V pin daya
 8x - pin ground
14

2.4 Masukan dan Luaran

2.4.1 Radio Frequency Identification (RFID)

Gambar 2.4 Pembaca RFID USB


RFID adalah suatu teknologi yang digunakan untuk melakukan identifikasi dan
pengambilan data dengan menggunakan sarana label RFID yang berfungsi untuk
menyimpan dan mengambil data jarak jauh. Proses identifikasi pada RFID dapat
terjadi dengan menggunakan gelombang elektromagnetik. Oleh sebab itu, proses
identifikasi RFID membutuhkan dua perangkat yaitu kartu dan pembaca RFID.
Tiga komponen penting RFID adalah kartu RFID, pembaca RFID, dan antena
RFID.

Gambar 2.5 Cara Kerja RFID


(Sumber: https://blog.ttelectronics.com/rfid-technology)
Cara Kerja RFID adalah dengan menggunakan metode AIDC (Automatic
Identification and Data Capture) yang secara otomatis mengidentifikasi kartu
objek, mengumpulkan data, dan memasukkan data ke komputer untuk diproses.
RFID mengirimkan data-data dalam bentuk gelombang radio atau nirkabel dari
15

kartu RFID yang berisi nomor seri dan kemudian dibaca oleh pembaca RFID untuk
diproses komputer yang akan menunjukkan identitas objek tersebut.

Gambar 2.6 Kartu RFID Pasif dan RFID Aktif


(Sumber: https://panduanteknisi.com/pengertian-rfid-adalah.html Teknisi)
Kartu RFID adalah alat yang menempel pada benda yang akan diidentifikasi oleh
pembaca RFID. Kartu RFID terdiri dari 2 jenis yaitu aktif dan pasif. Kartu pasif
dapat digunakan tanpa harus memakai baterai dimana dayanya disuplai dari
pembaca RFID melalui gelombang elektromagnetik. Kartu aktif memerlukan
baterai untuk dapat dioperasikan. RFID kartu berisi suatu kartu unik yang berbeda
satu dengan yang lainnya. Pada tugas akhir ini menggunakan kartu pasif.

Pembaca RFID adalah alat yang mampu membaca kartu RFID. Pembaca RFID juga
terdiri dari pembaca RFID pasif dan pembaca RFID aktif. Pembaca RFID pasif
hanya mampu menerima sinyal radio dari kartu aktif. Sedangkan pembaca aktif
dapat memancarkan sinyal interogator ke kartu dan menerima balasan autentikasi
dari kartu. Selain itu sinyal interogator juga dapat berfungsi sebagai sumber daya
kartu pasif.

Gambar 2.7 Tampilan cip dan antena RFID


(Sumber: https://panduanteknisi.com/pengertian-rfid-adalah.html)
16

Antena RFID adalah komponen yang berperan mengubah sinyal dari pembaca
RFID ke dalam gelombang sinyal radio dan dapat ditangkap oleh kartu RFID. Pada
saat pembaca RFID dapat membaca data pada kartu, maka kartu RFID akan
mengirimkan data kembali melalui antena ke pembaca, proses ini disebut dengan
backscatter dimana terdapat perubahan energi dari bentuk gelombang RF ke
elektromagnetik. Tanpa adanya antena ini maka pembaca tidak dapat membaca data
dengan benar pada kartu.

Besaran frekuensi pada RFID bermacam macam, ada yang bernilai 125 kHz dan
13.56 MHz.

2.4.2 Pendeteksi Wajah (Kamera Web)

Kamera web adalah sebutan bagi kamera waktu nyata yang gambarnya dapat dilihat
melalui www (World Wide Web), program pengolah pesan cepat, atau aplikasi
pemanggilan video. Kamera web dapat diartikan sebagai sebagai sebuah kamera
video digital kecil yang dihubungkan ke komputer melalui porta USB (Universal
Serial Bus), porta COM (Porta Serial), atau melalui jaringan internet. Fungsi dari
Kamera web yaitu untuk memudahkan dalam pengolahan pesan cepat seperti video
atau bertatap muka melalui video secara langsung. Kamera web juga berfungsi
sebagai alat untuk mengirim sebuah media secara langsung berupa video.

Sebuah Kamera web yang sederhana terdiri dari sebuah lensa standar yang dipasang
di sebuah papan sirkuit untuk menangkap sinyal gambar, kabel pembantu yang
dibuat dari bahan fleksibel yang salah satu ujungnya dihubungkan dengan papan
sirkuit dan ujung satu lagi memiliki penghubung, kabel ini dikontrol untuk
menyesuaikan ketinggian, arah, dan sudut pandang kamera web. Sebuah kamera
web biasanya dilengkapi dengan perangkat lunak, perangkat lunak ini mengambil
gambar-gambar dari kamera digital secara terus menerus ataupun dalam interval
waktu tertentu dan menyiarkannya melalui koneksi internet. Ada beberapa metode
penyiaran, metode yang paling umum adalah perangkat keras mengubah gambar ke
dalam bentuk file JPG (Joint Photographic Experts Group) dan mengunggahnya ke
web peladen menggunakan FTP (File Transfer Protocol).
17

Kecepatan bingkai mengindikasikan jumlah gambar sebuah perangkat lunak dapat


ambil dan kirim dalam satu detik. Untuk menayangkan video, dibutuhkan minimal
15 fps (frame per second) atau idealnya 30 fps. Untuk mendapatkan kecepatan
bingkai yang tinggi, dibutuhkan koneksi internet yang tinggi kecepatannya.

Gambar 2.8 Kamera Web C170 HD

2.4.3 Pengukur Jarak (Sensor HC-SR04)

Gambar 2.9 Sensor HC-SR04


(Sumber: https://teknisibali.com/cara-program-sensor-ultrasonic-hc-sr04-
arduino)
Sensor HC-SR04 adalah sensor ultrasonik yang berfungsi untuk mengubah besaran
fisis yaitu bunyi menjadi besaran listrik dan sebaliknya. Cara kerja sensor ini
didasarkan pada prinsip dari pantulan suatu gelombang suara sehingga dapat
digunakan untuk memperkirakan jarak suatu benda dengan frekuensi tertentu.
Sensor ini disebut sebagai sensor ultrasonik karena sensor ini menggunakan
18

gelombang ultrasonik (bunyi ultrasonik) yaitu bunyi di atas 20 KHz. Pada frekuensi
tersebut bunyi tidak dapat didengar oleh telinga manusia.

Gambar 2.10 Cara Kerja Sensor Ultrasonik


(Sumber: http://saptaji.com/2014/03/06/tutorial-arduino-5-menit-bikin-alat-ukur-
jarak-dengan-sensor-ultrasonik-dan-arduino/)
Sensor ultrasonik yang digunakan dalam tugas akhir adalah HC-SR04. HC-SR04
adalah sensor ultrasonik yang dapat mengukur jarak dengan rentang dari 2 cm
hingga 4 m, dengan akurasi mencapai 3 mm. Sensor tersebut memiliki 4 pin yaitu
Vcc dan Gnd untuk mencatu tegangan kerja, pin Trigger untuk memicu keluarnya
sinyal dari sensor, dan pin Echo untuk menangkap sinyal pantul dari benda.

Jarak benda dihitung berdasarkan persamaan berikut:

V=

S=V×t

Kecepatan gelombang bunyi pada udara adalah 340 m/s. Karena jarak tempuh
gelombang suara ultrasonik adalah bolak-balik yaitu dari sensor (pengirim) ke
objek dan kembali ke sensor (penerima), maka rumusnya menjadi :

×
S=

HC-SR04 dapat mengukur jarak dengan rentang dari 2 cm hingga 4 m, untuk


mengukur jarak maksimal 4 m maka 340 m/s disesuaikan menjadi 0.034 cm/µs
sehingga rumus di atas menjadi:

. ( /µ ) × (µ )
S (cm) =

S merupakan jarak antara sensor ultrasonik dengan benda (bidang pantul), dan t
adalah selisih antara waktu pemancaran gelombang oleh pengirim dan waktu ketika
19

gelombang pantul diterima penerima. Contohnya diketahui t = 588 µs, maka


S = 0.034 cm/µs × 588 µs / 2 = 10 cm.

Gambar 2. 11 Waktu Kerja Sensor Ultrasonik


(Sumber: http://saptaji.com/2014/03/06/tutorial-arduino-5-menit-bikin-alat-ukur-
jarak-dengan-sensor-ultrasonik-dan-arduino/)
Cara kerja sensor ultrasonik adalah ketika pada pin Trigger mendapat tegangan
positif selama 10µs, maka sensor akan mengirimkan 8 step sinyal ultrasonik dengan
frekuensi 40KHz. Sinyal yang dipancarkan akan merambat sebagai gelombang
bunyi dengan kecepatan sekitar 340 m/s. Ketika menumbuk suatu benda, maka
sinyal tersebut akan dipantulkan oleh benda tersebut. Selanjutnya, sinyal akan
diterima pada pin Echo. Setelah gelombang pantulan sampai di alat penerima, maka
sinyal tersebut akan diproses untuk menghitung jarak benda. Untuk mengukur jarak
benda yang memantulkan sinyal tersebut, maka selisih waktu ketika mengirim dan
menerima sinyal digunakan untuk menentukan jarak benda tersebut.

2.4.4 Pengukur Suhu (Sensor Suhu MLX-90614)

Sensor Suhu adalah suatu komponen yang dapat mengubah besaran panas menjadi
besaran listrik sehingga dapat mendeteksi gejala perubahan suhu pada obyek
tertentu. Sensor suhu melakukan pengukuran terhadap jumlah energi panas/dingin
yang dihasilkan oleh suatu obyek sehingga memungkinkan kita untuk mengetahui
atau mendeteksi gejala perubahan-perubahan suhu tersebut dalam bentuk keluaran
analog maupun digital. Sensor suhu juga merupakan dari keluarga transduser.

Pada tugas akhir ini dilengkapi dengan sensor suhu Nirsentuh yaitu sensor suhu
MLX90614 untuk menghindari virus Covid-19 pada masa ini. Penggunaan sensor
20

suhu pada tugas akhir ini digunakan untuk mendeteksi suhu tubuh sebelum
melakukan presensi.

Gambar 2.12 Sensor Suhu MLX90614


Sensor suhu MLX90614 merupakan sensor yang digunakan untuk mendeteksi
energi radiasi infra merah dan secara otomatis akan melakukan kalibrasi energi
radiasi infra merah ke kisaran suhu. MLX90614 tersusun atas detektor thermopile
infra merah dan pengkondisi sinyal untuk memproses keluaran dari sensor infra
merah. Thermopile tersusun dari lapisan yang terbuat dari silikon dan mengandung
banyak termokopel, sehingga radiasi infra merah dapat digunakan untuk
mendeteksi intensitas radiasi infra merah yang dipancarkan benda uji (Maickel
Osean Sibuea., 2018). Sensor ini didukung dengan penguat berderau rendah, ADC
17 bit, unit termometernya DSP dan thermometer yang memiliki akurasi dan
resolusi tinggi. terkalibrasi dengan keluaran digital dari PWM dan SMBus. Sebagai
standar PWM 10 bit akan menunjukan perubahan suhu yang diukur secara terus
menerus dengan jangkauan suhu pada sensor -40°C hingga 120°C dan jangkauan
suhu objek dari -70°C hingga +380°C dengan resolusi keluaran 0,14°C. Radiasi
infra merah adalah bagian dari spektrum elektromagnetik yang memiliki panjang
gelombang dari 0.7 hingga 1000 mikron. Namun hanya 0.7 – 14 mikron yang dapat
digunakan untuk mengukur suhu.
21

Gambar 2.13 Skematik Sensor MLX90614


(Sumber: https://datasheetspdf.com/pdf-file/774392/Melexis/MLX90614/1)

2.4.5 Penampil Data (Tampilan Kristal Cair TFT 3.5 inchi)

Gambar 2.14 Tampilan Kristal Cair TFT 3.5 inchi


(Sumber: https://m.made-in-china.com/hot-china
products/Lcd_Monitor_Of_Touch.html)

Transistor-LCD adalah singkatan dari Layar TFT film tipis. Sederhananya, panel
TFT-LCD dapat dilihat sebagai dua substrat kaca yang diapit di antara lapisan
kristal cair. Substrat kaca atas terhubung ke filter warna, sedangkan kaca bawah
memiliki transistor yang tertanam di dalamnya. Ketika medan listrik berubah
melalui transistor, molekul kristal cair membelokkan, sehingga mengubah
polarisasi cahaya, dan film polarisasi digunakan untuk menentukan keadaan cahaya
dan bayangan Pixel. Selain itu, kaca bagian atas dipasang filter warna, sehingga
setiap Pixel berisi tiga warna merah, biru, dan hijau, yang menyusun gambar pada
panel.
Sebagai antarmuka alat dengan pengguna tampilan kristal cair TFT (Thin Film
Transistor) adalah salah satu jenis LCD yang menggunakan teknologi transistor
film tipis untuk meningkatkan kualitas gambar dan kontras. Layar TFT mampu
memunculkan warna-warna yang cukup kaya , layar sentuh resistif yang digunakan
cukup sensitif terhadap sentuhan.
22

Pada tugas akhir ini, memanfaatkan tampilan kristal cair TFT sebagai tampilan untuk
menampilkan tampilan yang diperlukan. Spesifikasi dari tampilan kristal cair TFT
HDMI 3,5” adalah sebagai berikut:

2.4.6 Penggerak Gerendel Elektrik (Relai)

Gambar 2.15 Relai


(Sumber: https://www.ajifahreza.com/2019/01/apa-itu-relay-pengertiannya.html)

Relai adalah komponen elektronika berupa saklar elektrik yang dioperasikan


menggunakan listrik. Relai juga disebut sebagai elektromekanikal yang terdiri dari
dua bagian utama yaitu koil atau elektromagnet dan kontak saklar atau mekanikal.
Komponen relai menggunakan prinsip elektromagnetik sebagai penggerak kontak
saklar, sehingga dengan menggunakan arus listrik yang kecil, dapat menghantarkan
arus listrik yang yang memiliki tegangan lebih tinggi.
Berikut ini merupakan gambar dari bagian-bagian Relai :

Gambar 2.16 Struktur dan Simbol Relai


(Sumber: https://teknikelektronika.com/pengertian-relai-fungsi-relai/)
Pada dasarnya relai terdiri dari 4 komponen dasar, yaitu elektromagnetik (koil),
armatur, Switch Contact Point (sakelar), dan Spring (per). Berdasarkan gambar
diatas, sebuah besi (iron core) yang dililit oleh sebuah kumparan koil berfungsi
23

untuk mengendalikan besi (iron core) tersebut. Apabila kumparan koil diberikan
arus listrik, maka akan timbul gaya elektromagnet yang kemudian menarik
Armature untuk berpindah dari posisi sebelumnya (NC) ke posisi baru (NO)
sehingga menjadi saklar yang dapat menghantarkan arus listrik di posisi barunya
(NO). Posisi dimana Armature tersebut berada sebelumnya (NC) akan menjadi
OPEN atau tidak terhubung. Pada saat tidak dialiri arus listrik, Armature akan
kembali lagi ke posisi awal (NC). Koil yang digunakan oleh Relai untuk menarik
Contact Poin ke posisi Close pada umumnya hanya membutuhkan arus listrik yang
relatif kecil.

2.4.7 Pengunci Pintu (Gerendel Elektrik)

Gambar 2.17 Gerendel Elektrik

Gerendel elektrik adalah perangkat elektromagnetik yang dapat mengubah energi


listrik menjadi energi gerakan. Energi gerakan yang dihasilkan oleh selenoid yaitu
gerakan mendorong dan menarik. Pada dasarnya, selenoid hanya terdiri dari sebuah
kumparan listrik yang dililitkan di sekitar tabung silinder dengan aktuator
feromagnetik atau sebuah pendorong yang bebas bergerak “Masuk” dan “Keluar”
dari badan kumparan. Aktuator adalah sebuah peralatan mekanis yang dapat
bergerak atau mengontrol suatu mekanisme. Prinsip dari selenoid akan bekerja
sebagai pengunci dan akan aktif ketika diberikan tegangan. Di dalam selenoid
terdapat kawat yang melingkar pada inti besi. Ketika arus listrik mengalir melalui
kawat tersebut, maka terjadi medan magnet untuk menghasilkan energi yang akan
mendorong inti besi (aktuator). Poros dalam dari selenoid adalah piston seperti
silinder terbuat dari besi atau baja, disebut plunger (setara dengan sebuah dinamo).
Ketika medan magnet dimatikan, pegas plunger kemudian kembali ke keadaan
semula. Berikut spesifikasi gerendel elektrik:
BAB 3 KEGIATAN PELAKSANAAN

Pada pembuatan tugas akhir “Sistem Kontrol Kehadiran Belajar Mengajar dengan
RFID dan Pengenalan Wajah Berbasis Raspberry Pi” menggunakan metode air terjun.
Diagram metode air terjun ditunjukkan pada Gambar 3.1.

Gambar 3.1 Diagram Metode Penelitian Air Terjun


Metode air terjun digunakan dalam pembuatan tugas akhir ini. Diawali dengan mendata
kebutuhan, dilanjutkan dengan merancang sistem, pembuatan perangkat keras dan
lunak, pengujian alat, dan penerapan program dan pemeliharaan.

3.1 Tahap Perancangan

Tahap perancangan terdiri dari penentuan sistem dan komponen yang digunakan
dalam pembualan alat yang dilengkapi dengan cara kerja sistem. Tahap
perancangan adalah sebagai berikut:

3.1.1 Analisis Kebutuhan

Sistem kontrol kehadiran ini ditujukan untuk membantu Kaprodi dalam memantau
dan mengontrol kehadiran mahasiswa dan dosen di Laboratorium Digital Politeknik
Negeri Semarang. Pada tugas akhir ini dibuatlah sistem kontrol kehadiran dengan
RFID dan pengenalan wajah dengan Raspbery Pi sehingga memungkinkan Kaprodi
untuk melakukan pengecekan pada waktu tertentu atas kehadiran mahasiswa dan
dosen yang menggunakan laboratorium Digital. Daftar kebutuhan yang diperlukan

24
25

untuk membuat “Sistem Kontrol Kehadiran dengan RFID dan Pengenalan Wajah
Berbasis Raspberry Pi” ditunjukkan pada Tabel 3.1.

Tabel 3.1 Analisis Kebutuhan Alat

No Kebutuhan Keterangan
Pembaca RFID USB 13.56 MHz
1 Masukan data kehadiran
dan kartu RFID pasif
2 Pembuka akses kamera web Tombol tekan
3 Masukan data kehadiran cadangan Kamera Web (C170 HD)
4 Pengukur jarak Sensor jarak (HC-SR04)
5 Pengukur suhu Sensor suhu (MLX90614)
6 Pemroses perintah menjalankan alat Raspberry Pi 3B+
7 Penampil data Tampilan kristal cair TFT 3.5 inchi
8 Penggerak gerendel elektrik Relai
9 Pengunci pintu Gerendel elektrik
Catu daya 12V 5A dan sumber
10 Sumber daya listrik
listrik PLN

Pada tugas akhir ini diperlukan pembaca RFID sebagai pembaca nomor identitas
pada kartu RFID, dimana pada hasil pembacaan data nomor identitas akan
digunakan sebagai data kehadiran pada mahasiswa dan dosen. Kemudian tombol
tekan digunakan untuk membuka akses kamera web yang digunakan sebagai
masukan data kehadiran apabila tidak menggunakan kartu RFID. Pengukur jarak
digunakan untuk mengukur jarak yang sesuai saat melakukan pengukuran suhu.
Dalam usaha menghindari virus Covid-19 sistem presensi dilengkapi dengan sensor
suhu. Pemroses digunakan untuk mengolah data dari hasil pembacaan setiap
komponen masukan. Tampilan kristal cair TFT digunakan untuk menampilkan data
yang telah diolah oleh pemroses. Penggunaan relai dimanfaatkan untuk penggerak
pengunci pintu yaitu gerendel elektrik. Sumber daya listrik yang digunakan adalah
catu daya tersaklar dengan tegangan 12V 5A.

3.1.2 Desain Sistem

Sistem kontrol kehadiran dirancang dengan beberapa sistem yang terbagi menjadi
4 bagian yaitu komponen utama, masukan, luaran, dan aplikasi. Komponen
masukan yang digunakan yaitu pembaca dan kartu RFID, tombol tekan, kamera
web (C170 HD), sensor pengukur jarak (HC-SR04), dan sensor pengukur suhu
(MLX90614). Kemudian untuk pemroses atau pengolah data menggunakan
26

mikrokontroler berupa Raspberry Pi 3B+. Pada bagian luaran menggunakan


penampil data tampilan kristal cair TFT 3.5 inchi, relai 1 saluran, dan gerendel
elektrik. Hasil data kemudian tersimpan pada pangkalan data awan yang telah
disediakan. Blok diagram ditunjukkan pada Gambar 3.2 seperti berikut:

Gambar 3.2 Blok Diagram Alat


Cara kerja singkat dari diagram blok pada Gambar 3.2 yaitu komponen masukan
yang digunakan adalah sensor suhu (MLX90614) digunakan untuk mengukur suhu
tubuh dosen dan mahasiswa sebelum melakukan presnsi. Sensor jarak (HC-SR04)
digunakan untuk mengukur jarak agar sesuai saat sedang melakukan pengukuran
suhu. Kartu RFID digunakan sebagai pembuka pintu (khusus dosen, Kaprodi, dan
staf laboratorium) dan juga sebagai kartu presensi. Pembaca RFID digunakan untuk
membaca nomor identitas pada kartu RFID. Kamera web digunakan sebagai alat
presensi cadangan selain mengunakan kartu RFID. Tombol tekan digunakan untuk
pengaktif akses kamera web. Hasil pembacaan setiap komponen masukan dan
perintah yang diberikan kemudian diolah oleh Raspberry Pi 3B+. Relai digunakan
sebagai penggerak gerendel elektrik (solenoid). Penampil data (tampilan kristal cair
TFT 3.5 inchi) digunakan untuk menampilkan data yang telah diolah oleh
pemroses. Hasil data presensi mahasiswa dan dosen disimpan di pangkalan data
awan.
27

3.2 Tahap Pembuatan Perangkat Keras dan Perangkat Lunak

Tahap pembuatan perangkat keras dan lunak sangat penting dalam pembuatan
sistem ini. Dalam tahap ini pembuatan perangkat keras berupa mekanik alat,
sedangkan perangkat lunak berupa pemrograman untuk menjalankan alat dan
sebagai penampil. Pembuatan perangkat dan lunak dapat dibagi menjadi beberapa
bagian sebagai berikut :

3.2.1 Bagian Mekanik

Bagian mekanik dibuat menjadi sebuah kotak yang ditempel pada tembok di
sebelah pintu laboratorium. Bahan yang digunakan untuk membuat kotak yaitu
akrilik dengan ukuran 24×13×9 cm dan memiliki tebal akrilik 1,2 mm. Berikut
merupakan desain alat tampak depan ditunjukkan pada Gambar 3.3, tampak depan
dengan pintu pada Gambar 3.4, tampak belakang pada Gambar 3.5.

Gambar 3.3 Desain Alat Tampak Depan


28

Gambar 3.4 Desain Alat dengan Pintu Tampak Depan

Gambar 3.5 Desain Alat Tampak Belakang


29

3.2.2 Pemroses (Raspberry Pi 3)

Mikrokontroler yang digunakan pada tugas akhir ini adalah Raspberry Pi 3B+.
Mikrokontroler digunakan untuk membaca dan melaksanakan perintah dari setiap
komponen. Raspberry Pi 3B+ memiliki GPIO (General Purpose Input and Output)
dimana pin-pin tersebut dapat diatur fungsinya sebagai pin masukan maupun
keluaran. Berikut ini merupakan pin-pin yang ada pada Raspberry Pi 3B+ pada Gambar
3.6 dan daftar pin yang digunakan seperti terlihat pada Tabel 3.2.

Gambar 3.6 Pin pada Raspberry Pi 3B+


(Sumber: http://www.labelektronika.com/2018/06/mengenal-raspberry-pi-3-
model-b-plus.html)
Tabel 3.2 Daftar Pin Raspberry Pi 3B+ yang digunakan

No Pin Fungsi
1 3 SDA untuk sensor suhu
2 5 SCL untuk sensor suhu
3 11 Masukan sensor ultrasonik (Echo)
4 13 Luaran sensor ultrasonik (Trig)
5 15 Masukan tegangan positif tombol tekan
6 12 SIG untuk relai
30

Berikut spesifikasi lengkap Raspberry Pi 3B+ :

Tabel 3.3 Spesifikasi Raspberry Pi 3B+

Spesifikasi Keterangan
Prosesor Broadcom BCM2837B0, Cortex-A53
64-bit SoC @ 1.4 GHz
Penyimpanan 1GB LPDDR2 SDRAM
Konektivitas 2.4 GHz dan 5 GHz LAN nirkabel, bluetooth 4.2 GB
Ethernet USB 2.0 (maksimum 300 Mbps)
4 x USB 2.0 Portas
40-pin GPIO
Vidio dan Suara 1 x full size HDMI
Porta MIPI DSI display
Porta kamera MIPI CSI
4 pole keluaran stereo dan porta video komposit
Multimedia MPEG decode (1080p30), 2.0 graphics, OpenGL ES 1.1
Dukungan Kartu SD Slot kartu MikroSD
Daya Masukan 5V/2.5 DC melalui konektor mikro USB
5V DC melalui GPIO header
Daya over Ethernet (PoE)
Lingkungan Beroperasi di suhu 0-50° Celcius

Dari Tabel 3.2 dapat dibuat program untuk saling berkaitan antara komponen satu
dengan lainnya dengan diagran alir pada Gambar 3.7.
31

Gambar 3.7 Diagram Alir


32

3.2.3 Catu Daya

Catu daya utama yang digunakan adalah catu daya tersaklar berkapasitas 12V 5A. Catu
Daya 12V/5A digunakan untuk memberi masukan tegangan ke gerendel elektrik ,
sementara tegangan keluaran dari penurun tegangan 5V/3A digunakan untuk memberi
suplai tegangan ke Raspberry Pi 3B+. Rangkaian catu daya ditunjukkan pada Gambar
3.8.

Gambar 3.8 Rangkaian Catu Daya Tersaklar 12V/5A dan Penurun Tegangan
5V/3A
Tegangan 220 VAC diubah menjadi 220 VDC menggunakan diode bridge, lalu
disaring menggunakan kapasitor. Setelah itu masuk menuju ke IC osilator yang
berfungsi sebagai pembangkit frekuensi sekitar >20KHz agar dapat mengalirkan
arus dari trafo bagian primer ke sekunder. Pin Vcc1 pada IC digunakan sebagai
pengaktif IC agar menyala. Keluaran IC osilator berbentuk pulsa yang kemudian
diumpankan ke basis transistor. Saat IC osilator menghasilkan pulsa positif, maka
akan mengaktifkan transistor. Saat IC osilator menghasilkan pulsa negatif, maka
transistor akan padam. Hal inilah yang membuat tegangan yang dihasilkan menjadi
tegangan AC, sehingga dapat mengalir dari trafo primer ke sekunder. Saat arus
mengalir maka trafo mengalami induksi, sehingga bagian primer kedua digunakan
sebagai sumber daya untuk IC osilator. Keluaran dari trafo kemudian menuju ke
dioda dan diambil oleh sensor optokopler. Jika tegangan keluaran naik LED
bertambah terang sehingga photo-transistor memiliki nilai resistansi yang
berkurang, maka pin Feedback pada osilator akan mengalirkan tegangan. Dengan
adanya pin Feedback, maka osilator akan meredam kerjanya sehingga transistor
dan trafo akan teredam. Hal ini akan membuat keluaran tegangan sesuai dengan
yang diinginkan.
33

3.2.4 Pembaca RFID USB 13.56 MHz

Pembaca RFID USB 13.56 MHz digunakan untuk membaca nomor ID pada kartu
RFID pasif dimana hasil pembacaan tersebut akan digunakan sebagai presensi
mahasiswa dan dosen. RFID USB ini terhubung dengan mikrokontroler seperti
pada Gambar 3.9.

Gambar 3.9 Rangkaian RFID USB 13.56 MHz dengan Raspberry Pi 3B+
Pada tugas akhir ini menggunakan RFID USB 13.56 MHz yang memungkinkan
dalam pembacaan cip RFID dengan jarak yang dekat. Berikut spesifikasi RFID
USB 13.56 MHz:
Tabel 3.4 Spesifikasi RFID USB 13.56 MHz

Spesifikasi Keterangan
Tipe kartu kartu yang didukung EM4001 / EM4001 / EM4102, T5577,
T5557, T5566, RFID 13.56 MHz, kartu ID
Keluaran 10 digit pertama pada kartu RFID atau
kode heksa (opsional)
Sistem yang didukung Windows XP/ 7/ 8/ 10
Frekuensi 13.56 MHz
Kecepatan komunikasi 106 Kbit/s
Waktu baca / tulis < 1s
Daya 5V5%
Jarak baca 5 – 8 cm
Suhu operasional -30°C hingga +40°C
Antarmuka USB 2.0
Indikator LED dan bel
Ukuran 10.8 × 7.8 × 2.8 cm
Berat 70 gram

Pada Gambar 3.10 merupakan program untuk menjalankan pembaca RFID USB
13.5 MHz:
34

1. # ==============================PUSTAKA================================ #
2. import tkinter as tk #Impor tkinter
3. import time #Impor waktu
4. from komponen import komponen, database as db #Impor komponen dan database
5. import halaman_hasil #Impor halaman_hasil
6. import halaman_kamera #Impor halaman_kamera
7. ## =======================DEKLARASI VARIABEL============================ ##
8. # =========================DEKLARASI KAMERA============================= #
9. tampil = False #tampil adalah false
10. pindah_face = False #pindah_face adalah False
11. # =====================PROGRAM TAMPILAN RFID========================== #
12. class HalamanRfidWindow():
13. def __init__(self, parent, suhu):
14. global tampil, pindah_face #Program untuk mengakses tampil dan pindah_face
15. tampil = True #tampil adalah true
16. pindah_face = False #pindah_face adalah false
17. self.parent = parent
18. self.window = tk.Toplevel(parent) #Program membuat jendela baru
19. self.window.title("Halaman rfid") #Program membuat judul
20. self.window.bind('q', self.destroy)
#Program menutup jendela dengan tombol 'q'
21. self.window.bind('<Return>', self.proses_rfid)#Program Memproses RFid
22. self.window.attributes('-fullscreen', True)
#Program layar penuh pada jendela
23. self.window.configure(bg="black")
#Program menjadikan hitam latar belakang
24. self.window.update()
25. self.win_w = self.window.winfo_width()
#Program Mengatur posisi pas lebar pada jendela induk
26. self.win_h = self.window.winfo_height()
#Program Mengatur posisi pas tinggi pada jendela induk
27. komponen.update_waktu(self)
28. # =====================PROGRAM TAMPILAN SUHU========================== #
29. self.window.columnconfigure(0, weight=1)
30. self.window.rowconfigure(1, weight=1)
31. self.suhu_label = tk.Label(self.window, text="%.2f°C" % suhu,
font=("Arial", 170, "bold"), bg="black", fg="white")
32. self.suhu_label.grid(row=1, column=0, columnspan=2)
33. # ==================PROGRAM TAMPILAN RFID STATUS====================== #
34. self.rfid_status = tk.Label(self.window, text="", font=("Arial", 0,
"bold"), bg="black", fg="red")
35. self.rfid_status.grid(row=2, column=0, columnspan=2)
36. # ==================PROGRAM TAMPILAN RFID INPUT======================= #
37. self.rfid_input = tk.Entry(self.window, border=0, bg="black", fg="black")
38. self.rfid_input.grid(row=3, column=0)
39. self.rfid_input.focus_set()
40. self.rfid_label = tk.Label(self.window, text="Silahkan Scan RFID atau",
font=("Arial", 70, "bold"),
41. bg="black", fg="yellow")
42. self.rfid_label.grid(row=4, column=0, columnspan=2)
43. self.face_label = tk.Label(self.window, text="Tekan Tombol untuk Face
Recognition", font=("Arial", 50, "bold"), bg="black", fg="yellow")
44. self.face_label.grid(row=5, column=0, columnspan=2, pady=10)
45. self.waktu_pindah = time.time()
46. self.update()
47. # ===========================PROGRAM TUTUP============================ #
48. def destroy(self, event):
49. global tampil, pindah_face
50. tampil = False
51. pindah_face = False
52. self.rfid_input.delete(0, tk.END) #Program menghapus masukan rfid
53. self.window.destroy()
54. # ===========================PROGRAM RFID============================= #
55. def proses_rfid(self, event):
56. nomor_rfid = self.rfid_input.get().strip() #Program membaca kartu rfid
57. print(f"rfid: {nomor_rfid}")
58. self.rfid_input.delete(0, tk.END)
59. try:
35

60. pengguna = db.session.query(db.Pengguna).filter(db.Pengguna.rfid ==


nomor_rfid).first()
#Program mencocokan kartu rfid dengan pangkalan data
61. if pengguna is None:
62. self.rfid_status.config(font=("Arial", 70, "bold"), text="Gagal, Coba
Lagi!")
63. else:
64. halaman_hasil.HalamanHasilWindow(self.parent, pengguna,
keterangan="Disiplin")
#Program menampilkan keterangan disiplin pada pangkalan data
65. self.destroy(None)
66. except Exception as e:
67. print(e)
68. self.rfid_status.config(font=("Arial", 70, "bold"), text="Gagal, Coba
Lagi!")
69. # ==================PROGRAM MENGHIDUPKAN KAMERA ======================= #
70. def update(self):
71. if time.time() - self.waktu_pindah >= 10:
72. self.destroy(None)
73. Return
74. elif pindah_face:
75. halaman_kamera.HalamanKameraWindow(self.parent)
76. self.destroy(None)
77. Return
78. komponen.update_waktu(self)
79. self.window.after(500, self.update)

Gambar 3.10 Program Menjalankan Pembaca RFID USB 13.5 MHz


Dalam program pembaca RFID menggunakan pustaka untuk meringkas program.
Pustaka ini digunakan untuk mengambil data nomor seri RFID yang akan diolah
sebagai masukan untuk data kehadiran. Kemudian dibandingkan dengan data pada
pangkalan data.

3.2.5 Kamera Web C170 HD

Kamera web C170 HD digunakan sebagai alat presensi cadangan selain


menggunakan kartu RFID. Kamera web ini terhubung dengan mikrokontroler
seperti pada Gambar 3.11.

Gambar 3.11 Rangkaian Kamera Web C170 HD dengan Raspberry Pi 3B+


36

Berikut spesifikasi Kamera Web C170 HD:


Tabel 3.5 Spesifikasi Kamera Web C170 HD

Spesifikasi Keterangan
Resolusi FPS HD 720p/30fps
Resolusi Maks 1024 x 768 piksel
Bidang Pandang Diagonal 55°
Koreksi Cahaya Otomatis Lampu Kanan 2
Mikrofon Peredam Kebisingan 1 mikrofon omni-directional
Koneksi USB 2.0
Sistem yang didukung Windows Vista/ XP/ 7/ 8/ 10/ 2000, Vista,
Linux, MacOS
Panjang Kabel 1.5 m
Dimensi 213 x 145 x 78mm
Berat 190 gram

Pada Gambar 3.12 merupakan program untuk menjalankan kamera web C170 HD:

1. # ==============================PUSTAKA================================ #
2. import tkinter as tk
3. from PIL import ImageTk, Image #Impor Image dan ImageTk
4. import cv2 #Impor opencv
5. import time
6. from komponen import komponen, identifikasi, database as db
#Impor komponen, identifikasi, dan pangkalan data
7. import halaman_hasil #Impor halaman_hasil

8. # =======================KELAS HALAMAN KAMERA=========================== #


9. class HalamanKameraWindow():
10. # =================MENGATUR LETAK TAMPILAN PADA GUI==================== #
11. def __init__(self, parent):
12. self.parent = parent
13. self.cap = cv2.VideoCapture(0)
#Program menyalakan kamera, 0 mewakili camera utama
("komponen/gambar_tes/vid.mp4")
14. self.window = tk.Toplevel(parent)
15. self.window.title("Halaman Camera")
16. self.window.bind('q', self.destroy)
17. self.window.attributes('-fullscreen', True)
18. self.window.configure(bg="black")
19. self.window.update()
20. self.win_w = self.window.winfo_width()
21. self.win_h = self.window.winfo_height()
22. komponen.update_waktu(self)
23. self.cam_w = self.cap.get(cv2.CAP_PROP_FRAME_WIDTH)
#Proram mengatur Lebar tampilan gambar kamera
24. self.cam_h = self.cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
#Proram mengatur tinggi tampilan gambar kamera
25. self.window.columnconfigure(0, weight=1) #Program mengatur ukuran kisi
26. self.canvas_h = self.win_h – 220
#Program kalibrasi posisi tinggi canvas(self.win_h * 0.6)
27. self.canvas_w = round(self.canvas_h * (self.cam_w / self.cam_h))
#Program kalibrasi posisi lebar canvas
28. self.canvas = tk.Canvas(self.window, width=self.canvas_w,
height=self.canvas_h) #Program letak canvas
29. self.canvas.grid(row=1, column=0, columnspan=2, pady=20)
#Program pengaturan canvas
30. self.status = tk.Label(self.window, text="", font=("Arial", 50, "bold"),
bg="black", fg="red")
31. self.status.grid(row=2, column=0, columnspan=2)
37

32. identifikasi.proses_gambar(self.cam_w, self.cam_h, self.canvas_w,


self.canvas_h) #Program pengambilan Pemrosesan identifikasi gambar
33. self.waktu_pindah = time.time()
34. self.update()
35. # =====================MENUTUP JENDELA HALAMAN======================== #
36. def destroy(self, event):
37. identifikasi.proses_jalan = False
#Program pengaturan jika identifikasi.proses_jalan salah
38. self.cap.release() #Program untuk menutup program dan membuka kamera
39. self.window.destroy() #Program menutup kamera
40. # ===================MEMPERBARUI JENDELA HALAMAN====================== #
41. def update(self):
42. global suhu_data, update_batas, suhu_process, terakhir_kirim
43. #Program mengakses program dari suhu_data, update_batas, suhu_process,
terakhir_kirim
44. try:
45. img_ori = self.cap.read()[1]
#Program memberi tanda pada img_ori sebagai self.cap.read()[1]
46. identifikasi.img = img_ori
47. self.img = cv2.cvtColor(img_ori, cv2.COLOR_BGR2RGB)
#Program mengkonversi gambar
48. self.img = cv2.resize(self.img, (self.canvas_w, self.canvas_h))
#Program mengatur ulang ukuran gambar
49. if identifikasi.rec is not None:#Program merekam dengan
mengidentifikasi
50. self.waktu_pindah = time.time() – 5
51. top, right, bottom, left = identifikasi.rec
52. cv2.rectangle(self.img, (left,top), (right, bottom), (0,255,0), 10)
53. elif time.time() - self.waktu_pindah >= 10:
54. self.destroy(None)
55. Return
1. self.img = ImageTk.PhotoImage(Image.fromarray(self.img))
#Program ImageTk.PhotoImage(Image.fromarray(self.img)) bertanda jadi
self.img
2. self.canvas.create_image(0, 0, anchor=tk.NW, image=self.img)
#Program membuat gambar kanvas dan menampilkan pada kiri atas
3. except Exception as e: pass
4. if identifikasi.face_id is None: self.status.config(text="Gagal Mengenali
Wajah!") #Program Jika tidak mengenali wajah
5. elif identifikasi.face_id != "":
6. pengguna = db.session.query(db.Pengguna).filter(db.Pengguna.face_id ==
identifikasi.face_id).first() #Program Menulis data ke pangkalan data
7. if pengguna is None:
#Program mendeteksi adanya pengguna pada pangkalan data
8. self.status.config(text="Gagal Mengenali Wajah!")
#Program Jika tidak mengenali wajah
9. else:
10. self.status.config(text="Berhasil", fg="yellow")
#Program Jika berhasil mengenali wajah
11. def pindah():
12. halaman_hasil.HalamanHasilWindow(self.parent, pengguna,
keterangan="Tidak Disiplin") #Program Jika menampilkan keterangan tidak
disiplin pada pangkalan data karena menggunakan kamera
13. self.destroy(None)
14. self.window.after(3000, pindah)
15. Return
16. komponen.update_waktu(self)
17. self.window.after(5, self.update)
18.
19. # =============================PUSTAKA================================ #
20. from lib2to3.pytree import Node #Impor Node
21. import os #Impor OS
22. import numpy as np #Impor Numpy
23. import time #Impor Time
24. from threading import Thread #Impor Thread
25. import cv2 #Impor opencv
26. import face_recognition #Impor face_recognition
27.
28. # ===========================PENGESETAN AWAL========================== #
29. waktu_awal = time.time() #Program pembandingan waktu
30. img = None #Program pengesetan img
31. rec = None #Program pengesetan rec
38

87. proses_jalan = False #program proses_jalan menjadi false


88. face_id = "" #Program face id jadi pengaturan awal / belum membaca
89. print(f"selesai import: {time.time() - waktu_awal :.2f} detik")
#Program menampilkan waktu
90. # =========PROGRAM MEMBANDINGKAN GAMBAR DENGAN PANGKATAN DATA========= #
91. def proses_gambar_thread(cam_w, cam_h, canvas_w, canvas_h):
92. global img, rec, face_id
#Program untuk dapat merubah pada program definisi
93. bagi = 2 #Program kartu
94. while proses_jalan:
95. if img is None: continue
96. img_kecil = cv2.resize(img, (round(cam_w / bagi), round(cam_h /
bagi))) #Program jika tidak mendeteksi orang pada kamera
97. try:
98. top, right, bottom, left =
face_recognition.face_locations(img_kecil, model="hog")[0]
#Program pendeteksi orang dengan kartuan kotak pada area wajah
99. top = round(top * canvas_h / cam_h * bagi)
#Program Kotak wajah bagian atas
100. right = round(right * canvas_w / cam_w * bagi)
#Program Kotak wajah bagian kanan
101. bottom = round(bottom * canvas_h / cam_h * bagi)
#Program Kotak wajah bagian bawah
102. left = round(left * canvas_w / cam_w * bagi)
#Program Kotak wajah bagian kiri
103. rec = (top, right, bottom, left)
#program merekam wajah pada pendeteksi
104. faces = kenali_wajah(img_kecil)
#Program arar hasil rekam gambar biaar di proses
105. face_id = None
#Program agar mencocokan face id dengan paling atas sesuai pangkalan data
106. if len(faces) > 0 and faces[0]["score"] >= 95.5: face_id =
faces[0]["face_id"]
#Program pencocokan dengan pangkalan data beserta presentase kemiripan
107. except Exception:
108. rec = None
109. Continue
110. # ========================PROGRAM REKAM GAMBAR======================== #
111. def proses_gambar(cam_w, cam_h, canvas_w, canvas_h):
112. global proses_jalan, face_id, rec, img
#Program untuk dapat merubah pada program definisi
113. face_id = "" #Program face id jadi pengaturan awal / belum membaca
114. rec = None #Program pengesetan rec
115. proses_jalan = True #program proses_jalan menjadi True
116. img = None #Program pengesetan img
117. Thread(target=proses_gambar_thread, args=[cam_w, cam_h, canvas_w,
canvas_h]).start() #Program penargetan gambar yang telah dideteksi
118. # ===================PROGRAM MEMBUAT GAMBAR LATIH===================== #
119. folder_gambar = "komponen/gambar" #Membuka folder
120. label = []
121. encoding = []
122. gambar = os.listdir(folder_gambar) #Mencari file pada folder (folder_gambar)
123. waktu_awal = time.time()
124. print("--------------ENCODING----------------------")
125. for g in gambar:
126. waktu_encoding = time.time()
127. nama, ext = os.path.splitext(g) #Merubah path ke akaarnya
128. if ext not in (".jpg", ".jpeg", ".png", ".JPG"): continue#Mensortir file
129. nama_cache = f"{folder_gambar}/{nama}.npy" #Memberi tanda
130. try:
131. if os.path.exists(nama_cache): #Memeriksa path ada apa tidak
132. img_encoding = np.load(nama_cache) #Jika ada akan dimuat
133. else:
134. img = face_recognition.load_image_file(f"{folder_gambar}/{g}")
#Membaca file dengan modul face recognition
135. img_encoding = face_recognition.face_encodings(img)[0]
#Melatih data file dengan modul encoding
136. np.save(nama_cache, img_encoding) #Menyimpan file latih
137. label.append(nama) #Menambahkan file nama
138. encoding.append(img_encoding) #Menambahkan data latih
139. except Exception:
140. open(nama_cache, "w").close()
141. print("error", end=" -> ")
39

142. print(f"{g}: {time.time() - waktu_encoding :.2f} detik")


#Program menampilkan waktu encoding
143. print(f"selesai load encoding: {time.time() - waktu_awal :.2f} detik\n")
#Program menampilkan waktu setelah encoding selesai
144. # ===================PROGRAM PENGAMBILAN HASIL TES==================== #
145. def kenali_wajah(wajah_img):
146. waktu_tes = time.time()
147. try:
148. wajah_encoding = face_recognition.face_encodings(wajah_img)[0]
#Program membandingkan wajah
149. hasil = face_recognition.face_distance(encoding, wajah_encoding)
#Program membandingkan wajah dengan jarak yang sesuai data
150. hasil_dict = {}
151. for i, v in enumerate(hasil): hasil_dict[v] = {"face_id": label[i],
"score": 100-v*10} #Penampilan score hasil tes
152. hasil.sort()
153. hasil_label = [hasil_dict[v] for v in hasil]
154. print(f" HASIL TES {hasil_label}: {time.time() - waktu_tes :.2f}
detik")
155. return hasil_label
156. except Exception:
157. print(f" HASIL TES []: {time.time() - waktu_tes :.2f} detik")
#Program menampilkan waktu
158. return []
159. # ======================AKHIR PROGRAM IDENTIFIKASI==================== #
160. if __name__ == "__main__":
161. print("--------------TEST----------------------")
162. waktu_awal = time.time()
163. folder_tes = "komponen/gambar_tes"
164. gambar_tes = os.listdir(folder_tes)
#Mencari file pada folder (folder_tes)
165. for g in gambar_tes:
166. nama, ext = os.path.splitext(g)
167. if ext not in (".jpg", ".jpeg", ".png", ".JPG"): continue
168. try:
169. tes_img = face_recognition.load_image_file(f"{folder_tes}/{g}")
170. print(nama, end="")
171. kenali_wajah(tes_img)
172. except Exception: print(f"error: {nama}")
173. print(f"selesai tes: {time.time() - waktu_awal :.2f} detik")

Gambar 3.12 Program Menjalankan Kamera Web C170 HD


Dalam program kamera web sebagai sensor pendeteksi wajah menggunakan
pustaka untuk meringkas program. Pustaka ini digunakan untuk mengambil data
wajah yang akan diolah sebagai masukan untuk data kehadiran. Dengan mendeteksi
gambar wajah yang tertangkap kamera yang terbaca dengan adanya kotak ssebagai
tanda terdeteksinya wajah seseorang, kemudian di identifikasi dengan data latih
yang sudah dibuat pada folder gambar dengan nama face_id, mencari file gambar
yang sesuai dengan hasil yang paling tinggi kemiripannya dengan pangkalan data.

3.2.6 Sensor Ultrasonik HC-SR04

Sensor ultrasonik HC-SR04 digunakan untuk mengukur jarak pada saat sedang
melakukan pengukuran. Rangkaian sensor ultrasonik HC-SR04 dengan Raspberry Pi
3B+ seperti terlihat pada Gambar 3.13.
40

Gambar 3.13 Rangkaian Sensor HC-SR04 dengan Raspberry Pi 3B+


Konfigurasi sensor ultrasonik dan Raspberry Pi 3B+ ditunjukkan pada Tabel 3.3.
Tabel 3.6 Konfigurasi Sensor Ultrasonik dan Raspberry Pi 3B+
Sensor Ultrasonik Raspberry Pi 3B+
GND GND
ECHO 11
TRIG 13
VCC +5V
Pada pengaplikasian sensor ultrasonik HC-SR04 pada pin GPIO Raspberry Pi
diperlukan tegangan masukan maksimum 3,3V dengan menggunakan prinsip
rangkaian pembagi tegangan. Rumus Pembagi Tegangan :
Vout = × Vin
Pada Gambar 3.14 merupakan program untuk menjalankan sensor ultrasonik HC-
SR04:
1. # =============================PUSTAKA================================= #
2. import RPi.GPIO as GPIO #Import GPIO library
3. import time #Import time library
4. # =====================DEKLARASI SENSOR HC-SR04======================== #
5. GPIO.setmode(GPIO.BCM) #Pin GPIO menjadi Mode BCM
6. GPIO_TRIGGER = 27 #GPIO27 atau pin 13 sebagai TRIGER
7. GPIO_ECHO = 17 #GPIO17 atau pin 11 sebagai ECHO
8. # ==========================PENGESETAN AWAL============================ #
9. GPIO.setup(GPIO_TRIGGER, GPIO.OUT) #Atur pin Trigger sebagai GPIO out
10. GPIO.setup(GPIO_ECHO, GPIO.IN) #Atur pin Echo sebagai GPIO in
11. ## =========================PROGRAM UTAMA============================= ##
12. def hitung_jarak():
13. GPIO.output(GPIO_TRIGGER, GPIO.HIGH) #Atur pin trigger menjadi high
14. time.sleep(0.1) #waktu tunda
15. GPIO.output(GPIO_TRIGGER, GPIO.LOW) #Atur pin trigger menjadi low
16. waktu_tunggu = time.time()
17. while GPIO.input(GPIO_ECHO) == GPIO.LOW and (time.time() - waktu_tunggu <
5): pass #Atur pin echo menjadi low
18. waktu_awal = time.time()
19. waktu_tunggu = time.time()
20. while GPIO.input(GPIO_ECHO) == GPIO.HIGH and (time.time() - waktu_tunggu <
5): pass #Atur pin echo menjadi high
21. waktu_akhir = time.time()
22. waktu = waktu_akhir - waktu_awal #Menghitung Lama durasi
23. jarak = (waktu * 34300) / 2 #Menentukan jarak dengan waktu
24. return jarak

Gambar 3.14 Program Menjalankan Sensor Ultrasonik HC-SR04


41

Dalam program sensor ultrasonik sebagai pendeteksi jarak menggunakan pustaka


untuk meringkas program. Pustaka ini digunakan untuk mendeteksi jarak saat
sedang melakukan pengukuran suhu. Program awal diatas melakukan deklarasi pin
echo dan pin trig. Pada pengukuran jarak dan volume digunakan tipe data float
sehingga menghasilkan pengukuran data desimal. Fungsi pin echo sebagai input
dan pin trig sebagai output. Kemudian untuk mengukur jarak tangan untuk
pengukuran menggunakan rumus waktu pembacaan sensor pada saat waktu echo
tinggi dikurangi pada saat waktu echo rendah kemudian (waktu * 34300)/2.
Penggunaan 34.300 sebagai faktor pengali karena kecepatan sensor ultrasonik
adalah 34.300 cm/s. Kemudian penggunaan angka 2 sebagai faktor pembagi karena
cara kerja sensor ultrasonik sendiri dengan mengrimkan gelombang dan kemudian
dipantulkan. Sehingga hasil pengukuran jarak yang diperoleh dibagi 2 sehingga
menghasilkan jarak sebenarnya.

3.2.7 Sensor Suhu MLX90614

Sensor suhu MLX90614 digunakan untuk mengukur suhu sebelum melakukan


presensi. Rangkaian sensor suhu MLX90614 dengan Raspberry Pi 3B+ seperti
terlihat pada Gambar 3.15.

Gambar 3.15 Rangkaian Sensor Suhu MLX90614 dengan Raspberry Pi 3B+


Konfigurasi sensor suhu dan Raspberry Pi 3B+ ditunjukkan pada Tabel 3.4.
42

Tabel 3.7 Konfigurasi Sensor Suhu dan Raspberry Pi 3B+

Sensor Suhu Raspberry Pi 3B+


SDA 3
SCL 5
GND GND
VCC +5V

Tabel 3.8 Spesifikasi Sensor HC-SR04

Spesifikasi Keterangan
Tegangan Masuk 5V DC
Arus 15 mA
Frekuensi Kerja 40 KHz
Jarak Maksimum 400 cm
Jarak Minimum 2 cm
Sudut Pengukuran 15°
Masukan Sinyal Trigger 10µs pulsa TTL
Keluaran Sinyal Echo Sinyal level TTL
Dimensi 45×20×15 mm

Spesifikasi dari sensor MLX90614:


1. Tegangan referensi 4.5V hingga 5V. Sensor dapat menerima tegangan dari
4.5V hinga 5VDC.
2. SCL (Serial Clock) merupakan protokol komunikasi masukan waktu serial
untuk komunikasi 2 kabel. Pada pin SCL terdapat dioda zener 5.7V untuk
koneksi transistor bipolar eksternal ke MLX90614 untuk mensuplai perangkat
dari sumber eksternal 8 hingga 16V.
3. SDA (Serial Data) merupakan masukan atau keluaran digital. Dalam mode
normal suhu objek yang diukur tersedia di pin ini PWM.
4. VDD merupakan suplai tegangan eksternal.
5. VSS merupakan pin Ground.

Pada Gambar 3.16 merupakan program untuk menjalankan sensor suhu


MLX90614:
43

1. # ==============================PUSTAKA================================ #
2. import time #Impor time library
3. import board #Impor board
4. import adafruit_mlx90614 #Impor adafruit_mlx90614
5. # ============================PENGESETAN AWAL=============================
#
6. i2c = board.I2C() #Menyamakan tanda board.I2C() dengan 12c
7. mlx = adafruit_mlx90614.MLX90614(i2c)
#Menyamakan tanda dafruit_mlx90614.MLX90614(i2c) dengan mlx
8. # ===========================PROGRAM MLX-90614========================= #
9. def hitung_suhu(): return mlx.object_temperature
#Program pembacaan suhu dengan i2c

Gambar 3.16 Program Menjalankan Sensor Suhu MLX90614


Dalam program sensor suhu digunakan pustaka untuk meringkas program. Pustaka
ini dapat digunakan untuk mengukur suhu tubuh yang akan diolah sebagai
masukan. Pustaka ini mempermudah dalam mengirim dan menerima komunikasi
data. Sistem IIC terdiri dari SDA sebagai jalur data sedangkan SCL sebagai jalur
sinkronisasi informasi data.

3.2.8 Tombol Tekan

Tombol tekan digunakan sebagai pembuka akses kamera web untuk melakukan
presensi. Rangkaian tombol tekan dengan Raspberry Pi 3B+ seperti terlihat pada
Gambar 3.17.

Gambar 3.17 Rangkaian Tombol Tekan dengan Raspberry Pi 3B+


Rangkaian tombol tekanmenggunakan pull up resistor sebagai pengatur kondisi
tegangan output yang masuk ke pin I/O mikrokontroler. Fungsi utama dari
44

rangkaian pull up adalah untuk menghindari "Floating logic". "Floating logic"


adalah suatu fenomena dalam rangkaian mikrokontroler dimana mikrokontroler
tidak dapat membaca nilai tegangan yang masuk ke pin I/O. Hal tersebut
dikarenakan tegangan yang masuk tidak memenuhi nilai 5 Volt dan tidak juga 0
Volt. Oleh karena itu mikrokontroler sulit untuk menentukan sinyal tersebut
termasuk katagori HIGH (5V) atau LOW (0 V).

Konfigurasi tombol tekan dan Raspberry Pi 3B+ ditunjukkan pada Tabel 3.5.

Tabel 3.9 Konfigurasi Tombol Tekan dan Raspberry Pi 3B+

Tombol Tekan Raspberry Pi 3B+


VCC PB1 15
VCC PB2 31
GND GND

Pada Gambar 3.18 merupakan program untuk menjalankan tombol tekan:


1. # ==========================DEKLARASI TOMBOL=========================== #
2. GPIO_TOMBOL_FACE = 22 #Pin GPIO 22 sebagai tombol menghidupkan kamera
3. GPIO_TOMBOL_RELAY = 6 #Pin GPIO 6 sebagai tombol pembuka pintu
4. GPIO_RELAY = 18 #pin GPIO 18 sebagai pin relai
5. # ===========================PENGESETAN AWAL=========================== #
6. jeda_kunci = 3000 #Atur waktu relai hidup
7. # ============================PROGAM TOMBOL============================= #
8. def tombol_callback(channel):
9. if halaman_rfid.tampil: halaman_rfid.pindah_face = True
#Program memindah program dari rfid ke kamera
10. GPIO.setup(GPIO_TOMBOL_FACE, GPIO.IN)
#Mengatur tombol pin GPIO kamer menjadi masukan
11. GPIO.add_event_detect(GPIO_TOMBOL_FACE, GPIO.FALLING,
callback=tombol_callback, bouncetime=500) #Program mendeteksi tombol
ketika di tekan lalu menjalankan program lain dengan waktu tunda 0.5 detik
12. GPIO.setup(GPIO_RELAY, GPIO.OUT) #Mengatur pin relai menjadi keluaran
13. GPIO.output(GPIO_RELAY, GPIO.LOW)#Mengatur pin relai berlogika 0 / teg.
rendah
14. # ==========================PROGRAM RELAY============================= #
15. def kunci():
16. GPIO.output(GPIO_RELAY, GPIO.HIGH)#Mengatur pin relai berlogika 1 / teg.
tinggi
17. time.sleep(jeda_kunci/1000) #Mengatur waktu tunda selama jeda_kunci_1000
18. GPIO.output(GPIO_RELAY, GPIO.LOW)#Mengatur pin relai berlogika 0 / teg.
rendah
19. GPIO.setup(GPIO_TOMBOL_RELAY, GPIO.IN, pull_up_down=GPIO.PUD_UP)
#Mengatur tombol pin GPIO menjadi masukan lalu dengan konfigurasi pull up
20. GPIO.add_event_detect(GPIO_TOMBOL_RELAY, GPIO.FALLING, callback=lambda c:
Thread(target=kunci).start(), bouncetime=jeda_kunci+1000)#Program mendeteksi
tombol ketika di tekan lalu menjalankan program lain dengan waktu tunda

Gambar 3.18 Program Menjalankan Tombol Tekan


Dalam program tombol tekan digunakan pustaka untuk meringkas program.
Tombol ini dapat digunakan sebagai masukan untuk mengaktifkan kamera web dan
penggerak gerendel pintu elektrik. Penggunaan tombol berfungsi untuk melakukan
perubahan menu pada saat presensi, dan membuka pintu yang terkunci dari dalam.
45

3.2.9 Penampil Data Tampilan Kristal Cair TFT

Penampil data tampilan kristal cair TFT digunakan untuk menampilkan informasi
presensi yang diperintahkan oleh mikrokontroler. Rangkaian tampilan kristal cair
TFT dengan Raspberry Pi 3B+ seperti terlihat pada Gambar 3.19.

Gambar 3.19 Rangkaian Tampilan Kristal Cair TFT 3.5 inchi dengan Raspberry
Pi 3B+
Tabel 3.10 Spesifikasi Tampilan Kristal Cair TFT 3,5”

Spesifikasi Keterangan
Tipe layar TFT
Antarmuka LCD SPI (Fmax : 32MHz)
Jenis layar sentuh Resistif
Model 3.5” TFT LCD
Disipasi daya 0.13A 5V
Resolusi 480 x 320 piksel
Suhu operasi -20 ~ 60 °C

Pada Gambar 3.20 merupakan program untuk menjalankan Tampilan Kristal Cair
TFT:
46

1. # ==============================PUSTAKA================================ #
2. Import tkinter as tk #Impor tkinter
3. import time #Impor time
4. from komponen import komponen, ultrasonik, mlx, tombol, identifikasi
#Impor komponen, ultrasonik, mlx, tombol, identifikasi
5. import halaman_rfid #Impor halaman_rfid
6. # ==========================KELAS HALAMAN AWAL========================== #
7. class HalamanAwalWindow():
8. # ===================MENGATUR LETAK TULISAN PADA GUI==================== #
9. def __init__(self, parent): #Definisi Jendela awal
10. self.window = parent #Jendala sama dengan GUI
11. self.window.title("Halaman Awal") #Nama Jendala GUI
12. self.window.bind('q', lambda event: window.quit())
#Membuat tombol "q" sebagai menghentikan program
13. self.window.attributes('-fullscreen', True) #Tampilan jendela menjadi
layar penuh
14. self.window.configure(bg="black") #Membuat latar belakang
jendela menjadi hitam
15. self.window.update() #Memperbarui jendela
16. self.win_w = window.winfo_width()
17. self.win_h = window.winfo_height()
18. komponen.update_waktu(self) #Menampilkan Tulisan Waktu
19. self.cek_suhu_font = ("Arial", 120, "bold")
20. self.window.columnconfigure(1, weight=1)
21. self.window.rowconfigure(1, weight=1)
22. self.suhu_label = tk.Label(self.window, text="Cek Suhu Anda",
font=self.cek_suhu_font,
23. bg="black", fg="white")
24. self.suhu_label.grid(row=1, column=0, sticky=tk.NSEW, columnspan=2)
#Membuat tulisan "Cek Suhu Anda" menjadi ditengah jendela
25. self.status_font = ("Arial", 70, "bold")
26. self.status_label = tk.Label(self.window, text="",
font=self.status_font,
27. bg="black", fg="white")
28. self.status_label.grid(row=2, column=0, sticky=tk.EW, columnspan=2)
#Membuat tulisan STATUS menjadi ditengah jendela
29. self.waktu_pindah = time.time() #Waktu pada tampilan gui
30. self.update() #Memperbarui Jendela
31. # ==========================PENGUKURAN SUHU============================ #
32. def update(self): #Definisi update
33. if ultrasonik.hitung_jarak() < 10 and not halaman_rfid.tampil:
#Tunda Waktu disaat telah mengukur suhu
34. suhu = mlx.hitung_suhu() #Suhu didapat dari Sensor
35. self.suhu_label.config(text = "%.2f°C" % suhu, font=("Arial",
200, "bold"))
36. if suhu <= 37.0: #Batas suhu Aman
37. self.status_label.config(text = "Suhu Aman!", fg="yellow")
#Mengatur Tampilan dan warna tulisan STATUS
38. if time.time() - self.waktu_pindah >= 1.5:
#Tunda Waktu setelah menampilkan STATUS suhu
39. self.waktu_pindah = time.time()
40. halaman_rfid.HalamanRfidWindow(self.window, suhu)
#Menampilkan halaman RFid
41. else:
42. self.waktu_pindah = time.time()
43. self.status_label.config(text = "Suhu Tidak Aman!",
fg="red") #Mengatur Tampilan dan warna tulisan STATUS
44. else:
45. self.waktu_pindah = time.time()
46. self.suhu_label.config(text = "Cek Suhu Anda",
font=self.cek_suhu_font)#Program tampilan keetika sensor ultrasonik tidak
membaca jarak yang tentukan
47. self.status_label.config(text = "")
48. komponen.update_waktu(self) #Memperbarui hasil sensor
suhu
49. self.window.after(500, self.update) #Waktu memperbaharui setiap 5s
50. if __name__ == "__main__":
51. window = tk.Tk() #Program Menampilkan Jendela
52. HalamanAwalWindow(window) #Program Menampilkan Tampilan Pada Jendela
53. window.mainloop() #Program Pengulangan
47

54. # ===============================PUSTAKA============================== #
55. from threading import Thread #Impor Tread
56. import tkinter as tk #Impor tkinter
57. from komponen import komponen #Impor Komponen
58. import time #Impor time
59. from komponen import tombol #impor tombol
60. from komponen import database as db #impor pangkalan data awan
61. # =======================KELAS HALAMAN HASIL========================== #
62. class HalamanHasilWindow():
63. # ================MENGATUR LETAK TULISAN PADA GUI===================== #
64. def __init__(self, parent, pengguna, keterangan):
#Inisialisasi pembuatan objek
65. absen = db.Absen(
66. nama = pengguna.nama,
67. nip = pengguna.nip,
68. role = pengguna.role,
69. keterangan = keterangan
70. ) #Program Untuk mengirim data pada pangkalan data
71. db.session.add(absen) #Program menginput data absen pada kolom
72. db.session.commit() #Program menyerahkan data
73. if pengguna.role == 'Dosen' or pengguna.role == 'Staf':
74. Thread(target=tombol.kunci).start() #Program memicu tombol
75. self.window = tk.Toplevel(parent) #Program Membuat jendela baru
76. self.parent = parent #Jendala sama dengan GUI
77. self.window.title("Halaman hasil") #Nama Jendala GUI
78. self.window.bind('q', self.destroy)
#Membuat tombol "q" sebagai menghentikan program
79. self.window.attributes('-fullscreen', True)
#Tampilan jendela menjadi layar penuh
80. self.window.configure(bg="black")
#Membuat latar belakang jendela menjadi hitam
81. self.window.update() #Memperbarui jendela
82. self.win_w = self.window.winfo_width()
#Program Mengatur posisi pas lebar pada jendela induk
83. self.win_h = self.window.winfo_height()
#Program Mengatur posisi pas tinggi pada jendela induk
84. komponen.update_waktu(self, absen.waktu)#Program penulisan Waktu
85. hasil_font = ("Arial", 75, "bold")
86. self.window.columnconfigure(0, weight=1)
87. self.window.rowconfigure(1, weight=1)
88. self.suhu_label = tk.Label(self.window, text=f"{pengguna.nama}",
font=hasil_font,
89. bg="black", fg="white")
#Program menuliskan "pengguna.nama" pada jendela
90. self.suhu_label.grid(row=1, column=0, columnspan=2)
91. self.window.rowconfigure(2, weight=1)
92. self.nip_label = tk.Label(self.window, text=f"{pengguna.nip}",
font=hasil_font,
93. bg="black", fg="white")
#Program menuliskan "pengguna.nip" pada jendela
94. self.nip_label.grid(row=2, column=0, columnspan=2)
95. self.window.rowconfigure(3, weight=1)
96. self.nip_label = tk.Label(self.window, text=f"Role:
{pengguna.role}", font=hasil_font,
97. bg="black", fg="white")
#Program menuliskan "pengguna.role" pada jendela
98. self.nip_label.grid(row=3, column=0, columnspan=2)
99. self.waktu_pindah = time.time()
100. self.update()
101. # ======================MENUTUP JENDELA HALAMAN======================= #
102. def destroy(self, event):
103. self.window.destroy() #Program untuk menutup jendela
104. # =============================WAKTU TUNDA============================ #
105. def update(self):
106. if time.time() - self.waktu_pindah >= 5:
#Program tunda Waktu untuk menutup jendela halaman_hasil
107. self.destroy(None)
108. return
109. self.window.after(500, self.update)
#Program memperbarui setiap di panggil dari halaman_awal

Gambar 3.20 Program Menjalankan Tampilan Kristal Cair TFT


48

Dalam program menjalankan tampilan kristal cair TFT digunakan pustaka untuk
meringkas program. Program ini diawali dengan tampilan kristal cair TFT
kemudian memanggil pustaka tampilan kristal cair TFT. Kemudian menulis
karakter yang ingin ditampilkan beserta dengan letak cetak karakter.

3.2.10 Penggerak

Relai 1 saluran digunakan untuk menggerakkan gerendel elektrik (solenoid) pada


pintu laboratorium Digital. Rangkaian penggerak gerendel elektrik menggunakan
relai 1 saluran dengan Raspberry Pi 3B+ seperti terlihat pada Gambar 3.21.

Gambar 3.21 Rangkaian Modul Relai 1 saluran dengan Raspberry Pi 3B+

Pada saat pin Raspberry Pi berlogik 1, maka transistor akan menyala dan kumparan
pada relai akan terjadi induksi. Hal ini mengakibatkan kontak NO yang awalnya
terbuka menjadi tertutup, tegangan 12 V dapat mengalir dan mengakibatkan induksi
pada kumparan gerendel elektrik sehingga gerendel elektrik menarik. Pada saat pin
Raspberry Pi berlogik 0, maka arah induksi pada kumparan relai akan berbalik arah
sehingga menimbulkan arus balik. Arus tersebut akan terbuang melewati dioda. Hal
ini mengakibatkan kontak NO menjadi terbuka menjadi, sehingga tidak dapat
menarik gerendel elektrik. Berikut spesifikasi relai 1 saluran:

Tabel 3.11 Spesifikasi Relai 1 Saluran

Spesifikasi Keterangan
Tegangan Suplai 3.75V hingga 6V
Arus Diam 2 mA
Arus Saat Relai Aktif 70 mA
49

Tegangan Kontak Maksimum 250 VAC atau 30 VDC


Arus Kontak Maksimum 10 A
Tegangan Kumparan 12 V
Tegangan Operasi Kit 5-12V

Tabel 3.12 Spesifikasi Gerendel Elektrik

Spesifikasi Keterangan
Tegangan Operasi 12 V
Arus 0.6 A
Panjang Kawat 270 A
Waktu Pembukaan Kunci 1s
Suhu -40°C − 50°C

Pada Gambar 3.22 merupakan program untuk menjalankan penggerak gerendel


elektrik menggunakan relai 1 saluran:

1. # ==========================DEKLARASI TOMBOL=========================== #
2. GPIO_TOMBOL_FACE = 22 #Pin GPIO 22 sebagai tombol menghidupkan kamera
3. GPIO_TOMBOL_RELAY = 6 #Pin GPIO 6 sebagai tombol pembuka pintu
4. GPIO_RELAY = 18 #pin GPIO 18 sebagai pin relai
5. # ===========================PENGESETAN AWAL=========================== #
6. jeda_kunci = 3000 #Atur waktu relai hidup
7. # ============================PROGAM TOMBOL============================= #
8. def tombol_callback(channel):
9. if halaman_rfid.tampil: halaman_rfid.pindah_face = True
#Program memindah program dari rfid ke kamera
10. GPIO.setup(GPIO_TOMBOL_FACE, GPIO.IN)
#Mengatur tombol pin GPIO kamer menjadi masukan
11. GPIO.add_event_detect(GPIO_TOMBOL_FACE, GPIO.FALLING,
callback=tombol_callback, bouncetime=500) #Program mendeteksi tombol
ketika di tekan lalu menjalankan program lain dengan waktu tunda 0.5 detik
12. GPIO.setup(GPIO_RELAY, GPIO.OUT) #Mengatur pin relai menjadi keluaran
13. GPIO.output(GPIO_RELAY, GPIO.LOW)#Mengatur pin relai berlogika 0 / teg.
rendah
14. # ==========================PROGRAM RELAY============================= #
15. def kunci():
16. GPIO.output(GPIO_RELAY, GPIO.HIGH)#Mengatur pin relai berlogika 1 / teg.
tinggi
17. time.sleep(jeda_kunci/1000) #Mengatur waktu tunda selama jeda_kunci_1000
18. GPIO.output(GPIO_RELAY, GPIO.LOW)#Mengatur pin relai berlogika 0 / teg.
rendah
19. GPIO.setup(GPIO_TOMBOL_RELAY, GPIO.IN, pull_up_down=GPIO.PUD_UP)
#Mengatur tombol pin GPIO menjadi masukan lalu dengan konfigurasi pull up
20. GPIO.add_event_detect(GPIO_TOMBOL_RELAY, GPIO.FALLING, callback=lambda c:
Thread(target=kunci).start(), bouncetime=jeda_kunci+1000)#Program mendeteksi
tombol ketika di tekan lalu menjalankan program lain dengan waktu tunda

Gambar 3.22 Program Menjalankan Pengunci Pintu


Dalam program pengunci pintu digunakan pustaka untuk meringkas program.
Program ini dapat digunakan untuk mengaktifkan relai sebagai sakelar otomatis
pengunci pintu gerendel elektrik, dengan diawali deklarasi pin relai kemudian
fungsi relai sebagai keluaran. Relai akan bekerja saat tombol ditekan atau dosen
melakukan presensi dengan rfid. Kemudian digunakan fungsi tunda sebagai
pengatur relai agar bekerja selama beberapa detik.
50

3.2.11 Pangkalan Data Awan

Pangkalan data awan digunakan sebagai media untuk menampilkan data presensi
mahasiswa dan dosen di laboratorium Digital Program Studi Teknik Elektronika
Politeknik Negeri Semarang. Data yang telah diterima oleh Raspberry Pi 3B+
dikirimkan ke gerbang jaringan kemudian menuju ke peladen. Kemudian peladen
meneruskan data ke pangkalan data awan yang telah tersedia di laman SQLite.
Tampilan dari pangkalan data awan yang telah dibuat dapat dilihat pada Gambar 3.23.

1. # =============================PUSTAKA================================= #
2. from sqlalchemy import Column, Integer, String, DateTime
#Impor Column, Integer, String, DateTime
3. from sqlalchemy import create_engine #Impor create_engine
4. from sqlalchemy.ext.declarative import declarative_base
#Impor declarative_base
5. from sqlalchemy.orm import sessionmaker #Impor sessionmaker
6. import datetime #Impor datetime
7. # =========================PENGESETAN AWAL============================= #
8. engine = create_engine('sqlite:///data.db', echo = False)
#Membuat pangkalan data SQLite pada memori
9. Base = declarative_base() #Program mengumpulkan data
10. Session = sessionmaker(bind = engine)
#Program membuat session sebelum ke pangkalan data
11. session = Session()
12. # ====================PROGRAM PANGKALAN DATA========================== #
13. class Pengguna(Base): #Program pembuatan folder pada pangkalan data
14. __tablename__ = 'pengguna' #Program membuat nama tabel
15. id = Column(Integer, primary_key=True)
#Kolom pertama id bentuk dan sebagai kunci
16. nama = Column(String, nullable=False)
#Kolom nama bentuk string, tidak boleh kosong
17. nip = Column(String, nullable=False)
#Kolom nip bentuk string, tidak boleh kosong
18. role = Column(String, nullable=False)
#Kolom role bentuk string, tidak boleh kosong
19. rfid = Column(String, nullable=False)
#Kolom rfid bentuk string, tidak boleh kosong
20. face_id = Column(String, nullable=False)
#Kolom face_id bentuk string, tidak boleh kosong
21. class Absen(Base): #Program pembuatan folder pada pangkalan data
22. __tablename__ = 'absen' #Program membuat nama tabel
23. id = Column(Integer, primary_key=True)
#Kolom pertama id bentuk dan sebagai kunci
24. nama = Column(String, nullable=False)
#Kolom nama bentuk string, tidak boleh kosong
25. nip = Column(String, nullable=False)
#Kolom nip bentuk string, tidak boleh kosong
26. role = Column(String, nullable=False)
#Kolom role bentuk string, tidak boleh kosong
27. keterangan = Column(String, nullable=False)
#Kolom keterangan bentuk string, tidak boleh kosong
28. waktu = Column(DateTime, nullable=False, default=datetime.datetime.now)
#Kolom waktu bentuk string, tidak boleh kosong, dengan program waktu
otomatis

Gambar 3.23 Program Menjalankan Database


Dalam program pangkalan data digunakan pustaka untuk meringkas program.
Program ini diawali dengan menyambungkan antara pangkalan data dengan
program, kemudian membuat program untuk membuat tabel pada pangkalan data
51

sesuai yang dibutuhkan, disini menggunakan 2 tabel pada pangkalan data yang
pertama tabel pengguna yang berisikan orang-orang terdaftar atau yang dapat
mengakses alat ini, dan yang kedua tabel absen digunakan untuk menampung data
presensi.

Gambar 3.24 Tampilan Pangkalan Data Awan

3.3 Tahap Pengukuran dan Pengujian Alat

Pengukuran dan pengujian alat dilakukan untuk mengetahui kemampuan kerja alat.
Pengukuran dilakukan agar kemampuan alat sesuai dengan target. Pada pengukuran
dan pengujian akan dihasilkan data hasil pengukuran yang selanjutnya dianalisis untuk
mengetahui alat bekerja dengan baik atau tidak. Titik pengukuran dapat dilihat pada
Gambar 3.25.
52

Gambar 3.25 Titik Pengukuran

3.3.1 Pengukuran Catu Daya

Pengukuran catu daya bertujuan untuk mengetahui nilai tegangan yang akan
digunakan untuk memulai sistem kerja alat. Hasil pengukuran tegangan dapat
dilihat pada Tabel 3.6 dan proses pengukuran catu daya dapat dilihat pada Gambar
3.25. Berikut ini merupakan langkah-langkah pengukuran catu daya:

1. Menghubungkan kabel masukan catu daya dengan dengan tegangan sumber


220V.
2. Mengukur kabel luaran catu daya dengan multimeter secara paralel untuk
mengukur tegangan luaran. Titik pengukuran dapat dilihat pada Gambar 3.25.
3. Mencatat hasil pengukuran pada Tabel 3.6.

Tabel 3.13 Hasil Pengukuran pada Catu Daya

No Pengukuran Hasil Pengukuran Keterangan


1 V1 12.6 V
0.582 A Relai Tidak Aktif
2 A1
1.45 A Relai Aktif
3 V2 4.981 V
53

3.3.2 Kalibrasi Sensor Jarak

Kalibrasi sensor jarak bertujuan untuk mengetahui sensor jarak bekerja dengan baik
atau tidak pada sistem kerja alat. Pada proses kalibrasi nilai sesungguhnya diukur
menggunakan penggaris sebagai pembanding dengan sensor jarak dalam
pembacaan jarak. Hasil kalibrasi sensor jarak dapat dilihat pada Tabel 3.7. Berikut
ini merupakan langkah-langkah kalibrasi sensor jarak:

1. Menyiapkan alat ukur berupa penggaris, sensor jarak, dan benda padat.
2. Meletakaan benda padat pada jarak tertentu di depan sensor jarak yang
dibandingkan dengan penggaris.
3. Mencatat hasil pembacaan sensor jarak pada Tabel 3.7.

Tabel 3.14 Hasil Kalibrasi pada Sensor Jarak

No Alat Pengukuran Hasil Pengukuran (cm)


1 Penggaris 5
2 Sensor jarak 5.03

3.3.3 Kalibrasi Sensor Suhu

Kalibrasi sensor suhu bertujuan untuk mengetahui sensor suhu berjalan dengan baik
atau tidak pada sistem kerja alat. Pada proses kalibrasi menggunakan kalibrator
yaitu termometer pistol sebagai pembanding pembacaan suhu. Hasil kalibrasi
sensor suhu dapat dilihat pada Tabel 3.8. Berikut ini merupakan langkah-langkah
kalibrasi sensor suhu:

1. Menyiapkan alat ukur berupa termometer pistol dan sensor suhu.


2. Mengukur suhu ruangan, suhu badan, dan suhu korek gas menggunakan
termometer pistol dan sensor suhu.
3. Mencatat hasil pengukuran pada Tabel 3.8.

Tabel 3.15 Hasil Kalibrasi pada Sensor Suhu

Hasil Pengukuran (°C)


No Objek Pengukuran
Termometer Pistol Sensor Suhu
1 Suhu ruangan 30.7 31
2 Suhu badan 35.6 36
3 Korek gas 43.7 44
54

3.3.4 Pengukuran Tombol Tekan

Pengukuran tombol tekan bertujuan untuk mengetahui nilai tegangan yang


dibutuhkan saat tombol tekan bekerja. Pengukuran tegangan dapat dilihat pada
Tabel 3.9 dan proses pengukuran tombol tekan dapat dilihat pada Gambar 3.25.
Berikut ini merupakan langkah-langkah pengukuran tombol tekan:
1. Menyiapkan alat ukur berupa multimeter digital.
2. Mengukur pin data luaran tombol tekan dengan multimeter secara pararel
untuk mengukur tegangan keluaran. Titik pengukuran dapat dilihat pada
Gambar 3.25.
3. Mencatat hasil pengukuran pada Tabel 3.9.

Tabel 3.16 Hasil Pengukuran pada Tombol Tekan

No Pengukuran Hasil Pengukuran (V) Keterangan


0.002 Tombol tekan ditekan
1 V3
3.320 Tombol tekan tidak ditekan
0.002 Tombol tekan ditekan
2 V4
3.320 Tombol tekan tidak ditekan

3.3.5 Pengukuran Relai

Pengukuran relai bertujuan untuk mengetahui nilai tegangan yang dibutuhkan saat
relai bekerja. Pengukuran tegangan dapat dilihat pada Tabel 3.10 dan proses
pengukuran relai dapat dilihat pada Gambar 3.25. Berikut ini merupakan langkah-
langkah pengukuran relai:
1. Menyiapkan alat ukur berupa multimeter digital.
2. Mengukur pin data luaran relai dengan multimeter secara pararel untuk
mengukur tegangan keluaran. Titik pengukuran dapat dilihat pada Gambar
3.25.
3. Mencatat hasil pengukuran pada Tabel 3.10.

Tabel 3.17 Hasil Pengukuran pada Relai

No Pengukuran Hasil Pengukuran (V) Keterangan


3.245 Relai aktif
1 V5
0.011 Relai tidak aktif
2 V6 4.945 VCC Relai
55

3.3.6 Pengujian RFID

Pengujian pada RFID dilakukan denga tiga tahapan yaitu menguji jarak baca
pembaca RFID, kecepatan pembacaan, dan posisi kartu RFID.

1) Pengujian jarak baca pembaca RFID


Pengujian jarak baca pembaca RFID pada alat bertujuan untuk mengetahui
ketepatan jarak minimum dan maksimum pembaca RFID dapat membaca
nomor identitas pada kartu RFID. Pengujian jarak baca pembaca RFID
dilakukan dengan meletakkan kartu dengan penggaris yang diletakkan saling
berhadapan antara kartu RFID dan pembaca RFID. Hasil pengujian jarak baca
pembaca RFID dapat dilihat pada Tabel 3.11.

Tabel 3.18 Hasil Pengujian Jarak Baca Pembaca RFID

No Jarak Kartu dengan Pembaca (cm) Hasil Pengujian


1 0 Terbaca
2 1 Terbaca
3 2 Terbaca
4 3 Terbaca
5 4 Terbaca
6 5 Terbaca
7 6 Terbaca
8 7 Terbaca
9 8 Terbaca
10 9 Tidak Terbaca
11 10 Tidak Terbaca

2) Pengujian kecepatan baca


Pengujian kecepatan pembacaan kartu digunakan menggunakan penghitung
waktu. Hasil pengujian kecepatan waktu baca pembaca RFID teradap kartu
RFID yaitu rata-rata 1 detik.
3) Pengujian posisi kartu
Hasil dari pengujian pembacaan kartu RFID secara bersebelahan dan
bertumpukan pada saat berinteraksi dengan pembaca RFID yaitu nomor
identitas kartu yang terbaca hanya kartu RFID yang terdekat.
56

3.3.7 Pengujian Kamera Web

Pengujian pada kamera web bertujuan untuk mengetahui perbandingan terhadap


wajah asli dengan wajah yang tersimpan pada data set (file XML). Proses
pengenalan wajah dengan kamera dapat dilihat pada Gambar 3.26.

Gambar 3.26 Proses Pengenalan Raut Wajah dengan Kamera


Berikut ini merupakan langkah-langkah pengujian kamera web:

1. Memastikan kamera web menyala dengan cara menekan tombol tekan.


2. Mendekatkan wajah ke kamera untuk memasukkan data raut wajah hingga
muncul indikator raut wajah terdeteksi ditandai dengan kotak hijau disekitar
wajah yang terdeteksi. seperti pada Gambar 3.26.
3. Setelah raut wajah terdeteksi, proses selanjutnya yaitu membandingkan raut
wajah yang terdeteksi dengan foto wajah yang telah terdaftar hingga muncul
indikator “Berhasil” atau “Gagal Mengenali Wajah”
4. Mencatat hasil pengukuran pada Tabel 3.12.
57

Tabel 3.19 Pengujian Kamera Web

No Wajah Hasil Deteksi Keterangan

1 Berhasil

Tidak
2 -
Berhasil

3 Berhasil

3.3.8 Pengujian Sensor Pengukur Suhu

Pengujian sensor pengukur suhu berdasarkan jarak ukur bertujuan untuk


memastikan bahwa sensor berfungsi dengan baik.

1) Pengujian suhu berdasarkan suhu tubuh


Langkah-langkah dalam melakukan pengujian:
1. Memastikan sensor suhu dalam keaadan menyala.
2. Mengukur suhu hingga terjadi perubahan pada penampil data.
3. Melihat hasil pengukuran sensor kemudian membandingkan dengan suhu
sesungguhnya menggunakan termometer pistol.
4. Mencatat hasil pengukuran setiap terjadi perubahan pada Tabel 3.13.

Tabel 3.20 Hasil Pengujian Sensor Pengukur Suhu

No Suhu Referensi (°C) Suhu Terukur (°C) Kesalahan (%)


1 36.3 36.59 0.79
2 36.4 37.06 1.81
3 36.5 37.18 1.68
4 36.6 37.22 1.69
5 36.7 37.36 1.79
Rata-Rata Kesalahan 1.552
58

Berdasarkan data hasil pengujian di atas dapat dibuat grafik seperti Gambar
3.27.

Grafik Perbandingan
37,6
37,4
37,2
37
36,8
36,6
36,4
36,2
36
35,8
35,6

Suhu Referensi (°C) Suhu Terukur (°C)

Gambar 3.27 Grafik Perbandingan


2) Pengujian suhu berdasarkan jarak
Langkah-langkah dalam melakukan pengujian:
1. Mengukur suhu pada jarak tertentu dari jarak terdekat hingga jauh terjauh.
2. Mencatat hasil pengukuran pada Tabel 3.14.

Tabel 3.21 Hasil Pengujian Suhu Berdasarkan Jarak

No Jarak Terukur (cm) Suhu Terukur (°C)


1 0 0
2 2 36.4
3 3 36.5
4 4 36.6
5 5 36.6

3.4 Spesifikasi Alat

Spesifikasi dari alat kontrol kehadiran dengan RFID dan pengenalan wajah berbasis
Raspberry Pi ditunjukkan pada Tabel 3.15.
59

Tabel 3.22 Spesifikasi Alat

No Spesifikasi Keterangan
Sistem Kontrol Kehadiran Belajar Mengajar
1 Judul Alat dengan RFID dan Pengenalan Wajah Berbasis
Raspberry Pi
2 Pengontrol Raspberry Pi 3B+
3 Bahasa Pemrograman Bahasa Python
4 Tegangan Jala-Jala 220 VAC, 50 Hz
5 Catu Daya Sistem 5 VDC, 3A
6 Dimensi Alat 240 x 90 x 213 mm
7 Bahan Alat Akrilik
Tampilan Kristal Cair TFT dan Pangkalan Data
8 Penampil
Awan
Tampilan:
a. Tampilan Kristal a. Waktu, Suhu, Nama, NIP/NIM, Role
9 Cair TFT
b. Pangkalan Data b. ID, Nama, NIP/NIM, Role, Keterangan, Waktu
Awan

3.5 Penerapan Alat

Tahap penerapan alat ini dilakukan untuk mengetahui apakah sistem sudah bekerja
sesuai dengan harapan atau tidak. Tahap ini dilakukan dengan mengaktifkan sistem
dan melakukan uji coba sistem. Berikut adalah petunjuk pengoperasian Sistem
Kontrol Kehadiran dengan RFID dan Pengenalan Wajah Berbasis Raspberry Pi:

1. Menghubungkan steker pada stop kontak sumber tegangan seperti yang terlihat
pada Gambar 3.28.

Gambar 3.28 Menghubungkan Steker Ke Tegangan Jala-Jala


2. Mendekatkan tangan ke sensor suhu untuk mengukur suhu terlebih dahulu
seperti terihat pada Gambar 3.29.
60

Gambar 3.29 Mengukur Suhu


3. Mendekatkan kartu RFID dosen ke pembaca RFID dan menunggu instruksi
selanjutnya seperti terlihat pada Gambar 3.30.

Gambar 3.30 Dosen Melakukan Presensi Menggunakan Kartu RFID


61

4. Mahasiswa melakukan presensi setelah dosen menggunakan kartu RFID


mahasiswa seperti terlihat pada Gambar 3.31.

Gambar 3.31 Mahasiswa Melakukan Presensi Menggunakan Kartu RFID


5. Hasil data presensi tersimpan pada pangkalan data awan seperti terlihat pada
Gambar 3.32.

Gambar 3.32 Hasil Data Presensi


BAB 4 ANALISIS DAN PEMBAHASAN

4.1 Analisis

Pada bab sebelumnya dilakukan dengan membandingkan antara hasil pengukuran


secara manual dengan pengukuran menggunakan alat. Hasil pengujian yang telah
dicatat dalam tabel pada bab 3 kemudian dianilisis dengan cara menghitung selisih
pembacaan untuk mengetahui seberapa besar persentase kesalahan alat ukur.

Hasil analisis yang telah didapat pada pembaca RFID menunjukkan bahwa alat
dapat membaca nomor ID kartu pada jarak 0 cm hingga 8 cm. Hasil kecepatan
waktu baca pembaca RFID terhadap kartu RFID yaitu rata-rata 1 detik. Kemudian
hasil pembacaan 2 kartu yang bersebelahan atau ditumpuk menunjukkan bahwa
pembaca RFID hanya dapat membaca kartu RFID yang terdekat dengan pembaca
RFID.

Hasil analisis yang telah didapat pada kamera web menunjukkan perbandingan
terhadap wajah asli dengan wajah yang tersimpan pada data set (file XML). Jika
wajah asli terdeteksi sama dengan wajah yang tersimpan pada data set (file XML),
maka pada tampilan kristal cair TFT menunjukkan data identitas wajah tersebut.
Jika wajah asli terdeteksi tidak sama dengan wajah yang tersimpan pada data set
(file XML), maka pada tampilan kristal cair TFT menunjukkan “Anda Belum
Terdaftar”.

Hasil analisis yang telah didapat pada pengujian sensor suhu MLX-90614 yang
dibandingkan dengan suhu referensi yang telah diukur menggunakan termometer
pistol menunjukkan rata – rata kesalahan 1.55% yang ditunjukkan oleh Tabel 3.13.
Sedangkan pengujian sensor suhu MLX-90614 terhadap jarak menunjukkan bahwa
suhu dapat terukur pada jarak 2 cm hingga 5 cm.

4.2 Pembahasan

Berdasarkan pengukuran, pengujian, dan analisis data maka Sistem Kontrol


Kehadiran Belajar Mengajar dengan RFID dan Pengenalan Wajah Berbasis
Raspberry Pi bekerja dengan semestinya. Berdasarkan data pengukuran yang telah
didapat diketahui bahwa setiap komponen sudah bekerja dengan sesuai dengan

62
63

fungsinya. Akan tetapi, pada sistem ini tetap masih memiliki nilai kesalahan,
terutama pada pengukuran sensor suhu. Hasil pengukuran sensor suhu MLX-90614
tidak sesuai dengan referensi pengukuran sensor suhu pada termometer pistol.
BAB 5 KESIMPULAN

Pada pelaksanaan tugas akhir “Sistem Kontrol Kehadiran Belajar Mengajar dengan
RFID dan Pengenalan Wajah Berbasis Raspberry Pi”, dapat disimpulkan sebagai
berikut:

1. Telah berhasil dibuat alat untuk mengontrol kehadiran belajar mengajar dengan
pengolah utama Raspberry Pi. Masukan dari alat ini adalah sensor ultrasonik
sebagai pengukur jarak, sensor suhu sebagai pengukur suhu, pembaca RFID
sebagai pembaca nomor id pada kartu RFID, kamera web sebagai pendeteksi
wajah. Sedangkan untuk keluaran menggunakan tampilan kristal cair TFT
sebagai penampil dan data hasil pengukuran kemudian diproses oleh Raspberry
Pi agar dapat ditampilkan pangkalan data awan, relai sebagai untuk penggerak
gerendel elektrik, gerendel elektrik sebagai pengunci pintu.
2. Hasil pengukuran sensor suhu MLX-90614, pembaca RFID, dan kamera web
dapat dilihat pada kristal cair TFT dan pangkalan data awan yang telah
disediakan. Pada tampilan kristal cair TFT menampilkan suhu tubuh kemudian
ditampilkan perintah untuk melakukan presensi menggunakan kartu RFID atau
kamera web. Sedangkan untuk membuka pintu hanya dapat dilakukan dengan
kartu RFID dosen pada awal kegiatan presensi.
3. Hasil pengumpulan data presensi dapat dilihat pada pangkalan data awan
Raspberry Pi. Akan tetapi untuk mengakses pangkalan data awan memerlukan
jaringan yang sama dengan Raspberry Pi. Sehingga memungkinkan Raspberry
Pi untuk mengirimkan informasi menuju pangkalan data awan.

64
DAFTAR PUSTAKA

Ajie. (2014). Tutorial Arduino : 5 Menit Bikin Alat Ukur Jarak Dengan Sensor
Ultrasonik Dan Arduino. Saptaji.Com. http://saptaji.com/2014/03/06/tutorial-
arduino-5-menit-bikin-alat-ukur-jarak-dengan-sensor-ultrasonik-dan-arduino/
Ajifahreza. (2019). Apa Itu Relay Pengertiannya ? Ajifahreza.
https://www.ajifahreza.com/2019/01/apa-itu-relay-pengertiannya.html
Ariyanti, S., Adi, S. S., & Purbawanto, S. (2018). Sistem Buka Tutup Pintu
Otomatis Berbasis Suara Manusia. Elinvo (Electronics, Informatics, and
Vocational Education), 3(1), 83–91.
https://doi.org/10.21831/elinvo.v3i1.19076
Bart.sk. (n.d.). Raspberry Pi 3 Model B+. SOS Electronic. Retrieved April 10,
2022, from www.soselectronic.com/products/raspberry-pi/raspberry-pi-3-
model-b-1-292268
Bukhari, H. R. I., Suryani, V., & Jadied, E. M. (2021). Two Step Authentication
Dengan Rfid Dan Algortima Time-based One Time Password Pada Smart
Lock. eProceedings of Engineering, 8(2).
China, M. in. (n.d.). LCD TFT. Made in China. https://m.made-in-china.com/hot-
china-products/Lcd_Monitor_Of_Touch.html
Daulay, N. K., & Alamsyah, M. N. (2019). Monitoring Sistem Keamanan Pintu
Menggunakan Rfid dan Fingerprint Berbasis Web dan Database. Jurnal Sistem
Komputer Musirawas, 4(2), 85–92.
https://doi.org/10.32767/JUSIKOM.V4I2.632
De, D. (2019). Sensor Ultrasonik HC-SR04. TEKNISIBALI.COM.
https://teknisibali.com/cara-program-sensor-ultrasonic-hc-sr04-arduino/)
Edi Rakhman, F. C. (2014). Raspberry Pi - Mikrokontroler Mungil yang Serba
Bisa. Yogyakarta: CV ANDI OFFSET.

Elektronic, T. (n.d.). Cara Kerja RFID. https://blog.ttelectronics.com/rfid-


technology
Elektronika, L. (2018). Raspberry Pi 3 GPIO Pin. Lab Elektronika.
http://www.labelektronika.com/2018/06/mengenal-raspberry-pi-3-model-b-
plus.html

65
66

Elektronika, T. (n.d.). Pengertian Relai Fungsi Relay. Teknik Elektronika.


https://teknikelektronika.com/pengertian-relai-fungsi-relai/)
Engineering, M. I. (n.d.). MLX90614. https://datasheetspdf.com/pdf-
file/774392/Melexis/MLX90614/1
Hidayat, R. (2020). Rancang Bangun Sistem Absensi Dengan Multi Face
Recognition Berbasis Raspberry Pi4 Dengan Sms Notifikasi Menggunakan
Algoritma Haar Cascade [Universitas Bakrie].
http://repository.bakrie.ac.id/3541/
Nasir, M., Usmardi, Rachmawati, & Yanuar, F. R. (2019). Sistem Monitoring
Absensi Perkuliahan Dengan Menggunakan RFID Berbasis Raspberry Pi.
Proceeding Seminar Nasional Politeknik Negeri Lhokseumawe, 3(1), A219–
A223. http://e-jurnal.pnl.ac.id/semnaspnl/article/view/1686
Nurfitriyana, A. (2016). PROTOTIPE E-VOTING MENGGUNAKAN KARTU
RFID DAN VERIFIKASI FINGERPRINT BERBASIS MIKROKONTROLLER
ARDUINO MEGA 2560 [Universitas Negeri Jakarta].
http://repository.unj.ac.id/417/
Oktaviarini, K. N., Annyndra, B. A., & Yusanti, L. (2021). Aplikasi Keamanan
Rumah (Home Security) Berbasis Internet Of Things Home Security
Applications Based On The Internet Of Things. Prosiding Seminar SITASI,
119–124. http://sitasi.upnjatim.ac.id/index.php/sitasi/article/view/103
Teknisi, P. (n.d.-a). Kartu RFID Pasif dan Aktif. Dasar Elektronika.
https://panduanteknisi.com/pengertian-rfid-adalah.html
Teknisi, P. (n.d.-b). Tampilan Cip dan Antena RFID. Dasar Elektronika.
https://panduanteknisi.com/pengertian-rfid-adalah.html
LAMPIRAN 1
1 Resistor R1 Karbon 330 Ω Penurun Tegangan
1 Resistor R2 Karbon 470 Ω Penurun Tegangan
2 Resistor R3, R4 Karbon 1K Ω Pull Up
1 Resistor R5 Karbon 1K Ω Pembatas Arus
P e n g u n c i P i n t u

1 Transistor Q1 Silikon BD 139 Pengoperasi/saklar


2 Dioda D1, D2 Silikon 1N4007 Pengaman
1 Pembaca RFID USB 13.56MHz Pembaca Data
1 Kartu RFID 13.56MHz Kartu Presensi
1 Kamera Web HD 720p/30fps Pendeteksi Wajah
1 Sensor Ultrasonik M1 Semikonduktor HC-SR04 Sensor Jarak
1 Sensor Suhu M2 MLX-90614 Sensor Suhu
2 Tombol Tekan M3, M4 Akses Kamera&Pintu
1 Raspberri Pi 3B+ Pemroses Komposit 64 bit Pengolah Data
1 TFT LCD Layar Sentuh TFT 3.5 inchi Penampil Data
1 Relai M5 Kontaktor 5V/70mA Penggerak Gerendel
1 Gerendel Elektrik M6 12V/0.6mA Pengunci Pintu
1 Step Down LM2596 5V/3A Pengurun Tegangan
1 Catu Daya 12V/5A Sumber Tegangan
Jml Nama Komponen Posisi Bahan Ukuran Keterangan
Perubahan Digambar Laras 12-07-2022
Sistem Kontrol Kehadiran Belajar Mengajar Skala
dengan RFID dan Pengenalan Wajah Diperiksa BETA
Berbasis Raspberry Pi
Daftar Komponen Elektronika No. Hal : 03 Jml. Hal : 08

POLITEKNIK SMG EK TA DKE


NEGERI SEMARANG 22 30 12 01
LAMPIRAN 2
USB
Tampilan Kristal
Pembaca USB HDMI
Cair TFT
Kartu RFID

Kamera USB
Web

12V/5A 5V/3A 3.3V

PENURUN
CATU DAYA 12V M6 TEGANGAN M1 M5 RASPBERRY PI M2 M3 M4

12V KE 5V
GND GND GND

Perubahan Digambar Laras 05-08-2022


Sistem Kontrol Proses Belajar Mengajar Skala
dengan RFID dan Pengenalan Wajah Diperiksa BETA
Berbasis Raspberry Pi
Rangkaian Keseluruhan
No. Hal : 02 Jml. Hal : 08

POLITEKNIK SMG EK TA RK
NEGERI SEMARANG 22 30 12 01
LAMPIRAN 3
8,53
9,12 cm

9,60
10,10 cm
cm

Perubahan Digambar Tim 14-07-2022


Sistem Kontrol Kehadiran Belajar Mengajar Skala
dengan RFID dan Pengenalan Wajah Diperiksa BETA
Berbasis Raspberry Pi
1:1
Tata Letak Komponen No. Hal : 05 Jml. Hal : 08

POLITEKNIK SMG EK TA TLK


NEGERI SEMARANG 22 30 12 01
LAMPIRAN 4
8,53 cm
9,60 cm

Perubahan Digambar Tim 14-07-2022


Sistem Kontrol Kehadiran Belajar Mengajar Skala
dengan RFID dan Pengenalan Wajah Diperiksa BETA
Berbasis Raspberry Pi
1:1
Papan Rangkaian Tercetak No. Hal : 04 Jml. Hal : 08

POLITEKNIK SMG EK TA PRT


NEGERI SEMARANG 22 30 12 01
LAMPIRAN 5
Perubahan Digambar Laras 14-07-2022
Sistem Kontrol Kehadiran Belajar Mengajar Skala
dengan RFID dan Pengenalan Wajah Diperiksa BETA
Berbasis Raspberry Pi
Diagram Blok Sistem No. Hal : 01 Jml. Hal : 08

POLITEKNIK SMG EK TA DBS


NEGERI SEMARANG 22 30 12 01
LAMPIRAN 6
1-

Perubahan Digambar Andre 14-07-2022


Sistem Kontrol Kehadiran Belajar Mengajar Skala
dengan RFID dan Pengenalan Wajah Diperiksa BETA
Berbasis Raspberry Pi
Diagram Alir Program No. Hal : 07 Jml. Hal : 08

POLITEKNIK SMG EK TA DAP


NEGERI SEMARANG 22 30 13 01
LAMPIRAN 7
Sensor HCSR-04

Tombol Pintu
Tombol Kamera
Sensor
MLX90416 R1
Raspberry
R2 PI 3B+

Relai
R3 R4 Q1
D1 Gerendel Elektrik
R5
D2

Pembaca Kartu

Penurun Tegangan
12V ke 5V
Kamera Web
Catu Daya 12V Tampilan Kristal Cair TFT
220VAC

Perubahan Digambar Tim 12-08-2022


Sistem Kontrol Proses Belajar Mengajar Skala
dengan RFID dan Pengenalan Wajah Diperiksa BETA
Berbasis Raspberry Pi
Diagram Pengawatan Sistem
No. Hal : 06 Jml. Hal : 08

POLITEKNIK SMG EK TA DPS


NEGERI SEMARANG 22 30 22 01
LAMPIRAN 8
cm
7,11 cm
21,3
9m
2,9c
9 cm

9,34cm
24 cm

Perubahan Digambar Zaki 14-07-2022


Sistem Kontrol Kehadiran Belajar Mengajar Skala
dengan RFID dan Pengenalan Wajah Diperiksa BETA
Berbasis Raspberry Pi
Gambar Mekanik
1 : 3 No. Hal : 08 Jml. Hal : 08

POLITEKNIK SMG EK TA GMK


NEGERI SEMARANG 22 30 22 01
Tampak Depan

Tampak Belakang

Perubahan Digambar Zaki 14-07-2022


Sistem Kontrol Kehadiran Belajar Mengajar Skala
dengan RFID dan Pengenalan Wajah Diperiksa BETA
Berbasis Raspberry Pi 1 : 25
Gambar Mekanik No. Hal : 08 Jml. Hal : 08

POLITEKNIK SMG EK TA GMK


NEGERI SEMARANG 22 30 22 02
LAMPIRAN 9
PROGRAM HALAMAN AWAL
1. # TUGAS AKHIR #
2. # "SISTEM KONTROL KEHADIRAN BELAJAR MENGAJAR DENGAN RFID DAN
PENGENALAN WAJAH BERBASIS RASPBERRY PI" #
3. # DISUSUN OLEH: 1. LARAS KUSUMA PUTRI (3.32.19.0.14)#
4. # 2. MUHAMAD ANDRE LATIF QARIM(3.32.19.0.15)#
5. # 3. ROBI PRASETIYO (3.32.19.0.22)#
6. # 4. ZAKI MUTSANA (3.32.19.0.26)#
7. # TAHUN 2022 #
8.
9. # =======================PUSTAKA======================== #
10. import tkinter as tk #Import tkinter
11. import time #Import time
12. from komponen import komponen, ultrasonik, mlx, tombol,
identifikasi
#Import komponen, ultrasonik, mlx, tombol, identifikasi
13. import halaman_rfid #Import halaman_rfid
14.
15. # ================KELAS HALAMAN AWAL================== #
16. class HalamanAwalWindow():
17. # ===========MENGATUR LETAK TULISAN PADA GUI========== #
18. def __init__(self, parent): #Definisi Jendela awal
19. self.window = parent #Jendala sama dengan GUI
20. self.window.title("Halaman Awal") #Nama Jendala GUI
21. self.window.bind('q', lambda event: window.quit()
#Membuat tombol "q" sebagai menghentikan program
22.
23. self.window.attributes('-fullscreen', True
#Tampilan jendela menjadi layar penuh
24. self.window.configure(bg="black")
#Membuat latar belakang jendela menjadi hitam
25. self.window.update() #Memperbarui jendela
26. self.win_w = window.winfo_width()
27. self.win_h = window.winfo_height()
28.
29. komponen.update_waktu(self)
#Menampilkan Tulisan Waktu
30.
31. self.cek_suhu_font = ("Arial", 120, "bold")
32. self.window.columnconfigure(1, weight=1)
33. self.window.rowconfigure(1, weight=1)
34. self.suhu_label = tk.Label(self.window, text="Cek
Suhu Anda", font=self.cek_suhu_font,
35. bg="black", fg="white")
36. self.suhu_label.grid(row=1, column=0,
sticky=tk.NSEW, columnspan=2)
#Membuat tulisan "Cek Suhu Anda" menjadi ditengah jendela
37.
38. self.status_font = ("Arial", 70, "bold")
39. self.status_label = tk.Label(self.window, text="",
font=self.status_font,
40. bg="black", fg="white")
41. self.status_label.grid(row=2, column=0,
sticky=tk.EW, columnspan=2)
#Membuat tulisan STATUS menjadi ditengah jendela
42.
43. self.waktu_pindah = time.time()
#Waktu pada tampilan gui
44. self.update() #Memperbarui Jendela
45.
46. # ================PENGUKURAN SUHU====================== #
47. def update(self): #Definisi update
48. if ultrasonik.hitung_jarak() < 10 and not
halaman_rfid.tampil: #Tunda Waktu disaat telah mengukur suhu
49. suhu = mlx.hitung_suhu()
#Suhu didapat dari Sensor
50. self.suhu_label.config(text = "%.2f°C" % suhu,
font=("Arial", 200, "bold"))
51. if suhu <= 37.0: #Batas suhu Aman
52. self.status_label.config(text = "Suhu
Aman!", fg="yellow")
#Mengatur Tampilan dan warna tulisan STATUS
53. if time.time() - self.waktu_pindah >= 1.5:
#Tunda Waktu setelah menampilkan STATUS suhu
54. self.waktu_pindah = time.time()
55.
halaman_rfid.HalamanRfidWindow(self.window, suhu)
#Menampilkan halaman RFid
56. else:
57. self.waktu_pindah = time.time()
58. self.status_label.config(text = "Suhu Tidak
Aman!", fg="red") #Mengatur Tampilan dan warna tulisan STATUS
59. else:
60. self.waktu_pindah = time.time()
61. self.suhu_label.config(text = "Cek Suhu Anda",
font=self.cek_suhu_font) #Program tampilan keetika sensor
ultrasonik tidak membaca jarak yang tentukan
62. self.status_label.config(text = "")
63.
64. komponen.update_waktu(self)
#Memperbarui hasil sensor suhu
65. self.window.after(500, self.update)
#Waktu memperbaharui setiap 5 detik
66.
67. if __name__ == "__main__":
68. window = tk.Tk() #Program Menampilkan Jendela
69. HalamanAwalWindow(window)
#Program Menampilkan Tampilan Pada Jendela
70. window.mainloop() #Program Pengulangan

PROGRAM HALAMAN HASIL


1. # ====================PUSTAKA======================== #
2. from threading import Thread #Impor Tread
3. import tkinter as tk #Impor tkinter
4. from komponen import komponen #Impor Komponen
5. import time #Impor time
6. from komponen import tombol #impor tombol
7. from komponen import database as db
#impor pangkalan data awan
8. # ==============KELAS HALAMAN HASIL=================== #
9. class HalamanHasilWindow():
10. # ========MENGATUR LETAK TULISAN PADA GUI============= #
11. def __init__(self, parent, pengguna, keterangan):
#Inisialisasi pembuatan objek
12. absen = db.Absen(
13. nama = pengguna.nama,
14. nip = pengguna.nip,
15. role = pengguna.role,
16. keterangan = keterangan
17. ) #Program Untuk mengirim data pada pangkalan data
18. db.session.add(absen)
#Program menginput data absen pada kolom
19. db.session.commit() #Program menyerahkan data
20. if pengguna.role == 'Dosen' or pengguna.role ==
'Staf':
21. Thread(target=tombol.kunci).start()
#Program memicu tombol
22. self.window = tk.Toplevel(parent)
#Program Membuat jendela baru
23. self.parent = parent #Jendala sama dengan GUI
24. self.window.title("Halaman hasil")#Nama Jendala GUI
25. self.window.bind('q', self.destroy)
#Membuat tombol "q" sebagai menghentikan program
26. self.window.attributes('-fullscreen', True)
#Tampilan jendela menjadi layar penuh
27. self.window.configure(bg="black")
#Membuat latar belakang jendela menjadi hitam
28. self.window.update() #Memperbarui jendela
29. self.win_w = self.window.winfo_width()
#Program Mengatur posisi pas lebar pada jendela induk
PROGRAM SENSOR ULTRASONIK HC-SR04
1. # ======================PUSTAKA========================= #
2. import RPi.GPIO as GPIO #Import GPIO library
3. import time #Import time library
4. # ===============DEKLARASI SENSOR HC-SR04=============== #
5. GPIO.setmode(GPIO.BCM) #Pin GPIO menjadi Mode BCM
6. GPIO_TRIGGER = 27 #GPIO27 atau pin 13 sebagai TRIGER
7. GPIO_ECHO = 17 #GPIO17 atau pin 11 sebagai ECHO
8. # ====================PENGESETAN AWAL=================== #
9. GPIO.setup(GPIO_TRIGGER, GPIO.OUT)
#Atur pin Trigger sebagai GPIO out
10. GPIO.setup(GPIO_ECHO, GPIO.IN)
#Atur pin Echo sebagai GPIO in
11. ## ===================PROGRAM UTAMA=================== ##
12. def hitung_jarak():
13. GPIO.output(GPIO_TRIGGER, GPIO.HIGH)
#Atur pin trigger menjadi high
14. time.sleep(0.1) #waktu tunda
15. GPIO.output(GPIO_TRIGGER, GPIO.LOW)
#Atur pin trigger menjadi low
16. waktu_tunggu = time.time()
17. while GPIO.input(GPIO_ECHO) == GPIO.LOW and (time.time() -
waktu_tunggu < 5): pass #Atur pin echo menjadi low
18. waktu_awal = time.time()
19. waktu_tunggu = time.time()
20. while GPIO.input(GPIO_ECHO) == GPIO.HIGH and (time.time() -
waktu_tunggu < 5): pass #Atur pin echo menjadi high
21. waktu_akhir = time.time()
22. waktu = waktu_akhir - waktu_awal #Menghitung Lama durasi
23. jarak = (waktu * 34300) / 2 #Menentukan jarak dengan waktu
24. return jarak

PROGRAM SENSOR SUHU MLX-90614


1. # ========================PUSTAKA======================= #
2. import time #Impor time library
3. import board #Impor board
4. import adafruit_mlx90614 #Impor adafruit_mlx90614
5. # =====================PENGESETAN AWAL================== #
6. i2c = board.I2C() #Menyamakan tanda board.I2C() dengan 12c
7. mlx = adafruit_mlx90614.MLX90614(i2c)
#Menyamakan tanda dafruit_mlx90614.MLX90614(i2c) dengan mlx
8. # ====================PROGRAM MLX-90614================= #
9. def hitung_suhu(): return mlx.object_temperature
#Program pembacaan suhu dengan i2c
PROGRAM RFID
1. # ======================PUSTAKA========================= #
2. import tkinter as tk #Impor tkinter
3. import time #Impor waktu
4. from komponen import komponen, database as db
#Impor komponen dan database
5. import halaman_hasil #Impor halaman_hasil
6. import halaman_kamera #Impor halaman_kamera
7. ## =================DEKLARASI VARIABEL==================== ##
8. # ==================DEKLARASI KAMERA===================== #
9. tampil = False #tampil adalah false
10. pindah_face = False #pindah_face adalah False
11. # ==============PROGRAM TAMPILAN RFID================= #
12. class HalamanRfidWindow():
13. def __init__(self, parent, suhu):
14. global tampil, pindah_face #Program untuk mengakses tampil
dan pindah_face
15. tampil = True #tampil adalah true
16. pindah_face = False #pindah_face adalah false
17. self.parent = parent
18. self.window = tk.Toplevel(parent)
#Program membuat jendela baru
19. self.window.title("Halaman rfid")
#Program membuat judul
20. self.window.bind('q', self.destroy)
#Program menutup jendela dengan tombol 'q'
21. self.window.bind('<Return>', self.proses_rfid)
#Program Memproses RFid
22. self.window.attributes('-fullscreen', True)
#Program layar penuh pada jendela
23. self.window.configure(bg="black")
#Program menjadikan hitam latar belakang
24. self.window.update()
25. self.win_w = self.window.winfo_width()
#Program Mengatur posisi pas lebar pada jendela induk
26. self.win_h = self.window.winfo_height()
#Program Mengatur posisi pas tinggi pada jendela induk
27. komponen.update_waktu(self)
28. # ==============PROGRAM TAMPILAN SUHU================= #
29. self.window.columnconfigure(0, weight=1)
30. self.window.rowconfigure(1, weight=1)
31. self.suhu_label = tk.Label(self.window, text="%.2f°C" %
suhu, font=("Arial", 170, "bold"), bg="black", fg="white")
32. self.suhu_label.grid(row=1, column=0, columnspan=2)
33. # ============PROGRAM TAMPILAN RFID STATUS============ #
34. self.rfid_status = tk.Label(self.window, text="",
font=("Arial", 0, "bold"), bg="black", fg="red")
35. self.rfid_status.grid(row=2, column=0, columnspan=2)
36. # ==========PROGRAM TAMPILAN RFID INPUT=============== #
37. self.rfid_input = tk.Entry(self.window, border=0,
bg="black", fg="black")
38. self.rfid_input.grid(row=3, column=0)
39. self.rfid_input.focus_set()
40. self.rfid_label = tk.Label(self.window, text="Silahkan
Scan RFID atau", font=("Arial", 70, "bold"),
41. bg="black", fg="yellow")
42. self.rfid_label.grid(row=4, column=0, columnspan=2)
43. self.face_label = tk.Label(self.window, text="Tekan Tombol
untuk Face Recognition", font=("Arial", 50, "bold"),
bg="black", fg="yellow")
44. self.face_label.grid(row=5, column=0, columnspan=2,
pady=10)
45. self.waktu_pindah = time.time()
46. self.update()
47. # ====================PROGRAM TUTUP=================== #
48. def destroy(self, event):
49. global tampil, pindah_face
50. tampil = False
51. pindah_face = False
52. self.rfid_input.delete(0, tk.END)
#Program menghapus masukan rfid
53. self.window.destroy()
54. # =====================PROGRAM RFID=================== #
55. def proses_rfid(self, event):
56. nomor_rfid = self.rfid_input.get().strip()
#Program membaca kartu rfid
57. print(f"rfid: {nomor_rfid}")
58. self.rfid_input.delete(0, tk.END)
59. try:
60. pengguna =
db.session.query(db.Pengguna).filter(db.Pengguna.rfid ==
nomor_rfid).first()
#Program mencocokan kartu rfid dengan pangkalan data
61. if pengguna is None:
62. self.rfid_status.config(font=("Arial", 70, "bold"),
text="Gagal, Coba Lagi!")
63. else:
64. halaman_hasil.HalamanHasilWindow(self.parent, pengguna,
keterangan="Disiplin")#Program menampilkan keterangan disiplin
pada pangkalan data
65. self.destroy(None)
66. except Exception as e:
67. print(e)
68. self.rfid_status.config(font=("Arial", 70, "bold"),
text="Gagal, Coba Lagi!")
69. # =============PROGRAM MENGHIDUPKAN KAMERA =========== #
70. def update(self):
71. if time.time() - self.waktu_pindah >= 10:
72. self.destroy(None)
73. Return
74. elif pindah_face:
75. halaman_kamera.HalamanKameraWindow(self.parent)
76. self.destroy(None)
77. Return
78. komponen.update_waktu(self)
79. self.window.after(500, self.update)

PROGRAM KAMERA
1. # ========================PUSTAKA======================= #
2. import tkinter as tk
3. from PIL import ImageTk, Image #Impor Image dan ImageTk
4. import cv2 #Impor opencv
5. import time
6. from komponen import komponen, identifikasi, database as db
#Impor komponen, identifikasi, dan pangkalan data
7. import halaman_hasil #Impor halaman_hasil

8. # ================KELAS HALAMAN KAMERA=================== #


9. class HalamanKameraWindow():
10. # ==========MENGATUR LETAK TAMPILAN PADA GUI========== #
11. def __init__(self, parent):
12. self.parent = parent
13. self.cap = cv2.VideoCapture(0)#Program menyalakan kamera, 0
mewakili camera utama ("komponen/gambar_tes/vid.mp4")
14. self.window = tk.Toplevel(parent)
15. self.window.title("Halaman Camera")
16. self.window.bind('q', self.destroy)
17. self.window.attributes('-fullscreen', True)
18. self.window.configure(bg="black")
19. self.window.update()
20. self.win_w = self.window.winfo_width()
21. self.win_h = self.window.winfo_height()
22. komponen.update_waktu(self)
23. self.cam_w = self.cap.get(cv2.CAP_PROP_FRAME_WIDTH)
#Proram mengatur Lebar tampilan gambar kamera
24. self.cam_h = self.cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
#Proram mengatur tinggi tampilan gambar kamera
25. self.window.columnconfigure(0, weight=1)
#Program mengatur ukuran kisi
26. self.canvas_h = self.win_h – 220
#Program kalibrasi posisi tinggi canvas(self.win_h * 0.6)
27. self.canvas_w = round(self.canvas_h * (self.cam_w /
self.cam_h)) #Program kalibrasi posisi lebar canvas
28. self.canvas = tk.Canvas(self.window, width=self.canvas_w,
height=self.canvas_h) #Program letak canvas
29. self.canvas.grid(row=1, column=0, columnspan=2, pady=20)
#Program pengaturan canvas
30. self.status = tk.Label(self.window, text="", font=("Arial",
50, "bold"), bg="black", fg="red")
31. self.status.grid(row=2, column=0, columnspan=2)
32. identifikasi.proses_gambar(self.cam_w, self.cam_h,
self.canvas_w, self.canvas_h)
#Program pengambilan Pemrosesan identifikasi gambar
33. self.waktu_pindah = time.time()
34. self.update()
35. # ================MENUTUP JENDELA HALAMAN============= #
36. def destroy(self, event):
37. identifikasi.proses_jalan = False
#Program pengaturan jika identifikasi.proses_jalan salah
38. self.cap.release()
#Program untuk menutup program dan membuka kamera
39. self.window.destroy() #Program menutup kamera
40. # ===========MEMPERBARUI JENDELA HALAMAN============== #
41. def update(self):
42. global suhu_data, update_batas, suhu_process, terakhir_kirim
43. #Program mengakses program dari suhu_data, update_batas,
suhu_process, terakhir_kirim
44. try:
45. img_ori = self.cap.read()[1]#Program memberi tanda pada
img_ori sebagai self.cap.read()[1]
46. identifikasi.img = img_ori
47. self.img = cv2.cvtColor(img_ori, cv2.COLOR_BGR2RGB)
#Program mengkonversi gambar
48. self.img = cv2.resize(self.img, (self.canvas_w,
self.canvas_h)) #Program mengatur ulang ukuran gambar
49. if identifikasi.rec is not None:#Program merekam dengan
mengidentifikasi
50. self.waktu_pindah = time.time() – 5
51. top, right, bottom, left =
identifikasi.rec
52. cv2.rectangle(self.img, (left,top), (right, bottom),
(0,255,0), 10)
53. elif time.time() - self.waktu_pindah >= 10:
54. self.destroy(None)
55. Return
56. self.img = ImageTk.PhotoImage(Image.fromarray(self.img))
#Program ImageTk.PhotoImage(Image.fromarray(self.img))
bertanda jadi self.img
57. self.canvas.create_image(0, 0, anchor=tk.NW,
image=self.img) #Program membuat gambar kanvas dan
menampilkan pada kiri atas
58. except Exception as e: pass
59. if identifikasi.face_id is None:
self.status.config(text="Gagal Mengenali Wajah!")
#Program Jika tidak mengenali wajah
60. elif identifikasi.face_id != "":
61. pengguna =
db.session.query(db.Pengguna).filter(db.Pengguna.face_id ==
identifikasi.face_id).first() #Program Menulis data ke
pangkalan data
62. if pengguna is None:
#Program mendeteksi adanya pengguna pada pangkalan data
63. self.status.config(text="Gagal Mengenali Wajah!")
#Program Jika tidak mengenali wajah
64. else:
65. self.status.config(text="Berhasil", fg="yellow")
#Program Jika berhasil mengenali wajah
66. def pindah():
67. halaman_hasil.HalamanHasilWindow(self.parent, pengguna,
keterangan="Tidak Disiplin") #Program Jika menampilkan
keterangan tidak disiplin pada pangkalan data karena
menggunakan kamera
68. self.destroy(None)
69. self.window.after(3000, pindah)
70. Return
71. komponen.update_waktu(self)
72. self.window.after(5, self.update)
73.
74. #
=============================PUSTAKA==========================
====== #
75. from lib2to3.pytree import Node #Impor Node
76. import os #Impor OS
77. import numpy as np #Impor Numpy
78. import time #Impor Time
79. from threading import Thread #Impor Thread
80. import cv2 #Impor opencv
81. import face_recognition #Impor
face_recognition
82.
83. # ===========================PENGESETAN
AWAL========================== #
84. waktu_awal = time.time() #Program
pembandingan waktu
85. img = None #Program
pengesetan img
86. rec = None #Program
pengesetan rec
87. proses_jalan = False #program proses_jalan
menjadi false
88. face_id = "" #Program face id jadi pengaturan awal
/ belum membaca
89. print(f"selesai import: {time.time() - waktu_awal :.2f}
detik") #Program menampilkan waktu
90. # =========PROGRAM MEMBANDINGKAN GAMBAR DENGAN PANGKATAN
DATA========= #
91. def proses_gambar_thread(cam_w, cam_h, canvas_w, canvas_h):
92. global img, rec, face_id
#Program untuk dapat merubah pada program definisi
93. bagi = 2 #Program
penanda
94. while proses_jalan:
95. if img is None: continue
96. img_kecil = cv2.resize(img, (round(cam_w / bagi),
round(cam_h / bagi))) #Program jika tidak mendeteksi
orang pada kamera
97. try:
98. top, right, bottom, left =
face_recognition.face_locations(img_kecil, model="hog")[0]
#Program pendeteksi orang dengan penandaan kotak pada area
wajah
99. top = round(top * canvas_h / cam_h * bagi)
#Program Kotak wajah bagian atas
100. right = round(right * canvas_w / cam_w * bagi)
#Program Kotak wajah bagian kanan
101. bottom = round(bottom * canvas_h / cam_h * bagi)
#Program Kotak wajah bagian bawah
102. left = round(left * canvas_w / cam_w * bagi)
#Program Kotak wajah bagian kiri
103. rec = (top, right, bottom, left)
#program merekam wajah pada pendeteksi
104. faces = kenali_wajah(img_kecil)
#Program arar hasil rekam gambar biaar di proses
105. face_id = None
#Program agar mencocokan face id dengan paling atas sesuai
pangkalan data
106. if len(faces) > 0 and faces[0]["score"] >= 95.5:
face_id = faces[0]["face_id"]#Program pencocokan dengan
pangkalan data beserta presentase kemiripan
107. except Exception:
108. rec = None
109. continue
110. # ===================PROGRAM REKAM GAMBAR============= #
111. def proses_gambar(cam_w, cam_h, canvas_w, canvas_h):
112. global proses_jalan, face_id, rec, img
#Program untuk dapat merubah pada program definisi
113. face_id = ""
#Program face id jadi pengaturan awal / belum membaca
114. rec = None #Program pengesetan rec
115. proses_jalan = True #program proses_jalan menjadi True
116. img = None #Program pengesetan img
117. Thread(target=proses_gambar_thread, args=[cam_w, cam_h,
canvas_w, canvas_h]).start()
#Program penargetan gambar yang telah dideteksi
118. # =============PROGRAM MEMBUAT GAMBAR LATIH=========== #
119. folder_gambar = "komponen/gambar"#Membuka folder
120. label = []
121. encoding = []
122. gambar = os.listdir(folder_gambar)
#Mencari file pada folder (folder_gambar)
123. waktu_awal = time.time()
124. print("--------------ENCODING----------------------")
125. for g in gambar:
126. waktu_encoding = time.time()
127. nama, ext = os.path.splitext(g)
#Merubah path ke akaarnya
128. if ext not in (".jpg", ".jpeg", ".png", ".JPG"): continue
#Mensortir file
129. nama_cache = f"{folder_gambar}/{nama}.npy"
#Memberi tanda
130. try:
131. if os.path.exists(nama_cache):
#Memeriksa path ada apa tidak
132. img_encoding = np.load(nama_cache)
#Jika ada akan dimuat
133. else:
134. img =
face_recognition.load_image_file(f"{folder_gambar}/{g}")
#Membaca file dengan modul face recognition
135. img_encoding =
face_recognition.face_encodings(img)[0]
#Melatih data file dengan modul encoding
136. np.save(nama_cache, img_encoding)
#Menyimpan file latih
137. label.append(nama) #Menambahkan file nama
138. encoding.append(img_encoding)
#Menambahkan data latih
139. except Exception:
140. open(nama_cache, "w").close()
141. print("error", end=" -> ")
142. print(f"{g}: {time.time() - waktu_encoding :.2f} detik")
#Program menampilkan waktu encoding
143. print(f"selesai load encoding: {time.time() - waktu_awal
:.2f} detik\n")
#Program menampilkan waktu setelah encoding selesai
144. # ===========PROGRAM PENGAMBILAN HASIL TES=========== #
145. def kenali_wajah(wajah_img):
146. waktu_tes = time.time()
147. try:
148. wajah_encoding =
face_recognition.face_encodings(wajah_img)[0]
#Program membandingkan wajah
149. hasil = face_recognition.face_distance(encoding,
wajah_encoding)
#Program membandingkan wajah dengan jarak yang sesuai data
150. hasil_dict = {}
151. for i, v in enumerate(hasil): hasil_dict[v] =
{"face_id": label[i], "score": 100-v*10}
#Penampilan score hasil tes
152. hasil.sort()
153. hasil_label = [hasil_dict[v] for v in hasil]
154. print(f" HASIL TES {hasil_label}: {time.time() -
waktu_tes :.2f} detik")
155. return hasil_label
156. except Exception:
157. print(f" HASIL TES []: {time.time() - waktu_tes :.2f}
detik") #Program menampilkan waktu
158. return []
159. # ==============AKHIR PROGRAM IDENTIFIKASI============ #
160. if __name__ == "__main__":
161. print("--------------TEST----------------------")
162. waktu_awal = time.time()
163. folder_tes = "komponen/gambar_tes"
164. gambar_tes = os.listdir(folder_tes)
#Mencari file pada folder (folder_tes)
165. for g in gambar_tes:
166. nama, ext = os.path.splitext(g)
167. if ext not in (".jpg", ".jpeg", ".png", ".JPG"):
continue
168. try:
169. tes_img =
face_recognition.load_image_file(f"{folder_tes}/{g}")
170. print(nama, end="")
171. kenali_wajah(tes_img)
172. except Exception: print(f"error: {nama}")
173. print(f"selesai tes: {time.time() - waktu_awal :.2f}
detik")

PROGRAM TOMBOL TEKAN


1. # ==================DEKLARASI TOMBOL===================== #
2. GPIO_TOMBOL_FACE = 22
#Pin GPIO 22 sebagai tombol menghidupkan kamera
3. GPIO_TOMBOL_RELAY = 6 #Pin GPIO 6 sebagai tombol pembuka pintu
4. GPIO_RELAY = 18 #pin GPIO 18 sebagai pin relai
5. # =================PENGESETAN AWAL======================= #
6. jeda_kunci = 3000 #Atur waktu relai hidup
7. # ==================PROGAM TOMBOL========================= #
8. def tombol_callback(channel):
9. if halaman_rfid.tampil: halaman_rfid.pindah_face = True
#Program memindah program dari rfid ke kamera
10. GPIO.setup(GPIO_TOMBOL_FACE, GPIO.IN)
#Mengatur tombol pin GPIO kamer menjadi masukan
11. GPIO.add_event_detect(GPIO_TOMBOL_FACE, GPIO.FALLING,
callback=tombol_callback, bouncetime=500)
#Program mendeteksi tombol ketika di tekan lalu menjalankan
program lain dengan waktu tunda 0.5 detik
12. GPIO.setup(GPIO_RELAY, GPIO.OUT)
#Mengatur pin relai menjadi keluaran
13. GPIO.output(GPIO_RELAY, GPIO.LOW)
#Mengatur pin relai berlogika 0 / teg. rendah
14. # =====================PROGRAM RELAY==================== #
15. def kunci():
16. GPIO.output(GPIO_RELAY, GPIO.HIGH)
#Mengatur pin relai berlogika 1 / teg. tinggi
17. time.sleep(jeda_kunci/1000)
#Mengatur waktu tunda selama jeda_kunci_1000
18. GPIO.output(GPIO_RELAY, GPIO.LOW)
#Mengatur pin relai berlogika 0 / teg. rendah
19. GPIO.setup(GPIO_TOMBOL_RELAY, GPIO.IN,
pull_up_down=GPIO.PUD_UP)#Mengatur tombol pin GPIO menjadi
masukan lalu dengan konfigurasi pull up
20. GPIO.add_event_detect(GPIO_TOMBOL_RELAY, GPIO.FALLING,
callback=lambda c: Thread(target=kunci).start(),
bouncetime=jeda_kunci+1000)#Program mendeteksi tombol ketika di
tekan lalu menjalankan program lain dengan waktu tunda
PROGRAM PANGKALAN DATA AWAN
1. # =====================PUSTAKA=========================== #
2. from sqlalchemy import Column, Integer, String, DateTime
#Impor Column, Integer, String, DateTime
3. from sqlalchemy import create_engine#Impor create_engine
4. from sqlalchemy.ext.declarative import declarative_base
#Impor declarative_base
5. from sqlalchemy.orm import sessionmaker #Impor sessionmaker
6. import datetime #Impor datetime
7. # ===================PENGESETAN AWAL===================== #
8. engine = create_engine('sqlite:///data.db', echo = False)
#Membuat pangkalan data SQLite pada memori
9. Base = declarative_base() #Program mengumpulkan data
10. Session = sessionmaker(bind = engine)
#Program membuat session sebelum ke pangkalan data
11. session = Session()
12. # ===============PROGRAM PANGKALAN DATA================= #
13. class Pengguna(Base): #Program pembuatan folder pada
pangkalan data
14. __tablename__ = 'pengguna' #Program membuat nama tabel
15. id = Column(Integer, primary_key=True)
#Kolom pertama id bentuk dan sebagai kunci
16. nama = Column(String, nullable=False)
#Kolom nama bentuk string, tidak boleh kosong
17. nip = Column(String, nullable=False)
#Kolom nip bentuk string, tidak boleh kosong
18. role = Column(String, nullable=False)
#Kolom role bentuk string, tidak boleh kosong
19. rfid = Column(String, nullable=False)
#Kolom rfid bentuk string, tidak boleh kosong
20. face_id = Column(String, nullable=False)
#Kolom face_id bentuk string, tidak boleh kosong
21. class Absen(Base):
#Program pembuatan folder pada pangkalan data
22. __tablename__ = 'absen' #Program membuat nama tabel
23. id = Column(Integer, primary_key=True)
#Kolom pertama id bentuk dan sebagai kunci
24. nama = Column(String, nullable=False)
#Kolom nama bentuk string, tidak boleh kosong
25. nip = Column(String, nullable=False)
#Kolom nip bentuk string, tidak boleh kosong
26. role = Column(String, nullable=False)
#Kolom role bentuk string, tidak boleh kosong
27. keterangan = Column(String, nullable=False)
#Kolom keterangan bentuk string, tidak boleh kosong
28. waktu = Column(DateTime, nullable=False,
default=datetime.datetime.now)#Kolom waktu bentuk string, tidak
boleh kosong, dengan program waktu otomatis

Anda mungkin juga menyukai