Gudang Ilmu: Koding Arduino Kunci Motor Menggunakan E-KTP

Friday 28 June 2024

Koding Arduino Kunci Motor Menggunakan E-KTP



Adapun bahan yang dibutuhkan untuk bikin kunci motor memakai kartu RFID meliputi Arduino Nano, pemutus tegangan modul relay 5V, modul RFID MFRC 522, dan modul Step Down. Setelah itu, masuk ke cara bikin kunci motor pakai kartu RFID E-KTP :

Tahap pertama : Anda perlu merakit Arduino Nano dan RFID. Dibutuhkan ketelitian untuk bisa merakit ini. Misalnya, pin 3,3 volt di RFID dipasang juga ke pin 3,3 volt yang terdapat di Arduino Nano.

Selanjutnya, pin RST dipasang ke D9 yang ada di Arduino Nano. Pin GND dipasang juga di Arduino Nano. Pin MSO dipasang di D12 yang ada di Arduino Nano.

Kemudian, pin MOSI dipasang ke D11 di Arduino Nano. Pin SCK dipasang di D13 Arduino Nano. Terakhir, pin SDA dipasang di D10 Arduino Nano

Tahap Kedua: Pada tahap ini Anda perlu menyiapkan modul Relay 5V.

Di sini YouTuber menggunakan satu channel saja. GND dipasang dengan kabel hitam, IN I dipasang kabel ungu, dan VCC warna putih.

Sekarang kabel tersebut dipasang ke Arduino Nano. GND dari modul Relay dipasang ke Arduino Nano pin GND juga. Kemudian VCC dipasang di 5volt Arduino Nano. IN I dipasang di pin 3 Arduino Nano.

Tahap Ketiga (Coding): Di sini Anda membutuhkan kabel USB atau OTG dan HP Android.

Setelah itu download aplikasi ArduinoDroid. Setelah menguduh dan instal aplikasi ArduinoDroid, ikuti langkah berikut ini:

- Buka aplikasi ArduinoDroid

- Klik tanda garis tiga yang ada di pojok kanan atas

- Klik Setting dan klik Board Type> Arduino

- Klik Nano w/ATmega328

- Klik titik tiga lagi> Library> klik Available> ketik MFRC522, kemudian back

- Sekarang copy coding yang ada di bawah


#include <EEPROM.h>
#include <SPI.h>
#include <MFRC522.h>

#define LED1_PIN 6
#define LED2_PIN 7
#define RELAY_PIN 8
#define DELETE_PIN 3
#define BUZZER_PIN 2
#define SS_PIN 10
#define RST_PIN 9

MFRC522 mfrc522(SS_PIN, RST_PIN);

boolean cocok = false;
boolean programMode = false;
int berhasil;
byte sementara[4];
byte baca[4];
byte master[4];

void setup() {
    pinMode(BUZZER_PIN, OUTPUT);
    pinMode(LED1_PIN, OUTPUT);
    pinMode(LED2_PIN, OUTPUT);
    pinMode(DELETE_PIN, INPUT_PULLUP);
    pinMode(RELAY_PIN, OUTPUT);

    SPI.begin();
    mfrc522.PCD_Init();
    ShowReaderDetails();

    if (digitalRead(DELETE_PIN) == LOW) {
        digitalWrite(LED1_PIN, HIGH);
        digitalWrite(LED2_PIN, HIGH);
        delay(5000);
        if (digitalRead(DELETE_PIN) == LOW) {
            for (int x = 0; x < EEPROM.length(); x++) {
                EEPROM.write(x, 0);
            }
            digitalWrite(BUZZER_PIN, HIGH);
            flashLED(LED1_PIN, LED2_PIN, 4, 200);
            digitalWrite(BUZZER_PIN, LOW);
        } else {
            digitalWrite(LED1_PIN, LOW);
            digitalWrite(LED2_PIN, LOW);
            digitalWrite(BUZZER_PIN, LOW);
        }
    }

    if (EEPROM.read(1) != 143) {
        do {
            berhasil = getID();
            buzzAndBlink(BUZZER_PIN, LED1_PIN, LED2_PIN, 200);
        } while (!berhasil);
        for (int j = 0; j < 4; j++) {
            EEPROM.write(2 + j, baca[j]);
        }
        EEPROM.write(1, 143);
        digitalWrite(LED1_PIN, LOW);
        digitalWrite(LED2_PIN, LOW);
    }

    for (int i = 0; i < 4; i++) {
        master[i] = EEPROM.read(2 + i);
    }
}

void loop() {
    do {
        berhasil = getID();
        if (programMode) {
            ledkedip();
        } else {
            normal();
        }
    } while (!berhasil);

    if (programMode) {
        if (isMaster(baca)) {
            programMode = false;
        } else {
            if (findID(baca)) {
                deleteID(baca);
            } else {
                writeID(baca);
            }
        }
    } else {
        if (isMaster(baca)) {
            programMode = true;
        } else {
            if (findID(baca)) {
                buzzAndBlink(BUZZER_PIN, BUZZER_PIN, BUZZER_PIN, 100);
                granted(300);
            } else {
                digitalWrite(BUZZER_PIN, HIGH);
                delay(1000);
                digitalWrite(BUZZER_PIN, LOW);
                denied();
            }
        }
    }
}

void denied() {
    flashLED(LED1_PIN, -1, 3, 1000);
}

void granted(int setDelay) {
    digitalWrite(LED2_PIN, HIGH);
    digitalWrite(RELAY_PIN, !digitalRead(RELAY_PIN));
    delay(setDelay);
}

void ledkedip() {
    flashLED(BUZZER_PIN, LED1_PIN, 1, 200);
}

void normal() {
    digitalWrite(LED1_PIN, LOW);
    digitalWrite(LED2_PIN, LOW);
    digitalWrite(BUZZER_PIN, LOW);
}

int getID() {
    if (!mfrc522.PICC_IsNewCardPresent()) {
        return 0;
    }
    if (!mfrc522.PICC_ReadCardSerial()) {
        return 0;
    }
    for (int i = 0; i < 4; i++) {
        baca[i] = mfrc522.uid.uidByte[i];
    }
    mfrc522.PICC_HaltA();
    return 1;
}

boolean isMaster(byte test[]) {
    return checkTwo(test, master);
}

void writeID(byte a[]) {
    if (!findID(a)) {
        int num = EEPROM.read(0);
        int start = (num * 4) + 6;
        num++;
        EEPROM.write(0, num);
        for (int j = 0; j < 4; j++) {
            EEPROM.write(start + j, a[j]);
        }
        successWrite();
        buzzAndBlink(BUZZER_PIN, BUZZER_PIN, BUZZER_PIN, 100);
    } else {
        failedWrite();
        digitalWrite(BUZZER_PIN, HIGH);
        delay(1000);
        digitalWrite(BUZZER_PIN, LOW);
    }
}

void successWrite() {
    flashLED(LED1_PIN, LED2_PIN, 4, 200);
}

boolean findID(byte find[]) {
    int count = EEPROM.read(0);
    for (int i = 1; i <= count; i++) {
        readID(i);
        if (checkTwo(find, sementara)) {
            return true;
        }
    }
    return false;
}

void failedWrite() {
    flashLED(LED1_PIN, LED2_PIN, 3, 200);
}

void deleteID(byte a[]) {
    if (!findID(a)) {
        failedWrite();
    } else {
        int num = EEPROM.read(0);
        int slot = findIDSLOT(a);
        int start = (slot * 4) + 2;
        int looping = ((num - slot) * 4);
        num--;
        EEPROM.write(0, num);
        for (int j = 0; j < looping; j++) {
            EEPROM.write(start + j, EEPROM.read(start + 4 + j));
        }
        for (int k = 0; k < 4; k++) {
            EEPROM.write(start + looping + k, 0);
        }
        successDelete();
        buzzAndBlink(BUZZER_PIN, BUZZER_PIN, BUZZER_PIN, 1000);
    }
}

boolean checkTwo(byte a[], byte b[]) {
    for (int k = 0; k < 4; k++) {
        if (a[k] != b[k]) {
            return false;
        }
    }
    return true;
}

void readID(int number) {
    int start = (number * 4) + 2;
    for (int i = 0; i < 4; i++) {
        sementara[i] = EEPROM.read(start + i);
    }
}

int findIDSLOT(byte find[]) {
    int count = EEPROM.read(0);
    for (int i = 1; i <= count; i++) {
        readID(i);
        if (checkTwo(find, sementara)) {
            return i;
        }
    }
    return -1;
}

void successDelete() {
    flashLED(LED1_PIN, LED2_PIN, 3, 200);
}

void ShowReaderDetails() {
    byte v = mfrc522.PCD_ReadRegister(mfrc522.VersionReg);
    if ((v == 0x00) || (v == 0xFF)) {
        while (true);
    }
}

void flashLED(int led1, int led2, int times, int delayTime) {
    for (int i = 0; i < times; i++) {
        if (led1 != -1) digitalWrite(led1, HIGH);
        if (led2 != -1) digitalWrite(led2, HIGH);
        delay(delayTime);
        if (led1 != -1) digitalWrite(led1, LOW);
        if (led2 != -1) digitalWrite(led2, LOW);
        delay(delayTime);
    }
}

void buzzAndBlink(int buzzer, int led1, int led2, int delayTime) {
    digitalWrite(buzzer, HIGH);
    delay(delayTime);
    digitalWrite(buzzer, LOW);
    if (led1 != -1) {
        digitalWrite(led1, HIGH);
        delay(delayTime);
        digitalWrite(led1, LOW);
    }
    if (led2 != -1) {
        digitalWrite(led2, HIGH);
        delay(delayTime);
        digitalWrite(led2, LOW);
    }
}

- Setelah download klik tanda titik tiga, Sketch> Open From> Device> Download> Klik file yang di-download tadi

- Nanti akan muncul kode-kode di HP kalian, ganti RFID Key dengan XXXXX

- Klik tanda petir yang ada di atas aplikasi dan tunggu kompilasi berhasil.

No comments:

Post a Comment

terimakasih telah mengunjungi blog saya.