---
# System prepended metadata

title: Template Laporan Proyek Sistem Kendali PID pada Motor Listrik (Tugas Besar CLO 2 dan CLO 3)

---

# Laporan Proyek Sistem Kendali PID pada Motor Listrik (Tugas Besar CLO 2 dan CLO 3)

**Mata Kuliah:** Sistem Kendali dan Mekanika (ACK3AB3)
**Dosen:** FCB
**Semester/Tahun:** Ganjil 2025/2026
**Kelas:** TK-47-03

---

## Identitas Asesmen & Capaian Pembelajaran (OBE)

**Bentuk Asesmen:** Tugas Besar CLO2 dan Tugas Besar CLO3
**Metode:** *Project-Based Learning (PjBL)*
**Level 3 AI [*Editing*]**: AI hanya untuk perbaikan tulisan, tanpa konten baru. Lampirkan *prompt* dan hasil lengkap *generate* AI jika menggunakan AI, serta nama *tools* AI yang digunakan.

### Pemetaan *Program Learning Outcome* (CPL - Capaian Pembelajaran Lulusan) dan *Course Learning Outcome* (CPMK - Capaian Pembelajaran Mata Kuliah)
Laporan Tugas Besar ini mengukur ketercapaian dua PLO utama sesuai RPS untuk memvalidasi ketercapaian dua CLO:

* **[PLO-3]** Kemampuan menyusun rancangan komponen, sistem dan/atau proses pada bidang teknik komputer untuk memenuhi kebutuhan yang diharapkan di dalam batasan-batasan realistis.
    * *Fokus:* Perancangan parameter kendali (*tuning*) dan analisis kestabilan sistem.
      * **[CLO-2]:** Mampu menyusun rancangan dan menganalisis sistem kendali loop tertutup dari kondisi transien hingga steady state untuk mencapai kestabilan.
        * *(Dinilai dari Laporan Bab 1, 2, dan 4: Desain, Pemodelan, dan Analisis Grafik)*
* **[PLO-6]** Kemampuan menerapkan metode, keterampilan dan piranti teknik modern yang diperlukan untuk praktek keteknikan dalam bidang teknik komputer.
    * *Fokus:* Implementasi algoritma pada mikrokontroler dan penggunaan sensor/driver motor.
        * **[CLO-3]:** Mampu menentukan dan menerapkan penggunaan kendali proporsional, integral, atau derivatif pada motor listrik untuk mencapai kestabilan.
            * *(Dinilai dari Laporan Bab 3 dan Demonstrasi Alat: Implementasi Hardware & Tuning PID)*
---

**IDENTITAS KELOMPOK:**
* **Kelompok 1:** Elevator
* **Najwan Muhammad Fadhlan (101032300097)** 
* **Dimas Judanto Syaputra (101032300162)** 
* **Qinthar Amartyanurrahman Rabbani (101032300221)** 
* **Muhammad Bara'Alim (101032300228)** 
* **Dzul Fadhil Sofyan (101032300236)** 

---

## Daftar Isi
1.  Pendahuluan
2.  Desain dan Pemodelan Sistem
3.  Implementasi dan Pengujian
4.  Evaluasi dan Analisis Kinerja
5.  Kesimpulan dan Saran
6.  Lampiran/Dokumentasi

---

## 1. Pendahuluan

### 1.1 Latar Belakang
Pengendalian motor diperlukan untuk memastikan sistem mekanika dapat bergerak secara stabil dan presisi. Pada sistem elevator, dinamo digunakan sebagai aktuator utama untuk mengubah energi listrik menjadi gerakan mekanik yang menggerakkan kabin naik dan turun. Tanpa pengendalian yang baik, dinamo dapat menghasilkan kecepatan yang tidak terkontrol, menyebabkan osilasi, ketidaktepatan posisi berhenti, serta berisiko menurunkan tingkat keselamatan dan kenyamanan.

Pengendalian dinamo banyak diterapkan pada berbagai bidang seperti sistem elevator dan lift barang di industri, aktuator pada sistem robotika, serta peralatan otomatis dalam kehidupan sehari-hari. Di bidang industri, dinamo digunakan pada conveyor dan crane, sedangkan pada robotika berfungsi menggerakkan lengan pada robot secara akurat.

Oleh karena itu, diperlukan sistem kendali yang mampu mengatur kecepatan dan posisi dinamo sesuai set point yang diinginkan. Kendali PID digunakan karena mampu meningkatkan kestabilan sistem, mempercepat respon, dan meminimalkan error, sehingga sesuai untuk diterapkan pada sistem elevator.

### 1.2 Tujuan (*sesuaikan isinya dengan proyek kelompok*)
1.  Merancang sistem kendali tertutup (*Closed Loop*) menggunakan metode PID.
2.  Menganalisis respon transien sistem (*Rise time, Settling time, Overshoot*).
3.  Menguji ketahanan (*robustness*) sistem terhadap gangguan eksternal.

### 1.3 Spesifikasi Desain (Target *Performance*)
*(Isi target ini SEBELUM melakukan tuning. Ini adalah acuan keberhasilan proyek).*

| Parameter Kinerja | Simbol | Target Nilai | Alasan/Justifikasi (Mengapa memilih angka ini?) |
| :--- | :---: | :--- | :--- |
| **Settling Time** | $T_s$ | < 2 detik | Ketinggian maksimal elevator yang dibuat hanya 40 cm, dengan tinggi kotak elevatornya 10 cm. Oleh karena itu, jarak tempuh maksimal elevator hanya 30 cm. Untuk menempuh jarak tersebut, motor DC membutuhkan torsi dan putaran yang cukup cepat. Waktu 2 detik dipilih agar menghindari ausnya roda gigi pada motor DC jika terlalu lama berputar cepat. |
| **Max. Overshoot** | $M_p$ | < 5 % | Kasus overshoot disini menyebabkan elevator melewati titik yang ditentukan. Ketika naik dan terjadi overshoot, elevator juga dapat tersangkut di atas. Overshoot terjadi karena delay pembacaan jarak aktual elevator oleh sensor HC-SR04 yang mengakibatkan motor DC telat memperlambat putarannya. Target nilai 5% dipilih agar koreksi sistem dapat lebih cepat dengan tetap memperhitungkan delay sensor. |
| **Steady State Error** | $e_{ss}$ | 5 % | Permukaan yang tidak rata pada alas kotak elevator mengakibatkan pembacaan jarak oleh sensor HC-SR04 kurang akurat. |
| **Kriteria Kestabilan** | - | 2% atau 5% | Sistem menggunakan sensor HC-SR04 yang memiliki delay cukup tinggi menyebabkan terlambatnya perhitungan PWM yang akurat untuk mencapai kestabilan sistem. Oleh karena itu, target 5 % dipilih karena lebih mudah untuk dicapai.|

---

## 2. Desain dan Pemodelan Sistem

### 2.1 Diagram Blok Sistem
![BD SKM Elevator.drawio](https://hackmd.io/_uploads/HJMmIOoNZg.png)

Diagram blok menunjukkan sistem kedali tertutup, dimana set point sistem adalah target ketinggian elevator. Ketinggian aktual elevator diukur menggunakan sensor HC-SR04 lalu dibandingkan dengan nilai setpoint awal. Selisih akan diproses oleh mikrokontroller menghasilkan keluaran PWM ke driver TB6612FNG untuk mengatur kecepatan dan arah putaran motor DC. .

### 2.2 Pemodelan Matematis (Theoretical Modeling)

Bagian ini bertujuan untuk menunjukkan landasan teori sistem kendali yang digunakan. Sertakan referensi dari buku, jurnal bereputasi, dan/atau *datasheet*.

**A. Model Algoritma Kontroler (PID)**
Persamaan matematis kontroler PID yang diimplementasikan:
$$u(t) = K_p e(t) + K_i \int e(t) dt + K_d \frac{de(t)}{dt}$$
Dimana $u(t)$ merupakan sinyal kendali yang diberikan ke aktuator, $e(t)$ adalah error atau selisih antara nilai setpoint dan nilai aktual sistem, $K_p$ merupakan gain proporsional untuk mempercepat respon, $K_i$ merupakan gain integral untuk menghilangkan steady-state error, dan $K_d$ merupakan gain derivatif untuk mengurangi overshoot

Bentuk diskrit dari persamaan di atas dinyatakan sebagai berikut:
$$u[k]=K_p\,e[k]+K_i \sum_{i=0}^{k}e[i]\,T_s+K_d \frac{e[k]-e[k-1]}{T_s}$$

Dimana $k$ merupakan indeks waktu diskrit yang diiterasi setiap loop PID dijalankan dan $T_s$ sebagai waktu sampling. $e[k]$ merupakan selisih antara nilai setpoint dengan nilai hasil pembacaan sensor HC-SR04.

Komponen proporsional pada PID diskrit dinyatakan sebagai 
$$K_pe[k]$$

Dimana aksi kendali diberikan secara langsung berdasarkan besar error saat ini.

Komponen integral pada bentuk diskrit dinyatakan sebagai
$$K_i \sum_{i=0}^{k}e[i]\,T_s$$ 

Yaitu penjumlahan error sistem dari waktu ke waktu.

Komponen derivatif dinyatakan sebagai $$K_d \frac{e[k]-e[k-1]}{T_s}$$

Yaitu selisih error antara dua waktu sampling berurutan.

Ketiga komponen tersebut dijumlahkan untuk menghasilkan sinyal kendali diskrit $u[k]$ berupa sinyal PWM untuk aktuator (TB6612FNG).

**B. Metode Tuning Ziegler-Nichols (Z-N)**
Wajib memilih salah satu metode Z-N sebagai dasar penentuan parameter:

* **Tipe 1 (Osilasi Kontinu):** Berdasarkan $K_p$' dan $T_c$ saat sistem mulai berosilasi stabil.

**C. Model Plant (Motor)**

* **Motor DC (*Speed Control*)**
    Secara teoritis, motor DC didekati sebagai sistem **Orde 1**.
    $$G(s) = \frac{\omega(s)}{V(s)} = \frac{K}{\tau s + 1}$$
    *(yang mana output adalah Kecepatan Sudut $\omega$).*



### 2.3 Spesifikasi Perangkat Keras
* **Motor:** (DC motor RS-540, 6-9 V, 1.6 A, Max 2400 RPM)
* **Driver:** (Dual H-Bridge, TB6612FNG)
* **Sensor:** (HC-SR04)
* **Kontroler:** (STM32F411CEU6 100 MHz)

---

## 3. Implementasi dan Pengujian

> **⚠️ Syarat data yang harus ada:**
> 1.  **Analisis Komparatif:** **Minimal** **3 Variasi *Tuning*** (Misal: Hanya Proporsional vs PI vs PID Optimal).
> 2.  **Uji Konsistensi (*Repeatability*):** Pada *tuning* terbaik, lakukan **minimal 5x percobaan** berulang untuk mendapatkan rata-rata dan standar deviasi.
> 3.  **Uji Gangguan (*Disturbance*):** Minimal satu grafik yang menunjukkan respons sistem saat diberi beban atau gangguan tiba-tiba.
> 
> *Catatan: Untuk poin 1 dan 2, lebih banyak lebih baik, karena akan semakin menghasilkan banyak data untuk dianalisis dan dibandingkan.*

### 3.1 Karakteristik Open-Loop (Linearitas Plant)

Lakukan pengujian respon motor **tanpa algoritma PID** (*Open Loop*) untuk melihat perilaku aslinya.

* **Skenario A (Motor DC - Kecepatan):** Berikan PWM bertahap (0% s.d. 100%), catat RPM yang dihasilkan (*jika sulit menggunakan tachometer seperti yang digunakan saat asesmen praktik CLO 1, dapat menggunakan TCRT5000 atau Optocoupler Speed Sensor yang dihubungkan ke mikrokontroler*).


**Grafik Karakteristik:**
![Plot PWM](https://hackmd.io/_uploads/rklv93hV-g.png)


**Analisis:**
1.  Apakah grafik membentuk garis lurus? (Semakin linear semakin mudah dikendalikan).
Jawab: Grafik membentuk garis lurus pada PWM sekitar 60-180.
2.  Pada *input* berapa motor baru mulai bergerak? (Misal: Di bawah PWM 15% motor diam).
Jawab: Grafik mulai naik pada PWM sekitar 20, yang berarti motor baru mulai bergerak ketika nilai PWM > 20.
3.  Apakah ada titik ketika *input* dinaikkan tetapi *output* tidak bertambah lagi?
Jawab: Nilai kenaikan RPM mulai berkurang ketika PWM > 180, dan tidak ada penambahan lagi setelah 255.
### 3.2 Analisis Perbandingan Respons (*Step Response*)
1. Skenario 1
*Grafik ketika elevator naik*
![PID Random 1_Naik](https://hackmd.io/_uploads/SyrG6C24-e.png)
*Grafik ketika elevator turun*
![PID Random 1_Turun](https://hackmd.io/_uploads/HySzaC3Ebx.png)

2. Skenario 2
*Grafik ketika elevator naik*
![PID Random 2_Naik](https://hackmd.io/_uploads/Sk7fGy6V-l.png)
*Grafik ketika elevator turun*
![PID Random 2_Turun](https://hackmd.io/_uploads/HyxZnMk6NZx.png)

3. Skenario 3
*Grafik ketika elevator naik*
![PID Fix 1_Naik](https://hackmd.io/_uploads/ry53PgT4Zg.png)
*Grafik ketika elevator turun*
![PID Fix 1_Turun](https://hackmd.io/_uploads/Hkz6wgaVWg.png)



**Tabel 1. Perbandingan Parameter Respons Transien**

| Skenario *Tuning* | Nilai *Gain* ($K_p, K_i, K_d$) | *Delay Time* ($T_d$)| *Rise Time* ($T_r$) | *Peak Time* ($T_p$) | *Settling Time* ($T_s$) | *Overshoot* (%) | *Steady State Error* |
| :--- | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| #1 (Misal: Hanya P) | 5, 0, 0 | 40ms | 1000ms| - | 1360ms | 0% | 4.1% |
| #2 (Misal: Osilasi) | 0, 7, 0| 40.5ms | 850ms | - | 1256ms | 0% | 4.2% |
| #3 (PID Optimal) | 6, 0.10, 3 | 40ms | 1286ms | - | 1429ms | 0% | 4% |

### 3.3 Uji Konsistensi (Repeatability Test)

**Tabel 2. Statistik Konsistensi Kinerja (Misal N=5)**

| Percobaan Ke- | *Settling Time* ($T_s$)(Naik) |*SSE* (%)(Naik) | *Settling Time* ($T_s$)(Turun) | *SSE* (%)(Turun) |
| :---: | :---: | :---: | :---: |:---: |
| 1 | 1335ms | 4,43% | 1648ms | 2.48%|
| 2 | 1429ms | 4,26%| 1489ms | 2,7% |
| 3 | 1335ms | 5,16% | 1555ms | 2,52%| 
| 2 | 1428ms | 4,5% | 1462ms | 3,04% | 
| 5 | 1368ms | 4,8% | 1489ms | 2,82% |
| **Rata-rata ($\mu$)** | 1379ms | 4,63% |1529ms |2,71%|
| **Standar Deviasi ($\sigma$)** | 43,8 | 0.36 |72.9|0,23 |


### 3.4 Uji Gangguan (Disturbance Rejection)
* **Gambar:** *Screenshot* Serial Plotter saat gangguan terjadi.
![download](https://hackmd.io/_uploads/HkxNzQWTNZe.png)
* **Analisis:** Elevator ditahan pada jarak 12cm selama satu detik lalu diamati apakah elevator dapat kembali naik atau akan tersangkut. Dari grafik terlihat elevator butuh beberapa milisecond untuk kembali naik setelah gangguan diberikan yang berdampak pada penambahan settling timenya.

---

## 4. Evaluasi dan Analisis Kinerja

### 4.1 Validasi Spesifikasi
Dari uji konsistensi yang dilakukan menggunakan PID optimal sebanyak 5 kali, waktu rata-rata yang didapat ketika elevator naik atau turun < 2 detik. Yang dimana sudah memenuhi target awal yang diinginkan. Standar deviasi yang kecil juga menunjukkan bahwa sistem sudah memiliki performa yang konsistem.

### 4.2 Analisis Mendalam
*(Jawab dengan paragraf analisis kritis)*

1.  **Analisis Pengaruh *Gain*:** Jelaskan secara spesifik bagaimana perubahan $K_p$, $K_i$, dan $K_d$ mempengaruhi bentuk grafik respons berdasarkan data percobaan kelompok Anda.
Jawab: Perubahan Nilai Kp, Ki, dan Kd memberikan pengaruh yang sangat besar terhadap grafik khususnya pada kecepatan naik atau turunnya elevator. Pada Skenario 1 grafik menunjukan pada saat awal diberi target sistem memilki kenaikan cukup cepat namun kurang stabil saat mendekati set point. Hal ini dapat dilihat dari rise time sekitar 1000ms dan settling time 1360 ms. Kp yang bekerja sendirian membuat motor DC langsung merespons error jarak oleh sebabitu PWM relatif besar saat jarak jauh tetapi karena tidak ada Ki dan Kd sistem tidak dapat menghilangkan error sisa atau meredam perubahan kecepatan
Sedangkan pada skenario 2 Grafik berubah enjadi lebih lambat di awal namun terus naik hingga menuju target yang disebabkan oleh akumulasi error oleh Ki. Hal ini derlihat dari rise time yang lebih cepat dari sekenario 1. Bentuk grafik menunjukan gerakan yang kurang halusdan cenderung berayun sebelum stabil. Ki yang besar menyebabkan sistem menambah PWM meskipun elevator sudah mendekati target. Hal ini menunjukan aksi integral tanpa Kp dan Kd kurang cocok di sistem elevator
Lalu untuk skenario 3 grafik menunjukan bentuk paling stabil. meskipun rise time menunjukan terjadinya perlambatan tapi grafik memperlihatkan perlambatan saat mendekati target. Kp yang cukup besar membuat sistem memilki awalan yang lebih cepat, Ki yang kecil membantu mengurangi error sisa, sedangkan Kd memberikan efek redaman yang kuat sehingga perubahan kecepatan motor menjadi lebih halus.

2.  **Analisis Stabilitas:** 
    a. Berdasarkan Uji Gangguan (Bab 3.4), seberapa tangguh sistem kelompok Anda? Apakah terjadi osilasi berlebih saat beban dilepas?
Jawab : Sistem dikatakan cukup tangguh hal ini dapat ditunjukan pada grafik uji ganguan ketika ditahan secara paksa pada posisi sekitar 12cm selama kurang lebih 1 detik sehingga pergerakan menuju target terhenti sementara. setelah gangguan dilepas sistem dapat naik menuju target tanpa kegagalan meskipun membutuhkan beberapa saat untuk menyesuaikan untuk stabil. grafik menunjukan sistem melakukan pemulihan secara stabil tanpa muncul osilasi. kondisi ini menunjukan PID yang digunakan mampu meredam efek ganguan dengan baik.

    b. Apakah metode *tuning* PID yang kelompok Anda gunakan sudah optimal untuk membuat sistem stabil dan mempertahankan kestabilannya?
Jawab:Metode tuning PID yang digunakan dapat dikatakan cukup optimal untuk membuat sistem stabil dan mempertahankan kestabilannya meskipun belum sepenuhnya optimal dalam hal kecepatan respon sistem hal ini ditunjukan pada grafik yang relatif halus tidak adanya osilasi baik kondisi normal ataupun diberi gangguan. Tapi kombinasi nilai Kp, Ki, Kd yang digunakan mampu menyeimbangkan antara percepatan awal dan perlambatan saat mendekati target segingga motor DC tidak bekerja terlalu agresif.
4.  **Trade-off Desain:** Apa yang kelompok Anda korbankan untuk mencapai kestabilan? (Misal: Respon jadi agak lambat demi menghilangkan *overshoot*).
untuk menghilangkan overshooot pada sistem ini kita sdikit menurukan MAXPWM yang bertujuan kecepata nya tidak terlalu cepat tapi memilikiakibat memerlukan waktu lebih untukmencapai ke stabilan

6.  **Evaluasi Hardware:** 
    a. Apakah ada batasan fisik (seperti driver motor atau resolusi sensor rendah) yang menghambat pencapaian target sesuai desain?
    ada beberapa faktor yang menghambat ke stabilan untuk mecapai target ,seperti driver motor yang mengalami drop voltage yang mengakibatkan motor dc kekurangan teganggan untuk mengangkat beban ,lalu faktor selanjut nya yaitu sesor ultara sonic yang memiliki nois dan akurasi yang rendah
    b. Apakah ada faktor mekanik (*gears, backlash*, gesekan) yang mengganggu hasil kendali?
    ya, karena sistem ini menggunakan gear sebagaipenggerak sering terjadi juga gears backlash,lalu ada nya gesekan pada material elevator yang mengakibatkan pergerakan elevator tidak stabil
---

## 5. Kesimpulan dan Saran

### 5.1 Kesimpulan
1.  Sistem kendali PID **berhasil/tidak berhasil** diimplementasikan dengan parameter final: $K_p=6, K_i=0.1, K_d=3.0$.
2.  Kinerja sistem mencapai $T_s = 1429 ms$.
3.  Tingkat konsistensi sistem ditunjukkan dengan standar deviasi sebesar 0.36 ketika elevator naik dan 0,23 ketika elevator turun.

### 5.2 Saran Pengembangan
Pengembangan elevator dapat menggunakan sensor yang lebih akurat seperti sensor laser VL53L0X agar perhitungan jaraknya lebih presisi dibandingkan sensor ultrasonik yang rentan terhadap gangguan noise akibat pantulan gelombang suara. Selain itu, sistem dapat ditingkatkan dengan mengimplementasikan algoritma filter digital seperti Moving Average atau Kalman Filter untuk menghaluskan pembacaan data posisi. Penambahan antarmuka berupa layar LCD atau OLED akan mempermudah pengguna melihat status ketinggian secara real-time. Optimasi algoritma kendali dapat dilakukan dengan metode tuning PID yang lebih sistematis atau penggunaan Logika Fuzzy agar respon transien elevator menjadi lebih halus dan mampu beradaptasi dengan perubahan beban kabin. 

---

## Lampiran
* **Kode Program Utama (Arduino/C++):** 
//=========bagian deklarasi===========
#include <Arduino.h>

#define EN1 PA8
#define IN1 PB12
#define IN2 PB13

#define BTN_30CM PB6
#define BTN_5CM  PB7

#define TRIG_PIN PB4
#define ECHO_PIN PB5

const int PWM_MIN_UP    = 70;
const int PWM_MAX_UP    = 160;
const int PWM_MIN_DOWN  = 25;
const int PWM_MAX_DOWN  = 70;

float target = -1;
bool targetReached = false;

unsigned long startTime = 0;
bool timingActive = false;

long durasi;
float jarak;
float jarakFilter = 0;

float Kp = 6.0;
float Ki = 0.10;
float Kd_up   = 3.0;
float Kd_down = 3.0;

float error, lastError = 0;
float integral = 0;
float derivative;
float pidOutput;

unsigned long lastTime = 0;

bool lastBtn30 = HIGH;
bool lastBtn5  = HIGH;

//=========bagian loop===========
void loop() {

  bool btn30 = digitalRead(BTN_30CM);
  bool btn5  = digitalRead(BTN_5CM);

  if (lastBtn30 == HIGH && btn30 == LOW) {
    target = 30.0;
    integral = 0;
    lastError = 0;
    targetReached = false;
    startTime = millis();
    timingActive = true;
    Serial.println("Target = 30 cm");
  }

  if (lastBtn5 == HIGH && btn5 == LOW) {
    target = 5.0;
    integral = 0;
    lastError = 0;
    targetReached = false;
    startTime = millis();
    timingActive = true;
    Serial.println("Target = 5 cm");
  }

  lastBtn30 = btn30;
  lastBtn5  = btn5;

  if (target < 0) {
    brakeMotor();
    return;
  }

  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);

  durasi = pulseIn(ECHO_PIN, HIGH, 25000);
  if (durasi == 0) {
    brakeMotor();
    return;
  }

  jarak = durasi * 0.034 / 2.0;
  jarakFilter = 0.7 * jarakFilter + 0.3 * jarak;
  jarak = jarakFilter;

  unsigned long now = millis();
  float dt = (now - lastTime) / 1000.0;
  if (dt <= 0) dt = 0.01;
  lastTime = now;

  error = target - jarak;

  integral += error * dt;
  integral = constrain(integral, -40, 40);
  if (error < 0) integral *= 0.6;

  derivative = (error - lastError) / dt;
  float kdActive = (error > 0) ? Kd_up : Kd_down;

  pidOutput = (Kp * error) + (Ki * integral) + (kdActive * derivative);
  lastError = error;

  float absError = abs(error);

  if (absError < 6.0) pidOutput *= 0.4;
  if (absError < 3.0) pidOutput *= 0.25;

  if (absError < 2.5) {
    digitalWrite(IN1, HIGH);
    digitalWrite(IN2, HIGH);
    analogWrite(EN1, 40);
    delay(60);
  }

  if (absError < 1.2) {
    brakeMotor();
    if (!targetReached && timingActive) {
      unsigned long elapsed = millis() - startTime;
      Serial.println(">> TARGET TERCAPAI <<");
      Serial.print("Waktu tempuh: ");
      Serial.print(elapsed);
      Serial.println(" ms");
      targetReached = true;
      timingActive = false;
    }
    delay(300);
    return;
  }

  int pwm = abs(pidOutput);

  if (error > 0) {
    digitalWrite(IN1, HIGH);
    digitalWrite(IN2, LOW);
    pwm = constrain(pwm, PWM_MIN_UP, PWM_MAX_UP);
  } else {
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, HIGH);
    pwm = constrain(pwm, PWM_MIN_DOWN, PWM_MAX_DOWN);
  }

  analogWrite(EN1, pwm);

  Serial.print("Jarak: ");
  Serial.print(jarak);
  Serial.print(" | Error: ");
  Serial.print(error);
  Serial.print(" | PWM: ");
  Serial.print(pwm);
  Serial.print(" | Arah: ");
  Serial.println(error > 0 ? "NAIK" : "TURUN");

  delay(30);
}

*Link github: https://github.com/panjul450/Tugas-Besar-SKM*

* **Tautan Video Demonstrasi:**
Link Video: https://youtu.be/fE4UBr-H4m8?si=7AkoNHEYdVufF5A2
* **Dokumentasi Foto Alat:** ![WhatsApp Image 2026-01-08 at 15.15.44](https://hackmd.io/_uploads/Sy7nY1TVWx.jpg)
![WhatsApp Image 2026-01-08 at 15.15.42](https://hackmd.io/_uploads/H1yAFyaE-e.jpg)
![WhatsApp Image 2026-01-08 at 15.15.42 (1)](https://hackmd.io/_uploads/HkRlckTVZx.jpg)
![WhatsApp Image 2026-01-08 at 15.50.27](https://hackmd.io/_uploads/rJkTZepN-l.jpg)
![WhatsApp Image 2026-01-08 at 15.52.07](https://hackmd.io/_uploads/H1E6WxpEWe.jpg)
![WhatsApp Image 2026-01-08 at 15.57.35](https://hackmd.io/_uploads/rkagMgT4-g.jpg)



---

## Panduan Checklist Kelengkapan (Alat bantu saja untuk memastikan tidak ada yang terlewat. Sesuaikan dengan yang sebenarnya.)
- [x] Target Spesifikasi (Bab 1.3) terisi jelas.
- [x] Pemodelan Matematis ada (Bab 2.2).
- [x] Grafik Open Loop (Linearitas) ada (Bab 3.1).
- [x] Tabel Perbandingan minimal 3 variasi tuning ada (Bab 3.2).
- [x] Tabel Statistik Repeatability (5x data) ada (Bab 3.3).
- [x] Grafik Uji Gangguan ada (Bab 3.4).

## 6. Rubrik Penilaian dan Pembobotan
* **[PLO-3]** Kemampuan menyusun rancangan komponen, sistem dan/atau proses pada bidang teknik komputer untuk memenuhi kebutuhan yang diharapkan di dalam batasan-batasan realistis.
*  **[CLO-2]:** Mampu menyusun rancangan dan menganalisis sistem kendali loop tertutup dari kondisi transien hingga steady state untuk mencapai kestabilan.

### A. RUBRIK TUGAS BESAR CLO 2 (*Design & Analysis*)
**Bobot:** 5% dari Nilai Akhir Mata Kuliah.

**Aspek 1: Desain Spesifikasi dan Pemodelan (40 Poin)**
| Level | Poin | Deskripsi Kriteria |
| :--- | :---: | :--- |
| **_Exemplary_** | **40** | Target spesifikasi ($T_s, M_p$) memiliki **alasan kuantitatif**. Diagram blok lengkap (*Closed-loop*) dan model matematis *Plant*, Z-N, atau PID dijelaskan dengan referensi yang benar. |
| **_Satisfactory_** | **30** | Diagram blok benar dan target spesifikasi ada. Alasan penetapan angka kurang kuat atau model matematis hanya bersifat umum. |
| **_Needs Improvement_** | **15** | Diagram blok tidak lengkap atau salah. Tidak ada target spesifikasi jelas, atau model matematis salah konsep. |
| **_Unsatisfactory_** | **0** | Tidak ada bab desain atau terindikasi plagiasi. |

**Aspek 2: Analisis Kritis Respon Transien (60 Poin)**
| Level | Poin | Deskripsi Kriteria |
| :--- | :---: | :--- |
| **_Exemplary_** | **60** | Analisis tajam menjelaskan **korelasi fisik** *gain* PID terhadap grafik ($T_d, T_r, T_p, M_p, T_s$). Menjelaskan *trade-off* desain dengan logis. |
| **_Satisfactory_** | **45** | Penjelasan benar secara teori namun bersifat **deskriptif** (hanya membaca grafik) tanpa analisis yang mendalam. |
| **_Needs Improvement_** | **25** | Analisis dangkal atau keliru. Kesimpulan bertentangan dengan data grafik. Hanya menyalin teori buku. |
| **_Unsatisfactory_** | **0** | Tidak ada analisis. |

---
---
* **[PLO-6]** Kemampuan menerapkan metode, keterampilan dan piranti teknik modern yang diperlukan untuk praktek keteknikan dalam bidang teknik komputer.
* **[CLO-3]:** Mampu menentukan dan menerapkan penggunaan kendali proporsional, integral, atau derivatif pada motor listrik untuk mencapai kestabilan.
---

### B. RUBRIK TUGAS BESAR CLO 3 (*Implementation & Tools*)
**Bobot:** 20% dari Nilai Akhir Mata Kuliah.

**Aspek 1: Metodologi *Tuning* dan Validitas Data (40 Poin)**
| Level | Poin | Deskripsi Kriteria |
| :--- | :---: | :--- |
| **_Exemplary_** | **40** | Ada grafik *Open-Loop*. Melakukan minimal **3 variasi *tuning***. Menyertakan bukti **Uji Repetisi (minimal 5x)** dengan standar deviasi kecil (data valid). |
| **_Satisfactory_** | **30** | Ada tuning PID dan alat jalan. Data perbandingan minim (<3) atau tidak ada uji repetisi (hanya sekali coba). |
| **_Needs Improvement_** | **15** | Metode tuning tidak jelas (*trial-error* acak). Grafik respon tidak jelas skalanya atau terlihat fiktif. |
| **_Unsatisfactory_** | **0** | Data fiktif atau tidak ada data. |

**Aspek 2: Kestabilan dan *Robustness* (30 Poin)**
| Level | Poin | Deskripsi Kriteria |
| :--- | :---: | :--- |
| **_Exemplary_** | **30** | Sistem stabil ($e_{ss} \approx 0$). Mampu ***Self-Recovery* (kembali stabil)** dengan cepat saat diberi gangguan fisik. Ada grafik bukti respon gangguan. |
| **_Satisfactory_** | **20** | Sistem stabil mencapai *setpoint*. Respon gangguan lambat atau berosilasi lama. Dokumentasi gangguan kurang jelas. |
| **_Needs Improvement_** | **10** | Sistem mencapai *setpoint*, tetapi tidak stabil (getar atau *drift*), gagal, atau berhenti saat diberi gangguan kecil. |
| **_Unsatisfactory_** | **0** | Alat tidak berfungsi. |

**Aspek 3: Demonstrasi Alat & Tanya Jawab (30 Poin) --> *Penilaian Individu***
| Level | Poin | Deskripsi Kriteria |
| :--- | :---: | :--- |
| **_Exemplary_** | **30** | Demo sempurna dan rapi. Mahasiswa menjawab pertanyaan teknis (seperti pemrograman dan rangkaian) dengan lancar dan paham secara mendetail. |
| **_Satisfactory_** | **20** | Demo ada kendala minor. Menjawab pertanyaan cukup baik meski ragu pada detail teknis. |
| **_Needs Improvement_** | **10** | Alat sering *error* saat demo. Mahasiswa bingung dengan alatnya sendiri (tidak menguasai). |
| **_Unsatisfactory_** | **0** | Tidak hadir demonstrasi dan presentasi. |

---