You are on page 1of 2

// Library logika fuzzy

#include <Fuzzy.h>

// Definisikan pin dan variabel


const int sensorPin = A0; // Pin sensor voltage
const int triggerPin = 2; // Pin trigger digital

float voltage;
unsigned long startTime, endTime, duration;

// Deklarasi objek fuzzy


Fuzzy fuzzy;

// Variabel linguistik
FuzzySet voltageLow(&fuzzy, "Voltage Low", 0, 0, 2.5, 3.5);
FuzzySet voltageMedium(&fuzzy, "Voltage Medium", 2.5, 3.5, 3.5);
FuzzySet voltageHigh(&fuzzy, "Voltage High", 3.5, 5, 5, 5);

FuzzySet anomalyLow(&fuzzy, "Anomaly Low", 0, 0, 50, 60);


FuzzySet anomalyMedium(&fuzzy, "Anomaly Medium", 50, 60, 60, 70);
FuzzySet anomalyHigh(&fuzzy, "Anomaly High", 60, 70, 100, 100);

// Aturan fuzzy
FuzzyRule rule1(&fuzzy, "IF Voltage Low THEN Anomaly Low");
FuzzyRule rule2(&fuzzy, "IF Voltage Medium THEN Anomaly Medium");
FuzzyRule rule3(&fuzzy, "IF Voltage High THEN Anomaly High");

void setup() {
// Mulai komunikasi serial
Serial.begin(9600);

// Memasukkan variabel ke dalam objek fuzzy


fuzzy.addInput(&voltage, &voltageLow);
fuzzy.addInput(&voltage, &voltageMedium);
fuzzy.addInput(&voltage, &voltageHigh);
fuzzy.addOutput(&anomalyLow);
fuzzy.addOutput(&anomalyMedium);
fuzzy.addOutput(&anomalyHigh);

// Membuat hubungan aturan


fuzzy.addRule(&rule1);
fuzzy.addRule(&rule2);
fuzzy.addRule(&rule3);

// Menginisialisasi pin trigger sebagai input dan aktivasi resistor pull-up


internal
pinMode(triggerPin, INPUT_PULLUP);
}

void loop() {
// Membaca sensor voltage
voltage = analogRead(sensorPin) * (5.0 / 1023.0); // Skala 0-5V

// Menunggu sinyal trigger


if (digitalRead(triggerPin) == LOW) {
// Mengukur waktu trigger diterima
startTime = millis();

// Menghitung anomali dengan logika fuzzy


fuzzy.calculate();

// Mengukur durasi trigger


while (digitalRead(triggerPin) == LOW) {
// Menunggu hingga trigger dilepaskan
}
endTime = millis();
duration = endTime - startTime;

// Tampilkan hasil durasi trigger dan konversi voltage


Serial.print("Durasi Trigger: ");
Serial.print(duration);
Serial.println(" ms");

float voltageKv = voltage * 50.0; // Konversi 1 VDC menjadi 50 kV


Serial.print("Voltage (kV): ");
Serial.println(voltageKv);
}
}

You might also like