Tutorial Fuzzy Logic Controller dengan Arduino (Defuzzifikasi)

Daftar Isi

Hello sahabat anak kendali.
Pada kesempatan kali ini saya akan melanjutkan Artikel tentang Arduino, Tutorial Fuzzy Logic Controller dengan Arduino (Defuzzifikasi). 
sebelumnya kita sudah membahas Tutorial Fuzzy dengan Arduino, bagian Fuzifikasi dan Rule, dan di artikel rule termasuk juga inferensi fuzzy.
dan kali ini kita akan melanjutkan Tutorial Fuzzy dengan Arduino tahap akhir yaitu Defuzzifikasi.
jika kalian belum membaca Artikel Tutorial Fuzzy Sebelumnya, silahkan di baca dulu Arduino, Tutorial Fuzzy Logic Controller dengan Arduino (Rule)

Arduino, Tutorial Fuzzy Logic Controller dengan Arduino (Defuzzifikasi)

Adapaun metode defuzzifikasi yang paling umum adalah Center of Area (COA) dan Mean of Maximum (MOM)
baca juga : Contoh Tutorial Aplikasi Fuzzy logic untuk Kontrol Air Heater Arduino
adapun persemaan dengan metode COA jika diskrit maka sebagai berikut :

Untuk metode COA kontinyu persamaan nya sebagai berikut :

Dan untuk metode MOM persamaan nya sebagai berikut :

Adapun pada artikel ini saya menggunakan defuzzifikasi dengan metode COA diskrit.
Pada bagian Tutorial Fuzzy bagian rule kita sudah mendapatkan nilai untuk masing masing rule nya. jika lupa silahkan di buka lagi halaman  Arduino, Tutorial Fuzzy Logic Controller dengan Arduino (Rule)   sehingga berdasarkan rumus COA diskrit diatas rumus menghitung Defuzifikasi bisa kita tulis sebagai berikut :   Output Defuzifikasi = ((rule1*dingin) + (rule2a*hangat) + (rule2b*hangat) + (rule3*panas)) / (dingin+hangat+hangat+panas)  

Baca Juga :  Tutorial Fuzzy Logic Controller Arduino (Fuzzifikasi)

Code Defuzzyfikasi Arduino

program lengkapnya Tutorial Fuzzy Logic dengan Arduino sebagai berikut :    

float suhu, pwm, out;
float dingin,hangat,panas;
float Lambat,Sedang,Cepat;
float rule1, rule2a, rule2b, rule3;
unsigned char suhuDingin(){
  if (suhu <= 30){dingin =1;}
  else if (suhu >=30 && suhu <=45){dingin=(45-suhu)/15;}
  else if (suhu >= 45){dingin =0;}
  return dingin;
}
unsigned char suhuHangat(){
  if (suhu <= 30){hangat =0;}
  else if (suhu >=30 && suhu <=45){hangat=(suhu-30)/15;}
  else if (suhu >=45 && suhu <=60){hangat=(60-suhu)/15;}
  else if (suhu >= 60){hangat =0;}
  return hangat;
}
unsigned char suhuPanas (){
  if (suhu <=45 ){panas =0;}
  else if (suhu >=45 && suhu <=60){panas=(suhu-45)/15;}
  else if (suhu >= 60){panas =1;}
  return panas;
}
unsigned char pwmLambat(){
  if (pwm <= 100){Lambat =1;}
  else if (pwm >=100 && pwm <=150){Lambat=(150-pwm)/50;}
  else if (pwm >= 150){Lambat =0;}
  return Lambat;
}
unsigned char pwmSedang(){
  if (pwm <= 100){Sedang =0;}
  else if (pwm >=100 && pwm <=150){Sedang=(pwm-100)/50;}
  else if (pwm >=150 && pwm <=200){Sedang=(200-pwm)/50;}
  else if (pwm >= 200){Sedang =0;}
  return Sedang;
}
unsigned char pwmCepat (){
  if (pwm <= 100){Lambat =1;}
  else if (pwm >=150 && pwm <=200){Cepat=(pwm-150)/50;}
  else if (pwm >= 200){Cepat =0;}
  return Cepat;
}
//Fuzzifikasi
void fuzzifikasi(){
  suhuDingin();
  suhuHangat();
  suhuPanas();
  pwmLambat();
  pwmSedang();
  pwmCepat();
}
// Rule
void fuzzy_rule (){
  fuzzifikasi();
// jika suhu dingin maka motor lambat
rule1 = 150 - (dingin*50);
// jika suhu hangat maka motor sedang
rule2a = 100 + (hangat*50);
rule2b = 200 - (hangat*50);
// jika suhu panas maka motor cepat
rule3 = 150 + (panas*50);
//defuzifikasi
out = ((rule1*dingin) + (rule2a*hangat) + (rule2b*hangat) + (rule3*panas)) / (dingin+hangat+hangat+panas);
}
void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
suhu = 32; // contoh kita memasukan nilai suhu 54 derajat
fuzzy_rule(); // memanggil fungsi fuzzifikasi untuk menghitung keanggotaan masing2 variable
Serial.print("dingin : ");
Serial.print(dingin);
Serial.print("t");
Serial.print("hangat : ");
Serial.print(hangat);
Serial.print("t");
Serial.print("panas : ");
Serial.println(panas);
Serial.print("Rule1 : ");
Serial.println(rule1);
Serial.print("Rule2a : ");
Serial.println(rule2a);
Serial.print("Rule2b : ");
Serial.println(rule2b);
Serial.print("Rule3 : ");
Serial.println(rule3);
Serial.print("Hasil DeFuzzy: ");
Serial.println(out);
}
void loop() {
  // put your main code here, to run repeatedly:
}

hasil nya dapat dilihat pada gambar di bawah ini :

Arduino, Tutorial Fuzzy Logic Controller dengan Arduino (Defuzzifikasi)

Maksud dari gambar di atas adalah jika kita memberikan masukan berupa suhu 32 derajat maka suhu dianggap dingin dengan keanggotaan 0.87 dan dianggap hangat dengan keanggotaan 0.13. Sedangkan untuk panas keanggotaan nya 0.00 yang artinya suhu sama sekali tidak panas. maka PWM yang di keluarkan senilai 116. Hasil ini semua berdasarkan himpunan fuzzy yang kita buat, (Lihat Tutorial Fuzzy Bagian Fuzzifikasi ).

Baca Juga :  Tutorial Lengkap Memulai Modul ESP8266/NodeMCU/Wemos

Jadi silahkan bisa disesuaikan sendiri himpunan fuzzy nya dengan bebas, tidak ada aturan yang pasti, yang terpenting kita punya alasanya, dan saya membuat tutorial ini hanya sebagai contoh, Membuat Pengendali Kipas Angin dengan Logika Fuzzy.

Bila ada kekeliruan atau kesalahan silahkan beri saya masukan, karena saya juga masih belajar dan akan terus belajar. ataupun jika ada pertanyaan silahkan tulis semua di komentar. dan jika bermanfaat silahkan di share artikel nya.

Keyword

  • Rumus Defuzzyfikasi,
  • Defuzzyfikasi centeroid,
  • Fuzzy Center Of Gravity,
  • Tutorial Fuzzy Arduino,
  • Arduino Fuzzy Logic,
  • Arduino Fuzzy,
  • Fuzzy Arduino,
  • Fuzzy Logic Controller,

(Visited 1.217 times, 1 visits today)