# Hack Your Skills! to be Professional Mechatronics
Contoh Kontrol PID : Menghitung Nilai PID & Coding Arduino
ElangSakti
Arduino
,
Elektronika
,
Informatika
,
Kendali PID
,
Kontrol PID
,
PID Controller
31 komentar
Mohon maaf karena sudah beberapa pekan vakum, ada banyak aktifitas yang harus kita kerjakan dan kita siapkan. Aktifitas sharing jadi terkendala karena kita kebanjiran request program Arduino. Bahkan ebook versi 3 juga sedikit terkendala. Mohon dimaafkan. ;)
Mari kita lanjut pembahasan tentang PID Controller dan cara mencari konstantanya. Teknik yang dipakai dalam pembahasan kali adalah metodenya Cohen-Coon, dan mungkin agak sama dengan proses analisa grafiknya.
Tahap-tahap yang akan dilakukan dalam mencari konstanta PID sebagai berikut:
1. Analisa grafik untuk menemukan Transfer Function
2. Mencari Konstanta PID
3. Contoh Coding
Saat ini kita akan mengambil studi kasus tentang kontrol panas cairan. Oleh sebab itu, tugas alat yang kita tanamkan PID adalah : Memastikan suhu cairan stabil pada panas tertentu dengan mengontrol sudut bukaan kran gas. Kran gras dikontrol dengan servo.
Berdasarkan kasus tersebut, maka data INPUT-nya adalah bukaan gas (dalam derajat), sedangkan RESPONSE / OUTPUT-nya adalah suhu cairan.
Mari ke step pertama :
- Grafik Sudut, X = waktu, Y = Sudut
- Grafik Suhu, X = waktu, Y = Suhu
Waktu satuannya dalam detik. Untuk kasus lain, satuan ini bisa disesuaikan. Sudut satuannya derajat. Suhu satuannya derajat selsius. Selanjutnya, untuk mempermudah analisa, maka kedua grafik ini digabung jadi satu (lihat gambar).
Dalam teknik cohen-coon, berdasarkan grafik, yang harus kita tentukan adalah :
a. selisih kenaikan suhu (Δ)
b. selisih kenaikan sudut (∂)
c. Gain K
d. Nilai 28% dan 63% dari Δ
e. Waktu saat 28% dan 63% dari Δ
f. Konstanta effective time (τ)
g. Deadtime (θ)
h. Rumus Transfer Function
Untuk data-data di atas? Data-data di atas digunakan untuk mencari Tranfser Function. :D
Agar memahami, sesekali silakan lihat gambar.
a. Selisih Kenaikan Suhu
Δ = Suhu tertinggi - Suhu terendah
Δ = 95.25 - 25.75 = 69.5
b. Selisih Kenaikan Sudut
∂ = Sudut tertinggi - Sudut terendah
∂ = 40 - 8 = 32
c. Gain K sudah ada rumusnya
K = Δ / ∂
K = 69.5 / 32 = 2.171875
d. Nilai 28% dan 63% ini sudah standar metode tersebut, ada referensi yang menggunakan 28.2% dan 63.2% dari Δ
28%Δ = Suhu terendah + 0.28*Δ
28%Δ = 25.75 + 0.28*69.5 = 45.21
63%Δ = Suhu terendah + 0.63*Δ
63%Δ = 25.75 + 0.63*69.5 = 69.535
e. Mencari waktu saat 28% dan 63% bisa menggunakan rumus segitiga atau bisa langsung lihat posisinya di grafik. PENTING!!! Perhitungan waktu dimulai dari saat pertama kali input diubah (TChange). Misal, waktu saat start adalah detika ke-341, waktu saat 28% adalah detik ke-720 dan waktu saat 63% adalah detik ke-1191. Maka :
t28% = Waktu saat 28% - Waktu Start
t28% = 720 - 341 = 379
t63% = Waktu saat 63% - Waktu Start
t63% = 1191 - 341 = 850
f. Menghitung konstanta waktu efektif (τ), rumusnya sudah ditentukan
τ = 1.5 * (t63% - t28%)
τ = 1.5 * (850 - 379)
τ = 706.5
g. Menghitung deadtime (θ), rumusnya juga sudah ditentukan
θ = t63% - τ
θ = 850 - 706.5
θ = 143.5
h. Dari data-data tersebut maka rumus transfer function G(s) yang kita dapatkan ditentukan berdasarkan :
G(s) = (GAIN K * exp^(-θs)) / ( τs + 1 )
G(s) = (2.171875 * exp^(-143.5s)) / ( 706.5s + 1 )
Atau dalam bentuk rumus bisa dilihat di gambar. :)
Baik, pada tahap ini kita sudah mendapatkan rumus transfer function. Lalu apa?
Jika sudah punya rumus transfer function, Anda bisa mencari konstanta PID dengan metode coba-coba. Anda bisa membuat simulasi di Matlab dengan memasukkan rumus tersebut sebagai rumus transfer functionnya. Jadi Anda juga bisa melihat step responsenya secara realtime.
Namun, karena yang akan dibahas adalah dengan metode cohen-coon, maka yang akan kita lakukan adalah mencari nilai PID dengan perhitungan yang ditemukan oleh cohen-coon. :D
Mari lanjut ke step berikutnya.
Untuk mencari konstanta PID, berikut adalah tahapan-tahapannya.
a. Mencari Kc, τI, dan τD
Rumus Kc, τI, dan τD sudah ditentukan. Dengan demikian kita, bisa langsung memasukkannya ke persamaan di bawah ini.
Baik, tinggal selangkah lagi.
b. Mencari Kp, Ki, dan Kd (final)
Konstannta PID sudah ditemukan dengan nilai Kp = 3.137593061, Ki = 0.009626215, dan Kd = 138.5368013.
Selanjutnya adalah implementasinya pada Arduino.
Potongan coding di bawah ini contoh penggunaan konstanta PID dalam Arduino.
Semoga bermanfaat. :)
Kira-kira, apa yang akan kita share berikutnya?
Mari kita lanjut pembahasan tentang PID Controller dan cara mencari konstantanya. Teknik yang dipakai dalam pembahasan kali adalah metodenya Cohen-Coon, dan mungkin agak sama dengan proses analisa grafiknya.
Tahap-tahap yang akan dilakukan dalam mencari konstanta PID sebagai berikut:
1. Analisa grafik untuk menemukan Transfer Function
2. Mencari Konstanta PID
3. Contoh Coding
Saat ini kita akan mengambil studi kasus tentang kontrol panas cairan. Oleh sebab itu, tugas alat yang kita tanamkan PID adalah : Memastikan suhu cairan stabil pada panas tertentu dengan mengontrol sudut bukaan kran gas. Kran gras dikontrol dengan servo.
Berdasarkan kasus tersebut, maka data INPUT-nya adalah bukaan gas (dalam derajat), sedangkan RESPONSE / OUTPUT-nya adalah suhu cairan.
Mari ke step pertama :
(1) ANALISA GRAFIK
Ada dua grafik yang kita butuhkan, yaitu grafik perubahan input terhadap waktu dan grafik perubahan response terhadap waktu, dengan rincian sebagai berikut :- Grafik Sudut, X = waktu, Y = Sudut
- Grafik Suhu, X = waktu, Y = Suhu
Waktu satuannya dalam detik. Untuk kasus lain, satuan ini bisa disesuaikan. Sudut satuannya derajat. Suhu satuannya derajat selsius. Selanjutnya, untuk mempermudah analisa, maka kedua grafik ini digabung jadi satu (lihat gambar).
Dalam teknik cohen-coon, berdasarkan grafik, yang harus kita tentukan adalah :
a. selisih kenaikan suhu (Δ)
b. selisih kenaikan sudut (∂)
c. Gain K
d. Nilai 28% dan 63% dari Δ
e. Waktu saat 28% dan 63% dari Δ
f. Konstanta effective time (τ)
g. Deadtime (θ)
h. Rumus Transfer Function
Untuk data-data di atas? Data-data di atas digunakan untuk mencari Tranfser Function. :D
Agar memahami, sesekali silakan lihat gambar.
a. Selisih Kenaikan Suhu
Δ = Suhu tertinggi - Suhu terendah
Δ = 95.25 - 25.75 = 69.5
b. Selisih Kenaikan Sudut
∂ = Sudut tertinggi - Sudut terendah
∂ = 40 - 8 = 32
c. Gain K sudah ada rumusnya
K = Δ / ∂
K = 69.5 / 32 = 2.171875
d. Nilai 28% dan 63% ini sudah standar metode tersebut, ada referensi yang menggunakan 28.2% dan 63.2% dari Δ
28%Δ = Suhu terendah + 0.28*Δ
28%Δ = 25.75 + 0.28*69.5 = 45.21
63%Δ = Suhu terendah + 0.63*Δ
63%Δ = 25.75 + 0.63*69.5 = 69.535
e. Mencari waktu saat 28% dan 63% bisa menggunakan rumus segitiga atau bisa langsung lihat posisinya di grafik. PENTING!!! Perhitungan waktu dimulai dari saat pertama kali input diubah (TChange). Misal, waktu saat start adalah detika ke-341, waktu saat 28% adalah detik ke-720 dan waktu saat 63% adalah detik ke-1191. Maka :
t28% = Waktu saat 28% - Waktu Start
t28% = 720 - 341 = 379
t63% = Waktu saat 63% - Waktu Start
t63% = 1191 - 341 = 850
f. Menghitung konstanta waktu efektif (τ), rumusnya sudah ditentukan
τ = 1.5 * (t63% - t28%)
τ = 1.5 * (850 - 379)
τ = 706.5
g. Menghitung deadtime (θ), rumusnya juga sudah ditentukan
θ = t63% - τ
θ = 850 - 706.5
θ = 143.5
h. Dari data-data tersebut maka rumus transfer function G(s) yang kita dapatkan ditentukan berdasarkan :
G(s) = (GAIN K * exp^(-θs)) / ( τs + 1 )
G(s) = (2.171875 * exp^(-143.5s)) / ( 706.5s + 1 )
Atau dalam bentuk rumus bisa dilihat di gambar. :)
Baik, pada tahap ini kita sudah mendapatkan rumus transfer function. Lalu apa?
Jika sudah punya rumus transfer function, Anda bisa mencari konstanta PID dengan metode coba-coba. Anda bisa membuat simulasi di Matlab dengan memasukkan rumus tersebut sebagai rumus transfer functionnya. Jadi Anda juga bisa melihat step responsenya secara realtime.
Namun, karena yang akan dibahas adalah dengan metode cohen-coon, maka yang akan kita lakukan adalah mencari nilai PID dengan perhitungan yang ditemukan oleh cohen-coon. :D
Mari lanjut ke step berikutnya.
(2) MENCARI KONSTANTA PID
Untuk mencari konstanta PID, berikut adalah tahapan-tahapannya.
a. Mencari Kc, τI, dan τD
Rumus Kc, τI, dan τD sudah ditentukan. Dengan demikian kita, bisa langsung memasukkannya ke persamaan di bawah ini.
Kc = (1/K)(τ/θ)( (16τ+3θ)/12τ ) Kc = (1/2.171875)(706.5/143.5)( (16*706.5+3*143.5)/12*706.5 ) Kc = 3.137593061 τI = θ(32+(6θ/τ)) / (13+(8θ/τ)) τI = 143.5*(32+(6*143.5/706.5)) / (13+(8*143.5/706.5)) τI = 325.9425599 τD = 4θ / (11+(2τ/τ)) τD = (4*143.5) / (11+(2*706.5/706.5)) τD = 44.15384615
Baik, tinggal selangkah lagi.
b. Mencari Kp, Ki, dan Kd (final)
Kp = Kc Kp = 3.137593061 Ki = Kc/τI Ki = 3.137593061/325.9425599 Ki = 0.009626215 Kd = Kc*τD Kd = 3.137593061*44.15384615 Kd = 138.5368013
Konstannta PID sudah ditemukan dengan nilai Kp = 3.137593061, Ki = 0.009626215, dan Kd = 138.5368013.
Selanjutnya adalah implementasinya pada Arduino.
# CONTOH CODING ARDUINO
Potongan coding di bawah ini contoh penggunaan konstanta PID dalam Arduino.
unsigned long last_compute = millis(); unsigned long DT = 1000; float ERR = 0; float ERR_LAST = 0; float ERR_CORRECTION = 0; float SETPOINT = 70; float INTEGRAL = 0; float DERIVATIVE = 0; const float KP = 3.137593061; const float KI = 0.009626215; const float KD = 138.5368013; int SERVO = 0; int SERVO_LAST = 0; int servo_start_min = 0; int servo_start_max = 180; void ServoController(){ if( millis() - last_compute > DT){ // baca sensor suhu float SUHU = BacaSensorSuhu(); // hitung pid ERR = ERR_CORRECTION + SETPOINT - SUHU; float TheP = KP * ERR; INTEGRAL = ERR / DT; float TheI = KP * INTEGRAL; DERIVATIVE = (ERR - ERR_LAST)/DT; float TheD = KD * DERIVATIVE; // sudut servo SERVO = TheP + TheI - TheD; // catat error terakhir ERR_LAST = ERR; // sesuaikan sesuai batasan servo if(SERVO > servo_start_max) SERVO = servo_start_max; if(SERVO < servo_start_min) SERVO = servo_start_min; // jika sudut servo berubah if(SERVO!=SERVO_LAST){ // gerakkan servo sesuai sudut SetServo(SERVO); SERVO_LAST = SERVO; } last_compute = millis(); } }
Semoga bermanfaat. :)
Kira-kira, apa yang akan kita share berikutnya?
Top Artikel :
Written by ElangSakti
Contoh Kontrol PID : Menghitung Nilai PID & Coding Arduino
Bahasan: Mohon maaf karena sudah beberapa pekan vakum, ada banyak aktifitas yang harus kita kerjakan dan kita siapkan. Aktifitas sharing jadi terken...
Published at Selasa, 20 Februari 2018, Updated at Selasa, 20 Februari 2018
Reviewed by dr. on
Rating: 4.7
Contoh Kontrol PID : Menghitung Nilai PID & Coding Arduino
Bahasan: Mohon maaf karena sudah beberapa pekan vakum, ada banyak aktifitas yang harus kita kerjakan dan kita siapkan. Aktifitas sharing jadi terken...
Published at Selasa, 20 Februari 2018, Updated at Selasa, 20 Februari 2018
Reviewed by dr. on
Rating: 4.7
Langganan:
Posting Komentar
(
Atom
)
Mas tanya nih, klo buat line folower fungsi alihnya gmn ya?
BalasHapuskak mau tanya, kalau untuk triac gimana cara bikin fungsi alihnya kak?
BalasHapusGan itu DT=1000 dalam koding maksudnya gimana??
BalasHapusitu batasan waktu 1 second, soalnya d arduino pakai milisecond. jadi pakai 1000.
Hapusjadi itu menandakan programn if nya akan dieksekusi setiap 1 detik. kenapa harus 1 detik ?? saya juga gaa tau :D
sangat membantu gan
BalasHapusbg boleh minta library program nya bg
BalasHapusanda mengusai PID. saya kurang memahami... bolehkan saya sharing dengan anda master.. bolehkah saya mntaa nomer handphone anda?
Hapusgan boleh minta listing programnya lengkap? trims
BalasHapusuntuk pencarian nilai TD bisa diperjelas? knp ko tiba2 muncul nilai 28706.5 ya... thx
BalasHapussepertinya itu salah ketik aja bang, mungkin pas mau ketik * (bintang), shiftnya ga ketekan :D
Hapusbenar salah ketik, tengkyu atas koreksinya.
Hapuskak mau tanya, bagaimana cara menampilkan grafik output arduino lewat pc agar bisa memudahkan dalam mencari dan menhitung nilai Tf nya ?
BalasHapusBoleh minta buku reverensi nya gaa Pak, soalnya masi kurang paham soal cara menentukan fungsi alih dari kurva tanggapan sistem.
BalasHapusmantap. analisisnya hebat. niat agan ini.
BalasHapusqwe
BalasHapusbang masih kurang paham sama kodingnya, gak ada penjelasan lebih detail tentang kodingnya bang ?
BalasHapusPin servonya berapa ya mas?
BalasHapusPin servonya pin berapa ya mas?
BalasHapuspin servo bisa pakai pin yang support PWM.
HapusMetode Cohen Coon apa hanya dapat digunakan pada sistem yang open-loop ya mas?
BalasHapusMetode Cohen coon menggunakan open loop untuk keperluan analisa, tapi hasil dari metode ini digunakan pada closed-loop.
Hapushallo mas, salam kenal saya Dani supriyadi saya asal yogyakarta, izin bertanya mas, itu mula mula sudut 8 drajat dan dari 8 drajat itu mula mula suhu 25,75 drajat, nah yang saya tanyakan apakah suhu awal 25,75 sudah suhu tenang nya dari hasil bukaan servo yang 8 drajat itu? kalo iya, berarti kita harus nyari suhu maksimalnya dahulu ya mas dari bukaan servo awal? atau bagaimana mas?
BalasHapusbenar, suhu 25.75 adalah suhu awal cairan sebelum servo dibuka. Setelah servo dibuka jadi 8*, ada jeda waktu sebelum suhu mulai naik.
Hapusmas, mohon maaf, untuk analisa grafik diatas memakai koding open loop atau close loop? apabila memakai koding open loop set poin dr grafik diatas berarti adalah 40 apa gimana ya mas, mohon penjelasannya?
HapusUntuk proses mencari konstanta PID, menggunakan open loop.
HapusSedangkan close loop dipakai setelah menemukan konstanta PID (implementasi).
oiya mas, maaf mas koreksi, untuk rumus mencari nilai dari Td nya pada bagian rumusnya apakah bukan 2 deadtime/t ya mas? soalnya saya nemu rumus diwebsite rumus tuning cohen coon semua sama hanya pada bagian rumus mencari Tdnya mas. mohon penjelasannya
HapusSorry, sudah ndak ingat referensi mana yang saya pakai dulu. Sebab artikel ini sudah dibuat awal 2018. Sebab belakangan banyak modifikasi dari model tersebust.
HapusTerima kasih atas masukannya.
Permisi bang mau tanya dpt nilai 720 sama 1191 itu gimana ya bang??
BalasHapustinggal tarik garis pada sumbu waktu, saat suhu pada 28% dan 63%. Bisa kroscek lagi perhitungan di artikel.
Hapusini gk ad koding full nya ya mas?
BalasHapusmaksudnya kenaikan sudut itu apa ya mas?
BalasHapus