---
# System prepended metadata

title: 'TUGAS BESAR IoT "SMART CARD FOR TOURISM"   '

---

<div style="text-align:center;">
  <h1>TUGAS BESAR IoT <br/>"SMART CARD FOR TOURISM"<br/> 
  </h1>
</div>

<div style="text-align:center;">
<img src="https://hackmd.io/_uploads/Hk-k3NYwa.png" alt="Logo_Tel-U" width="300">
</div>

<div style="text-align:center;">
    <h1>
        Disusun Oleh:
    </h1>
    <h2>
    Kelompok 1
    </h2>
</div>
<div style="text-align:center;">
  <p> 
    Muhammad Mirza Fauzan Martono - 1103210042
  </p>
    <p>
    Muhammad makhlufi makbullah - 1103210171
    </p>
    <p>
     Dafa Rhesa Sudibyo - 1103210035
    </p>
    <p>
    Muhammad Faqih Syadidan - 1103213225
    </p>
</div>


# **Pengenalan Proyek**
<div style="text-align:justify;">
<p>
    Proyek "Smart Card for Tourism" adalah inisiatif inovatif yang dirancang untuk meningkatkan pengalaman wisatawan melalui penggunaan teknologi canggih. Proyek ini memanfaatkan berbagai komponen seperti RFID untuk identifikasi dan akses cepat, LCD I2C untuk menampilkan informasi, dan ESP32 sebagai pusat pengendali dengan konektivitas Wi-Fi. Dengan integrasi LED dan buzzer sebagai indikator visual dan suara, sistem ini memberikan umpan balik yang jelas dan instan kepada pengguna.
</p>
</div>

# **Latar Belakang**
* **Alasan memilih topik**
    <div style="text-align:justify;">
    pemilihan topik "Smart Card for Tourism" didasarkan pada kebutuhan mendesak untuk meningkatkan efisiensi dan kenyamanan dalam industri pariwisata yang terus berkembang.Penggunaan smart card memungkinkan wisatawan untuk dengan mudah mengakses layanan yang terintegrasi teknologi seperti RFID, LCD I2C, dan ESP32 memudahkan pengelolaan informasi dan akses data secara real-time, yang sangat berguna bagi pengelola destinasi wisata dalam mengoptimalkan pelayanan dan memastikan keamanan.
</div> 

* **Tujuan Proyek**
    <div style="text-align:justify;">
    Tujuan utama dari proyek yang kelompok kami buat adalah agar bisa memahami cara kerja alat IoT untuk mempermudah kehidupan sehari-hari dan bisa membantu orang sekitar dengan alat yang kami buat agar bisa mempermudah orang tersebut dengan alat yang kami buat.
</div>

# **Dasar Teori**
**1. Alat yang dibutuhkan**
* NodeMCU ESP 8266
![esp8266](https://hackmd.io/_uploads/Hkk6URNSC.jpg)
    <div style="text-align:justify;">
    NodeMCU ESP8266 memiliki peran sentral dalam proyek "Smart Card for Tourism" dengan mengendalikan pembaca RFID untuk identifikasi wisatawan, mengirim data ke layar LCD I2C untuk menampilkan informasi, dan mengaktifkan LED serta buzzer sebagai umpan balik visual dan suara. Dengan kemampuan Wi-Fi, NodeMCU ESP8266 memungkinkan konektivitas real-time dengan server untuk memverifikasi data dan memperbarui informasi.
    </div>


* Breadboard
![breadboard22](https://hackmd.io/_uploads/S1tprndB0.jpg)
    <div style="text-align:justify;">
    Breadboard memungkinkan koneksi mudah antara berbagai komponen seperti NodeMCU ESP8266, pembaca RFID, LCD I2C, LED, dan buzzer menggunakan kabel jumper. Ini memfasilitasi perubahan dan penyesuaian rangkaian dengan cepat selama fase pengembangan dan pengujian, memungkinkan pengembang untuk memastikan semua komponen berfungsi dengan baik dan berinteraksi sesuai yang diharapkan.
    </div>


* Kabel Jumper
![jumper](https://hackmd.io/_uploads/S17fU3OSR.jpg)
    <div style="text-align:justify;">
    kabel jumper berfungsi sebagai penghubung utama antara berbagai komponen elektronik di atas breadboard. Kabel jumper memungkinkan aliran sinyal dan daya antara NodeMCU ESP8266, pembaca RFID, LCD I2C, LED, dan buzzer tanpa perlu penyolderan permanen.
    </div>

* RFID
![rfid](https://hackmd.io/_uploads/SJ3E83_HR.jpg)
    <div style="text-align:justify;">
    RFID (Radio-Frequency Identification) berfungsi sebagai teknologi utama untuk identifikasi dan akses wisatawan. Sistem RFID terdiri dari kartu atau tag yang memuat informasi wisatawan dan pembaca RFID yang membaca data tersebut ketika kartu didekatkan. RFID memungkinkan proses autentikasi yang cepat dan tanpa kontak.
    </div>

* LCD I2C
![lcd](https://hackmd.io/_uploads/Sy0_LndSR.jpg)
    <div style="text-align:justify;">
    LCD I2C (Liquid Crystal Display dengan komunikasi I2C) berperan sebagai untuk menampilkan informasi kepada pengguna dengan cara yang jelas dan mudah dimengerti. LCD I2C dapat menampilkan berbagai informasi seperti status akses ketika RFID didekatkan dan akan memberikan tampilan apakah data yang diterima benar atau salah.
    </div>

* LED
![led](https://hackmd.io/_uploads/H1e3U3dSR.png)
    <div style="text-align:justify;">
    LED (Light Emitting Diode) berfungsi sebagai indikator visual yang memberikan umpan balik langsung kepada pengguna. LED digunakan untuk menunjukkan status akses atau kondisi sistem secara visual. Misalnya, LED hijau dapat menyala untuk menandakan akses yang diizinkan, sementara LED merah dapat menyala untuk menandakan akses yang ditolak. 
    </div>

* Buzzer
![buzzer](https://hackmd.io/_uploads/r15kPh_rA.jpg)
    <div style="text-align:justify;">
    Buzzer berfungsi sebagai indikator suara yang memberikan umpan balik audio kepada pengguna. Buzzer digunakan untuk mengkomunikasikan informasi penting kepada wisatawan, seperti konfirmasi akses yang diizinkan atau ditolak. Misalnya, buzzer dapat mengeluarkan suara pendek atau panjang bersamaan dengan LED hijau atau merah untuk menandakan status akses.
    </div>


**2. Koneksi yang digunakan**
* Wifi
    <div style="text-align:justify;">
     Koneksi Wi-Fi memegang peran krusial dalam proyek "Smart Card for Tourism" dengan memungkinkan NodeMCU ESP8266 untuk terhubung ke jaringan lokal atau internet. Ini memfasilitasi transfer data yang cepat dan efisien antara perangkat di lapangan dengan server atau cloud. Dengan koneksi Wi-Fi, sistem dapat melakukan verifikasi real-time terhadap data yang terbaca dari kartu RFID wisatawan, memperbarui informasi yang ditampilkan pada layar LCD I2C, dan mengirim umpan balik kepada pengguna melalui LED dan buzzer.
    </div>
    
* Software Blynk 
    <div style="text-align:justify;">
    Software Blynk memainkan peran kunci dalam proyek "Smart Card for Tourism" dengan menyediakan platform yang intuitif untuk mengontrol dan memantau sistem secara mudah melalui aplikasi seluler. Blynk memungkinkan pengembang untuk membuat antarmuka pengguna yang dapat disesuaikan dengan mudah menggunakan widget-widget seperti tombol, slider, dan tampilan data, yang terhubung langsung ke NodeMCU ESP8266 dan komponen lainnya dalam proyek.
    
**3. Source Code Program**
Berikut adalah source code dari program Smart Card For Tourism. 
   
    
**Code**
```
#define BLYNK_TEMPLATE_ID "TMPL6sK5_b2JS"
#define BLYNK_TEMPLATE_NAME "RFID Smart Card Tourism"
#define BLYNK_DEVICE_NAME "ESP32-RFID"

#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <Wire.h> // Include Wire library for I2C
#include <LiquidCrystal_I2C.h> // Include the library for I2C LCD
#include <MFRC522.h>
#include <SPI.h>
```
    
    
**Penjelasan**    
- #define BLYNK_TEMPLATE_ID "TMPL6sK5_b2JS" - konstanta yang digunakan untuk mengidentifikasi template spesifik yang dibuat di platform Blynk.
- #define BLYNK_TEMPLATE_NAME "RFID Smart Card Tourism" - memberikan nama yang deskriptif untuk template yang digunakan.
- #define BLYNK_DEVICE_NAME "ESP32-RFID" - nama yang diberikan untuk perangkat spesifik yang terhubung ke Blynk.
- #define BLYNK_PRINT Serial - Berguna untuk debugging dan melihat log yang dihasilkan oleh library Blynk saat aplikasi berjalan.
- #include <WiFi.h> - untuk menghubungkan ESP32 ke jaringan Wi-Fi.
- #include <WiFiClient.h> - untuk membuat koneksi TCP/IP dengan server melalui Wi-Fi.
- #include <BlynkSimpleEsp32.h> - menyediakan fungsi-fungsi yang memungkinkan ESP32 berkomunikasi dengan platform Blynk.
- #include <Wire.h> // Include Wire library for I2C - untuk komunikasi dengan perangkat yang menggunakan protokol I2C, seperti LCD I2C dalam proyek ini.
- #include <LiquidCrystal_I2C.h> // Include the library for I2C LCD - Library ini memungkinkan pengendalian layar LCD I2C, seperti menampilkan teks.
- #include <MFRC522.h> - menyediakan fungsi untuk berinteraksi dengan modul RFID MFRC522, termasuk membaca dan menulis data dari/tag ke RFID.
- #include <SPI.h> - komunikasi SPI yang diperlukan oleh modul RFID MFRC522 untuk berkomunikasi dengan ESP32.

    
**Code**    
```
char auth[] = "LKNbrQv2mmoqfdfLgUCWf95HB1TIu4Bd";

// WiFi credentials
char ssid[] = "BosCilok";
char pass[] = "lupaguacok";
```  
    
**Penjelasan**    
- char auth[] = "LKNbrQv2mmoqfdfLgUCWf95HB1TIu4Bd"; - mendefinisikan sebuah array karakter bernama auth yang menyimpan token autentikasi dari Blynk.
// WiFi credentials
- char ssid[] = "BosCilok"; - mendefinisikan sebuah array karakter bernama ssid yang menyimpan nama SSID dari jaringan Wi-Fi yang dihubungkan.
- char pass[] = "lupaguacok"; - mendefinisikan sebuah array karakter bernama pass yang menyimpan nama SSID dari jaringan Wi-Fi yang dihubungkan.
 
    
**Code**    
```
// Pin definitions for ESP32
#define RST_PIN 4
#define SS_PIN 5
#define MISO_PIN 19
#define MOSI_PIN 23
#define SCK_PIN 18
```
    
    
**Penejelasan**    
// Pin definitions for ESP32
- #define RST_PIN 4 - untuk menghubungkan pin RST (Reset) dari modul RFID MFRC522.
- #define SS_PIN 5 - untuk menghubungkan pin SDA (SS) dari modul RFID MFRC522.
- #define MISO_PIN 19 - untuk menghubungkan pin MISO dari modul RFID MFRC522.
- #define MOSI_PIN 23 - untuk menghubungkan pin MOSI dari modul RFID MFRC522.
- #define SCK_PIN 18 - untuk menghubungkan pin SCK dari modul RFID MFRC522.
 
    
**Code**    
```
// Pin definitions for peripherals
int buzzer = 27;
int ledred = 14;
int ledgreen = 12;
int switchPin = V0; // Blynk Switch widget connected to V0

bool switchState = false;
```
    
    
 **Penjelasan**   
// Pin definitions for peripherals
- int buzzer = 27; - mendefinisikan variabel buzzer sebagai integer dan menginisialisasinya dengan nilai 27.
- int ledred = 14; - mendefinisikan variabel ledred sebagai integer dan menginisialisasinya dengan nilai 14.
- int ledgreen = 12; - mendefinisikan variabel ledgreen sebagai integer dan menginisialisasinya dengan nilai 12.
- int switchPin = V0; // Blynk Switch widget connected to V0 - mendefinisikan variabel switchPin sebagai integer dan menginisialisasinya dengan nilai V0.
- bool switchState = false; - mendefinisikan variabel switchState sebagai boolean dan menginisialisasinya dengan nilai false.Nilai ini akan berubah sesuai dengan keadaan switch di aplikasi (on atau off)
  

**Code**    
```
// LCD I2C address 0x27 and 16x2 LCD
LiquidCrystal_I2C lcd(0x27, 16, 2); // Declare lcd object

byte readCard[4];
String MasterTags[] = {"7819AB53", "142434A3" }; // Array of MasterTags
String tagID = "";
```
    
    
**Penjelasan**    
// LCD I2C address 0x27 and 16x2 LCD
- LiquidCrystal_I2C lcd(0x27, 16, 2); // Declare lcd object - untuk mengontrol layar LCD I2C yang menampilkan informasi kepada pengguna.
- byte readCard[4]; - digunakan untuk menyimpan data yang dibaca dari kartu RFID
- String MasterTags[] = {"7819AB53", "142434A3" }; // Array of MasterTags - untuk mengidentifikasi kartu RFID yang memiliki hak akses khusus.
- String tagID = ""; - untuk menyimpan ID kartu RFID yang sedang dibaca saat ini dalam bentuk string.
    

**Code**    
```
// Create instances
MFRC522 mfrc522(SS_PIN, RST_PIN);

void setup()
{
  Serial.begin(9600);
  SPI.begin(SCK_PIN, MISO_PIN, MOSI_PIN, SS_PIN);
  mfrc522.PCD_Init(); // MFRC522 initialization

  pinMode(ledgreen, OUTPUT);
  pinMode(ledred, OUTPUT);
  pinMode(buzzer, OUTPUT);
  pinMode(switchPin, INPUT);

  // Initialize LCD
  lcd.init();
  lcd.backlight();
  lcd.clear();
  lcd.setCursor(1, 0);
  lcd.print("Silahkan Tap :");

  // Connect to WiFi
  WiFi.begin(ssid, pass);
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println("WiFi connected");

  // Initialize Blynk
  Blynk.begin(auth, ssid, pass);

  // Setup Blynk switch handler
  Blynk.virtualWrite(switchPin, switchState ? HIGH : LOW);
  Blynk.syncVirtual(switchPin);
}
```
    
    
**Penjelasan**    
// Create instances
* MFRC522 mfrc522(SS_PIN, RST_PIN); - untuk berkomunikasi dengan modul RFID MFRC522.
* void setup() - untuk menginisialisasi perangkat keras dan konfigurasi awal.
 {
*   Serial.begin(9600); - mengirim dan menerima data melalui port serial
*   SPI.begin(SCK_PIN, MISO_PIN, MOSI_PIN, SS_PIN); - untuk menghubungkan ESP32 dengan modul RFID.
*   mfrc522.PCD_Init(); // MFRC522 initialization - Menginisialisasi modul RFID MFRC522.
*   pinMode(ledgreen, OUTPUT); - Menetapkan pin ledgreen sebagai output.
*   pinMode(ledred, OUTPUT); - Menetapkan pin ledred sebagai output.
*   pinMode(buzzer, OUTPUT); - Menetapkan pin buzzer sebagai output.
*   pinMode(switchPin, INPUT); - Menetapkan pin switchPin sebagai input.
   // Initialize LCD
*   lcd.init(); - Menginisialisasi LCD I2C.
*   lcd.backlight(); - Menyalakan backlight pada LCD.
*   lcd.clear(); - Membersihkan tampilan LCD.
*   lcd.setCursor(1, 0); - Mengatur kursor LCD ke kolom 1, baris 0.
*   lcd.print("Silahkan Tap :"); - Menampilkan teks "Silahkan Tap :" pada LCD.
   // Connect to WiFi
*   WiFi.begin(ssid, pass); - Memulai koneksi Wi-Fi menggunakan SSID dan password yang telah didefinisikan.
*   while (WiFi.status() != WL_CONNECTED) - Menunggu hingga koneksi Wi-Fi berhasil, dengan menampilkan titik di Serial Monitor setiap 500 milidetik.
*    delay(500); - 
*    Serial.print("."); - 
*   Serial.println("WiFi connected"); - Menampilkan pesan "WiFi connected" di Serial Monitor setelah koneksi Wi-Fi berhasil.
   // Initialize Blynk
*   Blynk.begin(auth, ssid, pass); - Memulai koneksi ke platform Blynk menggunakan token autentikasi, SSID, dan password Wi-Fi.
   // Setup Blynk switch handler
*   Blynk.virtualWrite(switchPin, switchState ? HIGH : LOW); - Menulis status awal dari switch ke pin virtual di Blynk, tergantung pada nilai switchState.
*   Blynk.syncVirtual(switchPin); - Mensinkronkan status pin virtual switchPin dengan nilai terakhir yang disimpan di server Blynk.
    

**Code**    
```
// LCD I2C address 0x27 and 16x2 LCD
LiquidCrystal_I2C lcd(0x27, 16, 2); // Declare lcd object

byte readCard[4];
String MasterTags[] = {"7819AB53", "142434A3" }; // Array of MasterTags
String tagID = "";
```
    
    
**Penjelasan**    
// LCD I2C address 0x27 and 16x2 LCD
- LiquidCrystal_I2C lcd(0x27, 16, 2); // Declare lcd object - untuk mengontrol layar LCD I2C yang akan menampilkan informasi kepada pengguna.
- byte readCard[4]; - untuk menyimpan data yang dibaca dari kartu RFID.
- String MasterTags[] = {"7819AB53", "142434A3" }; // Array of MasterTags - kartu RFID yang memiliki hak akses khusus.
- String tagID = ""; - untuk menyimpan ID kartu RFID yang sedang dibaca saat ini dalam bentuk string.
    

**Code**    
```
void loop()
{
  Blynk.run(); // Run Blynk
  // Wait until new tag is available
  if (getID())
  {
    lcd.clear();
    lcd.setCursor(1, 0);
    lcd.print("ID : ");
    lcd.print(tagID);

    bool isMasterTag = false;
    for (int i = 0; i < sizeof(MasterTags) / sizeof(MasterTags[0]); i++)
    {
      if (tagID == MasterTags[i])
      {
        isMasterTag = true;
        break;
      }
    }

    if (isMasterTag)
    {
      digitalWrite(ledgreen, HIGH);
      digitalWrite(ledred, LOW);

      // Buzzer pattern for access granted
      buzz(2, 100); // Two short beeps

      lcd.setCursor(0, 1);
      lcd.print("Silahkan Masuk");

      // Send tag ID to Blynk server
      Blynk.virtualWrite(V1, tagID);
    }
    else
    {
      digitalWrite(ledred, HIGH);
      digitalWrite(ledgreen, LOW);
      lcd.setCursor(0, 1);
      lcd.print("Kartu Salah");
      
      // Buzzer pattern for access denied
      digitalWrite(buzzer, HIGH);
      delay(2000);
      digitalWrite(buzzer, LOW);
    }
    delay(1000);
    digitalWrite(ledred, LOW);
    digitalWrite(ledgreen, LOW);

    lcd.clear();
    lcd.setCursor(1, 0);
    lcd.print("Silahkan Tap :");

  }
}
```
**Penjelasan**
                                          
* void loop() - dijalankan berulang kali oleh mikrokontroler setelah fungsi setup() dieksekusi sekali.
*   Blynk.run(); // Run Blynk - Menjalankan fungsi Blynk 
// Wait until new tag is available
*   if (getID()) - Menunggu hingga tag RFID baru terdeteksi. 
*   lcd.clear(); -  Membersihkan layar LCD.
*   lcd.setCursor(1, 0); - Mengatur kursor LCD ke posisi kolom 1, baris 0.
*   lcd.print("ID : "); - Menampilkan teks "ID : " pada LCD.
*   lcd.print(tagID); - Menampilkan ID tag RFID yang terbaca pada LCD.
*   bool isMasterTag = false; - digunakan untuk memeriksa apakah tag yang terbaca adalah Master Tag.
*   for (int i = 0; i < sizeof(MasterTags) / sizeof(MasterTags[0]); i++) - Mengiterasi melalui array MasterTags untuk memeriksa apakah ID tag yang terbaca sesuai dengan salah satu Master Tag.
* if (tagID == MasterTags[i]) - Jika tag yang terbaca sesuai dengan salah satu Master Tag, maka:
* isMasterTag = true; - Mengatur variabel isMasterTag menjadi true.
* break; - Keluar dari loop karena tag yang cocok telah ditemukan.
* if (isMasterTag) - Jika isMasterTag adalah true, artinya tag yang terbaca adalah Master Tag, maka:
* digitalWrite(ledgreen, HIGH); - Menyalakan LED hijau untuk menunjukkan bahwa akses diizinkan.
* digitalWrite(ledred, LOW);  - Mematikan LED merah.
// Buzzer pattern for access granted
* buzz(2, 100); // Two short beeps  - Memanggil fungsi buzz untuk menghasilkan dua bunyi pendek dari buzzer sebagai indikasi bahwa akses diizinkan.
* lcd.setCursor(0, 1); - Mengatur kursor LCD ke posisi kolom 0, baris 1.
* lcd.print("Silahkan Masuk"); - Menampilkan teks "Silahkan Masuk" pada LCD. 
// Send tag ID to Blynk server
* Blynk.virtualWrite(V1, tagID); - Mengirimkan ID tag yang terbaca ke server Blynk
* else - Jika isMasterTag adalah false, artinya tag yang terbaca bukan Master Tag, maka:
* digitalWrite(ledred, HIGH); - Menyalakan LED merah untuk menunjukkan bahwa akses ditolak.
* digitalWrite(ledgreen, LOW); - Mematikan LED hijau.
* lcd.setCursor(0, 1); - Mengatur kursor LCD ke posisi kolom 0, baris 1.
* lcd.print("Kartu Salah"); - Menampilkan teks "Kartu Salah" pada LCD       
// Buzzer pattern for access denied
* digitalWrite(buzzer, HIGH); - Menyalakan buzzer untuk memberikan sinyal suara bahwa akses ditolak.
* delay(2000); - Menunggu selama 2000 milidetik (2 detik) sambil buzzer menyala.
* digitalWrite(buzzer, LOW); - Mematikan buzzer.
* delay(1000); - Menunggu selama 1000 milidetik (1 detik).
* digitalWrite(ledred, LOW); - Mematikan LED merah.
* digitalWrite(ledgreen, LOW); - Mematikan LED hijau. 
* lcd.clear(); - Membersihkan layar LCD.
* lcd.setCursor(1, 0); - Mengatur kursor LCD ke posisi kolom 1, baris 0.
* lcd.print("Silahkan Tap :"); - Menampilkan teks "Silahkan Tap :" pada LCD untuk meminta pengguna men-tap kartu RFID lagi.
    
    
**Code**
```
boolean getID()
{
  // Getting ready for Reading PICCs
  if (!mfrc522.PICC_IsNewCardPresent())
  {
    // If a new PICC placed to RFID reader continue
    return false;
  }
  if (!mfrc522.PICC_ReadCardSerial())
  {
    // Since a PICC placed get Serial and continue
    return false;
  }
  tagID = "";
  for (uint8_t i = 0; i < 4; i++)
  {
    // The MIFARE PICCs that we use have 4 byte UID
    tagID.concat(String(mfrc522.uid.uidByte[i], HEX)); // Adds the 4 bytes in a single String variable
  }
  tagID.toUpperCase();
  mfrc522.PICC_HaltA(); // Stop reading
  return true;
}

void buzz(int times, int delayMs)
{
  for (int i = 0; i < times; i++)
  {
    digitalWrite(buzzer, HIGH);
    delay(delayMs);
    digitalWrite(buzzer, LOW);
    delay(delayMs);
  }
}
```  
    
**Penjelasan**

* boolean getID() - Fungsi ini mengembalikan nilai boolean dan bertanggung jawab untuk membaca ID dari kartu RFID.
// Getting ready for Reading PICCs
*if (!mfrc522.PICC_IsNewCardPresent()) - Memeriksa apakah ada kartu baru yang ditempatkan di pembaca RFID.
// If a new PICC placed to RFID reader continue
*    return false; - Jika tidak ada kartu baru, fungsi mengembalikan false.
*  if (!mfrc522.PICC_ReadCardSerial()) - Jika ada kartu baru, membaca ID kartu tersebut.
// Since a PICC placed get Serial and continue
*    return false; - Jika gagal membaca, fungsi mengembalikan false.
*   tagID = ""; - engosongkan variabel tagID.
*   for (uint8_t i = 0; i < 4; i++) - Loop ini iterasi melalui 4 byte UID dari kartu MIFARE.
// The MIFARE PICCs that we use have 4 byte UID
*    tagID.concat(String(mfrc522.uid.uidByte[i], HEX)); // Adds the 4 bytes in a single String variable - Mengonversi setiap byte UID ke bentuk string heksadesimal dan menambahkan ke variabel tagID.
*   tagID.toUpperCase(); - Mengubah tagID menjadi huruf kapital.
*   mfrc522.PICC_HaltA(); // Stop reading - Menghentikan pembacaan kartu.
*   return true; - Mengembalikan true jika ID kartu berhasil dibaca.
* void buzz(int times, int delayMs) - untuk mengaktifkan buzzer beberapa kali dengan jeda tertentu.
*   for (int i = 0; i < times; i++) - Loop ini iterasi sebanyak nilai times.
*    digitalWrite(buzzer, HIGH); - Mengaktifkan (menyalakan) buzzer.
*    delay(delayMs); - Menunggu selama delayMs milidetik.
*    digitalWrite(buzzer, LOW); - Menonaktifkan (mematikan) buzzer.
*    delay(delayMs); - Menunggu selama delayMs milidetik lagi sebelum iterasi berikutnya.

    
**Code**
    
```
BLYNK_WRITE(V0) {
  switchState = param.asInt(); // Get the state of the switch widget
  if (switchState) {
    digitalWrite(ledgreen, HIGH);
    digitalWrite(buzzer, HIGH);
    delay(2000);
    digitalWrite(buzzer, LOW);
    digitalWrite(ledred, LOW);
    lcd.clear();
    lcd.setCursor(0, 1);
    lcd.print("Dibuka");
  } else {
    digitalWrite(ledred, HIGH);
    digitalWrite(ledgreen, LOW);
    lcd.clear();
    lcd.setCursor(0, 1);
    lcd.print("Ditutup");
  }
}
```
    
**Penjelasan**
* BLYNK_WRITE(V0) { - BLYNK_WRITE dipanggil oleh library Blynk setiap kali ada perubahan nilai pada widget yang terhubung dengan pin virtual V0 di aplikasi Blynk.
*   switchState = param.asInt(); - engambil nilai dari switch widget di aplikasi Blynk dan menyimpannya dalam variabel switchState.
*   if (switchState) { - Kondisi jika switchState adalah true (widget ON)
*    digitalWrite(ledgreen, HIGH); - Menyalakan LED hijau.
*    digitalWrite(buzzer, HIGH); - Menyalakan buzzer.
*    delay(2000); - Menunggu selama 2000 milidetik (2 detik).
*    digitalWrite(buzzer, LOW); - Mematikan buzzer.
*    digitalWrite(ledred, LOW); - Mematikan LED merah.
*    lcd.clear(); - Membersihkan layar LCD.
*    lcd.setCursor(0, 1); - Mengatur kursor ke kolom 0, baris 1.
*    lcd.print("Dibuka"); - Menampilkan teks "Dibuka" pada LCD.
*  } else { - Kondisi jika switchState adalah false (widget OFF)
*    digitalWrite(ledred, HIGH); - Menyalakan LED merah.
*    digitalWrite(ledgreen, LOW); - Mematikan LED hijau.
*    lcd.clear(); - Membersihkan layar LCD.
*    lcd.setCursor(0, 1); - Mengatur kursor ke kolom 0, baris 1.
*    lcd.print("Ditutup"); - Menampilkan teks "Ditutup" pada LCD.

        
    
**4. Tampilan Blynk**
Berikut adalah tampilan dari aplikasi bylynk.
    
![Screenshot 2024-06-14 013831](https://hackmd.io/_uploads/B1URnn_SA.png)

    

**Desain Alat**
    
![WhatsApp Image 2024-06-14 at 01.41.28_51208e47](https://hackmd.io/_uploads/ByJtanuHA.jpg)



# **Cara Kerja Alat**
<div style="text-align:justify;">
1. Masukkan inputan melalui software Arduino IDE yang terhubung melalui wifi auth dengan aplikasi pada mobile (blynk)
    
![Screenshot 2024-06-14 021917](https://hackmd.io/_uploads/rysL8TuSR.png)
    
![Screenshot 2024-06-14 021901](https://hackmd.io/_uploads/r1z_UaOHC.png)



2. Setelah Program diinputkan dan dijalankan maka secara otomatis alatnya sudah bisa di tap dan data id card nya akan muncul di blynk selain itu id card juga akan muncul melalui lcd yang ada pada alat, selain itu juga kita bisa seolah membuka pintu dari jarak jauh dikarenakan alat sudah terhubung melalui blynk   
    
![Screenshot 2024-06-14 022525](https://hackmd.io/_uploads/HJjJdpuBA.png)


3. Selain menggunakan kartu alat kami juga bisa membuka pintu dengan jarak jauh atau tidak menggunakan kartu rfid, fitur ini berfungsi untuk seolah membuka pintu rumah dari dalam rumah jika ada teman/saudara yang tidak memiliki kartu ingin masuk
    
![Screenshot 2024-06-14 022641](https://hackmd.io/_uploads/BJX2_adHA.png)

</div>
    
# **Kesimpulan**
<div style="text-align:justify;">
    Proyek "Smart Card for Tourism" bertujuan meningkatkan pengalaman wisatawan melalui integrasi teknologi IoT. Smart card ini memudahkan akses ke tempat wisata, pembayaran, dan penyediaan informasi real-time, meningkatkan kenyamanan dan efisiensi operasional. Selain itu, teknologi ini memungkinkan pengumpulan data yang akurat untuk analisis dan pengambilan keputusan yang lebih baik. Dengan tingkat keamanan tinggi dan potensi pengembangan lebih lanjut, seperti integrasi aplikasi pemandu wisata digital, proyek ini juga mendukung pariwisata berkelanjutan dengan mengurangi konsumsi kertas. Secara keseluruhan, smart card ini diharapkan memodernisasi industri pariwisata, menjadikannya lebih efisien, aman, dan ramah lingkungan.
</div>

    
# **Dokumentasi**
<iframe width="560" height="315" 
src="https://www.youtube.com/embed/fNUoVDCHaOI?si=5MJCHKxAmkKVo50c"
title="" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

# **PPT**
<div style="text-align:justify;">
  
https://www.canva.com/design/DAGH18w_QRU/Rg-yEG7aS7Gnep1boRfArQ/edit?utm_content=DAGH18w_QRU&utm_campaign=designshare&utm_medium=link2&utm_source=sharebutton
    
</div>
