Anda di halaman 1dari 26

LAPORAN PRAKTIK

SISTEM KENDALI CERDAS


“ Fuzyfikasi Pada Mikrokontroller Arduino-Proteus “
Dosen Pengampu : Dr. Ir. Fatchul Arifin M.T.

Pendidikan Teknik Elektronika


FAKULTAS TEKNIK

Cecen Hafada Ihsan NIM : 17502244004

Universitas Negeri Yogyakarta


Jurusan Pendidikan Teknik Elektronika dan Informatika
( JPTEI )
2019
A. Tujuan
Setelah melakukan praktikum mahasiswa diharapkan :
1. Memahami dan mengenal proses fuzzyfikasi, Evaluasi Rule dan
Defuzzyfikasi serta aplikasinya pada mikrokontroller Arduino Nano
dalam bentuk simulasi ISIS Proteus

B. Teori Dasar
Logika Fuzzy pertama kali dikembangkan oleh Lotfi A. Zadeh pada
tahun 1965. Teori ini banyak diterapkan diberbagai bidang, antara lain
representasu pikiran manusia kedalam suatu sistm. Banyak alasan mengapa
penggunaan logika fuzzy ini sering dipergunakan antra lain ,konsep logika
fuzzy yang mirip dengan konsep berpikir manusia. Sistem fuzzy dapat
merepresentasikan pengetahuan manusia ke dalam bentuk matematis
dengan lebih menyerupai cara berpikir manusia. Pengontrolan dengan
logika fuzzy mempunyai kelebihan yaitu dapat mengontrol sistem yang
kompleks, non-linier, atau sistem yang sulit direpresentasikan kedalam
bentuk matematis. Selain itu, informasi berupa pengetahuan dan
pengalaman mempunyai peranan penting dalam mengenali perilaku sistem
di dunia nyata.
Logika Fuzzy adalah suatu cara yang tepat untuk memetakan suatu
ruang input ke dalam ruang output. Untuk sistem yang sangat rumit,
penggunaan logika fuzzy ( fuzzy logic ) adalah salah satu pemecahnya.
Sistem tradsional dirancang untuk mengontrol keluaran tunggal yang
berasal dari beberapa masukan yang tidak saling berhubungan. Karena
ketidak tergantungan ini, penambahan masukan yang baru akan
memperumit proses kontrol dan membutuhkan proses perhitungan kembali
dari semua fungsi. Kebalikannya, penambahan masukan baru pada sistem
fuzzy, yaitu sistem yang bekerja berdasarkan prinsip-prinsip logika fuzzy,
hanya membutuhkan penambahan fungsi keanggotaan yang baru dan
aturan-aturan yang berhubungan dengannya.
Logika fuzzy juga memiliki himpunan fuzzy yang mana pada dasarnya,
teori himpunan fuzzy emerupakan perulasan dari teori himpunan klasik.
Dimana dengan logika fuzzy, hasil yang keluar tidak akan selalu konstan
dengan input yang ada. Cara kerja logika fuzzy secara garis besar terdiri
dari input, proses dan output. Logika fuzzy merupakan suatu teori
himpunan logika yang dikembangkan untuk mengatasi konsep nilai yang
terdapat diantara kebenaran ( truth ) dan kesalahan ( false ). Dengan
menggunakan fuzzy logic nilai yang dihasilkan bukan hanya ya ( 1 ) atau
tidak ( 0 ) tetapi seluruh kemungkinan diantara 0 dan 1.
Proteus adalah sebuah software untuk mendisain PCB yang juga
dilengkapi dengan simulasi Pspice pada level skematik sebelum rangkaian
skematik di-upgrade ke PCB sehingga sebelum PCBnya di cetak kita akan
tahu apakah PCB yang akan kita cetak apakah sudah benar atau tidak.
Proteus mampu mengkombinasikan program ISIS untuk membuat
skematik desain rangkaian dengan program ARES untuk membuat layout
PCB dari skematik yang kita buat. Software Proteus ini bagus digunakan
untuk desain rangkaian mikrokontroller.
Proteus juga bagus untuk belajar elektronika seperti dasar-dasar
elektronika sampai pada aplikasi pada mikrokontroller. Software Proteus
ini menyediakan banyak contoh aplikasi desain yang disertakan pada
instalasinya. Sehingga memungkinkan kita bisa belajar dari contoh-contoh
yang sudah ada. Proteus lebih memiliki kelebihan pada desainnya yang
sederhana, sangat mudah dan bagus digunakan untuk perancangan
rangkaian mikrokontroller yang akan sangat membantu digunakan oleh
mahasiswa yang mengambil mata kuliah berhubungan dengan
mikrokontroller. Kelebihannya yang lain adalah sebelum PCB dicetak
skematiknya bisa disimulasikan dulu. Desain-desainnya bisa digabungkan
dan masih banyak lagi kelebihan yang dimiliki Proteus.

C. Alat dan Bahan


1. PC ( Personal Computer ) / Laptop
2. Software Arduino IDE + Software ISIS Proteus
3. Library Pendukung

D. Keselamatan Kerja
1. Awali praktikum dengan berdoa.
2. Gunakan pakain praktik pada saat praktikum.
3. Jauhkan peralatan yang tidak diperlukan dari meja kerja.
4. Bekerjalah dengan keadaan tanpa tegangan pada saat membuat dan
mengubah rangkaian.
5. Tanyakan kepada dosen pengampu atau staff pengajar ketika ada hal-
hal yang masih kurang paham.
E. Skema

Gambar 1. Skematik Rangkaian Pada Simulasi Proteus

Tabel 2. Tabel List Komponen

Nama Komponen Nama Komponen di Proteus


Ardunio Nano Arduino Nano
LCD 20x4 LM044L
Potensiometer POT-HG
Push Button Button
Motor DC Motor
Driver Motor L293D
Tabel 3. Konfigurasi Pin Skematik
Pin Arduino Pin Trainer Pin Arduino Pin Trainer
LCD Driver Motor L293D
8 D7 2 IN1
9 D6 3 IN2
10 D5 6 EN1 (KANAN)
11 D4 4 IN3
12 E 7 IN4
13 RS 5 EN2 (KIRI)
Push Button Potensiometer
A2 S1 A0 ERROR
A3 S2 A1 D_ERROR
A4 S3

F. Langkah Kerja
1. Instal dahulu komponen Arduino Nano pada software ISIS Proteus
anda. Library bisa di download di http://unyku.ga/o8CQm cari file
“Library Arduino in Proteus.rar” kemudian klik download.
2. Ekstrak dan buka folder “Library Arduino in Proteus”, Copy ke-enam
file library tersebut dan masukkan ke dalam folder LIBRARY pada
instalasi folder Proteus yaitu “C:\Program Files\Labcenter
Electronics\Proteus 7 Professional\LIBRARY\”
3. Untuk melihat hasilnya, re-open atau tutup dan buka kembali aplikasi
ISIS Proteus.
4. Lihat dikomponen Library atau tekan P, lalu cari dengan keyword
Arduino, Setelah library Arduino Nano terinstal kemudian siapkan alat
dan bahan yang dibutuhkan.
5. Buatlah rangkaian pada software ISIS Proteus sesuai pada gambar 20 di
atas.
6. Setelah selesai membuat rangkaian kemudian buka software Arduino
IDE dan ketikkan program berikut ini pada software Arduino IDE.

//motor kanan
#define IN1 2
#define IN2 3
#define pwm_kanan 6
//motor kanan
//motor kiri
#define IN3 4
#define IN4 7
#define pwm_kiri 5
//motor kiri
//lcd
#include <LiquidCrystal.h>
LiquidCrystal lcd(13, 12, 11, 10, 9, 8);
/*
* The circuit:
* LCD RS pin to digital pin 12
* LCD Enable pin to digital pin 11
* LCD D4 pin to digital pin 5
* LCD D5 pin to digital pin 4
* LCD D6 pin to digital pin 3
* LCD D7 pin to digital pin 2
*/
//lcd
//variabel global
int a,b,i,j,speed_left,speed_right,sensorA,sensorB;
float x, y, error, d_error, z1=60,z2=80,a1=-145.5556,a2=-
80,a3=0,a4=80,a5=145.5556;//z = luas dan a = COA out;
float u_error[3],u_d_error[3],u[3][3], errorneg, errorzero, errorpos,
d_errorneg, d_errorzero,d_errorpos;
float nilai_awal,beda_pwm, validasi, pembilang, penyebut;
//variabel global
void setup() {
lcd.begin(20, 4);
Serial.begin(9600);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(pwm_kanan, OUTPUT);
pinMode(pwm_kiri, OUTPUT);

pinMode(16, INPUT_PULLUP);
pinMode(17, INPUT_PULLUP);
pinMode(18, INPUT_PULLUP);
}
void loop() {
nilai_awal = 100;
baca_sensor(); //membaca nilai error dan d_error
fuzzyfikasi();
rule();
defuzzyfikasi();

kendali_motor(speed_left,speed_right);
int tombol_fuzzyfikasi = digitalRead(16);
int tombol_rule = digitalRead(17);
int tombol_defuzzyfikasi = digitalRead(18);

if(tombol_fuzzyfikasi==0 && tombol_rule==1 && tombol_defuzzyfikasi==1)


{display_fuzzyfikasi();} //menampilkan data proses fuzzyfikasi
if(tombol_fuzzyfikasi==1 && tombol_rule==0 && tombol_defuzzyfikasi==1)
{display_rule();} //nenampilkan implikasi setiap rule
if(tombol_fuzzyfikasi==1 && tombol_rule==1 && tombol_defuzzyfikasi==0)
{display_defuzzyfikasi();}//menampilkan output tegas dan nilai kecepatan
motor kiri dan kanan
if(tombol_fuzzyfikasi==1 && tombol_rule==1 && tombol_defuzzyfikasi==1)
{lcd.clear();}
}
void baca_sensor() {
sensorA = analogRead(A0);
sensorB = analogRead(A1);
a = map(sensorA, 0, 1023, 0, 255);
b = map(sensorB, 0, 1023, 0, 255);

if(a>=241) {error=8;}
else if(a>=227) {error=7;}
else if(a>=213) {error=6;}
else if(a>=199) {error=5;}
else if(a>=185) {error=4;}
else if(a>=171) {error=3;}
else if(a>=157) {error=2;}
else if(a>=143) {error=1;}
else if(a>=129) {error=0;}
else if(a>=115) {error=
-1;}
else if(a>=101) {error=
-2;}
else if(a>=87) {error=
-3;}
else if(a>=73) {error=
-4;}
else if(a>=59) {error=
-5;}
else if(a>=45) {error=
-6;}
else if(a>=31) {error=
-7;}
else if((a<31)&&(a>=0)) {error=
-8;}

if(b>=248) {d_error=16;}
else if(b>=241) {d_error=15;}
else if(b>=234) {d_error=14;}
else if(b>=227) {d_error=13;}
else if(b>=220) {d_error=12;}
else if(b>=213) {d_error=11;}
else if(b>=206) {d_error=10;}
else if(b>=199) {d_error=9;}
else if(b>=192) {d_error=8;}
else if(b>=185) {d_error=7;}
else if(b>=178) {d_error=6;}
else if(b>=171) {d_error=5;}
else if(b>=164) {d_error=4;}
else if(b>=157) {d_error=3;}
else if(b>=150) {d_error=2;}
else if(b>=143) {d_error=1;}
else if(b>=136) {d_error=0;}
else if(b>=129) {d_error=
-1;}
else if(b>=122) {d_error=
-2;}
else if(b>=115) {d_error=
-3;}
else if(b>=108) {d_error=
-4;}
else if(b>=101) {d_error=
-5;}
else if(b>= 94) {d_error=
-6;}
else if(b>= 87) {d_error=
-7;}
else if(b>= 80) {d_error=
-8;}
else if(b>= 73) {d_error=
-9;}
else if(b>= 66) {d_error=
-10;}
else if(b>= 59) {d_error=
-11;}
else if(b>= 52) {d_error=
-12;}
else if(b>= 45) {d_error=
-13;}
else if(b>= 38) {d_error=
-14;}
else if(b>= 31) {d_error=
-15;}
else if((b<31)&&(b>= 0)) {d_error=
-16;}
}
void fuzzyfikasi_error() {
x = error;
//u_error[0] = Negatif 1
//u_error[1] = Zero 1
//u_error[2] = Positif 1

if(x >= 5)
{
u_error[0]=0;
u_error[1]=0;
u_error[2]=1;

else if(x >= 0)


{
u_error[0]=0;
u_error[1]=(5
-x)/5;
u_error[2]=(x
-0)/5;

else if(x >=


-5)
{
u_error[0]=(0
-x)/5;
u_error[1]=(x+5)/5;
u_error[2]=0;

else if(x <


-5)
{
u_error[0]=1;
u_error[1]=0;
u_error[2]=0;

errorneg = u_error[0]
;
errorzero = u_error[1];
errorpos = u_error[2]; }
void fuzzyfikasi_perubahan_error() {
y = d_error;
// u_d_error[0]=Negatif 2
// u_d_error[1]=Zero 2,
//u_d_error[2]=Positif 2

if(y >= 8)
{
u_d_error[0]=0;
u_d_error[1]=0;
u_d_error[2]=1;

else if(y >= 0)


{
u_d_error[0]=0;
u_d_error[1]=(8
-y)/8;
u_d_error[2]=(y
-0)/8;

}
else if(y >= -8)
{
u_d_error[0]=(0-y)/8;
u_d_error[1]=(y+8)/8;
u_d_error[2]=0;
}
else if(y < -8)
{
u_d_error[0]=1;
u_d_error[1]=0;
u_d_error[2]=0;
}

d_errorneg = u_d_error[0];
d_errorzero = u_d_error[1];
d_errorpos = u_d_error[2];
}
void fuzzyfikasi()
{
fuzzyfikasi_error();
fuzzyfikasi_perubahan_error();
}
void rule() // basis aturan
{
for(i=0;i<=2;i++)
{
for(j=0;j<=2;j++)
{
if(u_error[i]<u_d_error[j])
{
u[i][j]=u_error[i]; // menggunakan operator AND
}
else
{
u[i][j]=u_d_error[j];
}
}
}
}
void defuzzyfikasi()
{
//menggunakan metode mamdani dan defuzzyfikasi meggunakan metode centroid
of area
pembilang
=(u[0][0]*a5*z1)+(u[0][1]*a4*z2)+(u[0][2]*a3*z2)+(u[1][0]*a4*z2)+(u[1][1]*a
3*z2)+(u[1][2]*a2*z2)+(u[2][0]*a3*z2)+(u[2][1]*a2*z2)+(u[2][2]*a1*z1);
penyebut
=(u[0][0]*z1)+(u[0][1]*z2)+(u[0][2]*z2)+(u[1][0]*z2)+(u[1][1]*z2)+(u[1][2]*
z2)+(u[2][0]*z2)+(u[2][1]*z2)+(u[2][2]*z1);

validasi=pembilang/penyebut; // perhitungan defuzzyfikasi dengan


menggabungkan seluruh nilai min yang sudah didapatkan
Serial.print("validasi= ");
Serial.println(validasi);
beda_pwm = validasi;
speed_left = nilai_awal-beda_pwm;
speed_right = nilai_awal+beda_pwm;
}
void kendali_motor(float pwm_ki,float pwm_ka)
{

if(pwm_ki>=0) //motor kiri maju


{
analogWrite(pwm_kiri, pwm_ki);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
//IN3 = 0;
//IN4 = 1;
}

else if(pwm_ki<0)
{
analogWrite(pwm_kiri, -pwm_ki);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
//IN3 = 1;
//IN4 = 0;
}
if(pwm_ka>=0) //motor kanan maju
{
analogWrite(pwm_kanan, pwm_ka);
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
//IN1 = 0;
//IN2 = 1;
}

else if(pwm_ka<0) //motor kanan mundur


{
analogWrite(pwm_kanan, -pwm_ka);
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
//IN1 = 1;
//IN2 = 0;
}
}
void display_fuzzyfikasi()
{
lcd.setCursor(0, 0);lcd.print("er=");
lcd.setCursor(3, 0);lcd.print(error);
lcd.setCursor(9, 0);lcd.print("d_er=");
lcd.setCursor(14, 0);lcd.print(d_error);

lcd.setCursor(0, 1);lcd.print("neg=");
lcd.setCursor(4, 1);lcd.print(errorneg);
lcd.setCursor(9, 1);lcd.print("neg=");
lcd.setCursor(14, 1);lcd.print(d_errorneg);

lcd.setCursor(0, 2);lcd.print("zer=");
lcd.setCursor(4, 2);lcd.print(errorzero);
lcd.setCursor(9, 2);lcd.print("zer=");
lcd.setCursor(14, 2);lcd.print(d_errorzero);
lcd.setCursor(0, 3);lcd.print("pos=");
lcd.setCursor(4, 3);lcd.print(errorpos);
lcd.setCursor(9, 3);lcd.print("pos=");
lcd.setCursor(14, 3);lcd.print(d_errorpos);
}
void display_rule()
{
lcd.setCursor(0, 0);lcd.print("er=");
lcd.setCursor(3, 0);lcd.print(error);
lcd.setCursor(9, 0);lcd.print("d_er=");
lcd.setCursor(14, 0);lcd.print(d_error);
lcd.setCursor(0, 1);lcd.print("1=");
lcd.setCursor(2, 1);lcd.print(u[0][0]);
lcd.setCursor(7, 1);lcd.print("2=");
lcd.setCursor(9, 1);lcd.print(u[0][1]);
lcd.setCursor(14, 1);lcd.print("3=");
lcd.setCursor(16, 1);lcd.print(u[0][2]);
lcd.setCursor(0, 2);lcd.print("4=");
lcd.setCursor(2, 2);lcd.print(u[1][0]);
lcd.setCursor(7, 2);lcd.print("5=");
lcd.setCursor(9, 2);lcd.print(u[1][1]);
lcd.setCursor(14, 2);lcd.print("6=");
lcd.setCursor(16, 2);lcd.print(u[1][2]);
lcd.setCursor(0, 3);lcd.print("7=");
lcd.setCursor(2, 3);lcd.print(u[2][0]);
lcd.setCursor(7, 3);lcd.print("8=");
lcd.setCursor(9, 3);lcd.print(u[2][1]);
lcd.setCursor(14, 3);lcd.print("9=");
lcd.setCursor(16, 3);lcd.print(u[2][2]);
}
void display_defuzzyfikasi()
{
lcd.setCursor(0, 0);lcd.print("er=");
lcd.setCursor(3, 0);lcd.print(error);
lcd.setCursor(9, 0);lcd.print("d_er=");
lcd.setCursor(14, 0);lcd.print(d_error);

lcd.setCursor(0, 1);lcd.print("Output =");


lcd.setCursor(15, 1);lcd.print(beda_pwm);

lcd.setCursor(0, 2);lcd.print("Speed_Right =");


lcd.setCursor(15, 2);lcd.print(speed_right);
lcd.setCursor(0, 3);lcd.print("Speed_Left =");
lcd.setCursor(15, 3);lcd.print(speed_left);
}

7. Setelah program ditulis dan pastikan tidak ada program yang salah
kemudian lakukan proses compile program.
8. Setelah program selesai di compile, periksa dimana direktori file hex di
bagian bawah Arduino, lihat gambar di bawah ini.

9. Buka ISIS Protus Klik dua kali komponen Arduino Nano, pada bagian
program file klik icon folder kemudian bukalah direktori berikut sebagai
contoh
"C:\Users\USER~1.USE\AppData\Local\Temp\buildef30c71794278a0
4d1962dea16 3641ef.tmp/Job_8.ino.hex" Catatan: letak direktori file
tersebut bisa berbeda-beda pastikan dahulu anda cek di bagian bawah
software Arduino IDE.
10. Setelah itu klik OK kemudian jalankan simulasi proteus.
11. Setelah program telah di kirim ke Arduino nano dengan baik maka LCD
20x4 akan menampilkan tulisan seperti gambar di bawah ini:

12.Ubahlah nilai error menjadi 0 dengan memutar potensiometer error dan


amati nilai error_negatif, error_zero dan error_positif pada display
LCD.
13.Ulangi langkah kerja 12 untuk data error sesuai tabel 4 dan catat
hasilnya.

Tabel 4. Fuzzyfikasi Eror

Error Error_Negatif Error_Zero Error_Positif

-8 1 0.00 0.00

-7 1 0.00 0.00

-6 1 0.00 0.00

-5 1 0.00 0.00

-4 0.80 0.20 0.00

-3 0.60 0.40 0.00

-2 0.40 0.60 0.00

-1 0,20 0.80 0.00

0 0.00 1 0.00

1 0.00 0.80 0.20

2 0.00 0.60 0.40

3 0.00 0.40 0.60

4 0.00 0.20 0.80

5 0.00 0.00 1

6 0.00 0.00 1

7 0.00 0.00 1

8 0.00 0.00 1

14.Ulangi langkah kerja 12 dan 13 untuk variabel D_error atau perubahan


error dan catat hasilnya pada Tabel 5.
Tabel 5. Tabel Fuzzyfikasi Perubahan Error atau D_error

D_Erorr Error_Negatif Error_Zero Error_Positif


-16 1 0.00 0.00
-15 1 0.00 0.00
-14 1 0.00 0.00
-13 1 0.00 0.00
-12 1 0.00 0.00
-11 1 0.00 0.00
-10 1 0.00 0.00
-9 1 0.00 0.00
-8 1 0.00 0.00
-7 0.88 0.12 0.00
-6 0.75 0.25 0.00
-5 0.63 0.37 0.00
-4 0.5 0.5 0.00
-3 0.37 0.63 0.00
-2 0.25 0.75 0.00
-1 0.12 0.88 0.00
0 0.00 1 0.00
1 0.00 0.88 0.12
2 0.00 0.75 0.25
3 0.00 0.63 0.37
4 0.00 0.5 0.5
5 0.00 0.37 0.63
6 0.00 0.25 0.75
7 0.00 0.12 0.88
8 0.00 0.00 1
9 0.00 0.00 1
10 0.00 0.00 1
11 0.00 0.00 1
12 0.00 0.00 1
13 0.00 0.00 1
14 0.00 0.00 1
16 0.00 0.00 1

15.Ubahlah nilai error menjadi 5 dan nilai perubahan error menjadi 7


dengan memutar potensiometer.
16.Tekan saklar ’fuzzyfikasi’ untuk menampilkan data derajat keanggotaan
masingmasing anggota variabel error dan perubahan error. Catat nilai
error_negatif, error_zero dan error_positif serta nilai D_error_negatif,
D_error_zero dan D_error_positif pada tabel 6.
17.Tekan saklar ’rule’ untuk menampilkan semua keluaran rule yaitu rule
ke-1 hingga rule ke-9. Catat nilai masing-masing keluaran rule pada
tabel 6.
18.Tekan saklar ’defuzifikasi’ untuk menampilkan semua keluaran
defuzifikasi yaitu Output keluaran fuzzy, Speed Motor Right dan Speed
Motor Left. Catat nilai masingmasing keluaran defuzifikasi pada tabel
6.

Tabel 6. Data Hasil Penggalamatan Fuzifikasi ,Evaluasi Rule & Defuzzifikasi


Error : 5 D_Error_negatif D_Error_Zero D_Error_Positif
D Error : 7 0.00 0.12 0.88
Error_Negatif Rule 1 Rule 2 Rule 3
0.00 0.000 0.00 0.00
Error_Zero Rule 4 Rule 5 Rule 6
0.00 0.00 0.00 0.00
Error_Positf Rule 7 Rule 8 Rule 9
1 0.00 0.12 0.88
Ouput Fuzzy -135
Speed Motor Right -35
Speed Motor Left 235

19.Ulangi langkah kerja 15 s.d. 18 untuk nilai error dan D_error sesuai tabel
7 kemudian catat hasilnya seperti pada tabel 6.

Error : 6 D_Error_negatif D_Error_Zero D_Error_Positif


D Error : 15 0.00 0.00 1
Error_Negatif Rule 1 Rule 2 Rule 3
0.00 0.00 0.00 0.00
Error_Zero Rule 4 Rule 5 Rule 6
0.00 0.00 0.00 0.00
Error_Positf Rule 7 Rule 8 Rule 9
1 0.00 0.00 1
Ouput Fuzzy -145
Speed Motor Right -45
Speed Motor Left 245

Error : 3 D_Error_negatif D_Error_Zero D_Error_Positif


D Error : 7 0.00 0.12 0.88
Error_Negatif Rule 1 Rule 2 Rule 3
0.00 0.00 0.00 0.00
Error_Zero Rule 4 Rule 5 Rule 6
0.40 0.004 0.12 0.40
Error_Positf Rule 7 Rule 8 Rule 9
0.60 0.006 0.12 0.60
Ouput Fuzzy -97.7
Speed Motor Right 2
Speed Motor Left 197

Error : 2 D_Error_negatif D_Error_Zero D_Error_Positif


D Error : 6 0.00 0.25 0.75
Error_Negatif Rule 1 Rule 2 Rule 3
0.00 0.00 0.00 0.00
Error_Zero Rule 4 Rule 5 Rule 6
0.6 0.006 0.25 0.60
Error_Positf Rule 7 Rule 8 Rule 9
0.4 0.004 0.25 0.40
Ouput Fuzzy -79.7
Speed Motor Right 20
Speed Motor Left 179

Error : 1 D_Error_negatif D_Error_Zero D_Error_Positif


D Error : 5 0.00 0.37 0.63
Error_Negatif Rule 1 Rule 2 Rule 3
0.00 0.00 0.00 0.00
Error_Zero Rule 4 Rule 5 Rule 6
0.80 0.00 0.37 0.63
Error_Positf Rule 7 Rule 8 Rule 9
0.20 0.00 0.20 0.20
Ouput Fuzzy -65.0
Speed Motor Right 34
Speed Motor Left 165

Error : 0 D_Error_negatif D_Error_Zero D_Error_Positif


D Error : 4 0.00 0.50 0.50
Error_Negatif Rule 1 Rule 2 Rule 3
0.00 0.00 0.00 0.00
Error_Zero Rule 4 Rule 5 Rule 6
1 0.00 0.50 0.50
Error_Positf Rule 7 Rule 8 Rule 9
0.00 0.00 0.00 0.00
Ouput Fuzzy -40
Speed Motor Right 60
Speed Motor Left 140

Error : -2 D_Error_negatif D_Error_Zero D_Error_Positif


D Error : 3 0.00 0.63 0.37
Error_Negatif Rule 1 Rule 2 Rule 3
0.4 0.04 0.40 0.37
Error_Zero Rule 4 Rule 5 Rule 6
0.6 0.006 0.60 0.37
Error_Positf Rule 7 Rule 8 Rule 9
0.00 0.00 0.00 0.00
Ouput Fuzzy 0.40| 31.147
Speed Motor Right 610137
Speed Motor Left 0 | 998.00
Error : -2 D_Error_negatif D_Error_Zero D_Error_Positif
D Error : -1 0.00 0.88 0.12
Error_Negatif Rule 1 Rule 2 Rule 3
0.4 0.00 0.40 0.12
Error_Zero Rule 4 Rule 5 Rule 6
0.6 0.00 0.60 0.12
Error_Positf Rule 7 Rule 8 Rule 9
0.00 0.00 0.00 0.00
Ouput Fuzzy 17.6
Speed Motor Right 117
Speed Motor Left 82

Error : -2 D_Error_negatif D_Error_Zero D_Error_Positif


D Error : -4 0.5060 0.50 0.00
Error_Negatif Rule 1 Rule 2 Rule 3
0.40 0.404 0.40 0.00
Error_Zero Rule 4 Rule 5 Rule 6
0.609 0.506 0.50 0.00
Error_Positf Rule 7 Rule 8 Rule 9
0.00f 0.00 0.00 0.00
Ouput Fuzzy 0.40 | 368.04
Speed Motor Right 616800
Speed Motor Left 0 | 931.00

Error : -3 D_Error_negatif D_Error_Zero D_Error_Positif


D Error : -5 0.63 0.37 0.00
Error_Negatif Rule 1 Rule 2 Rule 3
0.60 0.60 0.37 0,00
Error_Zero Rule 4 Rule 5 Rule 6
0.40 0.40 0.37 0.00
Error_Positf Rule 7 Rule 8 Rule 9
0.00 0.00 0.00 0.00
Ouput Fuzzy 79.69
Speed Motor Right 179
Speed Motor Left 20

Error : -5 D_Error_negatif D_Error_Zero D_Error_Positif


D Error : -9 1.00.5 0.00 0.00
Error_Negatif Rule 1 Rule 2 Rule 3
1 1.00 0.00 0.00
Error_Zero Rule 4 Rule 5 Rule 6
0.00g 0.00 0.00 0.00
Error_Positf Rule 7 Rule 8 Rule 9
0.00f 0.00 0.00 0.00
Ouput Fuzzy 0.00 | 3145.5
Speed Motor Right 624500
Speed Motor Left 0 | 9-4500

Tabel 7. Data Penguji


No. Error D_error
1 6 15
2 3 7
3 2 6
4 1 5
5 0 4
5 0 4
6 -2 3
7 -2 -1
8 -2 -4
9 -3 -5
10 -5 -9

G. Metode
a. Metode Fuzzy Mamdani dan Defuzyfikasi centroid
Metode Fuzzy Mamdani merupakan salah satu bagian dari Fuzzy
Inference System yang berguna untuk penarikan kesimpulan atau
keputusan terbaik dalam permasalahan yang tidak pasti. Proses
pengambilan keputusan dengan menggunakan Metode Fuzzy
Mamdani untuk memperoleh keputusan yang terbaik, dilakukan
dengan melalui beberapa tahapan, yaitu pembentukan himpunan
fuzzy; aplikasi fungsi implikasi; komposisi aturan; defuzzifikasi.
Kelebihan pada Metode Fuzzy Mamdani adalah lebih spesifik,
artinya dalam prosesnya Metode Fuzzy Mamdani lebih
memperhatikan kondisi yang akan terjadi untuk setiap daerah
fuzzynya, sehingga menghasilkan hasil keputusan yang lebih akurat.
Prosedur Metode Fuzzy Mamdani Seperti telah dikemukakan pada
subbab sebelumnya bahwa proses pengambilan kesimpulan atau
keputusan dengan menggunakan Metode Fuzzy Mamdani dilakukan
melalui beberapa tahapan, yaitu pembentukan himpunan fuzzy;
aplikasi fungsi implikasi; komposisi aturan; defuzzifikasi. Pada
Metode Fuzzy Mamdani ini fungsi keanggotaan yang digunakan
adalah fungsi keanggotaan trapesium, fungsi keanggotaan segitiga
dan fungsi keanggotaan bahu kiri atau kanan. Hal ini dikarenakan
pada fungsi keanggotaan trapesium terdapat dua titik dari himpunan
fuzzy yang memiliki nilai keanggotaan satu. Apabila hanya terdapat
satu titik dari himpunan fuzzy yang memiliki nilai keanggotaan satu,
maka digunakan fungsi keanggotaan segitiga. Fungsi keanggotaan
bahu kiri atau kanan digunakan untuk mengawali dan mengakhiri
variabel suatu daerah fuzzy.

H. Program
LiquidCrystal lcd(13, 12, 11, 10, 9, 8); // Pin yang disambungkan antara
arduino dengan LCD
LCD RS pin to digital pin 12 // Pin dihubungkan ke digital pin 12
LCD Enable pin to digital pin 11 // Pin dihubungkan ke digital pin 11
LCD D4 pin to digital pin 5 // Pin dihubungkan ke digital pin 5
LCD D5 pin to digital pin 4 // Pin dihubungkan ke digital pin 4
LCD D6 pin to digital pin 3 // Pin dihubungkan ke digital pin 4
LCD D7 pin to digital pin 2 // Pin dihubungkan ke digital pin 2

pinMode(IN1, OUTPUT); // set pin IN1 sebagai output


pinMode(IN2, OUTPUT); // set pin IN2 sebagai output
pinMode(IN3, OUTPUT); // set pin IN3 sebagai output
pinMode(IN4, OUTPUT); // set pin IN4 sebagai output
pinMode(pwm_kanan, OUTPUT); // pwm_kanan sebagai output

Anda mungkin juga menyukai