Kini semakin banyak komunitas yang berlomba-lomba mengembangkan kemampuan Arduino, salah satunya dibidang kontrol. Kontrol 'klasik' namun sangat tangguh yang sampai saat ini masih banyak digunakan adalah Kontrol PID (Proportional Integral Derivative). Terkadang memprogram PID pada mikrokontroler menjadi tantangan tersendiri. Mungkin akan banyak kesulitan yang dihadapi dalam mengimplementasikan algoritma PID pada mikrokontroler. Namun, saat ini telah dibuat pustaka untuk memprogram PID pada Arduino, sehingga pekerjaan kita akan jauh dipermudah.
Gambar. Skematik Pengontrol PID
Apa itu PID?
PID adalah kependekan dari Proportional-Integral-Derivative, yaitu suatu algoritma kontrol yang sangat populer. PID akan menghitung nilai error, yaitu perbedaan antara nilai input (nilai yang diinginkan) dengan nilai output. Pengontrol akan mencoba untuk mengurangi error dengan cara mengatur nilai output yang dihasilkan oleh sistem. Dengan kata lain, pengontrol PID akan berusaha membawa nilai input sama dengan nilai output.
Proses Tunning
Tantangan yang paling utama pada pengontrol PID adalah mengatur parameter dari PID tersebut agar nilai error menjadi sekecil mungkin. Dari asal katanya, PID terdiri dari parameter pengontrol proporsional (Kp), integral (Ki) dan derivative (Kd). Skematik sistem kontrol PID diperlihatkan seperti pada gambar di atas. Mengontrol parameter ini akan membuat perilaku sistem akan berbeda-beda dalam merespon output, misalnya seberapa cepat? seberapa lambat? seberapa besar perubahan error? dsb... akan tergantung nilai Kp. Ki. dan Kd yang ditetapkan.
Nah, pertanyaannya sekarang, berapa nilai yang terbaik untuk tiap-tiap parameter tersebut? Jawabannya, tidak ada. Sebab, kata terbaik ini akan sangat tergantug dari desainer kontrolnya. Selain alasan teknis, respon sistem yang nantinya akan dihasilkan oleh pengontrol juga harus mempertimbangkan kenyamanan. Contoh, percepatan pergerakan yang mendadak ketika mobil balap digas akan berbeda dengan percepatan pada lift, sebab percepatan yang terlalu besar akan sangat mempengaruhi kenyamanan penumpang lift.
Kapan Menggunakan PID?
Pertanyaan yang sangat bagus!! Tidak semua yang canggih cocok untuk hal yang seharusnya bisa diselesaikan dengan sangat sederhana. Jika kita tidak perlu algoritma kontrol untuk mengendalikan sesuatu, maka semestinya kita tidak perlu repot-repot menggunakan PID. Berikut dua 'kaidah' yang dapat dijadikan patokan kapan menggunakan PID.
- Apakah kita memerlukan usaha lebih untuk menyelesaikan sesuatu? Jika kasus dapat diselesaikan dengan sistem sederhana, maka tidak ada alasan menggunakan kontrol PID. Contoh, mungkin kontrol ON-OFF saja sudah cukup untuk menyelesaikan masalah otomasi menghidupkan dan mematikan pompa di rumah kita. Cukup pasang sensor level air pada tangki, masalah akan terselesaikan dengan tepat sasaran. Sensor level ini bekerja dengan sangat sederhana, yaitu akan ON ketika level air sudah kurang, dan OFF jika level air dalam tangki masih cukup.
- Apakah sistem kita sering melakukan perulangan keadaan? Jika ya, Anda dapat melirik ke kontrol PID. PID memerlukan perulangan (repeatability). Jika output berubah dari keadaan A ke keadaan B, paling tidak ada keadaan yang terjadi berulang-kali. Contoh, ketika kita mengendarai mobil. Kita akan menginjak pedal gas setiap saat, terkadang menginjak gas agak dalam, terkadang sedikit saja, dsb. Injakan gas yang kita lakukan harus direspon dengan sangat baik oleh mobil kita, jika tidak, mmmm....
Pustaka PID
Silahkan bagi Anda yang tertarik mencoba pustaka ini.. silahkan download disini
Berikut cuplikan program yang diberikan oleh si pembuat pustaka. Program ini diigunakan untuk membaca analog input pada pin A0 dan mengeluarkan besaran nilai PWM pada output 3
/********************************************************
* PID Basic Example
* Reading analog input 0 to control analog PWM output 3
********************************************************/
#include
//Define Variables we'll be connecting to
double Setpoint, Input, Output;
double Setpoint, Input, Output;
//Specify the links and initial tuning parameters
PID myPID(&Input, &Output, &Setpoint,2,5,1, DIRECT);
PID myPID(&Input, &Output, &Setpoint,2,5,1, DIRECT);
void setup()
{
//initialize the variables we're linked to
Input = analogRead(0);
Setpoint = 100;
{
//initialize the variables we're linked to
Input = analogRead(0);
Setpoint = 100;
//turn the PID on
myPID.SetMode(AUTOMATIC);
}
myPID.SetMode(AUTOMATIC);
}
void loop()
{
Input = analogRead(0);
myPID.Compute();
analogWrite(3,Output);
}
{
Input = analogRead(0);
myPID.Compute();
analogWrite(3,Output);
}