Sistem kontrol PID dengan Arduino

Sistem kontrol adalah suatu sistem untuk mengendalikan keadaan sehingga diperoleh hasil bersesuaian dengan nilai yang diinginkan se-efektif mungkin.

diagram diatas merupakan sistem kontrol terbuka (open loop), dalam sistem ini tidak ada pemberitahuan (klarifikasi).

Dalam suatu sistem pasti terdapat gangguan dan variabel didalam dan dari luar sistem yang mengakibatkan ketidaksesuaian antara hasil yang diperoleh dan nilai yang diinginkan.

diagram diatas merupakan sistem kontrol tertutup (close loop), dengan adanya umpan balik maka sistem bisa melakukan koreksi.

Untuk menjadikan sistem se-efektif mungkin, perlu dilakukan pemodelan terhadap sistem yang dibangun yakni:

    1. Pemodelan masukan (input)
    2. Pemodelan sistem kontrol
      • hidup mati (on/off)
      • proporsional (P)
      • integral (I)
      • proporsional + integral (PI)
      • proporsional + derivative (PD)
      • proporsional + integral + derivative (PID)
    3. Pemodelan gangguan baik baik dari dalam maupun dari luar, dari dalam lebih kepada keandalan pelaksana/actuator (contohnya motor, pemanas, dll) dan gangguan dari luar adalah kondisi-kondisi yang dapat mempengaruhi kinerja pelaksana (contohnya penambahan beban pada motor, sumber panas lain pada pemanas)
    4. pemodelan pelaksana/actuator adalah karakteristik respon dari pelaksana terhadap perintah/sinyal yang diberikan (contohnya perubahan kecepatan motor terhadap setiap level sinyal yang diberikan)
    5. pemodelan objek/plant menyangkut sifat dan variasi perubahan yang akan terjadi pada objek.
    6. pemodelan sensor juga mencakup karakteristik pembacaan sensor terhadap perubahan dari perangkat pelaksana yang diukur.

Adanya model dari sistem yang dibangun akhirnya dapat diperoleh hasil akhir berikut ini:

Keluaran (objek) = Sistem kontrol x masukan

penyederhanaan ini bisa dilakukan dengan metode laplace. persamaan diatas adalah bagaimana hubungan antara masukan dan keluaran sehingga tergambar perilaku dinamik dari sistem kontrol.

apabila variabel-variabel sistem kontrol tidak memberikan respon yang efektif seperti yang diinginkan, maka dilakukan penyesuaian (tuning)

Sistem kontrol PID (Proportional–Integral–Derivative)

PID merupakan mekanisme pengambil keputusan dalam merespon adanya nilai kesalahan. Mekanisme ini memiliki 3 variabel (Kp, Ki, Kd) yang bisa disesuaikan guna memperoleh respon yang efektif.
Sistem kontrol itu berbasis dengan waktu, untuk memperoleh nilai kesalahan berbasis waktu digunakan :

 	kesalahan = input - sensor;
 	integralKesalahan += kesalahan;
 	derivatifKesalahan = kesalahan - kesalahanLalu;
 	kesalahanLalu = kesalahan;
  1. Proporsional adalah faktor kali dari nilai kesalahan saat ini (berbanding lurus), nilai ini berpengaruh langsung terhadap sensitifitas dan responsifitas suatu sistem. Jika nilai Kp dibuat lebih tinggi maka sistem menjadi lebih responsif terhadap nilai kesalahan, tetapi apabila nilai kesalahan terlalu tinggi maka sistem akan terlalu sensitif.
     	Respon = Kp * kesalahan;
    
  2. Integral adalah faktor kali dari nilai kesalahan sebelumnya, nilai Ki merupakan penjumlahan dari nilai-nilai kesalahan yang berfungsi untuk mempercepat sistem menuju nilai yang diinginkan. Jika nilai Ki terlalu tinggi maka dikhawatirkan sistem akan menjadi tidak stabil (overshoot)
     	Respon += Ki * integralKesalahan;
    
  3. Derivatif adalah faktor kali dari kemungkinan nilai kesalahan yang akan datang, nilai Kd berfungsi untuk memprediksi nilai kesalahan beikutnya disebut juga faktor redam karena nilai Kd akan memperlambat tercapainya nilai yang diinginkan namun membuat sistem lebih stabil
     	Respon += Kd * derivatifKesalahan;
    

sketch/program lengkapnya seperti berikut

float kesalahan;
float integralKesalahan;
float derivatifKesalahan;
float kesalahanLalu = 0;
float Kp, Ki, Kd;
float input;

//Pin
byte sensorPin = A0;
byte Pemanas = 2;

//konstanta
#define Ksensor 0.2 //faktor koreksi sensor panas

void setup() {
  pinMode(Pemanas, OUTPUT);
  Serial.begin(9600);
  Serial.println("Sistem kendali PID dengan Arduino");
  Serial.println("https://www.project.semesin.com");
  
  input = 100;
  Kp = 1;
  Ki = 0.5;
  Kd = -0.2;
}

void loop() {
  float sensor = 1.0 * analogRead(sensorPin) * Ksensor;
  
  float respon = hitungPID(input, sensor);
  analogWrite(Pemanas, respon);
  Serial.print(input);
  Serial.print(",");
  Serial.println(sensor);
}

float hitungPID(float input, float sensor)
{
  kesalahan = input - sensor;
  integralKesalahan += kesalahan;
  derivatifKesalahan = kesalahan - kesalahanLalu;
  kesalahanLalu = kesalahan;
  
  return (Kp * kesalahan) + (Ki * integralKesalahan) + (Kd * derivatifKesalahan);
}

12 thoughts on “Sistem kontrol PID dengan Arduino

  1. Gan, untuk dapatkan nilai kp, ki Dan kd nya bagaimana? Terus Saya menggunakan metode Ziegler nicloas untuk menentukan nilai kp, ki Dan kd tapi sistemnya semberawut. Tolong gan pencerahannya

    1. sistem pid bertujuan mengontrol sebuah plant, kebanyakan kendala adalah susah me-modelkan plant-nya sehingga juga susah memodelkan seluruh sistem.
      tuning pid dengan Ziegler–Nichols membutuhkan data ‘Ku’ dan ‘Tu’ dari pengukuran langsung (sinyal feedback-nya), jadi sebaiknya alat pengontrol dan yang dikontrol mestilah stabil untuk dilakukan pengujian.

    1. bisa dengan algoritma optimasi (transfer function harus diketahui)
      atau dengan prosedur berikut :

      • dimulai dengan nilai Kp (Gain proporsional) terlebih dahulu, hal ini dikarenakan kita perlu mencari respon sistem yang paling cepat dengan cara meminimalkan nilai rise time, jangan memberikan nilai Kp terlalu besar atau terlalu kecil.
      • Setelah respon dirasa cukup tepat hal selanjutnya yang dapat dilakukan adalah dengan memberikan nilai pada Kd (Gain Derivatif), hal ini bertujuan untuk mengecilkan nilai amplitudo sehingga osilasi dapat diredam atau bahkan dihilangkan.
      • Kemudian proses terakhir pada tunning nilai Gain adalah dengan mencari nilai Ki (Gain Integral), tunning Ki diperlukan jika kondisi sistem memiliki steady state error, yakni terjadi selisih antara nilai set point dengan nilai sistem saat mencapai kondisi steady state.
    2. bukan begitu mas, tak usah jelaskan panjang lebar pengertian nya kami sudah tau, tapi kami bigungnya seperti pertanyaan lainnya mereka sudah memakai rumus zieger nickloas pada tuning untuk menentukan nilai KP, KI dan KD tapi hasil yang diperoleh tidak sesuai yang diharapkan. tapi kalo cuma kotak katik kontstantanya saja itu membuang waktu yang lama. coba mas jelaskan dari mana mas mendapatkan nilai Kp = 1; Ki = 0.5; dan Kd = -0.2; karena itu tidak dijelaskan sama sekali, karena 3 konstanta itu sangat penting dan mempengaruhi sistem, sebab apa? sebab program mengkonsumsi nilai konstanta tersebut. kalo nilai konstanta yang diperoleh sesuai dengan aturan penentuan nilai PID maka dipastikan hasil yang diperoleh sesuai dengan set pointnya dan tidak ada namanya ketidakstabilan

      1. khusus Ziegler–Nichols method
        1. buat alatnya atau simulasi yang merepresentasikan model (jangan komentar kalo belum punya)
        2. set Ki dan Kd = 0
        3. jalankan alat atau simulasi
        4. Lihat respon dengan memasukkan nilai Kp dari 0 sampai Ku (dimana respon sudah stabil / berosilasi stabil)
        5. Hitung Tu = perioda osilasi
        6. (jika menggunakan kontroller PID) Hitung nilai Kp, Ki, Kd berdasarkan tetapan Ziegler–Nichols berikut
        Kp = 0.6 * Ku
        Ki = 1.2 * Ku / Tu
        Kd = 3 * Ku * Tu / 40

        Kp = 1; Ki = 0.5; dan Kd = -0.2; dari mana?
        sesuai plant saya, dan jangan ditiru karena mungkin beda plant

  2. benar yang dikatakan mas novanto, penanya pertama hanya menanyakan konstanta dapat dari mana malah pemaparnya ngasih pengertian dan introduction dari PID kan gak masuk akal ya.
    maaf kang asep kurniawan, aku teh sebenarnya lieur pisan, naon anu anjeun ngajelaskeun?
    aku juga masih cari web/youtube chanel mana yang bisa menjelaskan semua ini dan semuanya sama saja, dan lebih baik aku beli program saja

  3. begini aja deh mas, mas yang paham dengan programnya mas. misalnya saya punya plant yang digunakan untuk memanaskan kompor dengan output 220V pada sebuah bejana. pemanasan berlangsung selama 1175 detik untuk mencapat suhu yang diinginkan 100 oC, namun pasti pemanasan pertama perangkat akan mengalami overshoot diakibatkan penyebaran panas pada kompornya dan selisih maksimum overshootnya adalah 111,5 oC dengan waktu yang ditemput untuk menuju maksumum overshoot adalah 1583 detik. jadi selisih pemanasan pertama ke stabil dengan maksimum overshoot adalah 1583-1175=408 detik. bayangkan kalo mau mencari nilai Proportional secara random itu sangat sulit dilakukan karena apa membuang waktu yang banyak, terus dilanjutkan integratif dan derivartif yang pastinya memakan banyak waktu bila hanya kita melakukan tuning untuk memperoleh konstanta saja

    1. dalam kasus ini perlu 2 state controller 1. startup (408 detik) dan 2. runtime

      catatan pertanyaan sebelumnya: (khusus bagi yang belum tahu saja)
      1. sistem kontrol ada banyak P, PI, PD, PID, some overshoot, no overshot
      2. optimasi sistem kontrol ada berbagai macam seperti Ziegler-Nichols, Lambda, Kappa-Tau, Genetic, dll

      jadi perlu menyesuaikan dengan plant yang akan dikontrol

  4. Penentuan kp, ki, kd disebut tuning, utk mencari tuning yg tepat bisa dilakukan dg cara manual (trial and error), bisa jg dgn metode ziegler-Nichols dkk, bila cara tsb masih dirasa kesulitan dalam menentukan tuning, bagi yg paham logika fuzzy bisa dicoba menggunakan algoritma fuzzy sebagai auto-tuningnya

Leave a Reply

Your email address will not be published. Required fields are marked *