SISTEM PENGAMAN PINTU BESERTA ABSENSI OTOMATIS

 SISTEM PENGAMAN PINTU 

BESERTA ABSENSI OTOMATIS


Disusun Oleh :
                                                    Alviandi Prasetyo Aji            3.32.20.2.01
                                                    Astri Suryandari                    3.32.20.2.04

Kelas : EK-3C

Latar Belakang

          Seiring dengan perkembangan teknologi khususnya dalam bidang otomasi sangat memungkinkan untuk memberi kemudahan dan kenyamanan bagi manusia. Untuk memberi kemudahan dan kenyaman tersebut adalah melalui pengembangan sistem otomasi pada rumah, kantor atau ruangan tertentu

        Salah satunya adalah pintu, dimana pintu merupakan aspek paling penting karena digunakan sebagai akses masuk atau keluarnya manusia, sehingga pengaman pintu atau kunci sangatlah menentukan keamanan dan kenyamanan sebuah ruangan. Serta pintu adalah akses awal pada setiap ruangan. Pada era sekarang ini dengan perkembangan teknologi yang sangat cepat, kurang efektif dan efisien apabila membuka atau menutup kunci pintu dengan cara manual. Dan juga dengan cara manual kita tidak dapat mendeteksi siapa saja yang telah masuk ke dalam ruangan. Oleh karena itu kami membuat sebuah alat yaitu “Sistem Pengaman Pintu beserta Absensi Otomatis” dengan berbasis ESP32 serta sensor sidik jari.    


Tujuan 

1. Merancang sistem pengaman pintu beserta absensi otomatis berbasis ESP32 dengan sensor sidik jari

2. Meningkatkan keamanan dalam akses keluar masuk pintu

3. Mampu mendeteksi seseorang yang memasuki rumah dengan melihat data yang tersimpan di Google Sheet

4. Mempermudah dan mengurangi tenaga manual/manusia 


Komponen yang digunakan : 

1. Mikrokontroler : ESP32, MB102

2. Masukan : Sensor Fingerprint dan DF Player Mini

3. Luaran : Solenoid, Buzzer, LCD, Speaker, Modul Relay 1 Channel


Software yang digunakan : 

1. Arduio IDE 

2. IFTTT

3. Google Sheets

4. Webhooks


Cara Kerja :

    Gambaran secara umum, sistem ini menggunakan fingerprint sebagai media untuk mengakses buka tutup pintu. Sistem diaktifkan menggunakan sumber 12 V, Pada awal sistem akan menghidupkan LCD,Fingerprint dan ESP32. Lalu ESP32 akan terkoneksi dengan Internet melalui Wifi yang sudah diatur. Selanjutnya pengguna diminta untuk menscan sidik jari apabila sidik jari tidak terdaftar maka tidak akan ada perubahan apapun dari sistem. Apabila sidik jari terdaftar dengan ID yang sesuai maka buzzer akan berbunyi diikuti dengan speaker akan hidup berbunyi “Silahkan Masuk” dan LCD akan menampilkan tulisan “Silahkan Masuk”. Kemudian Solenoid Door Lock akan aktif selama 3 detik serta sistem akan mengirimkan data ke Webhooks selanjutnya data tersebut akan tersimpan di Google Spreadsheet. 

























Berikut Program dari Project yang sudah di buat :

/*==============================================================
Program : Kelompok  C01 EK-3C
ALVIANDI PRASETYO AJI   (3.32.20.2.01)
ASTRI SURYANDARI (3.32.20.2.04)

================================================================
Proyek Tugas Akhir Laboratorium Mikrokontroler II
Program Sistem Pengaman Pintu Beserta Absensi Otomatis

-----------------------------------------------------------------------------------------------------------*/

#include <LiquidCrystal_I2C.h>
#include<Wire.h>
#include <Adafruit_Fingerprint.h>
#include <WiFi.h>

#include "DFRobotDFPlayerMini.h"
int relayPin = 18;
int buzzerPin = 14;
const char* NAME;
const char* ID;


String Event_Name = "Fingerprint";

String Key = "dfyNwmcqLAmpJW3qiflmdS";

String resource = "/trigger/" + Event_Name + "/with/key/" + Key;


const char* server = "maker.ifttt.com";


const char* ssid     = "YAYASAN FAKIR KUOTA";
const char* password = "pocophone";
HardwareSerial Myserial(0); 
DFRobotDFPlayerMini mp3; 
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&Serial2);
LiquidCrystal_I2C lcd(0x27, 16, 2); 


void setup()
{
  lcd.begin();
  lcd.backlight();
  lcd.clear(); 
  Serial.begin(115200);
  Myserial.begin(9600, SERIAL_8N1, 4, 2);  
    mp3.begin(Myserial);
  while (!Serial);  
  delay(100);
      pinMode(relayPin, OUTPUT);
    pinMode(buzzerPin, OUTPUT);
    digitalWrite(relayPin, HIGH);
  Serial.println("\n\nAdafruit finger detect test");
  lcd.setCursor(0,0);
    lcd.print("   Open Logic   ");
    lcd.setCursor(0,1);
    lcd.print("DoorLock finger");
    Serial.println("Fingerprint Door Lock");
        

  
  finger.begin(57600);
  delay(5);
  if (finger.verifyPassword()) {
    Serial.println("Found fingerprint sensor!");
  } else {
    Serial.println("Did not find fingerprint sensor :(");
    while (1) {
      delay(1);
    }
  }

  finger.getTemplateCount();
  Serial.print("Sensor contains "); Serial.print(finger.templateCount); Serial.println(" templates");
  Serial.println("Waiting for valid finger...");

  Serial.print("Connecting to: ");
  Serial.print(ssid);
  WiFi.begin(ssid, password);

  int timeout = 10 * 4; 
  while (WiFi.status() != WL_CONNECTED  && (timeout-- > 0)) {
    delay(250);
    Serial.print(".");
  }
  Serial.println("");

  if (WiFi.status() != WL_CONNECTED) {
    Serial.println("Failed to connect, going back to sleep");
  }

  Serial.print("WiFi connected in: ");
  Serial.print(millis());
  Serial.print(", IP address: ");
  Serial.println(WiFi.localIP());
}

void loop()                     
{
  getFingerprintIDez();
  if (finger.fingerID == 1) {

    Serial.print("!!--");
    Serial.println(finger.fingerID);
    NAME = "ASTRI";
    ID = "1";
    if (finger.confidence >= 60) {
      Serial.print("Attendace Marked for "); Serial.println(NAME);
      makeIFTTTRequest();
      // digital write - open the door
    }

  }

  if (finger.fingerID == 2 ) {
    Serial.print("!!--");
    Serial.println(finger.fingerID);
    NAME = "ALVIANDI";
    ID = "2";
    if (finger.confidence >= 60) {
      Serial.print("Attendace Marked for "); Serial.println(NAME);
      makeIFTTTRequest();
      
    }      

  }
  finger.fingerID = 0;
}

uint8_t getFingerprintID() {
  uint8_t p = finger.getImage();
  switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Image taken");
      break;
    case FINGERPRINT_NOFINGER:
      Serial.println("No finger detected");
      return p;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("Communication error");
      return p;
    case FINGERPRINT_IMAGEFAIL:
      Serial.println("Imaging error");
      return p;
    default:
      Serial.println("Unknown error");
      return p;
  }

  // OK success!

  p = finger.image2Tz();
  switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Image converted");
      break;
    case FINGERPRINT_IMAGEMESS:
      Serial.println("Image too messy");
      return p;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("Communication error");
      return p;
    case FINGERPRINT_FEATUREFAIL:
      Serial.println("Could not find fingerprint features");
      return p;
    case FINGERPRINT_INVALIDIMAGE:
      Serial.println("Could not find fingerprint features");
      return p;
    default:
      Serial.println("Unknown error");
      return p;
  }

  // OK converted!
  p = finger.fingerFastSearch();
  if (p == FINGERPRINT_OK) {
    Serial.println("Found a print match!");
  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
    Serial.println("Communication error");
    return p;
  } else if (p == FINGERPRINT_NOTFOUND) {
    Serial.println("Did not find a match");
    return p;
  } else {
    Serial.println("Unknown error");
    return p;
  }

  // found a match!
  Serial.print("Found ID #"); Serial.print(finger.fingerID);
  Serial.print(" with confidence of "); Serial.println(finger.confidence);

  return finger.fingerID;
}

// returns -1 if failed, otherwise returns ID #
int getFingerprintIDez() {
  uint8_t p = finger.getImage();
  if (p != FINGERPRINT_OK)  return -1;

  p = finger.image2Tz();
  if (p != FINGERPRINT_OK)  return -1;

  p = finger.fingerFastSearch();
  if (p != FINGERPRINT_OK)  return -1;

  // found a match!
  Serial.print("Found ID #"); Serial.print(finger.fingerID);
  Serial.print(" with confidence of "); Serial.println(finger.confidence);
   mp3.play(1); 
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("   Open Logic   ");
    lcd.setCursor(0,1);
    lcd.print(" Selamat Datang ");
    digitalWrite(relayPin, LOW);
    //digitalWrite(relayPin, HIGH);
    Serial.println("Door Unlocked Welcome");
    delay(3000);
    digitalWrite(relayPin, HIGH);
    lcd.clear();
    lcd.print("   Open Logic   ");
    lcd.setCursor(0,1);
    lcd.print("DoorLock finger");
    Serial.println("The door is locked automatically");
  return finger.fingerID;
}


void makeIFTTTRequest() {
  Serial.print("Connecting to ");
  Serial.print(server);

  WiFiClient client;
  int retries = 5;
  while (!!!client.connect(server, 80) && (retries-- > 0)) {
    Serial.print(".");
  }
  Serial.println();
  if (!!!client.connected()) {
    Serial.println("Failed to connect...");
  }

  Serial.print("Request resource: ");
  Serial.println(resource);

  
  String jsonObject = String("{\"value1\":\"") + NAME + "\",\"value2\":\"" + ID
                      + "\"}";

  client.println(String("POST ") + resource + " HTTP/1.1");
  client.println(String("Host: ") + server);
  client.println("Connection: close\r\nContent-Type: application/json");
  client.print("Content-Length: ");
  client.println(jsonObject.length());
  client.println();
  client.println(jsonObject);

  int timeout = 5 * 10; // 5 seconds
  while (!!!client.available() && (timeout-- > 0)) {
    delay(100);
  }
  if (!!!client.available()) {
    Serial.println("No response...");
  }
  while (client.available()) {
    Serial.write(client.read());
  }

  Serial.println("\nclosing connection");
  client.stop();
}


Video Percobaan Alat : https://youtu.be/HEBH5spGsLs








Komentar