BAB V KESIMPULAN DAN SARAN
5.2 Saran
Setelah mengamati data dan dilakukan analisa data maka terdapat beberapa saran untuk penelitian selanjutnya, saran tersebut diantaranya :
1. Penelitian ini dilakukan hanya fokus pada bidang ilmu kelektronikaan, maka diharapkan penelitian berikutnya dapat menggabungkan sistem alat ini kedalam sistem absensi berbasis website (menggunakan sistem login dan kemananan lainnya) sehingga sistem absensi yang dibuat akan lebih kompleks dan berkualitas.
DAFTAR PUSTAKA
Admin (2018) Apa Itu LAN ? Pengertian Jaringan Lokal ( LAN ) Dan Fungsinya.
Available at: https://www.utopicomputers.com/apa-itu-lan-pengertian-jaringan-lokal-lan-dan-fungsinya/ (Accessed: 9 March 2020).
Aji, K. P., Darusalam, U. and Nathasia, N. D. (2020) ‘Perancangan Sistem Presensi Untuk Pegawai Dengan RFID Berbasis IoT Menggunakan NodeMCU ESP8266’, JOINTECS (Journal of Information Technology and Computer Science), 5(1), p. 25. doi: 10.31328/jointecs.v5i1.1222.
Ajie (2006) Cara Menangani Modul NFC RFID PN532 dengan Arduino.
Available at: http://saptaji.com/2016/10/08/cara-menangani-modul-nfc-rfid-pn532-dengan-arduino/ (Accessed: 5 September 2019).
Andy (2019) Pengertian XAMPP Lengkap dengan Fungsi dan Cara Instalasi.
Available at: https://qwords.com/blog/pengertian-xampp/ (Accessed: 10 March 2020).
Antonius Irianto, Helmi Fauziah, I. P. (2017) ‘Rancang Bangun Sistem Absensi Mahasiswa Sekolah Tinggi Teknik Cendekia ( STTC ) Berbasis Radio Frequency Identi cation ( RFID ) menggunakan Abstrak Pendahuluan Tinjauan Pustaka Radio Frequency Identi cation’, 16(September), pp. 93–100.
bikinidcard (2020) Pengertian Kartu RFID. Available at:
https://bikinidcard.com/kartu-rfid/ (Accessed: 9 March 2020).
Bunga, M. S. et al. (2016) ‘Rancang Bangun Aplikasi Sistem Informasi Monitoring Absensi Mahasiswa Politeknik Negeri Jakarta Menggunakan Teknologi NFC pada Android’, Seminar Nasional Teknologi Informasi dan Multimedia 2016, 14(2), pp. 1.4-31–37.
Elektronika, L. (2018) CARA PROGRAM I2C DISPLAY OLED 0.96 INCH 128x64 PIXEL MENGGUNAKAN ARDUINO. Available at:
http://www.labelektronika.com/2018/02/cara-program-display-oled-menggunakan-arduino.html (Accessed: 9 March 2020).
Faudin, A. (2018) Pengenalan tentang WEMOS D1 MINI. Available at:
https://www.nyebarilmu.com/pengenalan-tentang-wemos-d1-mini/ (Accessed: 9 March 2020).
Isyanto, H., Solikhin, A. and Ibrahim, W. (2019) ‘Perancangan dan Implementasi Security System pada Sepeda Motor Menggunakan RFID Sensor Berbasis
Raspberry Pi’, RESISTOR (elektRonika kEndali telekomunikaSI tenaga liSTrik kOmputeR), 2(1), pp. 29–38.
KIKI DWI WIJAYANTI, F. B. (2020) ‘RANCANG BANGUN SISTEM INFORMASI KEBERADAAN DAN SITUASI DOSEN DI RUANG DOSEN BERBASIS RADIO FREQUENCY IDENTIFICATION ( RFID ) DAN APLIKASI ANDROID Kiki Dwi Wijayanti’, 9, pp. 331–337.
Tuloli, R. and Mohidin, I. (2019) ‘Aplikasi Absen Kuliah Menggunakan Kode QR (Quick Response)’, Jurnal Teknologi Informasi Indonesia (JTII), 3(2), p. 61. doi:
10.30869/jtii.v3i2.266.
LAMPIRAN
Lampiran 1 Program Wemos D1 Mini
#include <Arduino.h>
#include <SPI.h>
#include <PN532_SPI.h>
#include <PN532.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <ESP8266WiFi.h>
#define WIFI_SSID "Portable Hotspot"
#define WIFI_PASSWORD "Password2018"
const char* host = "192.168.9.2";
const int httpPort = 80;
#define CLASS_ROOM "B2.12"
PN532_SPI pn532spi(SPI, 15);
PN532 nfc(pn532spi);
uint8_t success;
uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Buffer to store the returned UID
uint8_t uidLength; // Length of the UID (4 or 7 bytes depending on ISO14443A card type)
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 lcd(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
static const uint8_t KEY_DEFAULT_KEYAB[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
#define pinBuzzer D3 void setup() {
Serial.begin(9600);
pinMode(pinBuzzer, OUTPUT);
beep(1, 100);
init_display();
init_rfid();
init_wifi();
}
void loop() {
if (WiFi.status() == WL_CONNECTED) { lcd.setCursor(54, 20);
lcd.print("TAP");
lcd.setCursor(35, 30);
lcd.print("YOUR CARD");
RFID_Function();
} else {
return;
}
lcd.display();
lcd.clearDisplay();
}
void RFID_Function() {
String mahasiswa_uid = "";
success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid,
&uidLength);
if (success) {
unsigned long last_millis = millis();
lcd.clearDisplay();
Serial.println("Read data From Database");
lcd.setCursor(0, 0);
lcd.print("REQUEST DATA SERVER");
lcd.display();
for (uint8_t i = 0; i < uidLength; i++) { String uidBuff = String(uid[i], HEX);
mahasiswa_uid.concat(uidBuff);
}
Serial.println(mahasiswa_uid);
lcd.setCursor(0, 10);
lcd.print("WAIT DATA SERVER");
lcd.display();
String readDatabase = requestData(CLASS_ROOM, mahasiswa_uid);
int parsing_id = readDatabase.indexOf('/');
String nim_mhs = "";
String nama_mhs = "";
for (int a = 0; a < parsing_id; a++) { nim_mhs.concat(readDatabase[a]);
}
for (int a = parsing_id + 1; a < readDatabase.length(); a++) {
nama_mhs.concat(readDatabase[a]);
}
lcd.drawRect(0, 26, 128, 1, WHITE);
Serial.print("Time Load : ");
Serial.print(millis() - last_millis);
Serial.println(" mS");
if (readDatabase == "error") { Serial.println("ERROR");
lcd.setCursor(0, 30);
lcd.print("ERROR");
lcd.display();
beep(5, 100);
} else {
Serial.print("Nama Mahasiswa : ");
Serial.println(readDatabase);
lcd.setCursor(0, 30);
lcd.print(nim_mhs);
lcd.setCursor(0, 42);
lcd.print(nama_mhs);
lcd.display();
if (readDatabase == "NOT REGISTERED") beep(2, 100);
else beep(1, 100);
}
while (nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid,
&uidLength)) {}
lcd.clearDisplay();
} }
void beep(byte times, int tunda) { for (byte a = 0; a < times; a++) { digitalWrite(pinBuzzer, HIGH);
delay(tunda);
digitalWrite(pinBuzzer, LOW);
delay(tunda);
} }
String requestData (String room, String a) { String _nama = "";
WiFiClient client;
if (!client.connect(host, httpPort)) { Serial.println("connection failed");
return "error";
}
String url = "http://";
url.concat(host);
url.concat("/rfid/getUID.php?");
url.concat("room=");
url.concat(room);
url.concat("&nim=");
url.concat(a);
Serial.print("Requesting URL: ");
Serial.println(url);
client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
unsigned long timeout = millis();
while (client.available() == 0) { if (millis() - timeout > 5000) {
Serial.println(">>> Client Timeout !");
client.stop();
return "error";
} }
bool content = false;
while (client.available()) {
String line = client.readStringUntil('~');
if (content) { _nama = line;
break;
}
content = true;
}
return _nama;
}
void init_wifi() {
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.println("CONNECTING WIFI");
lcd.setCursor(20, 15);
lcd.print(F("CONNECTING WIFI"));
lcd.display();
while (WiFi.status() != WL_CONNECTED) { lcd.setCursor(25, 30);
for (int a = 5 ; a < 17; a++) { lcd.print(".");
lcd.display();
delay(100);
}
lcd.fillRect(5, 30, 115, 7, BLACK);
}
lcd.clearDisplay();
Serial.println("CONNECTED");
Serial.println("IP: ");
Serial.println(WiFi.localIP());
beep(2, 100);
lcd.setCursor(32, 15);
lcd.print("CONNECTED");
lcd.setCursor(5, 35);
lcd.print("IP: ");
lcd.print(WiFi.localIP());
lcd.display();
delay(2000);
lcd.clearDisplay();
lcd.display();
}
void init_display() {
Serial.println("Init Display");
if (!lcd.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("SSD1306 allocation failed"));
while (1) { }
}
lcd.clearDisplay();
lcd.display();
lcd.setTextColor(WHITE);
}
void init_rfid() { nfc.begin();
uint32_t versiondata = nfc.getFirmwareVersion();
if (! versiondata) {
Serial.print("Didn't find PN53x board");
while (1);
}
nfc.SAMConfig();
}
Lampiran 2 Program PHP dan HTML (getUID.php)
<?php
$dbuser = 'root';
$dbpass = '';
$dbhost = 'localhost';
$dbname = 'RFID';
$room = "";
$nim = "";
$nama = "";
$connect = @mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
if (!$connect) {
//echo "Error: " . mysqli_connect_error();
exit();
} else {
//echo "Koneksi ke Database Berhasil!<br><br>";
}
if (!empty($_GET["room"])) { $room = $_GET["room"];
}
if (!empty($_GET["nim"])) { $nim = $_GET["nim"];
$Write = "<?php $" . "UIDresult='" . $nim . "'; " . "echo $" .
"UIDresult;" . " ?>";
file_put_contents('UIDContainer.php', $Write);
}
$query = "SELECT mahasiswa_uid, mahasiswa_nama, mahasiswa_nim FROM tb_mahasiswa";
$result = mysqli_query($connect, $query);
if (mysqli_num_rows($result) > 0) { $row_index = 0;
while ($row = mysqli_fetch_assoc($result)) { if ($row["mahasiswa_uid"] == $nim) { $row_index = $row;
} }
if ($row_index == 0) { echo "~NOT REGISTERED~";
} else {
$now = date_create('now',
timezone_open('Asia/Jakarta'))->format('Y-m-d H:i:s');
$query = "INSERT INTO tb_taphistory (history_id, history_uid, history_waktu, history_ruangan) VALUES (null,'$nim','$now','$room')";
if (mysqli_query($connect, $query)) {
echo "~" . $row_index["mahasiswa_nim"] . "/" .
$row_index["mahasiswa_nama"] . "~";
} else {
echo "~ERROR LOG~";
} } }
Lampiran 3 Program PHP dan HTML (database.php)
<?php
class Database {
private static $dbName = 'RFID';
private static $dbHost = 'localhost';
private static $dbUsername = 'root';
private static $dbUserPassword = '';
private static $cont = null;
public function __construct() {
die('Init function is not allowed');
}
public static function connect() {
// One connection through whole application if (null == self::$cont) {
try {
self::$cont = new PDO("mysql:host=" . self::$dbHost .
";" . "dbname=" . self::$dbName, self::$dbUsername, self::$dbUserPassword);
} catch (PDOException $e) { die($e->getMessage());
} }
return self::$cont;
}
public static function disconnect() {
self::$cont = null;
} }
Lampiran 4 Program PHP dan HTML (home.php)
<!DOCTYPE html>
<html lang="en">
<html>
<head>
<link rel="stylesheet" type="text/css" href="style.css">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta charset="utf-8">
<link href="css/bootstrap.min.css" rel="stylesheet">
<script src="js/bootstrap.min.js"></script>
<title>RFID</title>
</head>
<body>
<br />
<ul class="topnav">
<li><a class="active" href="home.php">History</a></li>
<li><a href="user data.php">Data Mahasiswa</a></li>
<li><a href="registration.php">Registration</a></li>
</ul>
<br>
<div class="container">
<div class="row">
<h3>HISTORY TAP</h3>
</div>
<div class="table-responsive">
<table class="table">
<thead>
<tr bgcolor="#2eb8b8" color="#FFFFFF">
<th class="text-center">History ID</th>
<th>UID Mahasiswa</th>
<th>Ruangan</th>
<th>Nama Mahasiswa</th>
<th>Waktu</th>
</tr>
</thead>
<tbody>
<?php
include 'database.php';
$pdo = Database::connect();
$sql = 'SELECT * FROM tb_taphistory ORDER BY history_id DESC';
foreach ($pdo->query($sql) as $row) { echo '<tr>';
echo '<td>' . $row['history_id'] . '</td>';
echo '<td>' . $row['history_uid'] . '</td>';
echo '<td>' . $row['history_ruangan'] . '</td>';
echo '<td>';
$data = "SELECT mahasiswa_nama FROM
tb_mahasiswa where mahasiswa_uid ='" . $row['history_uid'] . "' ";
foreach ($pdo->query($data) as $nt) { print_r($nt[0]);
}
echo '</td>';
echo '<td>' . $row['history_waktu'] . '</td>';
#echo '<td>' . $row['history_pictures'] . '</td>';
echo '</tr>';
}
Database::disconnect();
?>
</tbody>
</table>
</div>
</div> <!-- /container -->
</body>
</html>
Lampiran 5 Program PHP dan HTML (registration.php)
<?php
$Write = "<?php $" . "UIDresult=''; " . "echo $" . "UIDresult;" . "
?>";
file_put_contents('UIDContainer.php', $Write);
require 'database.php';
if (!empty($_POST)) {
// keep track post values $id = $_POST['id'];
$name = $_POST['name'];
$nim = $_POST['nim'];
$email = $_POST['email'];
// insert data
$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "INSERT INTO tb_mahasiswa (mahasiswa_uid, mahasiswa_nama, mahasiswa_nim, mahasiswa_email) values(?, ?, ?, ?)";
$q = $pdo->prepare($sql);
$q->execute(array($id, $name, $nim, $email));
Database::disconnect();
header("Location: user data.php");
}
?>
<!DOCTYPE html>
<html lang="en">
<html>
<head>
<link rel="stylesheet" type="text/css" href="style.css">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta charset="utf-8">
<link href="css/bootstrap.min.css" rel="stylesheet">
<script src="js/bootstrap.min.js"></script>
<script src="jquery.min.js"></script>
<script>
$(document).ready(function() {
$("#getUID").load("UIDContainer.php");
setInterval(function() {
$("#getUID").load("UIDContainer.php");
}, 500);
});
</script>
<title>RFID</title>
</head>
<body>
<br />
<ul class="topnav">
<li><a href="home.php">History</a></li>
<li><a href="user data.php">Data Mahasiswa</a></li>
<li><a class="active"
href="registration.php">Registration</a></li>
</ul>
<div class="container">
<br>
<div class="center" style="margin: 0 auto; width:495px; border-style: none; border-color: #f2f2f2;">
<div class="row">
<h3 align="center">REGISTRASI MAHASISWA BARU</h3>
</div>
<br>
<form class="form-horizontal" action="registration.php"
method="post">
<div class="control-group">
<label class="control-label">ID</label>
<div class="controls">
<textarea name="id" id="getUID"
placeholder="Tap Your Card" rows="1" cols="1" required></textarea>
</div>
</div>
<div class="control-group">
<label class="control-label">Nama</label>
<div class="controls">
<input id="div_refresh" name="name" type="text"
placeholder="" required>
</div>
</div>
<div class="control-group">
<label class="control-label">NIM</label>
<div class="controls">
<input name="nim" type="text" placeholder=""
required>
</div>
</div>
<div class="control-group">
<label class="control-label">Email Address</label>
<div class="controls">
<input name="email" type="text" placeholder=""
required>
</div>
</div>
<div class="control-group" align="center">
<button type="submit" class="btn btn-success">Save</button>
</div>
</form>
</div>
</div> <!-- /container -->
</body>
</html>
Lampiran 6 Program PHP dan HTML (user data.php)
<?php
require 'database.php';
$id = 0;
if (!empty($_GET['id'])) { $id = $_REQUEST['id'];
}
if (!empty($_POST)) {
// keep track post values $id = $_POST['id'];
// delete data
$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "DELETE FROM tb_mahasiswa WHERE mahasiswa_uid = ?";
$q = $pdo->prepare($sql);
$q->execute(array($id));
Database::disconnect();
header("Location: user data.php");
}
?>
<!DOCTYPE html>
<html lang="en">
<html>
<head>
<link rel="stylesheet" type="text/css" href="style.css">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta charset="utf-8">
<link href="css/bootstrap.min.css" rel="stylesheet">
<script src="js/bootstrap.min.js"></script>
<title>RFID</title>
</head>
<body>
<br />
<ul class="topnav">
<li><a href="home.php">History</a></li>
<li><a class="active" href="user data.php">Data Mahasiswa</a></li>
<li><a href="registration.php">Registration</a></li>
</ul>
<br>
<div class="container">
<div class="row">
<h3>DATA MAHASISWA</h3>
</div>
<div class="row">
<table class="table">
<thead>
<tr bgcolor="#2eb8b8" color="#FFFFFF">
<th>UID</th>
<th>Nama</th>
<th>NIM</th>
<th class="text-center">Email</th>
<th>Pengaturan</th>
</tr>
</thead>
<tbody>
<?php
$pdo = Database::connect();
$sql = 'SELECT * FROM tb_mahasiswa ORDER BY mahasiswa_uid ASC';
foreach ($pdo->query($sql) as $row) { echo '<tr>';
echo '<td>' . $row['mahasiswa_uid'] . '</td>';
echo '<td>' . $row['mahasiswa_nama'] . '</td>';
echo '<td>' . $row['mahasiswa_nim'] . '</td>';
echo '<td>' . $row['mahasiswa_email'] . '</td>';
echo '<td><a class="btn btn-success" href="user data edit page.php?id=' . $row['mahasiswa_uid'] . '">Edit</a>';
echo ' ';
?>
<form class="form-horizontal" action="user data.php" method="post">
<input type="hidden" name="id" value="<?php echo $row['mahasiswa_uid']; ?>" />
<button type="submit" class="btn btn-danger">Delete</button>
</form>
<?php
echo '</td>';
echo '</tr>';
}
Database::disconnect();
?>
</tbody>
</table>
</div>
</div> <!-- /container -->
</body>
</html>
Lampiran 7 Program PHP dan HTML (user data edit page.php)
<?php
require 'database.php';
$id = null;
if (!empty($_GET['id'])) { $id = $_REQUEST['id'];
}
$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT * FROM tb_mahasiswa where mahasiswa_uid = ?";
$q = $pdo->prepare($sql);
$q->execute(array($id));
$data = $q->fetch(PDO::FETCH_ASSOC);
Database::disconnect();
if (!empty($_POST)) {
// keep track post values $id = $_POST['id'];
$name = $_POST['name'];
$nim = $_POST['nim'];
$email = $_POST['email'];
$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "UPDATE tb_mahasiswa set mahasiswa_nama = ?, mahasiswa_nim
=?, mahasiswa_email =? WHERE mahasiswa_uid = ?";
$q = $pdo->prepare($sql);
$q->execute(array($name, $nim, $email, $id));
Database::disconnect();
header("Location: user data.php");
}
?>
<!DOCTYPE html>
<html lang="en">
<html>
<head>
<link rel="stylesheet" type="text/css" href="style.css">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta charset="utf-8">
<link href="css/bootstrap.min.css" rel="stylesheet">
<script src="js/bootstrap.min.js"></script>
<title>RFID</title>
</head>
<body>
<div class="container">
<div class="center" style="margin: 0 auto; width:495px; border-style: none; border-color: #f2f2f2;">
<div class="row">
<h3 align="center">Edit Data Mahasiswa</h3>
</div>
<form class="form-horizontal" action="user data edit page.php?id=<?php echo $id ?>" method="post">
<div class="control-group">
<label class="control-label">UID</label>
<div class="controls">
<input name="id" type="text" placeholder=""
value="<?php echo $data['mahasiswa_uid']; ?>" readonly>
</div>
</div>
<div class="control-group">
<label class="control-label">NIM</label>
<div class="controls">