By | 23/02/2021
Kunci Pintu Digital 3in1 RFID PN532, Fingerprint dan Keypad 4x3

Kunci pintu digital atau digital door lock merupakan projek yang banyak diminati oleh banyak orang, dan kali ini saya akan membuat kunci pintu digital yang di akses dengan tiga jenis sensor ESP32, Keypad 4×3, Fingerprint dan RFID PN532.

Solenoid door lock yang saya gunakan adalah modul digital lock yang ada dipasaran seharga 40 ribu rupiah an, sedangkan untuk driver nya saya menggunakan modul relay 5V DC yang sudah dilengkapi optocoupler untuk konvert 3.3V ke 5V.

Modul RFID PN532 merupakan modul rfid yang menurut saya lebih bagus dari pada RC522, karena beberapa alasan saya lebih milih menggunakan PN532. Namun jika anda mau menggunakan RC522 untuk kunci pintu digital ini tentu saja sangat bisa.

Fungsi dari modul RFID untuk membuka atau mengakses door lock digital solenoid menggunakan kartu RFID yang ID nya sudah terdaftar.

Sensor Fingerprint atau sidik jari merupakan sensor yang dapat mendeteksi sidik jari. dengan harga kisaran 150 ribu rupiah anda sudah dapat membeli modul fingerprint ini.

Fungsi fingerprint untuk mengakses solenoid door lock berdasarkan id yang tersimpan pada memori fingerprint.

Keypad 4×3 merupakan tombol yang disusun secara matrix sehingga menghasilkan 4 baris dan 3 kolom.

Fungsi keypad 4×3 untuk mengakses digital lock solenoid berdasarkan pin atau password.

Tutorial digital lock atau kunci pintu dengan keypad dan rfid bisa dibaca disini
Tutorial ESP32 Door Lock dengan PIN Keypad 4×3
Tutorial ESP8266 Mengakses Sensor INA219 dengan Beban Door Lock
Tutorial Arduino Membuat Kunci Digital dengan Keypad dan Servo
Tutorial NodeMCU ESP8266 Relay RFID RC522 Door Lock

Beli komponen di Tokopedia.com

Tutorial ESP32 Kunci Pintu 3in1 Fingerprint Keypad 4x3 dan RFID PN532
Kunci Pintu Digital 3in1 RFID PN532, Fingerprint dan Keypad 4×3

Membuat Kode Digital Lock atau Kunci Pintu Digital 3in1 Arduino IDE

#include <Adafruit_Fingerprint.h>
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&Serial2);
#include <Keypad.h>
#include <SPI.h>
#include <Adafruit_PN532.h>

#define PN532_SCK  (18)
#define PN532_MISO (19)
#define PN532_MOSI (23)
#define PN532_SS   (27)
Adafruit_PN532 nfc(PN532_SCK, PN532_MISO, PN532_MOSI, PN532_SS);

const byte ROWS = 4; //four rows
const byte COLS = 3; //four columns
char hexaKeys[ROWS][COLS] = {
  {'1', '2', '3'},
  {'4', '5', '6'},
  {'7', '8', '9'},
  {'*', '0', '#'}
};

byte rowPins[ROWS] = {13, 26, 14, 12}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {5, 25, 33}; //connect to the column pinouts of the keypad

Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);

#define doorlock 15

uint8_t id;

volatile int interruptCounter;
int totalInterruptCounter;

hw_timer_t * timer = NULL;
portMUX_TYPE timerMux = portMUX_INITIALIZER_UNLOCKED;

void IRAM_ATTR onTimer() {
  portENTER_CRITICAL_ISR(&timerMux);
  interruptCounter++;
  portEXIT_CRITICAL_ISR(&timerMux);

}

TaskHandle_t Task1;
TaskHandle_t Task2;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  nfc.begin();
  uint32_t versiondata = nfc.getFirmwareVersion();
  if (! versiondata) {
    Serial.print("Didn't find PN53x board");
    while (1); // halt
  }
  nfc.SAMConfig();

  finger.begin(57600);

  if (finger.verifyPassword()) {
    Serial.println("Found fingerprint sensor!");
  } else {
    Serial.println("Did not find fingerprint sensor :(");
    while (1) {
      delay(1);
    }
  }
  pinMode (doorlock, OUTPUT);
  digitalWrite(doorlock, 1);

  xTaskCreatePinnedToCore(
                    Task1code,   /* Task function. */
                    "Task1",     /* name of task. */
                    10000,       /* Stack size of task */
                    NULL,        /* parameter of the task */
                    1,           /* priority of the task */
                    &Task1,      /* Task handle to keep track of created task */
                    0);          /* pin task to core 0 */                  
  delay(500); 

  //create a task that will be executed in the Task2code() function, with priority 1 and executed on core 1
  xTaskCreatePinnedToCore(
                    Task2code,   /* Task function. */
                    "Task2",     /* name of task. */
                    10000,       /* Stack size of task */
                    NULL,        /* parameter of the task */
                    1,           /* priority of the task */
                    &Task2,      /* Task handle to keep track of created task */
                    1);          /* pin task to core 1 */
    delay(500);

}

int state = 0;
String StringVal, idcard;
String idterdaftar = "e5156c23";
unsigned long oldtime = 0;
void loop() {
  // put your main code here, to run repeatedly:
   
}

void Task1code( void * pvParameters ){
  Serial.print("Task1 running on core ");
  Serial.println(xPortGetCoreID());

  for(;;){
    read_kartu();
  } 
}

void Task2code( void * pvParameters ){
  Serial.print("Task2 running on core ");
  Serial.println(xPortGetCoreID());

  for(;;){
    read_key();
  }
}

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.println(finger.fingerID);
  state = finger.fingerID;
  return finger.fingerID;
}

void read_kartu() {
  bool success;
  uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 };  // Buffer to store the returned UID
  uint8_t uidLength;

  success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength, 10);
  if (success) {
    // Display some basic information about the card
    idcard = "";
    for (byte i = 0; i <= uidLength - 1; i++) {
      idcard += (uid[i] < 0x10 ? "0" : "") +
                String(uid[i], HEX);
    }
    Serial.print("ID Kartu Anda : ");
    Serial.print(idcard);
    Serial.println("");

    if (idcard == idterdaftar) {
      state = 1;
    }
    else {
      state = 0;
    }
  }
  delay(1000);
}

void read_key() {
  char Key = customKeypad.getKey();
  if (Key) {
    if (Key >= '0' && Key <= '9') {
      StringVal += Key;
      Serial.println(StringVal);
    }
    else if (Key == '#') {
      if (StringVal.length() > 0) {
        if (StringVal == "1412") {
          state = 1;
        }
        StringVal = "";
      }
    }
    else if (Key == '*') {
      StringVal = "";
    }
  }
}

Kode diatas menggunakan ESP32 yang memanfaatkan dual core.

Mengapa saya menggunakan dual core ?

Karena code keypad dan RFID nya tidak bisa digabung jadi saya mencoba dengan mengaktifkan dual core yang ada di ESP32.

Itulah tutorial yang saya bagikan mengenai digital lock 3in1 RFID fngerprint dan juga keypad 4×3 sebagai input pin atau password.

Keyword

  1. digital lock esp32,
  2. code arduino digital lock,
  3. proyek kunci pintu digital,
  4. projek digital door lock fingerprint,
  5. projek digital door lock rfid,
  6. digital door lock keypad,
  7. arduino digital door lock,

Leave a Reply

Your email address will not be published. Required fields are marked *