By | 20/02/2023
Fuzzy Logic Arduino Wiring

Fuzzy logic Arduino menggunakan sensor untuk mengumpulkan data dari lingkungan sekitar dan mengubahnya menjadi nilai input yang diproses oleh sistem fuzzy pada platform Arduino. Hasil output dari sistem fuzzy kemudian digunakan untuk mengendalikan perangkat atau sistem yang terhubung dengan Arduino, seperti sistem kendali suhu, kelembaban, dan lainnya. Arduino adalah platform open-source yang dapat diprogram dan dikendalikan oleh mikrokontroler. Fuzzy logic Arduino adalah metode pengendalian yang menggunakan logika fuzzy yang diimplementasikan pada platform Arduino. Fuzzy Logic dapat mengendalikan sistem yang kompleks dengan tingkat keakuratan yang tinggi dan dapat diimplementasikan dalam berbagai aplikasi, seperti kendali robot, kendali kualitas, dan kendali otomatis pada mesin-mesin industri.

Ini 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 kekurangannya

Kelebihannya Fuzzy Logic Arduino

  1. Mudah digunakan: Dengan librarnya pada Arduino IDE, pengguna dapat dengan mudah membangun sistem fuzzy dan mengendalikan sistem dengan nilai output yang dihasilkan oleh sistem 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.

Kekurangannya Fuzzy Logic Arduino

  1. Komplekitas algoritma: Algoritma yang digunakan pada sistem fuzzy cukup komplek 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 control PID mungkin lebih efektif.
  4. Performasi 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. Control Otomatis: Fuzzy Logic dapat diterapkan pada sistem control 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.

Berikut tutorialnya mulai dari wiring sampai dengan codingnya

Fuzzy Logic Arduino Wiringnya

  • 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

Codingnya

/**

 * 

 **/


// 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);

}

Berikut Videonya

t.ly/TXKYM

Sebagai tambahan, penggunaan Fuzzy Logic pada Arduino tidak hanya dapat digunakan untuk mengontrol LED dengan LDR dan HCSR04 saja, tetapi juga dapat diterapkan pada berbagai aplikasi lainnya. Dengan implementasi yang tepat, sistem cerdas yang responsif dapat diciptakan, sehingga dapat meningkatkan efisiensi energi dan menghemat biaya. Oleh karena itu, penting untuk terus belajar dan berinovasi, serta berkontribusi positif bagi perkembangan teknologi dan masyarakat secara keseluruhan. Terima kasih telah membaca, jangan lupa untuk share, komentar, dan langganan. Sampai jumpa di artikel selanjutnya.

One Reply to “Fuzzy Logic Arduino Mengontrol LED dengan LDR dan HC SR04”

Leave a Reply

Your email address will not be published. Required fields are marked *