Anda di halaman 1dari 17

LAPORAN PRAKTIKUM

MATA KULIAH PRAKTIK SISTEM CERDAS

Fuzzifikasi pada Mikrokontroller Arduino Nano

Disusun Oleh : Kelompok 5


● Muhammad Imam (20502241026)
● Muhammad Asyam (20502244004)
● Rakha Maulana (20502244007)
● Rahmiathul Anisa (20502244017)

Kelas A2

PRODI PENDIDIKAN TEKNIK ELEKTRONIKA

JURUSAN PENDIDIKAN TEKNIK ELEKTRONIKA DAN INFORMATIKA

FAKULTAS TEKNIK

UNIVERSITAS NEGERI YOGYAKARTA

2022
A. Tujuan
Setelah melakukan praktikum mahasiswa diharapkan :
1. Memahami proses fuzzyfikasi serta aplikasinya pada mikrokontroller Arduino
Nano.
2. Memahami perhitungan derajat keanggotaan.

B. Teori Dasar
Fuzzyfikasi
Fuzzyfikasi yaitu suatu proses untuk mengubah suatu masukan dari bentuk tegas (crisp)
menjadi fuzzy (variabel linguistik) yang biasanya disajikan dalam bentuk
himpunan-himpunan fuzzy dengan suatu fungsi keanggotaannya masing-masing. Fungsi
keanggotaan merupakan suatu kurva yang menunjukkan pemetaan titik-titik input data
kedalam nilai keanggotaanya (disebut juga dengan derajat keanggotaan) yang memiliki
interval antara 0 sampai 1. Untuk mendapatkan nilai keanggotaan dapat menggunakan
cara pendekatan fungsi. Fungsi keanggotaan yang digunakan dalam praktikum kali ini
adalah Representasi Kurva Segitiga dan Representasi Kurva Trapesium.

1) Representasi Kurva Segitiga


Representasi kurva segitiga pada dasarnya merupakan gabungan antara 2 garis (linear)
yang membentuk segitiga seperti terlihat pada Gambar 23.

Gambar 23. Representasi Kurva Segitiga

Persamaan fungsi keanggotaan kurva segitiga dapat di rumuskan sebagai berikut :


2) Representasi Kurva Trapesium
Kurva trapesium pada dasarnya seperti bentuk segitiga, hanya saja ada beberapa titik
yang memiliki nilai keanggotaan 1 seperti pada Gambar 24.

Gambar 24. Representasi Kurva Trapesium

Persamaan fungsi keanggotaan Kurva Trapesium dapat di rumuskan sebagai berikut:

Pada percobaan kali ini akan dibahas tahapan proses fuzzyfikasi dengan dua variabel
Input yang diperoleh dari 2 buah potensiometer. Pada bagian Input terdapat 2 variabel
yaitu variabel Error dan variabel Perubahan Error. Linguistik Variabel Error
mempunyai 3 buah linguistik value yaitu ErrorNeg, ErrorZero dan ErrorPos
sedangkan untuk Linguistik Variabel Perubahan Error mempunyai 3 buah
linguistik value yaitu DerrorNeg, DerrorZero dan DerrorPos. Data ADC dari
potensiometer bernilai 0-255, karena data tersebut terlalu lebar sehingga perlu
dilakukan pembatasan atau range agar nilai variabel error dapat bernilai -8 sampai 8
dan nilai variabel perubahan error bernilai 16 sampai 16.

1. Variabel Error
Variabel Error dibuat range pengukuran yaitu mulai -8 sampai dengan 8. Nilai ini
diperoleh dari pembacaan perubahan tegangan dari potensiometer yang menghasilkan
nilai error. Selanjutnya menentukan nilai untuk masing-masing domain seperti pada
gambar 25.

Gambar 25. Fungsi keanggotaan Input Error

Setelah diketahui nilai errornya, bisa dilihat nilai error tersebut masuk anggota
mana saja beserta mencari nilai derajat keanggotaanya dengan memperhatikan
gambar 26 dan penjelasan di bawah ini.

Gambar 26. Contoh fuzzyfikasi Error

Berdasarkan gambar 23 dapat dilihat bahwa nilai error 4 masuk anggota


ErrorZero dengan derajat keanggotaan sebesar X1. Selain itu, nilai error 4 juga masuk
anggota ErrorPos dengan derajat keanggotaan sebesar X2. Berikut ini perhitungan untuk
mencari nilai derajat keanggotaan dari nilai error 4 sebagai anggota ErrorZero dan
ErrorPos:

Nilai x1 = (c-x)/(c-b) = (5-4)/(5-0) = 1/5 = 0,2


Nilai x2 = (x-b)/(c-b) = (4-0)/(5-0) = 4/5 = 0,8
Sehingga berdasarkan perhitungan di atas dapat dilihat bahwa nilai error 4 merupakan
anggota himpunan ErrorZero dengan nilai keanggotaan 0,2 dan juga nilai error 4
merupakan anggota himpunan ErrorPos dengan nilai keanggotaan 0,8.

2. Variabel Perubahan Error


Variabel Perubahan Error dibuat range pengukuran yaitu mulai -16 sampai dengan 16.
Variabel Perubahan Error mempunyai 3 buah anggota yaitu DerrorNeg, DerrorZero
dan DerrorPos. Selanjutnya menentukan nilai untuk masing-masing domain seperti
terlihat pada gambar 27.

Gambar 27. Fungsi keanggotaan Input Perubahan Error


Setelah diketahui nilai perubahan errornya, bisa dilihat nilai perubahan error tersebut
masuk anggota mana saja beserta mencari nilai derajat keanggotaanya dengan
memperhatikan gambar 28 dan penjelasan di bawah ini.

Gambar 28. Contoh fuzzyfikasi Perubahan Error

Berdasarkan gambar 25 bisa dilihat bahwa nilai perubahan error 2 masuk


anggota DerrorZero dengan derajat keanggotaan sebesar X1. Selain itu, nilai
perubahan error 2 juga masuk anggota DerrorPos dengan derajat keanggotaan sebesar
X2. Berikut ini perhitungan untuk mencari nilai derajat keanggotaan dari nilai perubahan
error 2 sebagai anggota DerrorZero dan DerrorPos:

Nilai x1 = (c-x)/(c-b) = (8-2)/(8-0) = 6/8 = 0,75


Nilai x2 = (x-b)/(c-b) = (2-0)/(8-0) = 2/8 = 0,25

Sehingga berdasarkan perhitungan di atas dapat dilihat bahwa nilai perubahan error 2
merupakan anggota himpunan DerrorZero dengan nilai keanggotaan 0,75 dan juga
nilai perubahan error 2 merupakan anggota himpunan DerrorPos dengan nilai
keanggotaan 0,25.

C. Alat dan Bahan


1. PC (Personal Computer) / Laptop
2. Media Pembelajaran Fuzzy Logic + Kabel Data + Kabel Penghubung
3. Software Arduino IDE

D. Keselamatan Kerja
1. Awali praktikum dengan berdoa.
2. Gunakanlah pakaian 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. Flowchart
Flowchart atau diagram alir adalah suatu bagan dengan simbol-simbol tertentu yang
menggambarkan urutan proses secara mendetail dan hubungan antara suatu proses
(instruksi) dengan proses lainnya dalam suatu program. Tujuannya agar praktikan dapat
dengan mudah memahami alur atau algoritma program dan juga dapat menyelaraskan
pikiran dengan rangkaian hardware yang hendak dirancang. Maka dari itu, flowchart
fuzzyfikasi variabel error pada gambar 29 dan flowchart fuzzyfikasi variabel perubahan
error pada gambar 30 adalah sebagai berikut.
Gambar 29. Flowchart Fuzzyfikasi Variabel Error

Gambar 30. Flowchart Fuzzyfikasi Variabel Perubahan Error


F. Skema

G. Langkah Kerja
1. Siapkan alat dan bahan yang dibutuhkan.
2. Buatlah rangkaian sesuai pada gambar 31 dan Tabel 8 di atas dengan
mengbungkan pin Arduino nano dengan pin potensiometer dan pin LCD
menggunakan kabel jumper.
3. Hidupkan PC/Laptop dan kemudian buka software Arduino IDE.
4. Siapkan library I2C LCD dapat di download di link http://unyku.ga/o8CQm
cari file “LiquidCrystal_I2C.rar” kemudian klik download.
5. Masukan library I2C LCD ke Arduino IDE dengan cara klik menu bar
Sketch → include library → add .ZIP Library → pilih file library →
open. Lebih jelas lihat gambar 32.
Gambar 32. Cara Memasukan Library ke Arduino

6. Setelah Library I2C LCD terinstal langkah selanjutnya adalah ketikkan


program seperti yang tertulis berikut ini pada software Arduino IDE.

//----------I2C LCD------------
//A4:SDA -- A5:SCL (pin configurasi)
#include <Wire.h> // Menyertakan Library Komunikasi
#include <LiquidCrystal_I2C.h> // Menyertakan Library I2C
LiquidCrystal_I2C lcd(0x20,20,4); // set I2C address ke 0x27
//variabel global
int a,b,i,j,sensorA,sensorB; float x, y, error, d_error;
float u_error[3],u_d_error[3],u[3][3], errorneg, errorzero, errorpos,
d_errorneg, d_errorzero,d_errorpos;

void setup() {
lcd.init(); // inisialisasi LCD
lcd.backlight(); // nyalakan backlight
pinMode(8, INPUT_PULLUP); //Set pin 8 sebagai input set high
pinMode(9, INPUT_PULLUP); //Set pin 9 sebagai input set high
}
void loop() {

baca_sensor(); //membaca nilai error dan d_error


fuzzyfikasi(); //memanggil & menjalankan fungsi fuzzifikasi
rule(); //memanggil & menjalankan fungsi rule
int tombol_fuzzyfikasi = digitalRead(8); //baca pin 8
int tombol_rule = digitalRead(9); //baca pin 9

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


{display_fuzzyfikasi();}
//menampilkan data proses fuzzyfikasi
if(tombol_fuzzyfikasi==1 && tombol_rule==0)
{display_rule();}
//menampilkan implikasi setiap rule
if(tombol_fuzzyfikasi==1 && tombol_rule==1){
lcd.clear();
}
//menghapus tampilan lcd
}

void baca_sensor()
{ sensorA = analogRead(A0); //baca data analog di pin A0 dari
potensiometer untuk dikirim ke variabel sensorA
sensorB = analogRead(A1); //baca data analog di pin A1 dari
potensiometer untuk dikirim ke variabel sensorA
a = map(sensorA, 0, 1023, 0, 255); //merubah resolusi data SensorA dari
10 bit(1023) menjadi 8 bit (255) kemudian disimpan di variabel a
b = map(sensorB, 0, 1023, 0, 255); //merubah resolusi data SensorB dari
10 bit(1023) menjadi 8 bit (255) kemudian disimpan di variabel b
//range variabel a=(-8)~(8) untuk nilai error
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;}

//range variabel b=(-16)~(16) untuk nilai d_error


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; //nilai error dikirim ke "x"

//range untuk menentukan derajat keanggotaan error


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]; //simpan nilai "u_error[0]" ke fungsi keanggotaan
errorneg
errorzero = u_error[1]; //simpan nilai "u_error[1]" ke fungsi keanggotaan
errorzero
errorpos = u_error[2]; //simpan nilai "u_error[2]" ke fungsi keanggotaan
errorpos
}
void fuzzyfikasi_perubahan_error()
{
y = d_error; //nilai d_error dikirim ke "y"

//range untuk menentukan derajat keanggotaan u_d_error


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]; //simpan nilai "u_d_error[0]" ke fungsi


keanggotaan d_errorneg
d_errorzero = u_d_error[1]; //simpan nilai "u_d_error[1]" ke fungsi
keanggotaan d_errorzero
d_errorpos = u_d_error[2]; //simpan nilai "u_d_error[2]" ke fungsi
keanggotaan d_errorpos
}

//fungsi fuzzifikasi error dan perubahan error


void fuzzyfikasi()
{
fuzzyfikasi_error(); //fungsi fuzzyfikasi_error
fuzzyfikasi_perubahan_error(); //fungsi fuzzyfikasi_perubahan_error
}
void rule() // basis aturan
{
for(i=0;i<=2;i++) //looping jumlah keanggotaan variabel error
{
for(j=0;j<=2;j++) //looping jumlah keanggotaan variabel perubahan error
{
if(u_error[i]<u_d_error[j]) //apakah nilai anggota variabel error lebih kecil
dari anggota variabel perubahan error.
{
u[i][j]=u_error[i]; // menggunakan operator AND yang di ambil nilai
terkecil
} else {
u[i][j]=u_d_error[j];
}
}
}
}
//Fungsi menampilkan nilai fuzzyfikasi ke LCD
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); }
//Fungsi menampilkan nilai rule ke LCD
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]); }

7. Setelah program ditulis dan pastikan tidak ada program yang salah lakukan
upload program ke arduino dengan menghubungkan kabel data dari laptop ke
arduino nano kemudian mengatur menu bar Tools → Board : ”Arduino
Nano” → Processor : ”Atmega328” → Port : ”Com (Menyesuaikan
silahkan di cek di device manager)” atau dapat dilihat melalui gambar 33 di
bawah ini.
Gambar 33. Setting Konfigurasi Arduino

8. Setelah pengaturan board seperti di atas selesai dilakukan lakukan


dengan klik tombol upload.

Gambar 34. Tombol Upload

9. Tunggu beberapa detik hingga program selesai dikirim, setelah program


selesai di kirim.
10. Setelah program telah di kirim ke Arduino nano dengan baik maka LCD 20x4
akan menampilkan tulisan seperti gambar di bawah ini:

Gambar 35. Tampilan LCD fuzzifikasi

11. Ubahlah nilai error menjadi 0 dengan memutar potensiometer error dan amati
nilai error_negatif, error_zero dan error_positif pada display LCD.
12. Ulangi langkah kerja 10 untuk data error sesuai tabel 9 dan catat hasilnya.
13. Ulangi langkah kerja 10 dan 11 untuk variabel D_error atau perubahan error
dan catat hasilnya pada Tabel 10.
F. Hasil Percobaan

Gambar 1. Hasil Simulasi Pada Proteus

Tabel Fuzzyfikasi Error

Error Error_Negatif Error_Zero Error_Positif

-8 1.00 0.00 0.00

-7 1.00 0.00 0.00

-6 1.00 0.00 0.00

-5 1.00 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.00 0.00

1 0.00 0.00 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.00

6 0.00 0.00 1.00

7 0.00 0.00 1.00

8 0.00 0.00 1.00

Tabel Fuzzyfikasi Perubahan Error atau D_error

D_error Error_Negatif Error_Zero Error_Positif

-16 1.00 0.00 0.00

-15 1.00 0.00 0.00

-14 1.00 0.00 0.00

-13 1.00 0.00 0.00

-12 1.00 0.00 0.00

-11 1.00 0.00 0.00

-10 1.00 0.00 0.00

-9 1.00 0.00 0.00

-8 1.00 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.50 0.50 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.00 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.50 0.50

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.00

9 0.00 0.00 1.00

10 0.00 0.00 1.00

11 0.00 0.00 1.00

12 0.00 0.00 1.00

13 0.00 0.00 1.00

14 0.00 0.00 1.00

15 0.00 0.00 1.00

16 0.00 0.00 1.00

17 0.00 0.00 1.00

G. Tugas
1. Bandingkan data hasil percobaan dengan perhitungan secara langsung masing-masing
nilai derajat keanggotaan dari anggota variabel error dan D_error menggunakan
formula yang terdapat pada dasar teori.
Jawab :
a. Error
● sample 1 : nilai error = 3
Hasil perhitungan :
Error Zero = (5-3)/(5-0) = 0.4
Error Pos = (3-0)/(5-0) = 0.6
Hasil pengamatan :
Error Zero = 0.4
Error Pos = 0.6

● sample 2 : nilai error = 4


Hasil perhitungan :
Error Zero = (5-4)/(5-0) = 0.2
Error Pos = (4-0)/(5-0) = 0.8
Hasil pengamatan :
Error Zero = 0.2
Error Pos = 0.8
b. D_Error
● sample 1 : nilai error = 3
Hasil perhitungan :
Error Zero = (8-3)/(8-0) = 0.625
Error Pos = (3-0)/(8-0) = 0.375
Hasil pengamatan :
Error Zero = 0.63
Error Pos = 0.37

● sample 2 : nilai error = 4


Hasil perhitungan :
Error Zero = (8-4)/(8-0) = 0.5
Error Pos = (4-0)/(8-0) = 0.5
Hasil pengamatan :
Error Zero = 0.50
Error Pos = 0.50

2. Buatlah sistem fuzzyfikasi logika fuzzy dengan tiga buah input dan lima buah
membership function dengan kriteria dan range bebas.
H. Kesimpulan
Kesimpulan yang dapat diambil dari praktikum diatas adalah dapat merangkai dengan baik
rangkaian fuzzyfikasi dengan menggunakan rangkaian arduino nano, dapat juga mengamati
dan membedakan hasil erorr negatif, erorr zero dan erorr positif.dan dapat mengetahui dan
mengamati hasil fuzzyfikasi perubahan erorr dan D_erorr.Pada praktikum diatas juga dapat
diketaui cara menghitung dan membandingkan antara variabel erorr dan D_erorr.

Anda mungkin juga menyukai