Rabu, 13 Agustus 2014

Kabar Gembira!!! ... PID Library kini hadir untuk Arduino

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-Derivativeyaitu 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.
  1. 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.
  2. 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;
//Specify the links and initial tuning parameters
PID myPID(&Input, &Output, &Setpoint,2,5,1, DIRECT);
void setup()
{
  //initialize the variables we're linked to
  Input = analogRead(0);
  Setpoint = 100;
  //turn the PID on
  myPID.SetMode(AUTOMATIC);
}
void loop()
{
  Input = analogRead(0);
  myPID.Compute();
  analogWrite(3,Output);
}

Minggu, 10 Agustus 2014

RADE Research Group


Saya, rekan-rekan Mahasiswa dan pihak kampus STMIK-STIKOM Bali membentuk grup riset di bidang robotika dan embedded systems. Kami namai dengan RADE (Robotics AnD Embedded systems).

Saya berharap RADE dapat menjadi wadah untuk berkreasi, memperdalam keilmuan, mencoba hal-hal yang baru serta belajar berosisialisasi dan mengutarakan gagasan. Semoga sikap ini lahir dari sebuah ketulusan untuk mengembangkan diri dan kemauan untuk memajukan kampus STIKOM Bali. 

Jaya RADE !!!

Kamis, 07 Agustus 2014

Konsep Dasar Jaringan Saraf Tiruan

Saraf Biologis Otak Manusia
Otak manusia terdiri dari milyaran sel saraf  (neuron). Masing-masing neuron terhubung secara langsung sampai 200.000 koneksi dengan sel saraf yang lain (Nelson dan Illingworth, 1991). Sel-sel saraf ini mampu mengolah berbagai informasi yang pernah dan sedang dialami oleh manusia. Ketika manusia berpikir, aktivitas-aktivitas yang terjadi adalah aktivitas mengingat, memahami, menyimpan, maupun memanggil kembali informasi-informasi yang pernah dipelajari oleh otak (Puspitaningrum, 2006). Tiap-tiap sel bekerja seperti suatu prosesor sederhana (Kusumadewi,2004).
Sel-sel saraf secara umum dapat dibagi menjadi tiga bagian penting, yaitu sebagai berikut:
  1. Badan sel (soma), merupakan bagian neuron dimana inti sel terletak di dalamnya. Inti sel berfungsi sebagai tempat terjadinya pemrosesan informasi.
  2. Dendrit, merupakan bagian neuron yang berfungsi sebagai bagian yang menerima ransangan dari neuron lain. Dendrit bercabang banyak dan terhubung dengan banyak akson neuron lain
  3. Akson, merupakan bagian neuron yang mengantarkan ransangan ke neuron lainnya. Akson akan terhubung dengan dendrit neuron lain yang menjadi tujuannya.
Suatu sinyal yang dihantarkan oleh dendrit akan mengalami pemrosesan informasi pada bagian badan sel. Informasi hasil olahan selanjutnya dikirim ke neuron lain melalui akson. Akson suatu neuron akan terhubung dengan dendrit neuron lainnya. Pertemuan antara dendrit dan akson disebut sinapsis. Dendrit bercabang-cabang dan terhubung dengan banyak akson dari neuron yang lain. 


Gambar 1. Neuron Biologis Manusia

Suatu sinyal yang melewati sinapsis akan bertindak sebagai input untuk neuron yang lain dan seolah-olah mengalami pembobotan (weighted). Oleh karena itu, beberapa sinyal kemungkinan memiliki kekuatan yang berbeda dengan sinyal yang lain. (Nelson dan Illingworth, 1991). Seluruh sinyal yang mengalami pembobotan ini selanjutnya dijumlahkan, dan apabila lebih besar dari suatu nilai ambang (threshold) maka neuron akan menghasilkan suatu nilai input tertentu (teraktivasi).
Konsep Dasar Jaringan Saraf Tiruan
Jaringan saraf tiruan (JST) mengambil prinsip kerja dari neuron biologis manusia. Analogi kinerja JST dan neuron biologis diperlihatkan pada Gambar 2. Suatu impuls input (x1, x2 dan x3) akan diteruskan dengan membawa nilai bobot tertentu (w1j, w2j, dan w3j). Semua sinyal input diproses dan dijumlahkan untuk menghasilkan nilai u


Gambar 2. Analogi Kinerja JST dan Neuron Biologis

Hasil penjumlahan selanjutnya dibandingkan dengan nilai ambang melalui suatu fungsi transfer S(U). Neuron hanya akan menghasilkan output ketika input melewati suatu nilai ambang (threshold) tertentu.
Fungsi Transfer
Terdapat beberapa fungsi transfer (juga biasa disebut sebagai fungsi aktivasi) yang biasa digunakan untuk membangun suatu jaringan saraf tiruan, antara lain:
Fungsi Undak Biner (Hard Limit)
Fungsi ini membatasi input agar menghasilkan output dengan keluaran biner (0 atau 1). Jika input n lebih kecil dari 0, maka output akan bernilai 0, dan sebaliknya output akan bernilai  1 jika input n lebih besar atau sama dengan 0. Bahasa pemrograman MATLAB menyediakan fungsi ini dengan nama hardlim

Fungsi Linear
Output fungsi ini akan sama dengan nilai inputnya. Bahasa pemrograman MATLAB menyediakan fungsi ini dengan nama purelin.

Fungsi Sigmoid Biner
Fungsi ini membatasi rentang output antara 0 dan 1. Bahasa pemrograman MATLAB menyediakan fungsi ini dengan nama logsig.
Fungsi Sigmoid Bipolar
Fungsi ini adalah fungsi sigmoid dengan pembatasan output dengan rentang antara 1 sampai -1. Bahasa pemrograman MATLAB menyediakan fungsi ini dengan nama tansig.


Arsitektur Jaringan Saraf Tiruan
Arsitektur pada jaringan saraf tiruan dapat diklasifikasi berdasarkan jumlah lapisan (layer) yang membangun jaringan. Terdapat dua istilah, yaitu jaringan dengan lapisan tunggal (a layer of neurons) dan jaringan dengan banyak lapisan (multiple layers of neurons).
JST Lapis Tunggal (a Layer of Neurons)
Misalkan didefinisikan jaringan dengan jumlah input R dan jumlah neuron S.  Masing-masing elemen input vektor p terhubung dengan masing-masing neuron input dengan pembobotanW. Pada tiap-tiap neuron ke-i, terjadi proses penjumlahan sinyal input terbobot, dan diteruskan ke suatu fungsi transfer f untuk menghasilkan output a.


Gambar 3. JST Lapis Tunggal

JST Lapis Banyak (Multiple Layers of Neurons)
Contoh arsitektur jaringan ini dapat dilihat pada Gambar 4. Lapisan 1,2,3 dan seterusnya merupakan lapisan-lapisan yang membangun jaringan. Multilapis dapat dibayangkan sebagai satu lapis yang tersusun banyak. Kinerja arsitektur ini mirip dengan arsitektur satu lapisan, hanya saja tiap-tiap output dari satu lapisan akan  menjadi input untuk lapisan di depannya. Lapisan yang menghasilkan output akhir jaringan dikenal dengan istilah output layer, sedangkan lapisan lainnya dikenal sebagai lapisan tersembunyi (hidden layer). Tiga lapisan pada Gambar 4 terdiri dari satu output layer (lapisan 3) dan dua hidden layers(lapisan 1 dan lapisan 2). 

Gambar 4. JST dengan Tiga Lapisan

Referensi
Kusumadewi, S., 2004, Membangun Jaringan Syaraf Tiruan (Menggunakan Matlab dan Exel Link), Yogyakarta , Graha Ilmu.
Kusuma, W., 2008, Identifikasi Intonasi Ucapan Bahasa Indonesia untuk Sistem Monitoring dan Pengendalian Perangkat Listrik Menggunakan Jaringan Saraf Tiruan, Skripsi Jurusan Teknik Fisika Universitas Gadjah Mada, Yogyakarta
Nelson, M.M., 1991, llingworth, W.T., A Practical Guide to Neural Nets, Addison-Wesley Publishing Company, Massachusetts.
Puspitaningrum, D., 2006, Pengantar Jaringan Saraf Tiruan, Andi Offset, Yogyakarta.