# Laporan Proyek Sistem Kendali Posisi Tirai Otomatis Berbasis Sensor Cahaya Menggunakan PID
Mata Kuliah: Embedded System
Tanggal: 12 Juni 2025
## Nama Kelompok
* Ihsan Mu'tashim / 1103223175
* Sulthon Chaidir Ali / 1103210233
* Topaz Tauhid / 1103202020
## Daftar Isi
> [TOC]
## 1. Pendahuluan
Dalam era teknologi modern, sistem otomatis menjadi sangat penting untuk meningkatkan kenyamanan dan efisiensi di berbagai aspek kehidupan sehari-hari. Salah satu implementasi teknologi yang menarik adalah pengendalian otomatis pada perangkat rumah tangga, seperti tirai otomatis. Proyek ini bertujuan untuk mengembangkan sistem kendali posisi tirai berbasis mikrokontroler menggunakan metode PID (Proportional-Integral-Derivative), yang dilengkapi dengan sensor cahaya (LDR) dan motor servo. Sistem ini dirancang untuk menstabilkan intensitas cahaya yang masuk ke ruangan dengan mengatur posisi tirai secara otomatis.
### 1.1 Latar Belakang
Teknologi Kendali Otomatis dalam Kehidupan Modern Penggunaan sensor cahaya yang dikombinasikan dengan motor servo pada platform mikrokontroler membuka berbagai peluang inovasi, seperti:
#### - Manajemen Energi
- Mengurangi penggunaan energi listrik dengan mengoptimalkan pencahayaan alami.
#### - Kenyamanan Rumah Tangga
- Mengatur intensitas cahaya ruangan secara otomatis sesuai dengan preferensi pengguna.
#### - Efisiensi Kerja
- Meminimalkan kebutuhan interval manual dalam pengaturan tirai.
#### - Menghemat Biaya Listrik
- Cahaya yang digunakan menggunakan pencahayaan alami menggunakan cahaya matahari sehingga meminimalisir penggunaan lampu.
### 1.2 Aplikasi Sistem Tirai Otomatis
Pengendalian tirai berbasis sensor cahaya dan motor listrik dapat digunakan dalam berbagai skenario, seperti:
#### - Perkantoran
- Mengatur cahaya alami untuk meningkatkan produktivitas tanpa membebani sistem pencahayaan ruangan. Sehingga menghemat pengeluaran biaya terutama pada pengeluaran biaya listrik.
#### - Gedung Ramah Lingkungan
- Mengoptimalkan cahaya alami untuk mencapai efisiensi energi. Gedung ramah lingkungan ini juga dapat meminimalisir usaha yang besar para pekerja dalam membuka tirai dengan manual dari setiap lantai ruangan.
#### - Rumah Pintar
- Memadukan teknologi kendali tirai dengan sistem rumah pintar lainnya seperti pengendali suhu dan keamanan. Kasus ini bisa sangat bermanfaat saat rumah ditinggal.
### 1.3 Tujuan
#### - Stabilitas Intensitas Cahaya
Sistem ini dirancang untuk mengontrol posisi tirai guna menjaga intensitas cahaya dalam ruangan pada tingkat yang diinginkan.
#### - Respons Cepat terhadap Perubahan Cahaya
Sensor LDR akan mendeteksi perubahan intensitas cahaya secara real-time dan mengirimkan sinyal ke motor servo untuk menyesuaikan posisi tirai.
#### - Pengendalian yang Akurat
Dengan menggunakan PID, sistem mampu memberikan kendali yang stabil dan meminimalkan kesalahan posisi tirai.
## 2. Desain Sistem
### 2.1 Rancangan Sistem Kendali Loop Tertutup PID
Teori yang digunakan pada sistem proyek Tirai Otomatis Berdasarkan Intensitas Cahaya menggunakan rancangan sistem kendali closed loop. Rangkaian ini digunakan karena adanya sistem yang melakukan feedback untuk menyesuaikan input dengan set point yang ditentukan. Set point pada sistem ini adalah menyesuaikan nilai persentase intensitas cahaya.
Metode yang digunakan pada pengamatan sistem ini menggunakan metode Reaction Curves dengan mengamati dua grafik saling bereaksi antara persentase cahaya dengan sudut yang bergerak sampai nilai set point tercapai secara bertahap.

> Gambar close loop system pada sistem rancangan Tirai Otomatis Menggunakan PID
Deskripsi:
- Input: Setpoint persentase intensitas cahaya dengan menggunakan input nilai resistansi [Cahaya(%) = 100 - ((LDR / 1023.0) * 100.0)].
- Pengendali PID: Menyesuaikan derajat tujuan berdasarkan pada error setpoint.
- Plant: Motor Servo
- Output: Nilai Error yang direpresentasikan pada derajat motor servo dengan persentase target nilai presentasi intensitas cahaya = 90% (target bisa disesuaikan dengan program yang diinginkan).
### 2.2 Persamaan PID dan metode tuning
$$
u(t)=Kpe(t)+Ki∫0te(τ)dτ+Kdde(t)dtu(t)=Kpe(t)+Ki∫0te(τ)dτ+Kddtde(t)
$$
Kp: Gain Proportional
Ki: Gain Integral
Kd: Gain Derivatif
Metode tuning PID pada sistem proyek Tirai Otomatis berdasarkan Intensitas cahaya parameter PID menggunakan metode Reaction Curves dengan pendekatan Ziegler-Nichols dengan keterangan nilai PID dibawah ini.
Peningkatan Nilai PID:
- Kp terlalu tinggi: Servo akan berosilasi dan bereaksi berlebihan.
- Ki terlalu tinggi: Servo akan overshoot dan berosilasi.
- Kd terlalu tinggi: Servo menjadi lambat dan responsnya menurun.
Penurunan Nilai PID:
- Kp terlalu rendah: Servo bergerak lambat dan tidak responsif.
- Ki terlalu rendah: Error akumulasi tetap ada (bias).
- Kd terlalu rendah: Servo dapat berosilasi karena kurangnya stabilitas.
### 2.3 Mekanik Motor Servo
Teori dari fungsi transfer dari proyek Tirai Otomatis Menggunakan Sensor Cahaya LDR menggunakan PID berdasarkan input nilai analog resistansi. Dikarenakan nilai dari resistansi bersifat analog, nilai yang dihasilkan cenderung terjadi osilasi yang berlebihan. Oleh karena itu input nilai analog dari resistansi LDR kemudian nilainya diubah menjadi persentase nilai cahaya pada Arduino IDE sehingga nilai yang dihasilkan menjadi deskrit dan lebih mudah untuk melakukan pengamatan serta analisis. Reaksi ini bisa diamati menggunakan metode Reaction Curves karena output pada derajat servo akan bereaksi saat persentase intensitas melakukan gerak menuju set point.
Mekanik dari kerja sistem ini adalah menginput sinyal analog dari sensor LDR yang dihitung secara matematis kemudian sinyal tersebut ditentukan pada set poin misalnya pada persentase intensitas 90% pada persentase tertentu. Saat nilai persentase tercapai, maka servo akan bergerak 90 derajat keatas membuka tirai secara bertahap.
## 3. Pengujian Sistem
Tuning PID pada sistem proyek Tirai Otomatis berdasarkan Intensitas cahaya parameter PID menggunakan metode Reaction Curves dengan pendekatan Ziegler-Nichols. Dengan menganalisis nilai pada 2 grafik yang saling bereaksi
### 3.1 Analisis Transient Respon (PID)
**Kodingan Arduino**
```
#include <Servo.h>
// Deklarasi pin dan variabel
Servo servo;
const int pinLDR = A0; // Pin untuk LDR
const int servoPin = 9; // Pin servo
// PID constants
float Kp = 2.0; // Proportional gain
float Ki = 0.1; // Integral gain
float Kd = 1.0; // Derivative gain
// PID variables
float setpoint = 85.0; // Target intensitas cahaya (50%)
float error = 0.0; // Error saat ini
float prevError = 0.0; // Error sebelumnya
float integral = 0.0; // Akumulasi error
float derivative = 0.0; // Perubahan error
int posisiServo = 90; // Posisi servo saat ini
const float errorThreshold = 5.0; // Toleransi error ±5%
void setup() {
servo.attach(servoPin); // Hubungkan servo ke pin D9
servo.write(0); // Posisi awal servo
Serial.begin(9600); // Untuk Serial Plotter
}
void loop() {
// Baca nilai LDR dan hitung intensitas cahaya
int nilaiLDR = analogRead(pinLDR);
float intensitasCahaya = 100 - ((nilaiLDR / 1023.0) * 100.0); // Persentase intensitas cahaya
// Hitung error PID
error = setpoint - intensitasCahaya; // Error antara setpoint dan nilai aktual
integral += error; // Akumulasi error untuk komponen integral
derivative = error - prevError; // Perubahan error untuk komponen derivatif
// PID output
float pidOutput = (Kp * error) + (Ki * integral) + (Kd * derivative);
// Periksa apakah error berada dalam toleransi threshold ±5%
if (abs(error) > errorThreshold) {
// Tentukan target posisi servo berdasarkan intensitas cahaya
int posisiTarget;
if (intensitasCahaya < setpoint) {
posisiTarget = 90; // Gelap: Servo di posisi 90°
} else {
posisiTarget = 0; // Terang: Servo di posisi 0°
}
// Batasi perubahan posisi servo untuk membuat gerakan lebih halus
if (posisiServo < posisiTarget) {
posisiServo += min(int(pidOutput), 1); // Naikkan posisi bertahap
} else if (posisiServo > posisiTarget) {
posisiServo -= min(abs(int(pidOutput)), 1); // Turunkan posisi bertahap
}
// Pastikan posisi servo tetap dalam rentang 0° hingga 90°
posisiServo = constrain(posisiServo, 0, 90);
// Gerakkan servo ke posisi baru
servo.write(posisiServo);
}
// Simpan error sebelumnya
prevError = error;
// Kirim data ke Serial Plotter
Serial.print(intensitasCahaya); // Intensitas cahaya
Serial.print("\t");
Serial.print(error); // Error
Serial.print("\t");
Serial.println(posisiServo); // Posisi servo
delay(50); // Waktu jeda untuk memperhalus gerakan
}
```
Gambar plot
Grafik 1: Nilai Respon sistem terhadap perubahan setpoint pada intensitas 85 % dengan (P = 2, ; I = 0, ; D = 1)

Berikut 20 sampel pengujian nilai PID.
| Setpoint Intensitas (%) |Kp|Ki|Kd| Delay time (Td) | Rise time (Tr) | Peak time (Tp) | Settling time (Ts) |
| ---------------- | --------------- | -------------- | -------------- | ------------------| -------------- | -------------- | ------------------|
|85|2|0.1|1|4,8|4,9|5|5,2
|85|3|1.1|1.2|4,74|4,8|5,09|5,8
|85|2,08|1,65|1,94|4,76|4,84|5,03|5,72
|85|1,03|4,57|3,52|4,76|4,75|4,92|4,88
|85|1,89|1,8|1,58|4,65|4,72|4,92|5,88
|85|1,27|1,26|3,72|4,66|4,72|4,93|5,54
|85|1,37|3,7|3,58|4,72|4,79|4,99|5,42
|85|3,06|2,06|4,68|4,7|4,96|5,12|5.25
|85|4,59|2,74|1,02|4,86|4,85|5,14|5,5
|85|1,98|4,19|1,24|4,64|4,74|5,05|5,83
|85|3,35|4,65|2,34|4,73|4,77|5,18|5,49
|85|2,56|1,93|3,19|4,89|4,92|5,14|5,33
|85|4,46|2,94|3,69|4,71|4,78|4,96|5,72
|85|1,42|3,03|2,37|4,7|4,91|5,13|5,19
|85|2,4|3,58|4,18|4,74|4,86|4,96|5,87
|85|1,36|3,48|2,01|4,88|4,97|5|5,47
|85|3,41|2,2|4,42|4,68|5|4,92|5,81
|85|4,02|3,42|4,9|4,64|4,91|4,95|5,52
|85|4,32|1,17|1,06|4,74|4,96|5,16|5,17
|85|2,01|1,04|3,72|4,6|4,79|5,04|5,83
Pengukuran ulang setelah dilakukan tuning PID
Contoh gambar Plot
Grafik 2: Perbandingan hasil tuning PID
(P = 2; I = 0.1; D = 1)

(p = 3; i = 1.1; D = 1.2)

### 3.2 Analisis Mekanik Gear Motor Servo
Analisis mekanik gerak servo berdasarkan jarak tempuh waktu yang dibutuhkan pada derajat tujuan dengan bergerak sebanyak 90 derajat. Berikut spesifikasi beserta pengukuran pengujian.
The steering gear has three line definitions:
Dark gray : GND
Red: VCC 4.8-7.2V
Orange wire : pulse input
Servo cable length 20CM
Size: 23mmX12.2mmX29mm
Weight: 9 grams
Torque: 1.5kg/cm
Working voltage: 4.2-6V
Temperature range: 0℃ –55 ℃
Operating speed: 0.3 seconds/60 degrees
(sumber : https://store.ichibot.id/product/motor-micro-servo-sg90/)
|Intensitas Cahaya (%) | Degree Servo (°) | Massa pada Servo (g) | Waktu tempuh (s) |
| ----- | ----- | ------ | ----- |
|85%|90°|0|4,14|
|85%|90°|6|4,4|
(Grafik waktu tempuh tanpa massa)

(Grafik waktu tempuh dengan massa)

Dari kedua grafik sampel tersebut, waktu tempuh pada servo tanpa massa lebih cepat daripada menggunakan massa. Massa dari servo ini disebabkan dari batang besi dan kain yang ada pada servo. Sehingga mengahambat gerak servo untuk bergerak ke derajat tujuan.
### 3.3 Analisis Hasil
Sistem menunjukkan kestabilan setelah tuning parameter PID pada sistem ini menstabilkan steady state error pada 85 % dengan error 5% berhasil diminimalkan. Ada beberapa kasus saat nilai P dinaikan secara berlebih akan menghasilkan osilasi pada saat ingin masuk ke steady state. Kerja sistem dari rise time masih dalam batas wajar saat mengangkat tirai yang tidak terlalu lama pada nilai dibawah 5 detik.
Ada beberapa masalah pada saat melakukan perhitungan error karena sinyal yang diinputkan adalah sinyal analog sehingga pada saat servo menentukan derajat. Hal ini menyebabkan nilai osilasi pada derajat servo yang tidak stabil. Sehingga nilai input, harus diubah dalam bentuk persentase intensitas agar menjadi nilai deskrit.
## 4. Evaluasi kinerja sistem
Parameter yang digunakan pada PID sudah optimal, karena PID bisa membuat nilai pada error state sesuai dengan kebutuhan. PID pada sistem ini sudah teruji dalam beberapa kali tes dengan intensitas berbeda - beda dengan nilai error yang berbeda.
Sistem pada sistem ini juga stabil, karena PID telah ditambahkan pada sistem ini yang membuat sistem tidak terjadi drift pada saat menggunakan tirai otomotis. Hal ini bisa dibuktikan saat diuji, tirai membuka secara bertahan mulus dan bertahap tanpa ada terjadinya osilasi yang berlebihan.
Berdasarkan hasil pengujian, parameter PID yang dirancang menunjukkan performa optimal dalam mengendalikan motor servo. Hal ini ditunjukkan oleh:
1. Nilai steady-state error yang stabil dan tidak berosilasi berlebihan pada grafik pengujian
2. Respon waktu rise time yang masuk akal dengan membuka tirai dibawah 5 detik
3. Overshoot tidak terlalu tinggi sehingga sistem bisa menstabilkan gerak servo pada saat membaca intensitas
## 5 Hasil dan Saran
### 5.1 Kesimpulan
Kendali PID pada motor servo berhasil diimplementasikan dengan baik. Saat pengujian nilai yang dihasilkan cukup akurat antara pembacaan input persentase intensitas cahaya mencapai steady state error dengan output yang dihasilkan oleh servo bergerak sesuai dengan derajat tanpa terjadinya osilasi berlebihan.
Kinerja sistem ini juga baik dengan adanya overshoot yang tidak berlebihan dengan waktu yang dibutuhkan untuk nilai steady state error yang minimal.
### 5.2 Rekomendasi
Pada proyek Tirai Otomatis Berdasarkan Intensitas Cahaya ada beberapa rekomendasi agar sistem ini lebih baik. Berikut rekomendasi agar sistem lebih baik.
- Mengubah nilai analog input LDR menjadi nilai deskrit intensitas cahaya.
- Menggunakan sistem buka tutup tirai tarik menggunakan motor DC (jika ada)
- Mengatur nilai PID sesuai dengan kebutuhan untuk menentukan jangka waktu membuka tirai
- Menentukan steady state error sesuai dengan intensitas di daerah sekitar
## Dokumentasi Proyek
Foto Implementasi:
Video Demonstrasi:
[[Link Video Proyek](https://youtu.be/56I-_93IzLg)]
{%youtube https://youtu.be/RatsHQseEUo%}
## Referensi
Tanza, N., & Sumariyah. (2019). Rancang Bangun Sisitem Kendali PID untuk Intensitas Lampu DC Menggunakan Mikrokontroler Arduino Uno, Berkala Fisika Vol. 22, No. 1, Januari 2019, Hal. 32-40
Sudimanto. (2014). Perancangan Alat Pembuka Tirai Otomatis, Media Informatika Vol.13 No.3 (2014)
Olegun. (2021, 25 Maret). Miniatur gorden menggunakan nodemcu. Diakses pada 25 Desember 2025, dari https://www.youtube.com/watch?v=GIVFTI83F6E