Created
January 22, 2015 18:33
-
-
Save sofyan48/bc259a11846d8e90235a to your computer and use it in GitHub Desktop.
Simulasi Pergerakan Motor DC-MP Menggunakan Metode Tsukamoto Fuzzy Logic
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include <iostream> | |
| #include <math.h> | |
| #include <cmath> | |
| using namespace std; | |
| //sensor kiri 0 == 0 cm | |
| float nba=0,nbb=6; //ambang dekat | |
| float nna=0,nnb=6,nnc=18; //ambang normal | |
| float nsa=6,nsb=18; //ambang jauh | |
| //sensor kanan 0 == 0 cm | |
| float pba=0,pbb=6; //ambang dekat | |
| float pna=0,pnb=6,pnc=18; //ambang normal | |
| float psa=6,psb=18; //ambang jauh | |
| //sensor depan 0 == 11 CM | |
| float sba=0,sbb=11; //ambang dekat | |
| float sna=0,snb=11,snc=29; //ambang normal | |
| float ssa=11,ssb=29; //ambang jauh | |
| //variabel defuzzyfikasi motor kiri dan kanan | |
| float motorlambata=0,motorlambatb=60; | |
| float motorsedanga=0,motorsedangb=60,motorsedangc=180; | |
| float motorcepata=60,motorcepatb=180; | |
| //variabel apredikat kiri | |
| float akr1,akr2,akr3,akr4,akr5,akr6,akr7,akr8,akr9,akr10,akr11,akr12,akr13,akr14,akr15,akr16,akr17,akr18,akr19,akr20,akr21,akr22,akr23,akr24,akr25,akr26,akr27; | |
| //variabel apredikat kanan | |
| float akn1,akn2,akn3,akn4,akn5,akn6,akn7,akn8,akn9,akn10,akn11,akn12,akn13,akn14,akn15,akn16,akn17,akn18,akn19,akn20,akn21,akn22,akn23,akn24,akn25,akn26,akn27; | |
| //variabel z motor kiri | |
| float zkr1,zkr2,zkr3,zkr4,zkr5,zkr6,zkr7,zkr8,zkr9,zkr10,zkr11,zkr12,zkr13,zkr14,zkr15,zkr16,zkr17,zkr18,zkr19,zkr20,zkr21,zkr22,zkr23,zkr24,zkr25,zkr26,zkr27; | |
| //variabel z motor kanan | |
| float zkn1,zkn2,zkn3,zkn4,zkn5,zkn6,zkn7,zkn8,zkn9,zkn10,zkn11,zkn12,zkn13,zkn14,zkn15,zkn16,zkn17,zkn18,zkn19,zkn20,zkn21,zkn22,zkn23,zkn24,zkn25,zkn26,zkn27; | |
| //variabel defuzzyfikasi | |
| float hasilzkr,hasilzkn,hasiltotalkiri,hasiltotalkanan,hasilakr,hasilakn; | |
| //variabel cari belok | |
| int selisih=0,derajat=0,arahBelok=0; | |
| //variabel Semua Himpunan | |
| float newxNB ,newxNN ,newxNS,newxPS,newxPN,newxPB,newxSS,newxSN,newxSB,nSensorKiri,nSensorKanan,nSensorDepan;; | |
| void defuzzyfikasi(){ | |
| //defuzzyfikasi tsukamoto | |
| hasilakr=akr1+akr2+akr3+akr4+akr5+akr6+akr7+akr8+akr9+akr10+akr11+akr12+akr13+akr14+akr15+akr16+akr17+akr18+akr19+akr20+akr21+akr22+akr23+akr24+akr25+akr26+akr27; | |
| hasilakn=akn1+akn2+akn3+akn4+akn5+akn6+akn7+akn8+akn9+akn10+akn11+akn12+akn13+akn14+akn15+akn16+akn17+akn18+akn19+akn20+akn21+akn22+akn23+akn24+akn25+akn26+akn27; | |
| hasilzkr=(zkr1*akr1)+(zkr2*akr2)+(zkr3*akr3)+(zkr4*akr4)+(zkr5*akr5)+(zkr6*akr6)+(zkr7*akr7)+(zkr8*akr8)+(zkr9*akr9)+(zkr10*akr10)+(zkr11*akr11)+(zkr12*akr12)+(zkr13*akr13)+(zkr14*akr14)+(zkr15*akr15)+(zkr16*akr16)+(zkr17*akr17)+(zkr18*akr18)+(zkr19*akr19)+(zkr20*akr20)+(zkr21*akr21)+(zkr22*akr22)+(zkr23*akr23)+(zkr24*akr24)+(zkr25*akr25)+(zkr26*akr26)+(zkr27*akr27); | |
| hasilzkn=(zkn1*akn1)+(zkn2*akn2)+(zkn3*akn3)+(zkn4*akn4)+(zkn5*akn5)+(zkn6*akn6)+(zkn7*akn7)+(zkn8*akn8)+(zkn9*akn9)+(zkn10*akn10)+(zkn11*akn11)+(zkn12*akn12)+(zkn13*akn13)+(zkn14*akn14)+(zkn15*akn15)+(zkn16*akn16)+(zkn17*akn17)+(zkn18*akn18)+(zkn19*akn19)+(zkn20*akn20)+(zkn21*akn21)+(zkn22*akn22)+(zkn23*akn23)+(zkn24*akn24)+(zkn25*akn25)+(zkn26*akn26)+(zkn27*akn27); | |
| cout<<"A Predikat Kiri : "<<endl<<akr1<<endl<<akr2<<endl<<akr3<<endl<<akr4<<endl<<akr5<<endl<<akr6<<endl<<akr7<<endl<<akr8<<endl<<akr9<<endl<<akr10<<endl<<akr11<<endl<<akr12<<endl<<akr13<<endl<<akr14<<endl<<akr15<<endl<<akr16<<endl<<akr17<<endl<<akr18<<endl<<akr19<<endl<<akr20<<endl<<akr21<<endl<<akr22<<endl<<akr23<<endl<<akr24<<endl<<akr25<<endl<<akr26<<endl<<akr27<<endl; | |
| cout<<"A Predikat Kanan : "<<endl<<akn1<<endl<<akn2<<endl<<akn3<<endl<<akn4<<endl<<akn5<<endl<<akn6<<endl<<akn7<<endl<<akn8<<endl<<akn9<<endl<<akn10<<endl<<akn11<<endl<<akn12<<endl<<akn13<<endl<<akn14<<endl<<akn15<<endl<<akn16<<endl<<akn17<<endl<<akn18<<endl<<akn19<<endl<<akn20<<endl<<akn21<<endl<<akn22<<endl<<akn23<<endl<<akn24<<endl<<akn25<<endl<<akn26<<endl<<akn27<<endl; | |
| hasiltotalkanan = hasilzkn/hasilakn; | |
| hasiltotalkiri = hasilzkr/hasilakr; | |
| cout<<"\n>>>>DEFUZZYFIKASI<<<"<<endl; | |
| cout<<"HASIL ZKR : "<<hasilzkr<<endl; | |
| cout<<"HASIL AKR : "<<hasilakr<<endl; | |
| cout<<"HASIL ZKN : "<<hasilzkn<<endl; | |
| cout<<"HASIL AKN : "<<hasilakn<<endl<<endl; | |
| cout<<"KECEPATAN MOTOR KIRI : "<<hasiltotalkiri<<endl; | |
| cout<<"KECEPATAN MOTOR KANAN : "<<hasiltotalkanan<<endl; | |
| cout<<endl; | |
| } | |
| //###############################PROSES FUZZYFIKASI####################################// | |
| float himpunanNB(float x){ | |
| //himpunan nb | |
| float newxNB; | |
| if ((nba<=x) && (x<=nbb)){ | |
| newxNB=(nbb-x)/(nbb-nba); | |
| } | |
| else if(x>=nbb){ | |
| newxNB=0; | |
| } | |
| else if (x<=nba){ | |
| newxNB=1; | |
| } | |
| return newxNB; | |
| } | |
| float himpunanNN(float x){ | |
| float newxNN; | |
| if (x<=nna){ | |
| newxNN=0; | |
| } | |
| else if ((nna<=x) && (x<=nnb)){ | |
| newxNN=(x-nna)/(nnb-nna); | |
| } | |
| else if ((nnb<=x) && (x<=nnc)){ | |
| newxNN=(nnc-x)/(nnc-nnb); | |
| } | |
| else if (x>=nnc){ | |
| newxNN=0; | |
| } | |
| return newxNN; | |
| } | |
| float himpunanNS(float x){ | |
| float newxNS; | |
| if (x<=nsa){ | |
| newxNS=0; | |
| } | |
| else if ((nsa<=x) && (x<=nsb)){ | |
| newxNS=(x-nsa)/(nsb-nsa); | |
| } | |
| else if(x>=nsb){ | |
| newxNS=1; | |
| } | |
| return newxNS; | |
| } | |
| //##########################################################################################################// | |
| float himpunanPS(float x){ | |
| float newxPS; | |
| if (x<=psa){ | |
| newxPS=0; | |
| } | |
| else if ((psa<=x) && (x<=psb)){ | |
| newxPS=(x-psa)/(psb-psa); | |
| } | |
| else if(x>=psb){ | |
| newxPS=1; | |
| } | |
| return newxPS; | |
| } | |
| float himpunanPN(float x){ | |
| float newxPN; | |
| if (x<pna){ | |
| newxPN=0.0; | |
| } | |
| else if ((pna<=x) && (x<pnb)){ | |
| newxPN=(x-pna)/(pnb-pna); | |
| } | |
| else if ((pnb<=x) && (x<=pnc)){ | |
| newxPN=(pnc-x)/(pnc-pnb); | |
| } | |
| else if (x>=pnc){ | |
| newxPN=0.0; | |
| } | |
| return newxPN; | |
| } | |
| float himpunanPB(float x){ | |
| float newxPB; | |
| if ((pba<=x) && (x<=pbb)){ | |
| newxPB=(pbb-x)/(pbb-pba); | |
| } | |
| else if(x>=pbb){ | |
| newxPB=0; | |
| } | |
| else if (x<=pba){ | |
| newxPB=1; | |
| } | |
| return newxPB; | |
| } | |
| //###############################################################################################// | |
| float himpunanSS(float x){ | |
| float newxSS; | |
| if (x<=ssa){ | |
| newxSS=0; | |
| } | |
| else if ((ssa<=x) && (x<=ssb)){ | |
| newxSS=(x-ssa)/(ssb-ssa); | |
| } | |
| else if(x>=ssb){ | |
| newxSS=1; | |
| } | |
| return newxSS; | |
| } | |
| float himpunanSN(float x){ | |
| float newxSN; | |
| if (x<sna){ | |
| newxSN=0.0; | |
| } | |
| else if ((sna<=x) && (x<snb)){ | |
| newxSN=(x-sna)/(snb-sna); | |
| } | |
| else if ((snb<=x) && (x<=snc)){ | |
| newxSN=(snc-x)/(snc-snb); | |
| } | |
| else if (x>=snc){ | |
| newxSN=0.0; | |
| } | |
| return newxSN; | |
| } | |
| float himpunanSB(float x){ | |
| float newxSB; | |
| if ((sba<=x) && (x<=sbb)){ | |
| newxSB=(sbb-x)/(sbb-sba); | |
| } | |
| else if(x>=sbb){ | |
| newxSB=0; | |
| } | |
| else if (x<=sba){ | |
| newxSB=1; | |
| } | |
| return newxSB; | |
| } | |
| // Implikasi segitiga | |
| float implikasiSegitiga(float x,float newx){ | |
| float value; | |
| if((x>=39.9) && (x<=53.2)){ | |
| value=motorsedangc-((motorsedangc-motorsedangb)*newx); | |
| } | |
| else{ | |
| value=motorsedanga+((motorsedangb-motorsedanga)*newx); | |
| } | |
| return value; | |
| } | |
| //################################### FUZZYFIKASI SELESAI ###############################################// | |
| //################################### FUNGSI MENCARI ARAH BELOK ###############################################// | |
| void cariBelok(int x,int y){ | |
| if(x == y){ | |
| cout << "Jika Kecepatan Motor Kanan = "<<x<<" SAMA Kecepatan Motor Kiri = "<< y <<endl<<"Maka Arah Robot Lurus"<<endl<<"Dalam Busur Bernilai = 90 Derajat"<<endl; | |
| } | |
| else if(x > y) | |
| { | |
| selisih = x-y; | |
| derajat=selisih/2; | |
| if (x > y){ | |
| arahBelok = derajat + 90; | |
| cout << "Jika Kecepatan Motor Kanan = "<<x<<" DAN Kecepatan Motor Kiri = "<< y <<endl<<"Maka Belok ke kanan sebesar Dalam Busur Bernilai = "<<arahBelok<<endl; | |
| } | |
| } | |
| else if(y > x) | |
| { | |
| selisih = y-x; | |
| derajat=selisih/2; | |
| if (x < y){ | |
| arahBelok = 90 - derajat; | |
| cout << "Jika Kecepatan Motor Kanan = "<<x<<" DAN Kecepatan Motor Kiri = " << y <<endl<<"Maka Belok ke kanan sebesar Dalam Busur Bernilai = "<<arahBelok<<endl; | |
| } | |
| } | |
| } | |
| void agregasiRule(){ | |
| //################################## RULE y=a+((b-a)*z) && y=a-((c-b)*z) #######################################// | |
| if(newxNB && newxPS && newxSS){ | |
| akr1=min(newxNB,newxSS); | |
| akn1=min(newxPS,newxSS); | |
| zkr1=motorcepata+((motorcepatb-motorcepata)*akr1); | |
| zkn1=motorcepata+((motorcepatb-motorcepata)*akn1); | |
| cout<<"\nRule Yang Berlaku 1\nZKR1 : "<<zkr1<<endl<<"ZKN1 :"<<zkn1<<endl; | |
| } | |
| if(newxNB && newxPS && newxSN){ | |
| akr2=min(newxNB,newxSN); | |
| akn2=min(newxPS,newxSN); | |
| zkr2=motorcepata+((motorcepatb-motorcepata)*akr2); | |
| zkn2=implikasiSegitiga(nSensorDepan,akn2); | |
| cout<<"\nRule Yang Berlaku 2\nZKR2 : "<<zkr2<<endl<<"ZKN2 :"<<zkn2<<endl; | |
| } | |
| if(newxNB && newxPS && newxSB){ | |
| akr3=min(newxNB,newxSB); | |
| akn3=min(newxPS,newxSB); | |
| zkr3=motorcepata+((motorcepatb-motorcepata)*akr3); | |
| zkn3=motorlambata+((motorlambatb-motorlambata)*akn3); | |
| cout<<"\nRule Yang Berlaku 3\nZKR3 : "<<zkr3<<endl<<"ZKN3 :"<<zkn3<<endl; | |
| } | |
| if(newxNN && newxPS && newxSS){ | |
| akr4=min(newxNN,newxSS); | |
| akn4=min(newxPS,newxSS); | |
| zkr4=motorcepata+((motorcepatb-motorcepata)*akr4); | |
| zkn4=motorcepata+((motorcepatb-motorcepata)*akn4); | |
| cout<<"\nRule Yang Berlaku 4\nZKR4 : "<<zkr4<<endl<<"ZKN4 :"<<zkn4<<endl; | |
| } | |
| if(newxNN && newxPS && newxSN){ | |
| akr5=min(newxNN,newxSN); | |
| akn5=min(newxPS,newxSN); | |
| zkr5=motorcepata+((motorcepatb-motorcepata)*akr5); | |
| zkn5=implikasiSegitiga(nSensorDepan,akn5); | |
| cout<<"\nRule Yang Berlaku 5\nZKR5 : "<<zkr5<<endl<<"ZKN5 :"<<zkn5<<endl; | |
| } | |
| if(newxNN && newxPS && newxSB){ | |
| akr6=min(newxNN,newxSB); | |
| akn6=min(newxPS,newxSB); | |
| zkr6=motorcepata+((motorcepatb-motorcepata)*akr6); | |
| zkn6=motorlambata+((motorlambatb-motorlambata)*akn6); | |
| cout<<"\nRule Yang Berlaku 6\nZKR6 : "<<zkr6<<endl<<"ZKN6 :"<<zkn6<<endl; | |
| } | |
| if(newxNS && newxPS && newxSN){ | |
| zkr7=min(newxNS,newxSN); | |
| akn7=min(newxPS,newxSN); | |
| zkr7=motorcepata+((motorcepatb-motorcepata)*akr7); | |
| zkn7=implikasiSegitiga(nSensorDepan,akn7); | |
| cout<<"\nRule Yang Berlaku 7\nZKR7 : "<<zkr7<<endl<<"ZKN7 :"<<zkn7<<endl; | |
| } | |
| if(newxNS && newxPS && newxSB){ | |
| akr8=min(newxNS,newxSB); | |
| akn8=min(newxPS,newxSB); | |
| zkr8=motorcepata+((motorcepatb-motorcepata)*akr8); | |
| zkn8=motorlambata+((motorlambatb-motorlambata)*akn8); | |
| cout<<"\nRule Yang Berlaku 8\nZKR8 : "<<zkr8<<endl<<"ZKN8 :"<<zkn8<<endl; | |
| } | |
| if(newxNS && newxPB && newxSS){ | |
| akr9=min(newxNS,newxSS); | |
| akn9=min(newxPB,newxSS); | |
| zkr9=motorcepata+((motorcepatb-motorcepata)*akr9); | |
| zkn9=motorcepata+((motorcepatb-motorcepata)*akn9); | |
| cout<<"\nRule Yang Berlaku 9\nZKR9 : "<<zkr9<<endl<<"ZKN9 :"<<zkn9<<endl; | |
| } | |
| if(newxNS && newxPB && newxSN){ | |
| akr10=min(newxNS,newxSN); | |
| akn10=min(newxPB,newxSN); | |
| zkr10=implikasiSegitiga(nSensorDepan,akr10); | |
| zkn10=motorcepata+((motorcepatb-motorcepata)*akn10); | |
| cout<<"\nRule Yang Berlaku 10\nZKR10 : "<<zkr10<<endl<<"ZKN10 :"<<zkn10<<endl; | |
| } | |
| if(newxNS && newxPB && newxSB){ | |
| akr11=min(newxNS,newxSB); | |
| akn11=min(newxPB,newxSB); | |
| zkr11=motorlambata+((motorlambatb-motorlambata)*akr11); | |
| zkn11=motorcepata+((motorcepatb-motorcepata)*akn11); | |
| cout<<"\nRule Yang Berlaku 11\nZKR11 : "<<zkr11<<endl<<"ZKN11 :"<<zkn11<<endl; | |
| } | |
| if(newxNS && newxPN && newxSB){ | |
| akr12=min(newxNS,newxSB); | |
| akn12=min(newxPN,newxSB); | |
| zkr12=motorlambata+((motorlambatb-motorlambata)*akr12); | |
| zkn12=motorcepata+((motorcepatb-motorcepata)*akn12); | |
| cout<<"\nRule Yang Berlaku 12\nZKR12 : "<<zkr12<<endl<<"ZKN12 :"<<zkn12<<endl; | |
| } | |
| if(newxNS && newxPN && newxSN){ | |
| akr13=min(newxNS,newxSN); | |
| akn13=min(newxPN,newxSN); | |
| zkr13=implikasiSegitiga(nSensorDepan,akr13); | |
| zkn13=motorcepata+((motorcepatb-motorcepata)*akn13); | |
| cout<<"\nRule Yang Berlaku 13\nZKR13 : "<<zkr13<<endl<<"ZKN13 :"<<zkn13<<endl; | |
| } | |
| if(newxNS && newxPN && newxSS){ | |
| akr14=min(newxNS,newxSS); | |
| akn14=min(newxPN,newxSS); | |
| zkr14=motorlambata+((motorlambatb-motorlambata)*akr14); | |
| zkn14=motorcepata+((motorcepatb-motorcepata)*akn14); | |
| cout<<"\nRule Yang Berlaku 14\nZKR14 : "<<zkr14<<endl<<"ZKN14 :"<<zkn14<<endl; | |
| } | |
| if(newxNB && newxPN && newxSS){ | |
| akr15=min(newxNB,newxSS); | |
| akn15=min(newxPN,newxSS); | |
| zkr15=motorcepata+((motorcepatb-motorcepata)*akr15); | |
| zkn15=motorcepata+((motorcepatb-motorcepata)*akn15); | |
| cout<<"\nRule Yang Berlaku 15\nZKR15 : "<<zkr15<<endl<<"ZKN15 :"<<zkn15<<endl; | |
| } | |
| if(newxNB && newxPN && newxSN){ | |
| akr16=min(newxNB,newxSN); | |
| akn16=min(newxPN,newxSN); | |
| zkr16=motorcepata+((motorcepatb-motorcepata)*akr16); | |
| zkn16=implikasiSegitiga(nSensorDepan,akn16); | |
| cout<<"\nRule Yang Berlaku 16\nZKR16 : "<<zkr16<<endl<<"ZKN16 :"<<zkn16<<endl; | |
| } | |
| if(newxNB && newxPN && newxSB){ | |
| akr17=min(newxNB,newxSB); | |
| akn17=min(newxPN,newxSB); | |
| zkr17=motorcepata+((motorcepatb-motorcepata)*akr17); | |
| zkn17=motorlambata+((motorlambatb-motorlambata)*akn17); | |
| cout<<"\nRule Yang Berlaku 17\nZKR17 : "<<zkr17<<endl<<"ZKN17 :"<<zkn17<<endl; | |
| } | |
| if(newxNN && newxPN && newxSS){ | |
| akr18=min(newxNN,newxSS); | |
| akn18=min(newxPN,newxSS); | |
| zkr18=motorcepata+((motorcepatb-motorcepata)*akr18); | |
| zkn18=motorcepata+((motorcepatb-motorcepata)*akn18); | |
| cout<<"\nRule Yang Berlaku 18\nZKR18 : "<<zkr18<<endl<<"ZKN18 :"<<zkn18<<endl; | |
| } | |
| if(newxNN && newxPN && newxSB){ | |
| akr19=min(newxNN,newxSB); | |
| akn19=min(newxPN,newxSB); | |
| zkr19=motorcepata+((motorcepatb-motorcepata)*akr19); | |
| zkn19=motorlambata+((motorlambatb-motorlambata)*akn19); | |
| cout<<"\nRule Yang Berlaku 19\nZKR19 : "<<zkr19<<endl<<"ZKN19 :"<<zkn19<<endl; | |
| } | |
| if(newxNB && newxPB && newxSS){ | |
| akr20=min(newxNB,newxSS); | |
| akn20=min(newxPB,newxSS); | |
| zkr20=motorcepata+((motorcepatb-motorcepata)*akr20); | |
| zkn20=motorcepata+((motorcepatb-motorcepata)*akn20); | |
| cout<<"\nRule Yang Berlaku 20\nZKR20 : "<<zkr20<<endl<<"ZKN20 :"<<zkn20<<endl; | |
| } | |
| if(newxNB && newxPB && newxSN){ | |
| akr21=min(newxNB,newxSN); | |
| akn21=min(newxPB,newxSN); | |
| zkr21=motorcepata+((motorcepatb-motorcepata)*akr21); | |
| zkn21=implikasiSegitiga(nSensorDepan,akn21); | |
| cout<<"\nRule Yang Berlaku 21\nZKR21 : "<<zkr21<<endl<<"ZKN21 :"<<zkn21<<endl; | |
| } | |
| if(newxNN && newxPB && newxSS){ | |
| akr22=min(newxNN,newxSS); | |
| akn22=min(newxPB,newxSS); | |
| zkr22=motorcepata+((motorcepatb-motorcepata)*akr22); | |
| zkn22=motorcepata+((motorcepatb-motorcepata)*akn22); | |
| cout<<"\nRule Yang Berlaku 22\nZKR22 : "<<zkr22<<endl<<"ZKN22 :"<<zkn22<<endl; | |
| } | |
| if(newxNN && newxPB && newxSN){ | |
| akr23=min(newxNN,newxSN); | |
| akn23=min(newxPB,newxSN); | |
| zkr23=implikasiSegitiga(nSensorDepan,akr23); | |
| zkn23=motorcepata+((motorcepatb-motorcepata)*akn23); | |
| cout<<"\nRule Yang Berlaku 23\nZKR23 : "<<zkr23<<endl<<"ZKN23 :"<<zkn23<<endl; | |
| } | |
| if(newxNN && newxPB && newxSB){ | |
| akr24=min(newxNN,newxSB); | |
| akn24=min(newxPB,newxSB); | |
| zkr24=motorlambata+((motorlambatb-motorlambata)*akr24); | |
| zkn24=motorcepata+((motorcepatb-motorcepata)*akn24); | |
| cout<<"\nRule Yang Berlaku 24\nZKR24 : "<<zkr24<<endl<<"ZKN24 :"<<zkn24<<endl; | |
| } | |
| if(newxNS && newxPS && newxSS){ | |
| akr25=min(newxNS,newxSS); | |
| akn25=min(newxPS,newxSS); | |
| zkr25=motorcepata+((motorcepatb-motorcepata)*akr25); | |
| zkn25=motorcepata+((motorcepatb-motorcepata)*akn25); | |
| cout<<"\nRule Yang Berlaku 25\nZKR25 : "<<zkr25<<endl<<"ZKN25 :"<<zkn25<<endl; | |
| } | |
| if(newxNN && newxPN && newxSN){ | |
| akr26=min(newxNN,newxSN); | |
| akn26=min(newxPN,newxSN); | |
| zkr26=motorcepata+((motorcepatb-motorcepata)*akr26); | |
| zkn26=motorcepata+((motorcepatb-motorcepata)*akn26); | |
| cout<<"\nRule Yang Berlaku 26\nZKR26 : "<<zkr26<<endl<<"ZKN26 :"<<zkn26<<endl; | |
| } | |
| if(newxNB && newxPB && newxSB){ | |
| akr27=min(newxNB,newxSB); | |
| akn27=min(newxPB,newxSB); | |
| zkr27=motorcepata+((motorcepatb-motorcepata)*akr27); | |
| zkn27=motorcepata+((motorcepatb-motorcepata)*akn27); | |
| cout<<"\nRule Yang Berlaku 27\nZKR27 : "<<zkr27<<endl<<"ZKN27 :"<<zkn27<<endl; | |
| cout<<"Berhubung Sangat Dekat \nMaka Balik Direksi Arah Motor Menjadi Mundur"<<endl; | |
| } | |
| //################################# RULE Selesai ######################################// | |
| } | |
| int main (){ | |
| cout<<endl<<">>>> SIMULASI PENGENDALIAN MOTOR DENGAN LOGIKA FUZZY METODE TSUKAMOTO <<<<"<<endl<<endl; | |
| do | |
| { | |
| cout<<"Masukan Nilai Sensor Kiri : ";cin>>nSensorKiri; | |
| cout<<"Masukan Nilai Sensor Kanan : ";cin>>nSensorKanan; | |
| cout<<"Masukan Nilai Sensor Depan : ";cin>>nSensorDepan; | |
| //himpunan NB | |
| newxNB = himpunanNB(nSensorKiri); | |
| //himpunan NN | |
| newxNN = himpunanNN(nSensorKiri); | |
| //himpunan NS | |
| newxNS = himpunanNS(nSensorKiri); | |
| //himpunan PS | |
| newxPS = himpunanPS(nSensorKanan); | |
| //himpunan PN | |
| newxPN = himpunanPN(nSensorKanan); | |
| //himpunan PB | |
| float newxPB = himpunanPB(nSensorKanan); | |
| //himpunan SS | |
| newxSS = himpunanSS(nSensorDepan); | |
| //himpunan SN | |
| newxSN = himpunanSN(nSensorDepan); | |
| //himpunan SB | |
| newxSB = himpunanSB(nSensorDepan); | |
| cout<<"\nPROSES FUZZYFIKASI MASING-MASING INPUTAN \n\n"; | |
| cout<<"SENSOR KIRI \n"; | |
| cout<<"Nilai Himpunan NS : "<<newxNS<<endl; | |
| cout<<"Nilai Himpunan NN : "<<newxNN<<endl; | |
| cout<<"Nilai Himpunan NB : "<<newxNB<<endl; | |
| cout<<"SENSOR KANAN \n"; | |
| cout<<"Nilai Himpunan PS : "<<newxPS<<endl; | |
| cout<<"Nilai Himpunan PN : "<<newxPN<<endl; | |
| cout<<"Nilai Himpunan PB : "<<newxPB<<endl; | |
| cout<<"SENSOR DEPAN \n"; | |
| cout<<"Nilai Himpunan SS : "<<newxSS<<endl; | |
| cout<<"Nilai Himpunan SN : "<<newxSN<<endl; | |
| cout<<"Nilai Himpunan SB : "<<newxSB<<endl; | |
| agregasiRule(); | |
| defuzzyfikasi(); | |
| cariBelok(hasiltotalkanan,hasiltotalkiri); | |
| cout<<endl; | |
| } | |
| while(true); | |
| return 0; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment