By | 07/06/2020

Hello Sahabat Anak Kendali.
Pada kesempatan kali ini saya akan melanjutkan Tutorial Arduino tentang Fuzzy Logic Controller untuk Membuat aturan fuzzy. dimana sebelumnya saya sudah menulis artikel tentang Fuzzy Logic bagian Fuzzifikasi. kita akan melanjutkan ke bagian Rule dengan kasus yang sama yaitu kita mempunyai satu Input dan satu Output. yaitu berupa SUHU dan PWM motor. anggap saja kita akan membuat Fuzzy Logic yang akan di terapkan pada kipas angin cerdas terdapat sensor suhu sebagai umpan balik, dan motor sebagai aktuatornya. untuk langkah membuat fuzzy logic controller kita terlebih dahulu membuat design himpunan fuzzy atau fuzifikasi.
untuk itu terlebih dahulu baca postingan tentang tutorial fuzzy logic sebelumnya, supaya bisa lebih paham. Arduino, Tutorial Fuzzy Logic Controller dengan Arduino (Fuzzifikasi)

kita mempunyai parameter Input berupa suhu dimana variable linguistiknya yaitu : Dingin, Hangat, Panas
dan juga parameter motor DC dengan variable linguistiknya yaitu : Lambat, Sedang, Cepat
kemudian Rule fuzzy yang akan kita tetapkan sebagai berikut :

  • Jika Suhu Dingin maka Motor Lambat
  • Jika Suhu Hangat maka Motor Sedang
  • Jika Suhu Panas maka Motor Cepat

dari rule diatas kita akan membuat persamaan untuk menentukan nilai sebenarnya dari keanggotaan motor berdasarkan keanggotaan suhu tiap rule nya.

Coba kita lihat kembali masing masing himpunan fuzzy berikut, sangat penting memahami himpunan fuzzy untuk menentukan aturan fuzzy yang akan kita buat.

Arduino, Tutorial Fuzzy Logic Controller dengan Arduino (Rule)
Tutorial Fuzzy Logic Controller dengan Arduino (Rule)

Rule pertama, Jika Suhu Dingin maka Motor Lambat. maka untuk rumus nya sebagai berikut :

Rule1 =  150 – (dingin*50);

Rule kedua, Jika Suhu Hangat maka Motor Sedang, karena bentuk grafik himunanya segitiga maka rumusnya ada dua, sebagai berikut :

Rule2a = 100 + (hangat*50);
Rule2b = 200 – (hangat*50);

Rule ketiga, Jika Suhu Panas maka Motor Cepat, maka untuk rumusnya sebagai berikut :

Rule3 = 150 + (panas*50);

setelah kita mengetahui rumusnya, selanjutnya kita akan membuatnya dalam sebuah program.
berikut adalah program Arduino nya.

Code Rule Fuzzy Arduino

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);
}
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);
}
void loop() {
  // put your main code here, to run repeatedly:
}

jika di jalan kan maka outputnya akan tampil seperti berikut :

Apa maksudnya dari hasil diatas ?

hasil diatas ya dari aturan aturan yang kita buat,, kemudian di bagian defuzifikasi kita akan menggunakan data dari hasil diatas untuk menentukan output defuzifikasinya.
defuzifikasi akan di jelaskan pada artikel berikutnya. untuk itu selalu berkunjung di www.anakkendali.com

jika ada pertanyaan ataupun terdapat kesalahan dalam menulis rumus tolog berikan masukan nya melaluin komentar di bawah. karena saya juga masih belajar dan akan terus belajar.

Selanjutnya Baca : Arduino, Tutorial Fuzzy Logic Controller dengan Arduino (Defuzzifikasi)

Keyword

  1. Cara Membuat Aturan Fuzzy
  2. Membuat Aturan Fuzzy Arduino
  3. Rule Fuzzy Arduino
  4. Fuzzy Logic Arduino Rule
  5. Desain Rule Fuzzy Logic
  6. Fuzzy Rule Arduino

10 Replies to “Tutorial Fuzzy Logic Controller dengan Arduino (Rule)”

  1. Elion E Nicolaas

    hello…. saya sangat senang dan juga penasaran dengan penjelasan tentang fuzzy logic dari penulis.

    saya mau bertanya soal artikel yang ditulis, saya beru pertama belajar tentang arduino jadi saya buat suatu project sederhana tentang suhu dan cahaya.

    nahh…. pertanyannya : se-pengertian saya apa yang ada pada bagian “void setup” biasanya hanya berjalan sekali saat program di upload(dijalankan). pada bagian “void loop” biasanya program selalu mengulang apa yang didapat oleh sensor.

    kenapa pada bagian “void loop” tidak diisi ?? apakah program akan berjalan hanya selaki ??

    Terimakasih 🙂

    Reply
  2. dian prasetya

    rule1 rule2 rule3 itu rumusnya dari mana ya?

    Reply
  3. Jihan

    mau tanya, kalo misalnya di rule ada operator AND programnya gimana ya?

    Reply
    1. herul Post author

      or gunakan nilai terbesar, and gunakan nilai terkecil

      Reply
  4. Vira

    Kak mau tanya, kalo inputnya ada 2, input1 dan input2, berarti rule nya gimana yaaa? misal inputnya ditambah lembab, hitung rule nya seperti apa?
    Terima kasih.
    Salam.

    Reply
  5. Ari

    Bang jika punya 2 input itu bagaimana rule pada programnya bang?

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *