MONITORING PRESENSI PERPUSTAKAAN ELEKTRO MENGGUNAKAN KARTU E-PJE BERBASIS INTERNET OF THINGS
Disusun Oleh :
Sonia Audira 3.32.20.2.22
Yohan Wahyu Pradana 3.32.20.2.26
EK-3C
D-3 Teknik Elektronika
Jurusan Teknik Elektro
Politeknik Negeri Semarang
Pengertian
MONITORING PRESENSI PERPUSTAKAAN ELEKTRO MENGGUNAKAN KARTU E-PJE BERBASIS INTERNET OF THINGS adalah sebuah alat pengganti kertas dimana mahasiswa dalam proses presensi di perpustakaan elektro tidak lagi menggunakan tanda tangan pada kertas, namun menggunakan kartu E-PJE yang ditempelkan pada alat tersebut. Kemudian data yang terbaca akan di proses oleh NodeMcu8266 dan kemudian dikirimkan ke spreadsheet. Pada spreadsheet ditampilkan dan tersimpan data-data secara otomatis.
Latar Belakang
Seiring dengan perkembangan zaman, dalam kegiatan akademik khususnya pada perpustakaan jurusan yang ada di Politeknik Negeri Semarang, kegiatan pendataan presensi adalah hal yang wajib dilakukan oleh seluruh mahasiswa Politeknik Negeri Semarang apabila memasuki perpustakaan. Pada umumnya, presensi dilakukan dengan penandatanganan lembar kehadiran yang telah disediakan oleh petugas perpustakaan. Penandatanganan yang dilakukan setiap hari ini dinilai tidak efektif. Selain tidak ramah lingkungan karena menggunakan bahan kertas juga dapat menimbulkan antrean, presensi manual juga bisa dimanipulasi oleh oknum-oknum yang tidak bertanggungjawab.
Oleh karena itu, untuk menemukan solusi dari permasalahan tersebut, kami membuat sebuah Tugas Akhir yang bertujuan untuk mempermudah dan menghindari kecurangan yang dilakukan oleh mahasiswa dalam melakukan presensi dan membantu meringankan petugas perpustakaan dalam pendataan mahasiswa yang hadir ke perpustakaan. “Monitoring Presensi Perpustakaan Elektro Menggunakan Kartu E-PJE Berbasis Internet of Things” adalah alat elektronik yang dapat digunakan untuk menggantikan presensi manual. Alat ini nantinya bekerja dengan sistem scanning yang berbasis Internet of Things. Kartu PJE yang di-scanning pada mesin absensi, kemudian dilakukan pengolahan data yang akan menghasilkan informasi kehadiran mahasiswa yang lebih cepat dan akurat.
Rumusan Masalah
- Bagaimana
solusi untuk menciptakan sistem presensi yang efektif bagi mahasiswa?
- Bagaimana
cara membuat sistem “Monitoring Presensi Mahasiswa Menggunakan Kartu E-PJE
Berbasis Internet of Things?
- Bagaimana prinsip kerja dari sistem presensi tersebut?
Batasan Masalah
1. Alat Ini hanya menggunakan kartu E-PJE untuk bisa presensi pada saat berkunjung ke perpustakaan jurusan elektro.
2. Kartu E-PJE terdaftar pada system
Komponen Yang Digunakan
1. NodeMcu ESP8266
Gambar 1. NodeMcu ESP8266
NodeMCU adalah sebuah board elektronik yang berbasis chip ESP8266 dengan kemampuan menjalankan fungsi mikrokontroler dan juga koneksi internet (WiFi).
2. LCD
Gambar 2. LCD
Liquid Crystal Display (LCD) merupakan tampilan visual yang menggunakan daya rendah dengan pengontrol kontras dan kecerahan.
2. I2C
Gambar 3. I2C
I2C adalah modul LCD yang dikendalikan secara serial sinkron dengan protokol I2C/IIC (Inter Integrated Circuit) atau TWI (Two Wire Interface).
4. RFID
Gambar 4. RFID
Teknologi Modul RFID atau Radio Frequency Identification adalah suatu teknik mengamati obyek yang dilakukan dengan menggunakan pancaran gelombang radio.
Luaran dan Masukan
1. Masukan : RFID
2. Luaran : Buzzer, LCD, Sreadsheet
Diagram Block
Diagram Alir
Gambar Pengawatan
Program/* ------------------------------------------------------------------------* ------------------------------------------------------------------------*/#include <Arduino.h>#include <ESP8266WiFi.h>#include <SPI.h>#include <MFRC522.h>#include <HTTPSRedirect.h>#include <Wire.h>#include <LiquidCrystal_I2C.h>LiquidCrystal_I2C lcd(0x27, 16, 2);//---------------------------------------------------------------------------------------------------------// Enter Google Script Deployment ID:const char *GScriptId = "AKfycbyA91FlDAjhl_FtYlZToknm4HH5YunOuEN6LVRug_qLfojGNsHvmQcS8PJPwca95Dcj";//---------------------------------------------------------------------------------------------------------// Enter network credentials:const char* ssid = "AndroidAP";const char* password = "siliwangi";//---------------------------------------------------------------------------------------------------------// Enter command (insert_row or append_row) and your Google Sheets sheet name (default is Sheet1):String payload_base = "{\"command\": \"insert_row\", \"sheet_name\": \"Sheet1\", \"values\": ";String payload = "";//---------------------------------------------------------------------------------------------------------// Google Sheets setup (do not edit)const char* host = "script.google.com";const int httpsPort = 443;const char* fingerprint = "";String url = String("/macros/s/") + GScriptId + "/exec";HTTPSRedirect* client = nullptr;//------------------------------------------------------------// Declare variables that will be published to Google SheetsString student_id;//------------------------------------------------------------int blocks[] = {4,5,6,8,9};#define total_blocks (sizeof(blocks) / sizeof(blocks[0]))//------------------------------------------------------------#define RST_PIN 0 //D3#define SS_PIN 2 //D4#define BUZZER 3 //S3//------------------------------------------------------------MFRC522 mfrc522(SS_PIN, RST_PIN);MFRC522::MIFARE_Key key;MFRC522::StatusCode status;//------------------------------------------------------------/* Be aware of Sector Trailer Blocks */int blockNum = 2;/* Create another array to read data from Block *//* Legthn of buffer should be 2 Bytes more than the size of Block (16 Bytes) */byte bufferLen = 18;byte readBlockData[18];//------------------------------------------------------------/*********************************** setup Function**********************************/void setup() {//----------------------------------------------------------Serial.begin(9600);delay(10);Serial.println('\n');//----------------------------------------------------------SPI.begin();//----------------------------------------------------------pinMode(BUZZER, OUTPUT);//initialize lcd screenlcd.begin();// turn on the backlightlcd.backlight();lcd.clear();lcd.setCursor(0,0); //col=0 row=0lcd.print("Connecting to");lcd.setCursor(0,1); //col=0 row=0lcd.print("WiFi...");//----------------------------------------------------------// Connect to WiFiWiFi.begin(ssid, password);Serial.print("Connecting to ");Serial.print(ssid); Serial.println(" ...");while (WiFi.status() != WL_CONNECTED) {delay(1000);Serial.print(".");}Serial.println('\n');Serial.println("Connection established!");Serial.print("IP address:\t");Serial.println(WiFi.localIP());//----------------------------------------------------------// Use HTTPSRedirect class to create a new TLS connectionclient = new HTTPSRedirect(httpsPort);client->setInsecure();client->setPrintResponseBody(true);client->setContentTypeHeader("application/json");//----------------------------------------------------------lcd.clear();lcd.setCursor(0,0); //col=0 row=0lcd.print("Connecting to");lcd.setCursor(0,1); //col=0 row=0lcd.print("Google ");delay(5000);//----------------------------------------------------------Serial.print("Connecting to ");Serial.println(host);//----------------------------------------------------------// Try to connect for a maximum of 5 timesbool flag = false;for(int i=0; i<5; i++){int retval = client->connect(host, httpsPort);//*****************if (retval == 1){flag = true;String msg = "Connected. OK";Serial.println(msg);lcd.clear();lcd.setCursor(0,0); //col=0 row=0lcd.print(msg);delay(2000);break;}//*****************elseSerial.println("Connection failed. Retrying...");//*****************}//----------------------------------------------------------if (!flag){//________________lcd.clear();lcd.setCursor(0,0); //col=0 row=0lcd.print("Connection fail");//________________Serial.print("Could not connect to server: ");Serial.println(host);delay(5000);return;//________________}//----------------------------------------------------------delete client; // delete HTTPSRedirect objectclient = nullptr; // delete HTTPSRedirect object//----------------------------------------------------------}/*********************************** loop Function**********************************/void loop() {//----------------------------------------------------------------static bool flag = false;if (!flag){client = new HTTPSRedirect(httpsPort);client->setInsecure();flag = true;client->setPrintResponseBody(true);client->setContentTypeHeader("application/json");}if (client != nullptr){if (!client->connected()){client->connect(host, httpsPort);}}else{Serial.println("Error creating client object!");}//----------------------------------------------------------------lcd.clear();lcd.setCursor(0,0); //col=0 row=0lcd.print("Scan Kartumu");/* Initialize MFRC522 Module */mfrc522.PCD_Init();/* Look for new cards *//* Reset the loop if no new card is present on RC522 Reader */if ( ! mfrc522.PICC_IsNewCardPresent()) {return;}/* Select one of the cards */if ( ! mfrc522.PICC_ReadCardSerial()) {return;}/* Read data from the same block */Serial.println();Serial.println(F("Reading last data from RFID..."));//----------------------------------------------------------------String values = "", data;/*//creating payload - method 1//----------------------------------------------------------------ReadDataFromBlock(blocks[0], readBlockData); //student iddata = String((char*)readBlockData); data.trim();student_id = data;//----------------------------------------------------------------ReadDataFromBlock(blocks[1], readBlockData); //first namedata = String((char*)readBlockData); data.trim();first_name = data;//----------------------------------------------------------------ReadDataFromBlock(blocks[2], readBlockData); //last namedata = String((char*)readBlockData); data.trim();last_name = data;//----------------------------------------------------------------ReadDataFromBlock(blocks[3], readBlockData); //phone numberdata = String((char*)readBlockData); data.trim();phone_number = data;//----------------------------------------------------------------ReadDataFromBlock(blocks[4], readBlockData); //addressdata = String((char*)readBlockData); data.trim();address = data; data = "";//----------------------------------------------------------------values = "\"" + student_id + ",";values += first_name + ",";values += last_name + ",";values += phone_number + ",";values += address + "\"}";//----------------------------------------------------------------*///creating payload - method 2 - More efficientfor (byte i = 0; i < total_blocks; i++) {ReadDataFromBlock(blocks[i], readBlockData);//*****************if(i == 0){data = String((char*)readBlockData);data.trim();student_id = data;values = "\"" + data + ",";}//*****************else if(i == total_blocks-1){data = String((char*)readBlockData);data.trim();values += data + "\"}";}//*****************else{data = String((char*)readBlockData);data.trim();values += data + ",";}}//----------------------------------------------------------------// Create json object string to send to Google Sheets// values = "\"" + value0 + "," + value1 + "," + value2 + "\"}"payload = payload_base + values;//----------------------------------------------------------------lcd.clear();lcd.setCursor(0,0); //col=0 row=0lcd.print("Mengirim Data");lcd.setCursor(0,1); //col=0 row=0lcd.print("Tunggu...");//----------------------------------------------------------------// Publish data to Google SheetsSerial.println("Publishing data...");Serial.println(payload);if(client->POST(url, host, payload)){// do stuff here if publish was successfullcd.clear();lcd.setCursor(0,0); //col=0 row=0lcd.print("Student ID: "+student_id);lcd.setCursor(0,1); //col=0 row=0lcd.print("Sukses");digitalWrite(BUZZER, HIGH);delay(200);digitalWrite(BUZZER, LOW);delay(200);digitalWrite(BUZZER, HIGH);delay(200);digitalWrite(BUZZER, LOW);delay(3000);}//----------------------------------------------------------------else{// do stuff here if publish was not successfulSerial.println("Error while connecting");lcd.clear();lcd.setCursor(0,0); //col=0 row=0lcd.print("Failed.");lcd.setCursor(0,1); //col=0 row=0lcd.print("Try Again");}//----------------------------------------------------------------// a delay of several seconds is required before publishing againdelay(5000);}/*********************************** ReadDataFromBlock() function**********************************/void ReadDataFromBlock(int blockNum, byte readBlockData[]){//----------------------------------------------------------------------------/* Prepare the ksy for authentication *//* All keys are set to FFFFFFFFFFFFh at chip delivery from the factory */for (byte i = 0; i < 6; i++) {key.keyByte[i] = 0xFF;}//----------------------------------------------------------------------------/* Authenticating the desired data block for Read access using Key A */status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, blockNum, &key, &(mfrc522.uid));//----------------------------------------------------------------------------sif (status != MFRC522::STATUS_OK){Serial.print("Authentication failed for Read: ");Serial.println(mfrc522.GetStatusCodeName(status));return;}//----------------------------------------------------------------------------else {Serial.println("Authentication success");}//----------------------------------------------------------------------------/* Reading data from the Block */status = mfrc522.MIFARE_Read(blockNum, readBlockData, &bufferLen);if (status != MFRC522::STATUS_OK) {Serial.print("Reading failed: ");Serial.println(mfrc522.GetStatusCodeName(status));return;}//----------------------------------------------------------------------------else {readBlockData[16] = ' ';readBlockData[17] = ' ';Serial.println("Block was read successfully");}//----------------------------------------------------------------------------}
Link PPT Materi Presentasi
Link Github Monitoring Presensi E-PJE
b
Komentar
Posting Komentar