# Smart Door Lock
## Nama anggota kelompok
* Dwi Putra Sopar Siagian(1103210220)
* Abdul Hakim(1103213214)
* Fadel Muhammad(1103213062)
* Syahla Setia Pratiwi(1103220028)
* Sulthon Chaidir Ali(1103210233)
* Kinanti Aria Widaswara(1103213165)
## Daftar isi
[TOC]
> **[CLO 4]** Memiliki kemampuan untuk menganalisis sistem kendali loop tertutup pada kondisi transien dan steady state untuk melihat performansinya.
> **[CLO 5]** Memiliki kemampuan merancang sistem kendali motor DC.
## Pendahuluan
Dalam era digital yang terus berkembang, kebutuhan mengenai keamanan semakin meningkat.Salah satu inovasi yang muncul adalah *smart door lock*. *Smart door lock* merupakan solusi modern unutk meningkatkan keamanan rumah. Dalam project kali ini, kami membuat *smart door lock* menggunakan RFID sebagai salah satu solusi keamanan.
## Latar Belakang
#### Teknologi dan Kinerja
Motor servo modern terdiri dari motor listrik, kontroller, dan sensor feedback. Teknologi ini memungkinkan motor untuk mengontrol posisi, kecepatan, dan torsi.
#### Aplikasi dalam Robotika
Di dunia robotika, motor servo memainkan peran vital dalam penggerak lengan robot, gripper, dan berbagai alat gerak lainnya.
## Tujuan
Tujuan dari proyek ini adalah merancang dan mengembangkan sebuah sistem kunci pintu pintar yang menggunakan metode Pengendalian Proporsional-Integral-Derivatif (PID) untuk mengoptimalkan kinerja buka-tutup pintu. Sistem PID digunakan karena kemampuannya dalam memberikan kendali yang presisi dan stabil, yang sangat penting dalam aplikasi kunci pintu.
## Rancangan Sistem *Close-Loop* PID
Proportional, Integral, dan Derivatif atau yang disingkat sebagai PID adalah mekanisme pengendalian yang digunakan dalam sistem kontrol untuk mengatur variabel tertentu agar mencapai nilai target dengan memperhitungkan tiga nilai: Proportional, Integral, dan Derivatif. Berikut adalah penjelasan lebih rinci tentang nilai PID pada *smart door lock*:
- Kontrol Proporsional
Nilai P akan mengukur seberapa jauh eror antara nilai target dan nilai yang sebenarnya. Disini yang menjadi nilai target adalah servo dapat bergerak sebesar 90° untuk membuka pintu saat pengguna telah melewati autentikasi. Ketika eror yang terjadi
- Kontrol Integral
Nilai I akan mengatasi kesalahan akumulatif dari masa lalu, membantu menghilangkan offset yang tersisa. Nilai I adalah pelengkap dari nilai P. Dari perhitungan nilai P, tentu saja akan ada kesalahan perhitungan yang terjadi. Maka dari itu, fungsi nilai I adalah untuk mengkoreksi error-error kecil yang tidak dapat dilakukan oleh nilai P.
- Kontrol Derivatif
Nilai D akan menyedikan respon berdasarkan laju perubahan kesalahan, membantu memperbaiki respon sistem dan mengurangi osilasi. Nilai D merupakan perbedaan dari nilai P. Nilai P akan membuat tangan servo berputar lebih cepat, sedangkan nilai D akan mengurangi kecepatan pergerakan. Hal ini karena nilai D akan mereduksi *overshoot* dari tangan sehingga pengarahan tangan servo lebih kuat
#### Gambar Diagram Close Loop

Dari gambar Diagram Close Loop berikut merupakan beberapa penjelasn dari setiap bagian:
1. Set Point: nilai derajat yang ditentukan untuk servo motor
2. Mikrokontroller: Mikrokontroller yang digunakan adalah Arduino Uno karena tidak memerlukan komputasi yang sangat besar
3. Actuator: Komponen penggerak di alat ini adalah Servo Motor SG90
4. Process: Proses yang dilakukan pada alat ini adalah pergerakan tangan servo kearah derajat yang sudah ditentukan dalam kode
5. Controlled Variable: variable terkontrol dari alat ini adalah derajat yang telah ditentukan
6. sensor: Sensor yang digunakan adalah Sensor RFID
7. Process Variable: Variable terprosesnya adalah pintu terbuka 90°
## Mekanik Motor Servo
Fungsi transfer pada sistem ini merupakan representasi matematis dari hubungan input-output dalam domain waktu dan frekuensi. Input sistem ini adalah sinyal dari pembaca RFID, sedangkan outputnya adalah posisi dari motor servo.
### Kodingan Arduino
```
#include <LiquidCrystal_I2C.h>
#include <MFRC522.h>
#include <SPI.h>
#include <Servo.h>
#include <PID_v1.h>
#define RST_PIN A3
#define SS_PIN 10
#define SERVO_PIN A0
MFRC522 mfrc522(SS_PIN, RST_PIN);
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo myServo;
byte authorizedUID[][4] = {
{0x68, 0x31, 0x4A, 0x53},
{0x35, 0x3A, 0x26, 0x52},
};
const int authorizedUIDCount = sizeof(authorizedUID) / sizeof(authorizedUID[0]);
double Setpoint = 0;
double Input = 0;
double Output = 0;
double Kp = 0;
double Ki = 0 ;
double Kd = 0;
PID pid(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);
void setup() {
Serial.begin(115200);
while (!Serial);
SPI.begin();
mfrc522.PCD_Init();
delay(4);
mfrc522.PCD_DumpVersionToSerial();
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Tempelkan kartu");
myServo.attach(SERVO_PIN);
myServo.write(0); // Set initial servo position to closed
pid.SetMode(AUTOMATIC);
}
void loop() {
readRFID();
}
void readRFID() {
if (mfrc522.PICC_IsNewCardPresent()) {
if (mfrc522.PICC_ReadCardSerial()) {
mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
if (isAuthorized(mfrc522.uid.uidByte)) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Kartu terbaca");
delay(1000);
unlockDoor();
} else {
handleRFIDError();
}
}
}
}
bool isAuthorized(byte* uid) {
for (int i = 0; i < authorizedUIDCount; i++) {
bool match = true;
for (int j = 0; j < mfrc522.uid.size; j++) {
if (uid[j] != authorizedUID[i][j]) {
match = false;
break;
}
}
if (match) {
return true;
}
}
return false;
}
void handleRFIDError() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Gagal membaca kartu");
lcd.setCursor(0, 1);
lcd.print("Coba lagi...");
delay(2000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Tempelkan kartu");
}
void unlockDoor() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Membuka pintu...");
Setpoint = 60; // Set servo setpoint to open position (adjust as necessary)
// Wait until servo reaches setpoint
while (abs(Setpoint - Input) > 2) {
Input = myServo.read();
pid.Compute();
myServo.write(60);
delay(15);
}
delay(2000); // Keep the door open for 2 seconds
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Pintu terbuka");
Setpoint = 0; // Set servo setpoint back to closed position
delay(2000); // Keep the door open for 5 seconds
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Menutup pintu...");
// Wait until servo reaches closed position
while (abs(Setpoint - Input) > 2) {
Input = myServo.read();
pid.Compute();
myServo.write(0);
delay(15);
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Pintu tertutup");
delay(2000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Tempelkan kartu");
}
void updatePID() {
Input = myServo.read();
pid.Compute();
myServo.write(1);
}
```
### Percobaan nilai-nilai PID
* Nilai Kp= 0 Kd= 0 Ki= 0

* Nilai Kp = 1 Kd= 2 Ki= 4

Berdasarkan hasil percobaan bentuk grafik yang dihasilkan tidak memiliki perbedaan.
**Analisis Hasil Percobaan**
Gambar 1
Gambar pertama menunjukkan grafik yang berfluktuasi dengan pola yang menurun secara periodik. Fluktuasi ini menunjukkan adanya osilasi dalam sistem. Amplitudo osilasi terlihat besar di awal dan perlahan mengecil seiring waktu, menunjukkan bahwa sistem sedang berusaha mencapai kestabilan tetapi masih dalam proses penyesuaian.
Gambar 2
Gambar kedua juga menunjukkan grafik yang mirip dengan gambar pertama dengan pola yang sama, yaitu fluktuasi yang menurun secara periodik. Namun, perbedaannya adalah bahwa amplitudo osilasi lebih kecil dibandingkan dengan gambar pertama. Ini menunjukkan bahwa sistem lebih cepat dalam mencapai kestabilan dan mengalami lebih sedikit osilasi.
Kesimpulan
Dari analisis kedua gambar, dapat disimpulkan bahwa pengaturan PID pada gambar kedua lebih optimal dibandingkan gambar pertama. Ini menunjukkan bahwa tuning PID yang lebih tepat menghasilkan sistem yang lebih stabil dan responsif. Untuk aplikasi smart lock door, disarankan untuk terus memantau dan menyesuaikan parameter PID untuk mencapai performa yang optimal.
## Analisis Mekanika
### Pengukuran Mekanik Gear
Proyek kecil ini menggunakan motor servo Tower Pro SG90 sebagai actuator. Di dalam motor servo ini terdapat motor dan gir. Berdasarkan spesifikasi, motor servo ini dapat memberi torsi henti (torsi ketika tidak berputar) sebesar 1,6 kg/cm.
Motor memberi gaya putaran yang dari energi listrik menjadi gerakan mekanika dengan adanya medan magnet. Gaya putaran tersebut dihubungkan dengan gir kecil (driver gear), yang dihubungkan ke gear train (driven gear). Adanya hubungan gir membentuk gear ratio, dan gear ratio mempengaruhi besarnya torsi yang dapat dihasilkan oleh putaran.
Hubungan antara rasio gear, torsi, dan kecepatan putaran:
Semakin kecil driver gear dibanding driven gear, maka torsi akan semakin besar, namun putaran semakin lambat. Dengan susunan ini kita dapat menghasilkan torsi yang besar dari torsi motor awal yang kecil.
Semakin besar driver gear dibanding driven gear, maka torsi akan semakin kecil, namun putaran semakin cepat. Dengan susunan ini kita dapat menghasilkan lebih banyak putaran.
Rasio gir pada motor servo SG90 adalah 1:60, yang berarti torsi output merupakan 60 kali lipat dari torsi input
1,6 kg/cm = Input Torque*60
Input Torque = 0,026 Kg/cm
di dalam proyek kecil ini, torsi tidak berpengaruh karena servo tidak mengangkat sebuah beban, hanya berputar sesuai posisi set point saja
## Hasil dan Saran
### Hasil
Hasil yang kami dapatkan dalam pengujian kali ini berupa efek PID pada alat ini. Apabila nilai-nilai dari PID tersebut diubah maka akan merubah kecepatan gerak servo motor SG90. Pada pengujian ini, nilai PID yang cocok untuk digunakan secara berurut 1, 2,dan 4. Hal ini karena kecepatan servo yang cukup kencang dengan akurasi yang sangat besar.
### Saran
Berikut ini merupajan beberapa saran apabila ingin mengaplikasikan PID pada alt ini dan apabila ingin menambahkan inovasi:
#### Tuning Parameter PID
1. Proportional (P):
Menentukan respons langsung terhadap perbedaan antara set point dan posisi kunci.
Nilai P yang lebih tinggi memberikan respons cepat, tetapi bisa menyebabkan osilasi jika terlalu tinggi.
2. Integral (I):
Menentukan akumulasi kesalahan dari waktu ke waktu untuk mengatasi offset atau error steady-state.
Nilai I yang terlalu tinggi dapat menyebabkan integrator windup dan membuat sistem tidak stabil.
3. Derivative (D):
Menentukan respons terhadap perubahan kecepatan error, membantu meredam osilasi.
Nilai D yang tinggi bisa menyebabkan noise amplifikasi, sehingga harus dituning dengan hati-hati.
#### Implementasi dan Pengujian
1. Implementasi PID:
Gunakan microcontroller atau mikrokontroler seperti Arduino atau STM32 untuk mengimplementasikan algoritma PID.
Pastikan loop kontrol PID berjalan pada frekuensi yang cukup tinggi untuk respons yang cepat.
2. Pengujian:
Uji sistem dengan berbagai kondisi (beban pintu yang berbeda, suhu yang berbeda, dll.).
Pantau respons sistem terhadap perubahan set point dan gangguan eksternal.
#### Pemeliharaan dan Pembaruan
1. Pemeliharaan rutin:
Lakukan pemeliharaan rutin pada sensor dan aktuator untuk memastikan mereka berfungsi dengan baik.
Kalibrasi ulang sistem secara berkala untuk menjaga akurasi.
2. Pembaruan Perangkat Lunak:
Perbarui algoritma kontrol dan firmware untuk mengatasi bug dan meningkatkan kinerja berdasarkan feedback dan analisis pengguna.
Dengan mengikuti langkah-langkah ini, aplikasi PID pada sistem smart lock door dapat memberikan kinerja yang lebih baik, meningkatkan keamanan dan kenyamanan bagi pengguna.
## Video
<iframe src="https://drive.google.com/file/d/1sb-ZWnF79p8e5AZEOuVIAAeLGOvz18KB/preview" width="640" height="480" allow="autoplay"></iframe>
## referensi
(https://www.majju.pk/product/tower-pro-micro-servo-9g-sg90-180-degree/#:~:text=Operating%20voltage%3A%204.8%2D6V,Gear%20ratio%3A%201%3A60)