Tutorial ini dilakukan dengan tujuan mempelajari dan memahami karakteristik kontrol PID. Sistem yang digunakan adalah rangkaian listrik orde satu. Tegangan masukan (Vin) pada sistem akan diatur oleh kontrol PID sehingga tegangan keluaran (Vout) dapat selalu sesuai dengan nilai referensi yang diberikan.
Permasalahan dan Signifikansi
Penggunaan kontrol PID sangat populer pada dunia industri karena dianggap mampu mereduksi error serta memiliki solusi yang optimal dalam menghasilkan respon. Konsep PID adalah menghitung nilai error yang merupakan selisih antara nilai keluaran dan nilai referensi, kemudian PID akan memperbaiki nilai masukan sedemikian rupa sehingga nilai error tersebut menjadi tereduksi.
Pada Kontrol PID dikenal adanya konstanta KP, KI, dan KD. Konstanta tersebut akan sangat menentukan bentuk respon sistem terhadap suatu referensi yang diberikan. Tidak ada nilai konstanta yang dapat dikatakan benar, akurat maupun sempurna, sebab konstanta tersebut akan sangat bergantung terhadap sistem yang dikontrol serta bagaimana seorang owner/user menginginkan respon sistemnya terhadap suatu referensi, maka dari itu nilai KP, KI, dan KD akan sangat bervariasi. Dalam percobaan ini penentuan nilai KP, KI, dan KD akan ditentukan dengan menggunakan perangkat PIDTOOL pada Matlab 2013a.
Teknik Dan Algoritma
Percobaan kontrol PID ini dilakukan pada rangkaian listrik orde satu menggunakan dua resistor 220 Ohm serta satu kapasitor 2200uF seperti terlihat pada gambar 1. Adapun sebab dipilih rangkaian orde satu adalah tidak lain karena rangkaian ini memiliki sifat yang dinamis serta mudah untuk diimplementasikan.
Gambar 1. Rangkaian orde 1
Rangkaian pada gambar 1 memiliki fungsi transfer sesuai persamaan (1) berikut,
Skema rangkaian percobaan terlihat seperti pada gambar 2, dengan konfigurasi sebagai berikut:
1. Tegangan masukan (Vin) diatur oleh Arduino melalui pin 3 (DAC) dengan metode PWM.
2. Tegangan Keluaran (Vout) dibaca oleh ADC Arduino pada pin A1.
3. Sinyal referensi kerja (untuk mengatur besar Vout) diatur menggunakan potensiometer dan dipasang pada pin ADC A0.
(a)
(b)
Gambar 2. Skema rangkaian percobaan (a) pada eksperimen (b) skematik rangkaian
Langkah kerja yang yang dilakukan pada percobaan ini adalah sebagai berikut:
- Menentukan nilai KP, KI, dan KD sesuai respon yang diinginkan dengan menggunakan perangkat PIDTOOL pada Matlab (ada pada Matlab 2013a)
- Memasukkan nilai KP, KI, dan KD yang didapat dari PIDTOOL ke dalam program Arduino
Pada langkah pertama ini fungsi transfer sistem sesuai persamaan (1) dituliskan pada command Window Matlab seperti terlihat gambar 3, kemudian dilanjutkan dengan perintah PIDTOOL.
Gambar 3. Penulisan fungsi transfer sistem orde satu pada Matlab
Jendela PIDTOOL akan muncul seperti gambar 4. Jika diinginkan respon sistem seperti gambar, maka konstanta KP, KI, dan KD yang tertulis pada kanan atas dapat digunakan. Terlihat nilai konstanta yang didapat adalah KP= 0.89 KI= 1.83 dan KD=0.077.
Gambar 4. Jendela pengaturan PID menggunakan PIDTOOL
2. Memasukkan nilai KP, KI, dan KD ke vdalam program Arduino
Arduino memiliki library khusus untuk kontrol PID, Library ini harus diunduh terlebih dahulu pada: https://github.com/br3ttb/Arduino-PID-Library/zipball/master, setelah diunduh masukkan library tersebut ke program Arduino anda. Setelah itu tuliskan program berikut pada IDE:
#include
<PID_v1.h>
#include
<SoftwareSerial.h>
//Define
Variables we'll be connecting to
double
Setpoint, Input, Output,Input1;
//Specify
the links and initial tuning parameters
PID myPID(&Input,
&Output, &Setpoint,0.89,1.83,0.077, DIRECT);
void
setup()
{
//initialize the variables we're linked to
Input = analogRead(0);
Serial.begin(4800);
myPID.SetMode(AUTOMATIC);
}
void
loop()
{
Input1 = analogRead(1); // membaca referensi
Setpoint = Input1;
Input = analogRead(0); // membaca tegangan
keluaran
myPID.Compute();
analogWrite(3,Output);
Serial.println(Input); // untuk membaca
tegangan keluar dalam angka digital
delay(100);
}
Nilai Kp, Ki, dan Kd yang didapatkan menggunakan PIDTOOL kemudian dimasukkan pada baris 6 (warna merah), lakukan proses upload, kemudian pembacaan arduino akan tampak seperti gambar 5. Apabila diperhatikan, respon sinyal yang diberikan gambar 5 identik dengan respon pada gambar 4.
Gambar 5.Respon sinyal Vout terhadap perubahan referensi pada Arduino
dengan KP= 0.89 Ki= 1.83 Kd=0.077
dengan KP= 0.89 Ki= 1.83 Kd=0.077
Dalam percobaan ini juga dilakukan tiga kali percobaan dengan nilai konstanta PID dan respon yang berbeda-beda.
Percobaan 1: KP=0, KI=4.456 dan KD=0
Tujuan: Respon stabil dalam 5 detik dengan menghasilkan overshoot
Gambar 6. Respon pada PIDTOOL dengan KP=0, KI=4.456 dan KD=0
Gambar 7. Respon pada Arduino dengan KP=0, KI=4.456 dan KD=0
Percobaan 2: KP=0 KI=0.818 dan KD=0
Tujuan: Respon stabil dalam 9 detik tanpa menghasilkan overshoot
Gambar 8. Respon pada PIDTOOL dengan KP=0 KI=0.818 dan KD=0
Gambar 9. Respon pada Arduino dengan KP=0 KI=0.818 dan KD=0
Percobaan 3: KP= 6.175 KI=17.221 KD=0.0475 (tidak Stabil)
Tujuan: Respon stabil kurang dari 1 detik tanpa menghasilkan overshoot
Gambar 10. Respon pada PIDTOOL dengan KP= 6.175 KI=17.221 dan KD=0.0475
Gambar 10. Respon pada Arduino dengan KP= 6.175 KI=17.221 dan KD=0.0475
Kesimpulan dan Saran
Dalam percobaan ini terlihat jelas bahwa konstanta KI, KP dan KD sangat mempengaruhi bentuk respon tegangan keluaran (Vout) pada rangkaian orde satu. Dengan menggunakan PIDTOOL ketiga konstanta tersebut dapat ditemukan dengan mudah, selain itu arduino juga mempermudah implementasi PID pada sistem kontrol.
Percobaan 1 dan 2 menunjukkan hasil yang identik antara metode simulasi menggunakan PIDTOOL dan hasil eksperimen menggunakan Arduino. Namun pada percobaan 3 terlihat adanya perbedaan yang signifikan, Arduino tidak dapat menghasilkan respon yang stabil. Salah satu sebab yang memungkinkan hal ini untuk terjadi adalah keterbatasan kemampuan prosesor dalam memproses program, selain itu dengan adanya instruksi delay dan Serial.Print, kecepatan proses PID juga dapat terganggu.
Pengembangan Aplikasi
Kontrol PID sangat cocok digunakan pada
- Pengisian bak air
- Kontrol motor quadchopter
- Sistem berbasis sensor dan respon
- Penstabil tegangan catu daya
- dll
Referensi
2. http://en.wikipedia.org/wiki/PID_controller
3. http://playground.arduino.cc/Code/PIDLibrary
4. Modern control engineering, Katsuhito Ogata
Keterlambatan sistem menggunakan arduino ini apa tidak beresiko bila digunakan untuk kendali quadcopter!
ReplyDeleteberesiko sih mas, cuma mau gimana lagi ya namanya juga low cost, hehehe....
DeleteGan, kalo saya mau ngasih input PIDnya itu dari sensor (dht) bagaimana ya?
ReplyDeletesensor memberikan nilai PID? maksudnya gimana ya Gan?
Deletemksh infonya kakak
ReplyDeletemasama
DeleteItu matlab sama arduino nya pisah ataw saling komunikasi untuk tuning pidnya?
ReplyDeletetuning PIDnya terpisah Ryan, itu hanya menampilkan pembacaan arduino ke layar cpu via matlab. Kalau mau dibuat saling komunikasi saya yakin bisa, cuma saya pun belum pernah buat, hehe....
DeleteThis comment has been removed by the author.
ReplyDeletemohon maaf sebelumnya pada kodingan arduino di atas, membaca referensi bukannya pada pin analog 0 dan membaca tegangan output pada pin analog 1 ya? tetapi mengapa saat d kodingan terbalik?
ReplyDelete...analogRead (1) //membaca referensi
Eh iya benar Mba Tuti, terima kasih ya koreksinya, iya betul saya yang terbalik tulis komnetar pada baris program itu, InsyaAllah saya perbaiki.
Deletejadi yang benar seperti yang mba Tuti sebutkan:
Input1 = analogRead(1); // membaca tegangan keluaran
Setpoint = Input1;
Input = analogRead(0); // membaca refernsi
padahal di gambar skema rangkaian sudah saya buat seperti itu ya, hehe...,
Sekali lagi terima kasih
Om, fungsi transfer itu darimana ya om?
ReplyDeleteCara mndptkn transfer fungsi bgamna ya ? Koo tdk di jelaskan .. tiba2 muncul tranfer fungsinya
ReplyDelete