Vous êtes sur la page 1sur 6

LAPORAN PRAKTIK KENDALI CERDAS

Aplikasi Perancangan Kontrol Cahaya Light


Emitting Diode (LED) dengan Logika Fuzzy pada
Arduino

Disusun oleh:
Dimas Nur Prasetyo
NIM 13518241059
Pendidikan Teknik Mekatronika/Pendidikan Teknik
Elektro/FT

UNIVERSITAS NEGERI YOGYAKARTA

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};

float SuhuNB(float Suhu) {


if (Suhu < 1.5) return 1;
if (Suhu >= 1.5 && Suhu <= 2) return (2 - Suhu) / (0.5);
if (Suhu > 2) return 0;
}

float SuhuNS(float Suhu) {


if (Suhu < 1.5 && Suhu > 2.5)return 0;
if (Suhu >= 1.5 && Suhu <= 2) return (Suhu - 1.5) / (0.5);
if (Suhu > 2 && Suhu <= 2.5)return (2.5 - Suhu) / (0.5);
}
float SuhuZ(float Suhu) {
if (Suhu < 2 && Suhu > 3)return 0;
if (Suhu >= 2 && Suhu <= 2.5) return (Suhu - 2) / (0.5);
if (Suhu > 2.5 && Suhu <= 3)return (3 - Suhu) / (0.5);
}
float SuhuPS (float Suhu) {
if (Suhu < 2.5 && Suhu > 3.5)return 0;
if (Suhu >= 2.5 && Suhu <= 3) return (Suhu - 2.5) / (0.5);
if (Suhu > 3 && Suhu <= 3.5)return (3.5 - Suhu) / (0.5);
}
float SuhuPB(float Suhu) {
if (Suhu < 3) return 0;
if (Suhu >= 3 && Suhu <= 3.5) return (Suhu - 3.5) / (0.5);
if (Suhu > 3.5) return 1;
}
float mati(float output) {
if (output >= 0 && output <= 1)return 0;
}
float midredup(float output) {
if (output >= 0 && output <= 1)return 75;
}

float redup(float output) {


if (output >= 0 && output <= 1)return 175;
}
float midterang(float output) {
if (output >= 0 && output <= 1)return 225;
}
float terang(float output) {
if (output >= 0 && output <= 1)return 255;
}

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;

Vous aimerez peut-être aussi