Tutorial Fuzzy Logic Controller dengan Arduino (Rule)

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
Kunjungi  Belajar Arduino, Simulasi Membaca Sensor Suhu lm35

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 :

Kunjungi  Tutorial Lengkap Belajar Arduino Dari Pemula Hingga Mahir

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

Kunjungi  Cara Instal Library Arduino ISIS 7

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

9 thoughts on “Tutorial Fuzzy Logic Controller dengan Arduino (Rule)

  • Oktober 28, 2019 pada 6:21 am
    Permalink

    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 🙂

    Balas
    • Oktober 29, 2019 pada 1:00 pm
      Permalink

      iyaps,, cuma di jalankan sekali

      Balas
  • Desember 23, 2019 pada 8:31 am
    Permalink

    rule1 rule2 rule3 itu rumusnya dari mana ya?

    Balas
    • Desember 23, 2019 pada 10:06 pm
      Permalink

      dari fuzzifikasi gan

      Balas
  • April 24, 2020 pada 7:00 am
    Permalink

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

    Balas
    • April 24, 2020 pada 8:14 am
      Permalink

      or gunakan nilai terbesar, and gunakan nilai terkecil

      Balas
  • Juni 29, 2020 pada 11:58 am
    Permalink

    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.

    Balas
  • Juni 30, 2020 pada 10:55 am
    Permalink

    gan (hangat*50) drmana ya?

    Balas
    • Juni 30, 2020 pada 4:58 pm
      Permalink

      dari fuzzifikasi

      Balas

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *