top of page
Writer's pictureMoh. Sugiono

Fuzzy Logic Arduino Mengotrol LED dengan LDR & HCSR04

Fuzzy Logic pada Arduino adalah teknik pengendalian sistem yang mengadopsi prinsip fuzzy logic. Fuzzy logic sendiri adalah sistem logika yang menggambarkan nilai-nilai antara 0 dan 1 secara kontinu dan tidak hanya memetakan kebenaran atau ketidakbenaran sebuah pernyataan.

Dalam pengendalian sistem, fuzzy logic digunakan untuk mengendalikan sistem berdasarkan aturan-aturan fuzzy yang telah ditentukan. Hal ini dilakukan dengan menggunakan sensor untuk mengambil data dari lingkungan sekitar dan mengubahnya menjadi nilai input pada sistem fuzzy. Kemudian, sistem fuzzy akan memproses data tersebut dan menghasilkan nilai output yang digunakan untuk mengendalikan sistem.

Arduino merupakan sebuah platform open-source yang dapat digunakan untuk membuat berbagai macam proyek elektronik, termasuk pengendalian sistem dengan fuzzy logic. Untuk menggunakan fuzzy logic pada Arduino, kita dapat menginstall library Fuzzy Logic Controller pada Arduino IDE. Dengan menggunakan library ini, kita dapat membangun sebuah sistem fuzzy dengan mudah dan mengontrol sistem dengan nilai output yang dihasilkan oleh sistem fuzzy tersebut.

Fuzzy Logic pada Arduino memiliki beberapa kelebihan dan kekurangan yang perlu dipertimbangkan sebelum memutuskan untuk menggunakannya. Berikut ini adalah beberapa kelebihan dan kekurangan Fuzzy Logic Arduino:


Kelebihan Fuzzy Logic Arduino:

  1. Mudah digunakan: Dengan library Fuzzy Logic Controller pada Arduino IDE, pengguna dapat dengan mudah membangun sistem fuzzy dan mengendalikan sistem dengan nilai output yang dihasilkan oleh sistem fuzzy tersebut.

  2. Dapat menangani informasi tidak pasti: Fuzzy Logic dapat mengatasi masalah ketidakpastian informasi atau data yang tidak dapat diukur secara tepat. Hal ini membuat Fuzzy Logic dapat diterapkan pada berbagai jenis sistem yang tidak mampu diukur dengan pasti.

  3. Dapat menangani variasi input yang kompleks: Sistem fuzzy dapat memproses banyak variabel input dan mempertimbangkan sejumlah besar aturan untuk menghasilkan nilai output yang akurat. Hal ini membuat sistem fuzzy dapat menangani variasi input yang kompleks.

  4. Menghasilkan nilai output yang akurat: Dengan menggunakan aturan-aturan fuzzy, sistem fuzzy dapat menghasilkan nilai output yang akurat dan dapat diprediksi, terutama pada situasi dengan informasi yang tidak pasti.

Kekurangan Fuzzy Logic Arduino:

  1. Kompleksitas algoritma: Algoritma yang digunakan pada sistem fuzzy cukup kompleks dan memerlukan banyak perhitungan. Hal ini dapat memakan waktu dan membutuhkan sumber daya yang cukup besar pada Arduino.

  2. Memerlukan pengetahuan matematika yang cukup: Untuk membuat sistem fuzzy yang baik, diperlukan pemahaman yang cukup dalam matematika dan teori fuzzy logic.

  3. Tidak cocok untuk sistem yang sederhana: Fuzzy Logic cenderung lebih cocok untuk sistem yang kompleks dengan banyak variabel input. Pada sistem yang sederhana dengan satu atau dua variabel input, metode lain seperti kontrol PID mungkin lebih efektif.

  4. Performa tergantung pada pemilihan parameter yang tepat: Kinerja sistem fuzzy sangat bergantung pada pemilihan parameter yang tepat, termasuk jumlah fuzzy set, fungsi keanggotaan, dan aturan fuzzy. Jika parameter tidak dipilih dengan benar, kinerja sistem dapat menurun.


Fuzzy Logic diterapkan di berbagai bidang

Berikut ini adalah beberapa contoh penerapan Fuzzy Logic di berbagai bidang:

  1. Kontrol Otomatis: Fuzzy Logic dapat diterapkan pada sistem kontrol otomatis untuk menghasilkan keluaran yang lebih baik dan stabil dalam berbagai kondisi.

  2. Sistem Kendali Pada Mesin: Fuzzy Logic dapat digunakan untuk mengendalikan mesin pada industri, seperti mesin pembuat kopi, mesin penggiling, mesin pengukur, dan lain-lain.

  3. Kendali pada Robot: Fuzzy Logic dapat digunakan dalam robotika untuk mengendalikan robot agar dapat melakukan tugas-tugas yang kompleks dan dapat menyesuaikan diri dengan kondisi lingkungan yang berbeda.

  4. Pengolahan Citra: Fuzzy Logic dapat digunakan dalam pengolahan citra untuk mengenali pola atau karakteristik dalam citra yang sulit diidentifikasi dengan metode tradisional.

  5. Peramalan Cuaca: Fuzzy Logic dapat digunakan untuk memprediksi cuaca dan memberikan informasi yang lebih akurat pada pengguna.

  6. Sistem Pakar: Fuzzy Logic dapat digunakan dalam sistem pakar untuk mengambil keputusan yang lebih baik dalam situasi yang kompleks.

  7. Sistem Penilaian Risiko Kredit: Fuzzy Logic dapat digunakan dalam industri keuangan untuk mengevaluasi risiko kredit dan menentukan apakah pinjaman dapat disetujui atau tidak.

  8. Pengendalian Trafik: Fuzzy Logic dapat digunakan dalam pengendalian lalu lintas untuk mengatur timing lampu lalu lintas dan menyesuaikan diri dengan keadaan lalu lintas yang berbeda.

  9. Kendali pada Sistem Pemanas: Fuzzy Logic dapat digunakan untuk mengendalikan sistem pemanas pada gedung atau rumah agar dapat menghasilkan suhu yang nyaman dan hemat energi.

  10. Sistem Pendeteksi Kanker: Fuzzy Logic dapat digunakan dalam sistem pendeteksi kanker untuk membantu dokter dalam diagnosis dan penanganan penyakit kanker.


Fuzzy Logic Arduino Wiring

  • Semua Positif LED --> gabung jadi 1 jalur --> Pin 6 Arduino

  • Semua GND LED, GND HCSR04, GND LDR --> gabung jadi 1 jalur --> Pin GND Arduino

  • VCC RHCS04 & VCC LDR --> gabung jadi 1 jalur --> Pin 5V Arduino

  • Trig --> Pin 4 Arduino

  • Echo --> Pin 5 Arduino

  • A0 LDR --> A0 Arduino


Fuzzy Logic Arduino Mengotrol LED
Jalur kabelnya

Fuzzy Logic Arduino Coding

/**

*

**/


// eFFL includes

#include <Fuzzy.h>

#include <FuzzyComposition.h>

#include <FuzzyInput.h>

#include <FuzzyIO.h>

#include <FuzzyOutput.h>

#include <FuzzyRule.h>

#include <FuzzyRuleAntecedent.h>

#include <FuzzyRuleConsequent.h>

#include <FuzzySet.h>


// pins

#define LDR A0

#define TRIGGER 4

#define ECHO 5

#define LED 6


// object library

Fuzzy *fuzzy = new Fuzzy();


void setup() {

// set console and pins

Serial.begin(9600);

pinMode(LDR, INPUT);

pinMode(TRIGGER, OUTPUT);

pinMode(ECHO, INPUT);

pinMode(LED, OUTPUT);


// fuzzy sets

// distance

FuzzySet *small = new FuzzySet(0, 0, 0, 30);

FuzzySet *mid = new FuzzySet(15, 30, 30, 45);

FuzzySet *big = new FuzzySet(30, 45, 45, 60);

FuzzySet *verybig = new FuzzySet(45, 80, 80, 80);


// ldr

FuzzySet *lowldr = new FuzzySet(0, 0, 0, 375);

FuzzySet *midldr = new FuzzySet(100, 300, 300, 500);

FuzzySet *highldr = new FuzzySet(225 ,600, 600, 600);


// brightness

FuzzySet *off = new FuzzySet(0, 0, 0, 0);

FuzzySet *lowb = new FuzzySet(0, 0, 25, 100);

FuzzySet *midb = new FuzzySet(55, 100, 155, 200);

FuzzySet *highb = new FuzzySet(155, 230, 255, 255);


// variables

// variable distance with universe 0-60 as input

FuzzyInput *distance = new FuzzyInput(1);

distance->addFuzzySet(small);

distance->addFuzzySet(mid);

distance->addFuzzySet(big);

fuzzy->addFuzzyInput(distance);


// variable ldr with universe 0-600 as input

FuzzyInput *ldr = new FuzzyInput(2);

ldr->addFuzzySet(lowldr);

ldr->addFuzzySet(midldr);

ldr->addFuzzySet(highldr);

fuzzy->addFuzzyInput(ldr);


// variable brightness with universe 0-255 as output

FuzzyOutput *brightness = new FuzzyOutput(1);

brightness->addFuzzySet(off);

brightness->addFuzzySet(lowb);

brightness->addFuzzySet(midb);

brightness->addFuzzySet(highb);

fuzzy->addFuzzyOutput(brightness);


// rules

// if distance is small and ldr is low then brightness is high

FuzzyRuleAntecedent *ifDistanceSmallAndLdrIsLow = new FuzzyRuleAntecedent();

ifDistanceSmallAndLdrIsLow->joinWithAND(small, lowldr);

FuzzyRuleConsequent *thenBrightnessHigh = new FuzzyRuleConsequent();

thenBrightnessHigh->addOutput(highb);

FuzzyRule *fuzzyRule1 = new FuzzyRule(1, ifDistanceSmallAndLdrIsLow, thenBrightnessHigh);

fuzzy->addFuzzyRule(fuzzyRule1);


// if distance is small and ldr is high then brightness is off

FuzzyRuleAntecedent *ifDistanceSmallAndLdrIsHigh = new FuzzyRuleAntecedent();

ifDistanceSmallAndLdrIsHigh->joinWithAND(small, highldr);

FuzzyRuleConsequent *thenBrightnessOff = new FuzzyRuleConsequent();

thenBrightnessOff->addOutput(off);

FuzzyRule *fuzzyRule2 = new FuzzyRule(2, ifDistanceSmallAndLdrIsHigh, thenBrightnessOff);

fuzzy->addFuzzyRule(fuzzyRule2);


// if distance is mid then brightness is midb

FuzzyRuleAntecedent *ifDistanceMid = new FuzzyRuleAntecedent();

ifDistanceMid->joinSingle(mid);

FuzzyRuleConsequent *thenBrightnessMidb = new FuzzyRuleConsequent();

thenBrightnessMidb->addOutput(midb);

FuzzyRule *fuzzyRule3 = new FuzzyRule(3, ifDistanceMid, thenBrightnessMidb);

fuzzy->addFuzzyRule(fuzzyRule3);


// if distance is big then brightness is low

FuzzyRuleAntecedent *ifDistanceBig = new FuzzyRuleAntecedent();

ifDistanceBig->joinSingle(big);

FuzzyRuleConsequent *thenBrightnessLow = new FuzzyRuleConsequent();

thenBrightnessLow->addOutput(lowb);

FuzzyRule* fuzzyRule4 = new FuzzyRule(4, ifDistanceBig, thenBrightnessLow);

fuzzy->addFuzzyRule(fuzzyRule4);


// if distance is verybig then brightness is off

FuzzyRuleAntecedent *ifDistanceVeryBig = new FuzzyRuleAntecedent();

ifDistanceVeryBig->joinSingle(verybig);

FuzzyRule* fuzzyRule5 = new FuzzyRule(5, ifDistanceVeryBig, thenBrightnessOff);

fuzzy->addFuzzyRule(fuzzyRule5);

}


// returns the distance

int distance() {

digitalWrite(TRIGGER, LOW);

delayMicroseconds(5);

digitalWrite(TRIGGER, HIGH);

delayMicroseconds(10);

digitalWrite(TRIGGER, LOW);

long pulse = pulseIn(ECHO, HIGH) / 2;

return pulse * 10 / 292;

}


// returns the brightness

int brightness() {

return analogRead(LDR);

}


// prints in serial monitor

void print(int dist, int light, int output) {

Serial.print("distance: ");

Serial.print(dist);

Serial.print(" light: ");

Serial.print(light);

Serial.print(" => output: ");

Serial.print(output);

Serial.println();

}


// main method

void loop() {

// get distance and light

int dist = distance();

int light = brightness();


// if the inputs are weird, ignore them

if (dist < 0 || dist > 80 || light > 600) return;


// fuzzyfication

fuzzy->setInput(1, dist); // dist as fuzzy input 1 (distance)

fuzzy->setInput(2, light); // light as fuzzy input 2 (ldr)

fuzzy->fuzzify();


// defuzzyfication

int output = fuzzy->defuzzify(1); // defuzzify fuzzy output 1 (brightness)


analogWrite(LED, output);

delay(100);

}



Fuzzy Logic Arduino Mengotrol LED
Hasilnya

Fuzzy Logic Arduino Mengotrol LED
Hasilnya

Fuzzy Logic Arduino Mengotrol LED
Hasilnya

Fuzzy Logic Arduino Mengotrol LED Videonya


Dalam kesimpulannya, Fuzzy Logic pada Arduino memberikan kemampuan untuk membuat keputusan berdasarkan kondisi yang kompleks dan dapat digunakan dalam berbagai aplikasi, termasuk dalam mengontrol LED dengan LDR dan HCSR04. Dengan mengimplementasikan Fuzzy Logic pada Arduino, kita dapat membuat sistem yang cerdas dan responsif terhadap perubahan lingkungan, serta meningkatkan efisiensi energi dan penghematan biaya. Dalam mengembangkan proyek dengan Fuzzy Logic Arduino, mari kita terus belajar dan berinovasi, serta berkontribusi positif bagi perkembangan teknologi dan masyarakat secara keseluruhan.


Sekian pembahasan kali ini, terimaksih sudah membaca sampai akhir semoga bermanfaat jangan lupa share, komentar, & langganan..

Tetap semangat untuk terus belajar dan nantikan artikel selanjutnya dari kita ya. Sampai jumpa!

Comments


bottom of page