Gudang Ilmu: Koding arduino membuat kunci motor dengan sidik jari

Friday, 28 June 2024

Koding arduino membuat kunci motor dengan sidik jari

 



Apa yang Dibutuhkan?

  1. Arduino (bisa menggunakan Uno, Mega, atau lainnya)
  2. Sensor Sidik Jari (misalnya, Adafruit Fingerprint Sensor)
  3. Modul MP3 (misalnya, DFPlayer Mini)
  4. EEPROM (untuk menyimpan data sidik jari)
  5. Relay (untuk mengontrol starter dan kontak motor)
  6. Kabel jumper dan breadboard
  7. Software Serial Library (untuk komunikasi serial)
  8. Adafruit Fingerprint Library (untuk sensor sidik jari)
  9. DFPlayer Mini Library (untuk modul MP3)

Langkah-langkah Pembuatan


1. Persiapkan Komponen dan Rangkaian

Hubungkan sensor sidik jari, modul MP3, dan relay ke Arduino sesuai dengan skema berikut:

  • Sensor Sidik Jari:
    • VCC ke 5V Arduino
    • GND ke GND Arduino
    • TX ke pin 7 Arduino
    • RX ke pin 8 Arduino
  • Modul MP3:
    • VCC ke 5V Arduino
    • GND ke GND Arduino
    • TX ke pin RX Arduino
    • RX ke pin TX Arduino
  • Relay:
    • VCC ke 5V Arduino
    • GND ke GND Arduino
    • IN1 ke pin 15 Arduino (kontak motor)
    • IN2 ke pin 14 Arduino (starter motor)

2. Instalasi Library

Pastikan sudah menginstal library Adafruit Fingerprint dan DFPlayer Mini di Arduino IDE kamu. Jika belum, kamu bisa mengunduhnya melalui Library Manager di Arduino IDE.

3. Upload Kode ke Arduino

Kode yang sudah dirapikan untuk proyek kunci motor sidik jari. Copy dan paste kode ini ke Arduino IDE, lalu upload ke board Arduino kamu.

#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>
#include <EEPROM.h>
#include <DFPlayer_Mini_Mp3.h>

// Konstanta dan variabel
const int aktif = 6;
const int daftar = 2;
const int hapus = 3;
const int relay1 = 15;
const int relay2 = 14;
const int alamat = 0;
byte isi;
int k = 0;
boolean b = false;
boolean a = false;

// Objek
SoftwareSerial mySerial(7, 8);
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

// Fungsi setup
void setup() {
    Serial.begin(9600);
    mp3_set_serial(Serial);
    mp3_set_volume(25);

    pinMode(13, OUTPUT);
    pinMode(aktif, INPUT_PULLUP);
    pinMode(daftar, INPUT_PULLUP);
    pinMode(hapus, INPUT_PULLUP);
    pinMode(relay1, OUTPUT);
    pinMode(relay2, OUTPUT);

    digitalWrite(relay1, HIGH);
    digitalWrite(relay2, HIGH);

    mySerial.begin(9600);
    finger.begin(57600);

    if (!finger.verifyPassword()) {
        while (1);
    }

    delay(100);
    if (!digitalRead(hapus)) {
        EEPROM.write(alamat, 0);
        delay(1);
    }

    isi = EEPROM.read(alamat);
    if (isi > 50) {
        EEPROM.write(alamat, 0);
    }

    isi = EEPROM.read(alamat);
    while (!digitalRead(daftar)) {
        Serial.print("Daftar");
        digitalWrite(13, HIGH);
        getFingerprintEnroll(isi);
        digitalWrite(13, LOW);
        delay(10000);
        
        if (isi < 50) {
            isi++;
        }
        
        EEPROM.write(alamat, isi);
        delay(100);
        isi = EEPROM.read(alamat);
    }
}

// Fungsi loop
void loop() {
    b = digitalRead(relay1);
    a = digitalRead(aktif);

    if (a) {
        Serial.println(b);
        Serial.println("masuk");
        getFingerprintID();
    }
}

// Fungsi pendaftaran sidik jari
uint8_t getFingerprintEnroll(int id) {
    int p = -1;

    while (p != FINGERPRINT_OK) {
        p = finger.getImage();
    }

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

    delay(2000);
    while (p != FINGERPRINT_NOFINGER) {
        p = finger.getImage();
    }

    while (p != FINGERPRINT_OK) {
        p = finger.getImage();
    }

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

    p = finger.createModel();
    if (p != FINGERPRINT_OK) return p;

    p = finger.storeModel(id);
    if (p == FINGERPRINT_OK) {
        EEPROM.write(alamat, 2);
        delay(1000);
    }

    return p;
}

// Fungsi pencarian sidik jari
uint8_t getFingerprintID() {
    uint8_t p = finger.getImage();
    if (p != FINGERPRINT_OK) return p;

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

    p = finger.fingerSearch();
    if (p == FINGERPRINT_OK) {
        // Sidik jari ditemukan
    } else {
        Serial.println("Salah");
        mp3_play(3);
        k++;

        while (p != FINGERPRINT_NOFINGER) {
            p = finger.getImage();
        }

        delay(2000);
        if (k > 2) {
            mp3_play(4);
            k = 0;
            delay(300000); // Kunci selama 5 menit
        }

        return p;
    }

    k = 0;
    if (b) {
        digitalWrite(relay1, LOW);
        mp3_play(1);

        while (p != FINGERPRINT_NOFINGER) {
            p = finger.getImage();
        }

        for (int a = 0; a < 50; a++) {
            p = finger.getImage();
            if (p == FINGERPRINT_OK) {
                p = finger.image2Tz();
                if (p == FINGERPRINT_OK) {
                    p = finger.fingerSearch();
                    if (p == FINGERPRINT_OK) {
                        goto starter;
                    }
                }
            }
            delay(1000);
            if (a >= 25) goto mati;
        }

        starter:
        mp3_play(2);
        delay(2000);
        digitalWrite(relay2, LOW);
        delay(1200);
        digitalWrite(relay2, HIGH);
    } else {
        mati:
        digitalWrite(relay1, HIGH);
        while (p != FINGERPRINT_NOFINGER) {
            p = finger.getImage();
        }
    }

    return finger.fingerID;
}

// Fungsi mendapatkan ID sidik jari dengan cepat
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) {
        Serial.println("Salah");
        mp3_play(3);
        k++;

        while (p != FINGERPRINT_NOFINGER) {
            p = finger.getImage();
        }

        delay(2000);
        if (k > 2) {
            mp3_play(4);
            k = 0;
            delay(300000); // Kunci selama 5 menit
        }

        return -1;
    }

    k = 0;
    if (b) {
        digitalWrite(relay1, LOW);
        mp3_play(1);

        while (p != FINGERPRINT_NOFINGER) {
            p = finger.getImage();
        }

        for (int a = 0; a < 50; a++) {
            p = finger.getImage();
            if (p == FINGERPRINT_OK) {
                p = finger.image2Tz();
                if (p == FINGERPRINT_OK) {
                    p = finger.fingerFastSearch();
                    if (p == FINGERPRINT_OK) {
                        goto starter;
                    }
                }
            }
            delay(1000);
            if (a >= 25) goto mati;
        }

        starter:
        mp3_play(2);
        delay(2000);
        digitalWrite(relay2, LOW);
        delay(1200);
        digitalWrite(relay2, HIGH);
    } else {
        mati:
        digitalWrite(relay1, HIGH);
        while (p != FINGERPRINT_NOFINGER) {
            p = finger.getImage();
        }
    }

    return finger.fingerID;

4. Pengujian dan Penyesuaian

Setelah kode berhasil diupload, saatnya menguji sistem kunci motor sidik jari kamu. Pastikan semua koneksi sudah benar dan fungsi dari sidik jari sudah bekerja sesuai dengan harapan. Jika terdapat kendala, kamu bisa melakukan debugging dengan melihat output di Serial Monitor.

5. Peningkatan Proyek

Kita bisa meningkatkan proyek ini dengan menambahkan fitur-fitur seperti:

  • Alarm jika ada upaya pembobolan
  • Modul GPS untuk melacak posisi motor
  • Sistem penguncian otomatis jika motor tidak terdeteksi dalam jangka waktu tertentu

Kesimpulan

Menggunakan Arduino dan sensor sidik jari, kita bisa membuat kunci motor yang lebih aman dan canggih. Proyek ini tidak hanya meningkatkan keamanan, tetapi juga memberikan pengalaman belajar yang berharga tentang bagaimana mengintegrasikan berbagai komponen elektronik dan memprogramnya.



Sumber: duwiarsana

}

No comments:

Post a Comment

terimakasih telah mengunjungi blog saya.