Selasa, 17 Desember 2019
Fuzzy Arduino UNO
float pompvA1=1;//speedMax
float pompvA2=0;//speedMin
float vA1=42;//suhumax
float vA2=20;//suhumin
float vB1=115;//lembabmax
float vB2=70;//lembabmin
float uji1=35;//suhuUji
float uji2=80;//lembabUji
int a=2;
int v=3;
int arA[] = {0, 1, 2};
int arV[] = {0, 1, 2};
float arP[] = {0, 0, 0};
//$arV[0]="Tinggi";
//$arV[1]="Sedang";
//$arV[2]="Rendah";
float arN[]={0,0};
float arMin[]={0,0};
float arMax[]={0,0};
float arM[]={0.0,0.0};
void setup() {
arN[0]=uji1;
arN[1]=uji2;
arMin[0]=vA1;
arMin[1]=vB1;
arMax[0]=vA2;
arMax[1]=vB2;
}
void loop() {
for(int i=0;i<a;i++){
cetak("Kategori: "+String(arA[i])+" (:Tinggi Sedang Rendah)");
for(int j=0;j<v;j++){
String proses="?";
float hproses=0;
if(arV[j]==0){proses=getTinggiS(arN[i],arMax[i],arMin[i]);hproses=getTinggi(arN[i],arMax[i],arMin[i]);}
else if(arV[j]==1){proses=getSedangS(arN[i],arMax[i],arMin[i]);hproses=getSedang(arN[i],arMax[i],arMin[i]);}
else if(arV[j]==2){proses=getRendahS(arN[i],arMax[i],arMin[i]);hproses=getRendah(arN[i],arMax[i],arMin[i]);}
arP[j]=hproses;
String gab="LVL-"+String(arA[i])+" "+String(arV[j])+" =>Uji "+String(arN[i])+"#"+String(proses) +"="+hproses;
cetak(gab);
}//j
arM[i]=getMin(arP);
cetak("Nilai Minimum ="+String(arM[i])+" ");
}//i
float MIN=getMin(arM);
float MAX=getMax(arM);
float sel=pompvA1 - pompvA2;
float vA1 = ( pompvA2 + ( MIN * ( sel )));
float vA2 = ( pompvA2 + ( MAX * ( sel )));
float up=vA1*vA1;
float M1= MIN/(pow(2,up));
float MA=(vA2*vA2*vA2)/(3*sel);
float MB=(vA2*vA2)*(sel)/(2*(sel));
float MC =MA-MB;
float MD=(vA1*vA1*vA1)/(3*sel);
float ME=((vA1*vA1)*sel) / (2*sel);
float MF = MD-ME;
float M2 = MC-MF;
float M3 = (MAX/2*(pompvA1*pompvA1)) - (MAX/2*(vA2*vA2));
float L1 = MIN* vA1;
float LA=((vA2*vA2)/(2*sel));
float LB=sel / (sel*vA2);
float LC=LA-LB;
float LD=(vA1*vA1) / (2*sel);
float LE=sel/(sel*vA1);
float LF=LD-LE;
float L2=LC-LF;
float L3=(MAX*pompvA1) - (MAX*vA2);
float Z1= M1+M2+M3;
float Z2=L1+L2+L3;
float Z3=Z1/Z2;
cetak("Nilai keanggotaan Terendah="+String(MIN));
cetak("Nilai keanggotaan Tertinggi="+String(MAX));
cetak("Nilai vA1="+String(vA1));
cetak("Nilai vA2="+String(vA2));
cetak("Nilai Momen1="+String(M1));
cetak("Nilai Momen2="+String(M2));
cetak("Nilai Momen3="+String(M3));
cetak("Nilai L1-L2-L3="+String(L1)+"#"+String(L2)+"#"+String(L3)+"#");
cetak("Nilai Z1="+String(Z1));
cetak("Nilai Z3="+String(Z3));
}//loop
float getRendah(float vx,float vmax,float vmin){
float vr=(vmax-vx)/(vmax-vmin);
if(vx<=vmin){vr=1;}
else if(vx>=vmax){vr=0;}
return vr;
}
float getSedang(float vx,float vmax,float vmin){
float avg=(vmax-vmin)-vmin;
float vmax2=(vmax+(vmax-avg));
float vr=(vx-avg)/(vmax-avg);
if(vx<=avg || vx>=vmax2){vr=0;}
else if(vx>=vmax && vx<=vmax2){vr=(vmax2-vx)/(vmax2-vmax);}
return vr;
}
float getTinggi(float vx,float vmax,float vmin){
float vr=(vx-vmax)/(vmax-vmin);
if(vx<=vmax){vr=0;}
else if(vx>=(vmax+(vmax-vmin))){vr=1;}
return vr;
}
String getRendahS(float vx,float vmax,float vmin){
String vr="(vmax-vx)/(vmax-vmin)";
if(vx<=vmin){vr="karena vx<=vmin maka v=1";}
else if(vx>=vmax){vr="karena vx>=vmax maka v=0";}
return vr;
}
String getSedangS(float vx,float vmax,float vmin){
float avg=(vmax-vmin)-vmin;
float vmax2=(vmax+(vmax-avg));
String vr="(vx-avg)/(vmax-avg)";
if(vx<=avg || vx>=vmax2){vr="karena vx<=avg || vx>=vmax2 maka v=0";}
else if(vx>=vmax && vx<=vmax2){vr="karena vx>=vmax && vx<=vmax2 maka v=(vmax2-vx)/(vmax2-vmax)";}
return vr;
}
String getTinggiS(float vx,float vmax,float vmin){
String vr="(vx-vmax)/(vmax-vmin)";
if(vx<=vmax){vr="karena vx<=vmax maka v=0";}
else if(vx>=(vmax+(vmax-vmin))){vr="karena vx>=(vmax+(vmax-vmin)) maka v=1";}
return vr;
}
void cetak(String var){
Serial.println(var);
}
int getMin(float* myArray){
int jd=3;//myArray.length();
int minIndex = 0;
int var= myArray[minIndex];
for (int i=1; i<jd; i++){
if (var>myArray[i]){
minIndex = i;
var = myArray[i];
}
}
return minIndex;
}
int getMax(float* myArray){
int jd=3;//myArray.length();
int minIndex = 0;
int var = myArray[minIndex];
for (int i=1; i<jd; i++){
if (var<myArray[i]){
minIndex = i;
var = myArray[i];
}
}
return minIndex;
}
Langganan:
Postingan (Atom)




