Elangsakti.com

Elangsakti.com

Share

27/02/2019

Kuis Monster Arduino Part-1
========================

Pertanyaan:
Berapa jumlah pin digital yang tidak dapat digunakan untuk PWM pada Arduino Uno?



Cara menjawab:
1. Jawablah langsung di komentar
2. Setiap peserta boleh menjawab lebih dari 1 kali
3. Setiap menjawab, wajib mention salah satu teman yang ingin belajar mikrokontroller / IoT, boleh sohib, boleh gebetan. :D
4. Kalau berkenan, boleh dishare biar tambah seru.
5. Jawaban hanya valid malam ini mulai jam 19:19 - 21:0x WIB (saat kuis ditutup oleh admin melalui kolom komentar)


Ketentuan pemenang:
1. Terdapat 2 pemenang, masing2 mendapatkan 1 buku
2. Pemenang 1 adalah yang menjawab dengan benar paling akhir sebelum komentar ditutup oleh Admin.
3. Pemenang 2 adalah yang menjawab dengan benar yang dipilih secara acak menggunakan random.org.
4. Ongkos kirim buku ditanggung oleh Admin. :D

----------------

Jawaban:
Pada dasarnya semua pin digital dapat digunakan untuk output PWM. Namun, pada Arduino Uno, pin yang secara instan support PWM (cukup dengan perintah analogWrite) adalah pin yang ditandai dengan tilde '~' adalah 3, 5, 6, 9, 10, dan 11 (6 pin). Pin digital terdapat 14 pin, jadi sisanya adalah 8 pin. Jawaban singkatnya adalah: 8 pin.


Pemenang:
1. Donny Wiratmoko
2. Fajar Khan

Selamat kepada yang beruntung, silakan inbox alamatnya ya....

===== PENTING !!! =============

Ikuti kuis berikutnya, 1 maret 2019, pukul 19:19 - 21:21.

============================

Photos from Elangsakti.com's post 18/02/2018

PID Controller :
Mencari Konstanta PID & Contoh Coding Arduino
( Bagian 4 : Final )


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-C**n, 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 :



# 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 (detik ke 341). 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.



# 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+(28706.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
===============================

Potongan coding di bawah ini contoh penggunaan konstanta PID dalam Arduino.


----------- coding -----------------------------

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();
}
}

----------- coding -----------------------------

Semoga bermanfaat. :)

Kira-kira, apa yang akan kita share berikutnya?

Want your business to be the top-listed Computer & Electronics Service in Malang?
Click here to claim your Sponsored Listing.

Address


Jalan Dewandaru 62
Malang
65141