Modul ke:
Fakultas
Program Studi
Modul ke:
Fakultas
Program Studi
0 6
Fakultas Teknik Teknik Elektro
Pembuka
Pembuka Daftar PustakaDaftar Pustaka Akhiri PresentasiAkhiri Presentasi
Defuzzifikasi Bagian 2 (Sugeno) &
Tutorial Fuzzy untuk Microcontroller
Sistem Cerdas
(Intelligent System)
Galang Persada Nurani Hakim, S.T.,
M.T., IPM., Ph.D.
Tutorial Fuzzy untuk Microcontroller
a. Pengaturan Library untuk FUZZY dan sensor suhu
#include <FuzzyRule.h>
#include <FuzzyComposition.h>
#include <Fuzzy.h>
#include <FuzzyRuleConsequent.h>
#include <FuzzyOutput.h>
#include <FuzzyInput.h>
#include <FuzzyIO.h>
#include <FuzzySet.h>
#include <FuzzyRuleAntecedent.h>
#include <OneWire.h>
#include <DallasTemperature.h>
Fuzzy System
Tutorial Fuzzy untuk Microcontroller
b. Pengaturan Input Output pada microcontroller.
Pengaturan ini melibatkan komunikasi microcontroller dengan sensor suhu DS18B20 pada pin D0 dan pengaturan arus dengan PWM pada pin D1
// Data wire is plugged into pin D0
#define ONE_WIRE_BUS D0
#define peltier D1
// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);
Fuzzy System
Tutorial Fuzzy untuk Microcontroller
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature DS18B20(&oneWire);
char temperatureCString[7];
float suhusensor, outputpwm;
Fuzzy* fuzzy = new Fuzzy();
void setup() {
Serial.begin(9600);
Serial.println();
pinMode(peltier, OUTPUT);
delay(100);
DS18B20.begin();
Fuzzy System
Tutorial Fuzzy untuk Microcontroller
c. Pengaturan Fuzzifikasi input suhu.
Pada pengaturan ini fungsi keanggotaan linguistik suhu (dingin, sejuk, normal) sebagai input microcontroller ditulis.
FuzzyInput* suhu = new FuzzyInput(1);
FuzzySet* dingin = new FuzzySet(0, 24, 25, 26);
suhu->addFuzzySet(dingin);
FuzzySet* sejuk = new FuzzySet(25, 26, 27, 28);
suhu->addFuzzySet(sejuk);
FuzzySet* normal = new FuzzySet(27, 28, 29, 30);
suhu->addFuzzySet(normal);
fuzzy->addFuzzyInput(suhu);
Fuzzy System
Tutorial Fuzzy untuk Microcontroller
d. Pengaturan Fuzzifikasi Output PWM
Pada pengaturan ini fungsi keanggotaan linguistik PWM (minimum, sedang, maksimum) sebagai output microcontroller ditulis.
FuzzyOutput* pwm = new FuzzyOutput(1);
FuzzySet* minimum = new FuzzySet(0, 55, 85, 115);
pwm->addFuzzySet(minimum);
FuzzySet* sedang = new FuzzySet(95, 125, 155, 185);
pwm->addFuzzySet(sedang);
FuzzySet* maksimum = new FuzzySet(165, 195, 225, 255);
pwm->addFuzzySet(maksimum);
fuzzy->addFuzzyOutput(pwm);
Fuzzy System
Tutorial Fuzzy untuk Microcontroller
e. Pengaturan Rule
Pada pengaturan ini fungsi pemetaan antara input linguistik suhu (dingin, sejuk, normal) dengan output linguistik PWM (minimum, sedang, maksimum) ditulis.
FuzzyRuleAntecedent* ifSuhuDingin = new FuzzyRuleAntecedent();
ifSuhuDingin->joinSingle(dingin);
FuzzyRuleConsequent* thenPwmMinimum = new FuzzyRuleConsequent();
thenPwmMinimum->addOutput(minimum);
FuzzyRule* fuzzyRule01 = new FuzzyRule(1, ifSuhuDingin, thenPwmMinimum);
fuzzy->addFuzzyRule(fuzzyRule01);
Fuzzy System
Tutorial Fuzzy untuk Microcontroller
FuzzyRuleAntecedent* ifSuhuSejuk = new FuzzyRuleAntecedent();
ifSuhuSejuk->joinSingle(sejuk);
FuzzyRuleConsequent* thenPwmSedang = new FuzzyRuleConsequent();
thenPwmSedang->addOutput(sedang);
FuzzyRule* fuzzyRule02 = new FuzzyRule(2, ifSuhuSejuk, thenPwmSedang);
fuzzy->addFuzzyRule(fuzzyRule02);
FuzzyRuleAntecedent* ifSuhuNormal = new FuzzyRuleAntecedent();
ifSuhuNormal->joinSingle(normal);
FuzzyRuleConsequent* thenPwmMaksimum = new FuzzyRuleConsequent();
thenPwmMaksimum->addOutput(maksimum);
FuzzyRule* fuzzyRule03 = new FuzzyRule(3, ifSuhuNormal, thenPwmMaksimum);
fuzzy->addFuzzyRule(fuzzyRule03);
Fuzzy System
<< MENUMENU AKHIRIAKHIRI >>
←← MENUMENU AKHIRIAKHIRI →→
Tutorial Fuzzy untuk Microcontroller
f. Pengaturan Defuzzifikasi
Pada pengaturan ini pengendalian PWM sebagai hasil defuzifikasi di keluarkan pada serial monitor arduino ide. Selain hasil defuzifikasi pembacaan suhu sebagai input microcontroller juga di keluarkan pada serial monitor arduino ide.
void loop() {
bacasuhu();
kontrolsuhu();
algoritmafuzzy();
delay(1000);
}
void algoritmafuzzy()
Fuzzy System
Tutorial Fuzzy untuk Microcontroller
void algoritmafuzzy() {
fuzzy->setInput(1, suhusensor);
fuzzy->fuzzify();
outputpwm = fuzzy->defuzzify(1);
Serial.print("Hasil perhitungan PWM Menggunakan Fuzzy = ");
Serial.println(outputpwm);
Serial.println();
Serial.println();
}
Fuzzy System
Tutorial Fuzzy untuk Microcontroller
void bacasuhu()
{ DS18B20.requestTemperatures();
suhusensor = DS18B20.getTempCByIndex(0);
dtostrf(suhusensor, 2, 2, temperatureCString);
Serial.print("Suhu Air Terbaca Oleh Sensor = ");
Serial.print(suhusensor);
Serial.println(" Celcius");}
void kontrolsuhu()
{ digitalWrite(peltier, outputpwm);}
Fuzzy System
Tutorial Fuzzy untuk Microcontroller
Hasil pengaturan dengan output pada serial monitor Arduino ide