Minggu, 25 Juli 2021

Hitung Fuzzy Manual Menggunakan Arduino

  


Dimensi Rule =4x2

0 1  =>0

0 0  =>0

1 1  =>1

1 0  =>1

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Baca Sensor Loop

Turun2: (5000.00-4000.00)/(5000.00-1000.00) = 0.25

Naik1: (4000.00-1000.00)/(5000.00-1000.00) =0.75

Turun2: (600.00-300.00)/(600.00-100.00) = 0.60

Naik1: (300.00-100.00)/(600.00-100.00) =0.40

1. Alpha1 Rule 0 + 1 => 0 (Turun) =Min(0.25,0.40)=>0.25

Turun1 =7000.00 - (0.25 * (7000.00-2000.00) = 5750.00

   #Predikat1 5750.00

2. Alpha2 Rule 0 + 0 => 0 (Turun) =Min(0.25,0.60)=>0.25

Turun1 =7000.00 - (0.25 * (7000.00-2000.00) = 5750.00

   #Predikat2 5750.00

3. Alpha3 Rule 1 + 1 => 1 (Naik) =Min(0.75,0.40)=>0.40

Naik1 = (0.40 *(7000.00-2000.00)) + 2000.00 = 4000.00

   #Predikat3 4000.00

4. Alpha4 Rule 1 + 0 => 1 (Naik) =Min(0.75,0.60)=>0.60

Naik1 = (0.60 *(7000.00-2000.00)) + 2000.00 = 5000.00

   #Predikat4 5000.00

Data Pembilang Fuzzy: 

(0.25 * 5750.00) + (0.25 * 5750.00) + (0.40 * 4000.00) + (0.60 * 5000.00) = 7475.00 =7475.00

Dibagi Penyebut Alpha: 

0.25 + 0.25 + 0.40 + 0.60 =1.50

HASIL DEFUZZYFIKASI: 4983.33

---------------------------------------------------------------

--------HITUNG ULANG BACA SENSOR-----------

---------------------------------------------------------------



Sebagai Berikut Engine Utamanya:

float cekMin(float dV1,float dV2){

    float hslMin=dV1;

    if(dV2<dV1){hslMin=dV2;}

  return hslMin;

}

float getFuzzy(String lvl,float Vz,float Vmx,float Vmn){

float fuzzy=-1; 

String gab="";

  if(lvl=="Turun"){

      if (Vz<=Vmn){fuzzy=1;gab="Turun1: "+String(fuzzy);}

      else if (Vz<=Vmx){

        fuzzy=(Vmx-Vz)/(Vmx-Vmn);

        gab="Turun2: ("+String(Vmx)+"-"+String(Vz)+")/(" +String(Vmx)+"-"+String(Vmn)+") = "+String(fuzzy);

      }

      else if (Vz>=Vmx){fuzzy=0;gab="Turun3: "+String(fuzzy);}

  }//lvl

  else if(lvl=="Naik"){

      if (Vz<=Vmn){fuzzy=0;gab="Naik1: "+String(fuzzy);}

      else if (Vz<=Vmx){

        fuzzy=(Vz-Vmn)/(Vmx-Vmn);

        gab="Naik1: ("+String(Vz)+"-"+String(Vmn)+")/("+String(Vmx)+"-"+String(Vmn)+") =" +String(fuzzy);

      }

      else if (Vz>=Vmx){fuzzy=1;gab="Naik3: "+String(fuzzy);}

  }//lvl

  cetak (gab);

return fuzzy;

 }//float


float getPredikat(String lvl,float Vz,float Vmx,float Vmn){

float predikat=-1; 

String gab="";

  if(lvl=="Turun"){

      if (Vz<=Vmn){predikat=Vmx - (Vz * (Vmx-Vmn));gab="Turun1 ="+String(Vmx)+" - ("+String(Vz)+" * ("+String(Vmx)+"-"+String(Vmn)+") = "+String(predikat);}

      else if (Vz<=Vmx){predikat=Vmx - (Vz * (Vmx-Vmn));gab="Turun2 ="+String(Vmx)+" - ("+String(Vz)+" * ("+String(Vmx)+"-"+String(Vmn)+") = "+String(predikat);}

      else if (Vz>=Vmx){predikat=Vmx - (Vz * (Vmx-Vmn));gab="Turun3 ="+String(Vmx)+" - ("+String(Vz)+" * ("+String(Vmx)+"-"+String(Vmn)+") = "+String(predikat);}

  }//lvl

  else if(lvl=="Naik"){

      if (Vz<=Vmn){predikat=(Vz *(Vmx-Vmn)) + Vmn;gab="Naik1 = ("+String(Vz)+" *("+String(Vmx)+"-"+String(Vmn)+")) + "+String(Vmn)+" = "+String(predikat);}

      else if (Vz<=Vmx){predikat=(Vz *(Vmx-Vmn)) + Vmn;gab="Naik2 = ("+String(Vz)+" *("+String(Vmx)+"-"+String(Vmn)+")) + "+String(Vmn)+" = "+String(predikat);}

      else if (Vz>=Vmx){predikat=(Vz *(Vmx-Vmn)) + Vmn;gab="Naik3 = ("+String(Vz)+" *("+String(Vmx)+"-"+String(Vmn)+")) + "+String(Vmn)+" = "+String(predikat);}

  }//lvl

cetak (gab);  

return predikat;

 }//float



Tidak ada komentar:

Posting Komentar