Implementasi Fuzzy Logic Controller untuk Kontrol Kecepatan Motor DC pada Prototype Kipas Angin (bagian 2)
Artikel sebelumnya kita telah membahas tentang perancangan kode program untuk fuzzifikasi masukan (sensor) pada Kontrol Kecepatan Motor DC pada Prototype Kipas Angin. Selanjutnya kita bahas bagaimana merancang basis aturan (rule base).
2. Kode program Rule Evaluation
Adapun rule base yang dirangcang sebagai berikut :
- Jika Suhu Dingin dan Jarak Dekat, maka Kipas Angin Lambat
- Jika Suhu Dingin dan Jarak Sedang, maka Kipas Angin Lambat
- Jika Suhu Dingin dan Jarak Jauh, maka Kipas Angin Lambat
- Jika Suhu Hangat dan Jarak Dekat, maka Kipas Angin Lambat
- Jika Suhu Hangat dan Jarak Sedang, maka Kipas Angin Sedang
- Jika Suhu Hangat dan Jarak Jauh, maka Kipas Angin Cepat
- Jika Suhu Panas dan Jarak Dekat, maka Kipas Angin Cepat
- Jika Suhu Panas dan Jarak Sedang, maka Kipas Angin Cepat
- Jika Suhu Panas dan Jarak Jauh, maka Kipas Angin Cepat
Table 3 merupakan rule base yang akan di program pada Arduino. Dari parameter tersebut, terdapat 3 himpunan fungsi keanggotaan output motor yaitu lambat,sedang dan cepat.Adapun source code rule base di atas yaitu :
void RuleEva (){ int i, j; for ( i=0; i<=2; i=i+1) { for ( j=0; j<=2; j=j+1) { temp = min(suhu[i], jarak[j]); rule [i][j] = temp; } } rule00 = rule [0][0]; // (dingin,dekat = Lambat) rule01 = rule [0][1]; // (dingin,sedang = Lambat) rule02 = rule [0][2]; // (dingin,jauh = Lambat) rule10 = rule [1][0]; // (hangat,dekat = lambat) rule11 = rule [1][1]; // (hangat,sedang = Sedang) rule12 = rule [1][2]; // (hangat,jauh = Cepat) rule20 = rule [2][0]; // (panas,dekat = Cepat) rule21 = rule [2][1]; // (panas,sedang = Cepat) rule22 = rule [2][2]; // (panas,jauh= Cepat) }}
Program yang dirancang akan menggunakan operasi logika AND, dimana nilai rule yang dihasilkan akan diambil dari nilai terkecil dari kedua derajat keanggotaan dengan menggunakan fungsi matematika (MIN).
3. Kode Program Defuzzifikasi
Pada defuzzifikasi yaitu tahap terakhir pada Fuzzy Logic Controller (FLC). Penyelesaian defuzzifikasi ini menggunakan metode Sugeno tipe WA (Weighted Average):
Adapun source code nya sebagai berikut :
void Defuzzy () { // metode sugeno (weighted average) float lambat = 100; float sedang = 200; float cepat = 250; RuleEva(); pwm = (rule00 * lambat) + (rule01 * lambat)+ (rule02 *lambat)+ (rule10 * lambat)+ (rule11 * sedang)+ (rule12 * cepat) + (rule20 * cepat)+ (rule21 * cepat)+ (rule22 * cepat); defuz = 0; int i, j; for ( i=0; i<=2; i=i+1) { for ( j=0; j<=2; j=j+1) { defuz = defuz + rule [i][j]; } } pwm = pwm / defuz; }
Hasil dan Analisa
Pada tahapan ini akan diuji hasil perancangan dari metode Fuzzy Logic Controller yang sudah dirancang untuk mengontrol kecepatan pada motor DC pada prototype kipas angin. Metode Fuzzy Logic Controller ini dirancang pada Arduino untuk mengatur PWM pada driver motor yang selanjutnya digunakan untuk mengatur kecepatan motor. Kecepatan motor ini diatur berdasarkan nilai yang diberikan dari sensor LM35 yang mendeteksi suhu dan sensor ultrasonic yang mendeteksi jarak pada objek tertentu.
Percobaan ke-1
Pada percobaan 1 akan diuji coba kecepatan motor dengan set point PWM sebesar = 100, dimana terdapat nilai suhu sebesar 24 – 25 yang dapat dikategorikan sebagai suhu dingin dan sedang, sementara nilai jarak berubah-ubah setiap satuan waktu. Jarak akan digunakan sebagai variable yang menentukan kecepatan baling-baling kipas tersebut.
Dari grafik di atas terlihat bahwa sistem mengalami rise time yang cepat, yaitu hanya memerlukan 1 detik untuk menyesuaikan kondisi. Dengan suhu 25 derajat Celcius dan jarak 8 cm, putaran motor dapat menyesuaikan dengan rule base yaitu 100. Hal ini berlangsung hingga detik ke 9 dengan jarak 11 cm. Namun ketika jarak dinaikkan dalam rentang nilai 18, 13, dan 10 pada grafik terlihat bahwa sistem mengalami overshoot. Namun berhasil menyesuaikan kembali ketika detik ke 12. Pada detik ke 12 hingga 14 sistem berhasil menurunkan suhu walau pun hanya 1 derajat Celcius. Adapun rata-rata error yang dihasilkan oleh sistem sebesar 15,4545 %. Hal ini dapat disebabkan oleh pembacaan kedua sensor yang kurang sensitif, selain itu pula rancangan membership function dan rule base untuk nilai input output belum optimal dan jumlah pengujian data yang sedikit.
Percobaan ke-2
Percobaan 2 tidak jauh berbeda dengan percobaan 1. Hanya saja nilai kecepatan motor yang akan diuji coba memiliki set point PWM sebesar 250, dan nilai suhu sebesar 28– 29 yang dapat dikategorikan sebagai suhu panas, sementara nilai jarak berubah-ubah setiap satuan waktu. Jarak akan digunakan sebagai variable yang menentukan kecepatan baling-baling kipas tersebut. Adapun hasil data yang diuji sebanyak 49 kali ditunjukkan oleh gambar berikut.
Dari grafik di atas, sistem menunjukkan rise time yang sama dengan dengan percobaan 1. Sistem hanya memerlukan waktu 1 detik untuk menyesuaikan kondisi. Selain itu pula, hasil respon yang ditunjukkan sangat stabil. Tidak ditemukan ada nya overshoot pada sistem yang diuji coba. Walaupun demikian, penurunan nilai suhu tidak dapat dipertahankan secara lama. Seperti data yang ditunjukkan pada tabel, ketika detik ke 3 hingga 4 suhu berhasil turun 1 derajat Celcius menjadi 28 derajat Celcius. Namun, pada detik ke 5 hingga 8 suhu kembali naik menjadi 29 derajat Celcius. Meskipun demikian, rata-rata error yang terjadi pada sistem berhasil diturunkan hingga mencapai 3,06122 %.
Penggunaan jumlah membership function dan perancangan rule base dapat mempengaruhi respon kepresisian dari metode untuk menentukan keputusan terhadap plan. Semakin banyak jumlah membership function, maka semakin tingkat keakuratan hasil di plan ini.