Anda di halaman 1dari 8

Tutorial Pemrograman Fuzzy Logic (1) | Electronics Notes

https://amarnotes.wordpress.com/2013/11/09/tutorial-pemrograman-fuzzy...

Electronics Notes
All About Electronics Life

Tutorial Pemrograman Fuzzy Logic (1)


NOV 9
Posted by Amar
Fuzzy logic banyak diaplikasikan dalam berbagai bidang, salah satunya adalah sebagai alat bantu pengambil
keputusan. Dalam artikel ini diberikan contoh proses pembuatan program fuzzy logic dalam bahasa
pemrograman C# yang diaplikasikan untuk menentukan kecepatan konveyor berdasarkan tinggi dan
berat benda. Implementasi bahasa C# ini untuk pembentukan fungsi keanggotaan, proses penalaran
fuzzy metode Sugeno, proses fuzzikasi dan defuzzikasi akan dibahas. Program diuji terhadap
suatu kondisi berat benda dan tinggi benda tertentu untuk mengetahui hasilnya.
Artikel ini bersumber dari salah satu tugas mata kuliah mekatronika di kampus yang berjudul Pengaturan
Kecepatan Konveyor berdasarkan Tinggi dan Berat Barang Menggunakan Metode Fuzzy Logic.
Metode penalaran yang digunakan adalah metode MAMDANI atau metode MIN-MAX. Program yang
telah dibuat kemudian di-download ke mikrokontroler ATmega16 yang berfungsi sebagai kontroller
utamanya untuk mengatur kecepatan konveyor. Compiler yang digunakan adalah Codevision AVR.
Seperti sudah delaskan sebelumnya pada artikel Apa itu Fuzzy Logic? (h ps://amarnotes.wordpress.com
/2013/10/14/apa-itu-fuzzy-logic/) ada tiga tahapan yaitu fuzzikasi, evaluasi rule, dan defuzzikasi.

1 dari 8

5/3/2015 10:16 PM

Tutorial Pemrograman Fuzzy Logic (1) | Electronics Notes

https://amarnotes.wordpress.com/2013/11/09/tutorial-pemrograman-fuzzy...

Gambar 1 Diagram Fuzzy Logic


Pemrograman Fuzzication (Fuzzikasi)

Yang pertama kali dilakukan dalam pemrograman fuzzy logic adalah menentukan fungsi keanggotaan(membership
function) dari setiap input.

2 dari 8

Gambar 2 Fungsi dan derajat keanggotaan beban benda (ons)

5/3/2015 10:16 PM

Tutorial Pemrograman Fuzzy Logic (1) | Electronics Notes

https://amarnotes.wordpress.com/2013/11/09/tutorial-pemrograman-fuzzy...

Gambar 3 Fungsi dan derajat keanggotaan ketinggian benda (cm)


Selanjutnya adalah menentukan perhitungan untuk setiap nilai tinggi dan berat benda yang sudah
ditentukan fungsi dan derajat keanggotaanya. Prinsipnya adalah matematika, yaitu untuk menghitung
tinggi segitiga jika diketahui lebarnya. Gambar berikut adalah prinsip perhitungan derajat keanggotaan jika
bentuk graknya berbentuk segitiga dan trapesium.

Gambar 4 Perhitungan Grak Segitiga

Gambar 5 Perhitungan Grak Trapesium


Selanjutnya bagian yang paling penting yaitu implemetasi perhitungan di atas ke bahasa C# di Codevision
AVR. Yang pertama dilakukan adalah membuat sub program untuk perhitungan derajat keanggotaannya
dan tentu saja jangan lupa untuk membuat variabel untuk perhitungannya.
Sebagai contoh, berikut syntax untuk fuzzikasi beban ringan. Lihat nilai-nilai yang ada di gambar 2 di
atas. Perhitungan menggunakan perhitungan trapesium pada gambar 5.

3 dari 8

5/3/2015 10:16 PM

Tutorial Pemrograman Fuzzy Logic (1) | Electronics Notes

1
2
3
4
5
6
7
8
9
10
11
12
13
14

https://amarnotes.wordpress.com/2013/11/09/tutorial-pemrograman-fuzzy...

float berat; // input berat benda


float beban_ringan; // derajat keanggotaan beban ringan

unsigned char fuzzifikasi_beban_ringan()


{
beban_ringan=0;
if (berat<=5 && berat>0) // berat di antara 0 5
{ beban_ringan=1; }
else if (berat5) // berat di antara 5 10
{ beban_ringan=(10berat)/5; }
else if (berat>=10) // berat lebih dari 10
{ beban_ringan=0; };
return beban_ringan;
};

Contoh yang lain, berikut syntax untuk menghitung derajat keanggotaan ketinggian sedang. Perhatikan
gambar 3 dan gambar 4 untuk melakukan perhitungan berikut.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

float ketinggian; // input berat benda


float ketinggian_sedang; // derajat keanggotaan ketinggian sedang

unsigned char fuzzifikasi_ketinggian_sedang()


{
ketinggian_sedang=0;
if (ketinggian<=2 || ketinggian>=10) // ketinggian kurang dr 2 atau lebih dr 10
{ ketinggian_sedang=0; }
else if (ketinggian>2 && ketinggian<6) // ketinggian diantara 2 6
{ ketinggian_sedang=(ketinggian2)/4; }
else if (ketinggian>6 && ketinggian<10) // ketinggian diantara 6 10
{ ketinggian_sedang=(10ketinggian)/4; }
else if (ketinggian==6) // ketinggian = 6
{ ketinggian_sedang=1; };
return ketinggian_sedang;
};

Nah sekarang buat sub program untuk masing- masing derajat keanggotaan yang akan dihitung. Berikut
adalah source code lengkap fuzzikasi dengan Codevision AVR. Data-data hasil fuzzikasi akan
ditampilkan pada kayar LCD alphanumeric.

4 dari 8

5/3/2015 10:16 PM

Tutorial Pemrograman Fuzzy Logic (1) | Electronics Notes

5 dari 8

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55

https://amarnotes.wordpress.com/2013/11/09/tutorial-pemrograman-fuzzy...

/*****************************************************
FUZZIFICATION
by Amar
https://amarnotes.wordpress.com (https://amarnotes.wordpress.com)
*****************************************************/
#include
#include
// Alphanumeric LCD Module functions
#include

// Inisialisasi atau identifikasi sub program yang dipakai


void fuzzifikasi();
unsigned char fuzzifikasi_beban_ringan();
unsigned char fuzzifikasi_beban_sedang();
unsigned char fuzzifikasi_beban_berat();
unsigned char fuzzifikasi_ketinggian_rendah();
unsigned char fuzzifikasi_ketinggian_sedang();
unsigned char fuzzifikasi_ketinggian_tinggi();
unsigned char kata1[16],kata2[16]; // variabel untuk menampilkan data ke LCD

float berat,ketinggian; // data masukan berat dan tinggi


float beban_ringan,beban_sedang,beban_berat; // derajat keanggotaan berat
float ketinggian_rendah,ketinggian_sedang,ketinggian_tinggi; // derajat keanggotaan
unsigned char fuzzifikasi_beban_ringan()
{
beban_ringan=0;
if (berat<=5 && berat>0)
{ beban_ringan=1; }
else if (berat5)
{ beban_ringan=(10berat)/5; }
else if (berat>=10)
{ beban_ringan=0; };
return beban_ringan;
};
unsigned char fuzzifikasi_beban_sedang()
{
beban_sedang=0;
if (berat<=5 || berat>=15)
{ beban_sedang=0; }
else if (berat>5 && berat<10)
{ beban_sedang=(berat5)/5; }
else if (berat>10 && berat<15)
{ beban_sedang=(15berat)/5; }
else if (berat==10)
{ beban_sedang=1; };
return beban_sedang;
};
unsigned char fuzzifikasi_beban_berat()
{
beban_berat=0;
if (berat>10 && berat<15)

5/3/2015 10:16 PM

Tutorial Pemrograman Fuzzy Logic (1) | Electronics Notes

6 dari 8

56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110

https://amarnotes.wordpress.com/2013/11/09/tutorial-pemrograman-fuzzy...

{ beban_berat=(berat10)/5; }
else if (berat>=15)
{ beban_berat=1; }
else if (berat<=10)
{ beban_berat=0; };
return beban_berat;
};
unsigned char fuzzifikasi_ketinggian_rendah()
{
ketinggian_rendah=0;
if (ketinggian<=2 && ketinggian>0)
{ ketinggian_rendah=1; }
else if (ketinggian2)
{ ketinggian_rendah=(6ketinggian)/(4); }
else if (ketinggian>=6)
{ ketinggian_rendah=0; };
return ketinggian_rendah;
};
unsigned char fuzzifikasi_ketinggian_sedang()
{
ketinggian_sedang=0;
if (ketinggian<=2 || ketinggian>=10)
{ ketinggian_sedang=0; }
else if (ketinggian>2 && ketinggian<6)
{ ketinggian_sedang=(ketinggian2)/4; }
else if (ketinggian>6 && ketinggian<10)
{ ketinggian_sedang=(10ketinggian)/4; }
else if (ketinggian==6)
{ ketinggian_sedang=1; };
return ketinggian_sedang;
};
unsigned char fuzzifikasi_ketinggian_tinggi()
{
ketinggian_tinggi=0;
if (ketinggian>6 && ketinggian<10)
{ ketinggian_tinggi=(ketinggian6)/4; }
else if (ketinggian>=10)
{ ketinggian_tinggi=1; }
else if (ketinggian<=6)
{ ketinggian_tinggi=0; };
return ketinggian_tinggi;
};
// Kumpulkan semua sub program fuzzifikasi menjadi satu buah sub program
void fuzzifikasi()
{
fuzzifikasi_beban_ringan();
fuzzifikasi_beban_sedang();
fuzzifikasi_beban_berat();
fuzzifikasi_ketinggian_rendah();
fuzzifikasi_ketinggian_sedang();

5/3/2015 10:16 PM

Tutorial Pemrograman Fuzzy Logic (1) | Electronics Notes

111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138

https://amarnotes.wordpress.com/2013/11/09/tutorial-pemrograman-fuzzy...

fuzzifikasi_ketinggian_tinggi();
};
void main(void)
{
PORTA=0x00; DDRA=0x00;
PORTB=0x00; DDRB=0x00;
PORTC=0x00; DDRC=0xFF;
PORTD=0x00; DDRD=0x00;
lcd_init(16);
while (1)
{
// masukkan input berat dan tinggi benda
berat=13.2;
ketinggian=5.8;
fuzzifikasi(); // memanggil fungsi fuzzifikasi

//menyusun karakter ke dalam satu baris dengan menggunakan fungsi sprintf


sprintf(kata1, "%0.2f %0.2f %0.2f",ketinggian_rendah,ketinggian_sedang,ketin
lcd_gotoxy(0,0); lcd_puts(kata1); // mengirim data ke LCD

sprintf(kata2, "%0.2f %0.2f %0.2f",beban_ringan,beban_sedang,beban_berat);


lcd_gotoxy(0,1); lcd_puts(kata2);
}

Selesai bagian fuzzikasi, selanjutnya adalah pemrograman bagian evaluasi rule dan defuzzikasi. Akan
dibahas pada bagian 2 nanti ya.
Semoga tutorial ini bermanfaat :)
Posted on November 9, 2013, in Electronics, Fuzzy Logic, Mikrokontroler, Pemrograman, Tutorial and
tagged pemrograman fuzzy logic, pemrograman fuzzy logic bahasa c, pemrograman fuzzy logic codevision,
pemrograman fuzzy logic mikrokontroler, pemrograman logia fuzzy, pemrograman logika fuzzy bahasa c,
pemrograman logika fuzzy codevision, pemrograman logika fuzzy mikrokontroler, tutorial fuzzy logic,
tutorial logika fuzzy, tutorial pemrograman logika fuzzy. Bookmark the permalink. 5 Comments.

7 dari 8

Leave a comment

Comments 5
indra | December 12, 2013 at 2:58 PM
bagian 2 nya sudah keluar belum ?

5/3/2015 10:16 PM

Tutorial Pemrograman Fuzzy Logic (1) | Electronics Notes

https://amarnotes.wordpress.com/2013/11/09/tutorial-pemrograman-fuzzy...

indra | December 12, 2013 at 3:02 PM


kapan yah keluarnya, , ? klo sudah ada mohon referensinya
dan klo boleh, di kirim k email saya, , terimakasih. .
hendrik | January 21, 2014 at 5:07 PM
iya nih .. bagian 2 nya mana .. :) di tunggu yah :)
Mulkan Azizi | January 28, 2014 at 3:00 PM
masbagian 2 nya udah keluar belum? ditunggu nih.butuh banget soalnya mas
ohiya coding diatas untuk C atau C#?? sepertinya C di CV AVR ya? CMIIW
makasih mas..ditunggu segera balasannya
mumiro | November 23, 2014 at 10:32 PM
Reblogged this on MUMIRO and commented:
jancuk

Create a free website or blog at WordPress.com. The Mystique Theme.


Follow

Follow Electronics Notes

8 dari 8

Build a website with WordPress.com

5/3/2015 10:16 PM

Anda mungkin juga menyukai