PID (Proportional Integral Derivative) Controller merupakan salah satu metode control yang biasa digunakan di industri. metode PID merupakan metode kontroler dengan mekanisme umpan balik. PID Controller terus menghitung nilai kesalahan secara kontinue untuk mengembalikan pada nilai setpoint yang sudah dibuat sebelumnya. Kontroler berusaha untuk meminimalisir nilai kesalahan setiap waktu dengan variabel kontrol. Contohnya ketika kita mencoba untuk membuat suatu ruangan memiliki suhu 28 derajat Celsius tanpa adanya perubahan, maka PID dapat melakukannya. Solusi lain yang biasa diajukan untuk kasus ini adalah menggunakan if. If digunakan untuk membuat Suhu tetap berada di angka 28. Kurang lebih programnya akan terbaca seperti ini, “jika suhu kurang dari 28, maka nyala api dibesarkan. Namun jika suhu lebih dari 28, maka nyala api dikecilkan”. Bagaimana? kalian juga berfikir sama?
Nah di sinilah PID berfungsi. Jika kita hanya menggunakan persamaan if seperti di atas, maka device untuk memperbesar dan memperkecil api akan terus bergerak naik turun. Efeknya mungkin suhu akan berada di angka 27-29 (tidak terlalu jauh), namun device yang bergerak naik turun ini pasti akan lebih cepat rusak dan membutuhkan listrik yang lebih besar. Dengan menggunakan PID, kita dapat membuat penyesuaian suhu dengan hati-hati dan sesuai. Tentunya dengan menghindari adanya berlebih saat api di perbesar dan api diperkecil. Akhirnya project akan lebih efisien untuk melakukan penyesuaian.
Seperti namanya PID terdiri dari 3 jenis kontroler yaitu Proporsional (Proportional Controller), Integral (Integral Controller), dan Derivatif (Derivative Controller).
(Sumber Gambar: en.wikipedia.org)
Proporsional
Kontrol proporsional adalah kontroler yanf memiliki output sebanding dengan input error-nya. Sederhananya adalah output dari hasil kontroler merupakan nilai perkaliannya saja. Berikut ini rumusnya.
Pout merupakan output kontrol proporsional, Kp adalah konstanta/parameter dan e(t) adalah error yang merupakan selisih antara setpoint dan nilai aktual.
Integral
Kontrol integral memiliki fungsi untuk menghilangkan error steady state yang tidak bisa di hilangkan hanya dengan control proporsional. Prinsip dari integral mirip dengan integral matermatika yang sangat berpengaruh pada perubahan. Output dari controller ini adalah penjumlahan secara terus menerus dari input yang berupa error. Jika input tidak mengalami perubahan maka output akan menjaga kondisi sebelum terjadi perubahan input. Rumus untuk kontrol integral adalah sebagai berikut.
Ki merupakan konstanta integral dan e merupakan input yang error.
Derivatif
Kontrol derivatif memiliki sifat seperti operasi derivatif, perubahan pada input kontrol akan mengakibatkan perubahan yang besar dan cepat. Jika input berubah mendadak dan naik, outpu membentuk impuls, sedangkan jika input berubah naik secara perlahan maka output seperti fungsi step yang besar magnitudnya di pengaruhi oleh kecepatan naik. Kontrol derivatif mengubah nilai keluaran hanya ketika ada perubahan kesalahan, jadi jika tidak ada perubahan kesalahan, pengontrol ini tidak akan benar-benar merespon. Dalam situasi ini, pengontrol ini bersifat prediktif dan berubah seiring perubahan sinyal kesalahan input, sehingga tidak dapat berdiri sendiri sebagai pengontrol. Berikut ini rumus yang di gunakan untuk output derivatif.
Kd merupakan konstanta derivatif.
3 jenis kontroller tersebut di jadikan satu untuk memperoleh output yang sesuai setpoint. Sehingga akan ada perubahan nilai input setiap kali output mengalami error.
Program
Berikut ini merupakan program yang dapat di gunakan untuk membuat metode PID controller di Arduino IDE. Sebelum masuk ke program, silakan download dan include library PID (KLIK DI SINI).
/* Project PID untuk kendali Kecerahan LED dengan LDR */ #include <PID_v1.h> //library untuk PID double Setpoint ; // Variabel untuk menentukan setpoint double Input; // Variabel untuk sensor LDR (Input) double Output ; //Variabel untuk LED (Output) double Kp=0, Ki=10, Kd=0; //Konstanta PID sebagai parameter perhitungan PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT); //membuat PID instance void setup() { Serial.begin(9600); //serial monitor pada 9600 Setpoint = 75; //Menyetel nilai setpoint pada nilai 75 untuk setting output myPID.SetMode(AUTOMATIC); //mengaktifkan PID mode myPID.SetTunings(Kp, Ki, Kd); //Tuning nilai PID sesuai dengan parameter } void loop() { //Pembacaan nilai dari sensor LDR di pin 5 dengan range 1 hingga 1024. //map digunakan untuk konversi range 0 hingga 1024 menjadi 0 hingga 255 //0 hingga 255 adalah nilai untuk output LED dengan range minimal 0 dan maksimal 255 Input = map(analogRead(5), 0, 1024, 0, 255); myPID.Compute(); //melakukan perhitungan PID analogWrite(3,Output); //LED di pin 3 dengan nilai output. //Penulisan pada serial plotting atau serial monitor Serial.print(Input); Serial.print(" "); Serial.println(Output); Serial.print(" "); Serial.println(Setpoint); // delay(100); } |
Program di atas merupakan program yang dapat di gunakan untuk mengendalikan kecerahan cahaya dari LED dengan menyesuaikan cahaya dari luar dengan pembacaan sensor.
baca juga: Berkenalan dengan Arduino IoT Cloud
Perhitungan di lakukan dengan function yang sudah di sediakan oleh library PID, jadi kita tidak perlu membuatnya.
Nilai konstanta bersifat tidak tetap untuk satu project, jadi silakan uji coba dengan grafik plotter. Pastikan output berada pada nilai setpoint dan tidak ada steady State error yang membuat munculnya gelombang berlebih.