Académique Documents
Professionnel Documents
Culture Documents
Disusun oleh:
Dimas Nur Prasetyo
NIM 13518241059
Pendidikan Teknik Mekatronika/Pendidikan Teknik
Elektro/FT
2016
LOGIKA FUZZY
Logika fuzzy mempunyai nilai yang kontinu., Fuzzy dinyatakan dalam
derajat dari suatu keanggotaan dan derajat dari kebenaran. Oleh sebab
itu sesuatu dapat dikatakan sebagian benar dan sebagian salah pada
waktu yang sama. Pada tugas kali ini yaitu mengenai perancangan
program kendali fuzzy pada arduino.
Perancangan Program Kendali Fuzzy pada Arduino
1. program pada arduino
int sensorValue = 0;
float bacaSuhu = 0;
int outssr = 5;
float cahaya = 0;
int pinSuhu = A1;
float totalZW, totalW;
int W[5] = {0, 0, 0, 0, 0};
int Z[5] = {0, 0, 0, 0, 0};
void setup() {
Serial.begin (9600);
pinMode (outssr, OUTPUT);
}
void inferensi () {
W[0] = SuhuNB(bacaSuhu);
W[1] = SuhuNS(bacaSuhu);
W[2] = SuhuZ(bacaSuhu);
W[3] = SuhuPS(bacaSuhu);
W[4] = SuhuPB(bacaSuhu);
Z[0] = mati(W[0]);
Z[1] = midredup(W[1]);
Z[2] = redup(W[2]);
Z[3] = midterang(W[3]);
Z[4] = terang(W[4]);
sensorValue = analogRead(pinSuhu);
//bacaSuhu = map(sensorValue, 0, 1023, 0, 255);
bacaSuhu = 6 * sensorValue / 1023;
analogWrite(outssr, bacaSuhu);
}
void defuzzifikasi() {
totalZW = (W[0] * Z[0]) + (W[1] * Z[1]) + (W[2] * Z[2]) + (W[3] *
Z[3]) + (W[4] * Z[4]);
totalW = (W[0] + W[1] + W[2] + W[3] + W[4]);
cahaya = totalZW / totalW;
Serial.print("dcPWM: ");
Serial.println(cahaya);
}
void loop() {
inferensi ();
defuzzifikasi ();
Serial.print("Desimal =");
Serial.println(sensorValue);
Serial.print("Vinput =");
Serial.println(bacaSuhu);
Serial.println("");
delay(500);
}
Sensor suhu diatur dari 1.5 hingga 3.5, namun pada praktik yang
dilakukan sementara diganti dengan menggunakan potensio sebelum
diimplementasikan pada sensor suhu. Program ini menggunakan 5
membership function yaitu : mati, mid redup, redup, mid terang, dan
terang. Pengaturan cahaya LED pada 5 membership function adalah
sebagai berikut :
Jika led mati maka nilainya 0;
if (output >= 0 && output <= 1)return 75;
if (output >= 0 && output <= 1)return 175;
if (output >= 0 && output <= 1)return 225;
if (output >= 0 && output <= 1)return 255;