Anda di halaman 1dari 8

Implementasi Fuzzy Logic Controller untuk Kontrol Kecepatan Motor DC

pada Prototype Kipas Angin

Sebuah aplikasi mikrokontroler Arduino yang dapat berguna sebagai alat untuk mengaktifkan atau
menonaktifkan kipas angin pada suatu ruangan. Perancangan sistem ini dilengkapi dengan beberapa
perangkat keras yaitu sebuah motor DC 1000 rpm, baling-baling, sensor ultrasonic, sensor suhu LM35,
Arduino Uno, rangkaian driver motor dan baterai 10 Volt. Rancangan dari sistem ini digunakan untuk
mengatur putaran kipas angin yang disesuaikan dengan temperatur dan jarak dari suatu objek. Adapun
diagram hardware nya sebagai berikut :

Gambar 1. Diagram Blok Sistem

Tujuan dari percobaan ini mengatur kecepatan putaran motor. Sistem pengontrolan kecepatan tersebut
dilakukan dengan cara membaca nilai sensor yang kemudian diubah menjadi nilai tegangan yang mewakili
keadaan sistem. Bagian-bagian dari hardware:
 Mikrokontroler berfungsi sebagai otak dari sistem. Sebagai otak dari sistem, mikrokontroller ini
akan berfungsi membaca nilai sensor LM35 dan ultrasonic yang kemudian akan diproses menjadi
sebuah nilai RPM yang nilainya akan diberikan kepada driver motor.
 Data dari sensor LM35 dan ultrasonic kemudian akan di proses oleh mikrokontroler. Data tersebut
berupa tegangan yang menjadi nilai input yang kemudian diolah menggunakan fuzzy logic
controller.
 Motor driver DC berfungsi sebagai pengatur kecepatan motor dengan input yang diberikan oleh
mikrokontroler menuju motor.
 Baterai merupakan sumber tegangan untuk masing-masing hardware yang membutuhkan.

Berikut ini adalah tabel koneksi pin Arduino dan IC L293d yang digunakan :

Tabel 1. Koneksi Pin Arduino

Masing-masing penggunaan pin yang terdapat pada Tabel 1. akan diinsialisasikan pada program Arduino
sebagai langkah awal pembacaan data. SedangkanTabel 2. menunjukkan koneksi yang terdapat pada

Page 1 of 8
rangkaian tersebut berfungsi untuk mengatur PWM motor yang dalam hal ini bernilai 0 – 255. Nilai tersebut
akan diatur melalui sebuah formula di kode program Arduino.

Tabel 2. Koneksi Pin L293D

 
Perancangan Fuzzy Logic Controller
Tahapan perancangan software terdiri dari perancangan fuzzy logic controller yang menggunakan software
Arduino. Digunakan Serial Monitor software Arduino untuk menampilkan hasil pembacaan sistem. Dari data
tersebut akan diamati respon dari kontrol yang digunakan. Sistem dikendalikan menggunakan metode Fuzzy
Logic Controller. Pada percobaan ini, input yang digunakan berjumlah 2 buah yaitu sensor suhu LM35 dan
sensor ultrasonik PIR. Nilai tersebut akan berpengaruh pada kecepatan motor DC yang pada percobaan ini
diatur melalui penetapan nilai PWM. Terdapat 3 buah nilai PWM yaitu 100 untuk kecepatan motor lambat,
200 untuk kecepatan motor sedang dan 250 untuk kecepatan motor cepat.

Proses Fuzzy Logic Controller ini akan diterapkan melalui coding Arduino Uno. Langkah awal dalam proses
algoritma software ini adalah inisialisasi variable yang digunakan sebagai berikut:

//Sensor Ultrasonic
#include <New Ping.h>
#define TRIGGER_PIN 4 // Ardu
#define ECHO_PIN 6 // Arduin

1 //Sensor Ultrasonic
2 #include <NewPing.h>
3 #define TRIGGER_PIN  4  // Arduino pin tied to trigger pin on the ultrasonic sensor.
4 #define ECHO_PIN     6  // Arduino pin tied to echo pin on the ultrasonic sensor.
5 #define MAX_DISTANCE 50 // Maximum distance we want to ping for (in centimeters). Maximum
6 sensor distance is rated at 400-500cm.
7 NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and
8 maximum distance.
9  
10 float sensorUS;
11 int enablePin = 11;
12 int in1Pin = 10;
13 int in2Pin = 9;
14 int switchPin = 7;
15 float defuz, pwm;
16  
17 //Sensor Suhu
18 float PinSuhu = A2;
19 int vin;
20 int PinUS = A1;
21 float sensorSuhu;

Page 2 of 8
float temp;
22  
23 //Rule Base
24 float suhu [3];
25 float jarak [3];
26 float rule [3][3];
27 float rule00, rule01, rule02;
28 float rule10, rule11, rule12;
float rule20, rule21, rule22;
Adapun source code pembacaan sensor dan driver motor sebagai berikut :
//suhu
vin = analogRead(PinSuhu);
sensorSuhu = (500*vin)/1024;
// ultrasonic

//suhu
1
  vin = analogRead(PinSuhu);
2
  sensorSuhu = (500*vin)/1024;
3
  // ultrasonic
4
unsigned int uS = sonar.ping();  // Send ping, get ping time in microseconds (uS).
5
  sensorUS = (sonar.convert_cm(uS)); // Convert ping time to distance and print result (0 = outside set
6
distance range, no ping echo)
7
void setMotor(int speed, boolean reverse)
8
{
9
  analogWrite(enablePin, speed);
10
  digitalWrite(in1Pin, ! reverse);
11
  digitalWrite(in2Pin, reverse);
12
}

Setelah inisialisasi variable dan pembacaan sensor, langkah selanjutnya merancang Fuzzy Logic Controller.
Fuzzy Logic Controller tersebut dibagi menjadi 3 tahap yaitu :

1. Kode Program Fuzzifikasi

Pada percobaan ini, masing-masing sensor memiliki fungsi keanggotaan yang terdiri dari 3 keanggotaan.
Fungsi keanggotaan sensor suhu (LM35) terdiri dari Dingin, Hangat dan Panas. Hal ini ditunjukkan pada
Gambar 3 di bawah ini.

Gambar 3. Fungsi Keanggotaan Suhu

Berikut ini merupakan source code dari fuzzifikasi sensor suhu.

void FuzzySuhu(){
// untuk suhu dingin
if (sensorSuhu <= 22.5)
{ suhu [0] = 1;}

1 void FuzzySuhu(){
2   // untuk suhu dingin

Page 3 of 8
3   if (sensorSuhu <= 22.5)
4   { suhu [0] = 1;}
5   else if (sensorSuhu > 22.5 && sensorSuhu <= 25)
6   {  suhu [0] = (25 - sensorSuhu)/(25 - 22.5); }
7   else
8   { suhu [0] = 0;}
9  
10   // untuk suhu hangat
11   if (sensorSuhu <= 22.5)
12   { suhu [1] = 0;}
13   else if (sensorSuhu > 22.5 && sensorSuhu <= 25)
14   { suhu [1] = (sensorSuhu-22.5)/(25-22.5);}
15   else if (sensorSuhu > 25 && sensorSuhu <= 27.5)
16   { suhu [1] = (27.5-sensorSuhu)/(27.5 - 25);}
17   else
18 { suhu [1] = 0;}
19  
20   // untuk suhu panas
21   if (sensorSuhu <= 25)
22   { suhu [2] = 0;}
23   else if (sensorSuhu > 25 && sensorSuhu <= 27.5)
24   { suhu [2] = (sensorSuhu-25)/(27.5-25);}
25   else
26   { suhu [2] = 1;}
27 }

Untuk sensor ultrasonic juga memiliki 3 fungsi keanggotaan yaitu Dekat, Sedang, dan Jauh seperti yang
ditunjukkan pada Gambar 4. Adapun fungsi dari sensor ini untuk mengukur jarak dari suatu objek yang
terdeteksi.

Gambar 4. Fungsi Keanggotaan Jarak

Berikut ini merupakan source code dari fuzzifikasi sensor ultrasonic

void FuzzyJarak(){
// untuk kondisi dekat
if (sensorUS <= 10)
{ jarak [0] = 1;}

1 void FuzzyJarak(){
2 // untuk  kondisi dekat
3   if (sensorUS <= 10)
4   { jarak [0] = 1;}
5   else if (sensorUS > 10 && sensorUS <= 20)
6   {  jarak [0] = (20 - sensorUS)/(20 - 10); }
7   else
8   { jarak [0] = 0;}
9  
10   // untuk kondisi sedang
Page 4 of 8
11   if (sensorUS <= 10)
12   { jarak [1] = 0;}
13   else if (sensorUS > 10 && sensorUS <= 20)
14   { jarak [1] = (sensorUS -10)/(20-10);}
15   else if (sensorUS > 20 && sensorUS <= 40)
16   { jarak [1] = (40-sensorUS)/(40 - 20);}
17   else
18   { jarak [1] = 0;}
19  
20   // untuk kondisi jauh
21   if (sensorSuhu <= 20)
22   { jarak [2] = 0;}
23   else if (sensorUS > 20 && sensorUS <= 30)
24   { jarak [2] = (sensorUS-20)/(30-20);}
25   else if (sensorUS > 30)
26   { jarak [2] = 1;}
27 }

Untuk nilai PWM motor akan diatur sebagai berikut

Gambar 5. Fungsi Keanggotaan Kecepatan Motor

2. Kode program Rule Evaluation

Adapun rule base yang dirangcang sebagai berikut :


1. Jika Suhu Dingin dan Jarak Dekat, maka Kipas Angin Lambat
2. Jika Suhu Dingin dan Jarak Sedang, maka Kipas Angin Lambat
3. Jika Suhu Dingin dan Jarak Jauh, maka Kipas Angin Lambat
4. Jika Suhu Hangat dan Jarak Dekat, maka Kipas Angin Lambat
5. Jika Suhu Hangat dan Jarak Sedang, maka Kipas Angin Sedang
6. Jika Suhu Hangat dan Jarak Jauh, maka Kipas Angin Cepat
7. Jika Suhu Panas dan Jarak Dekat, maka Kipas Angin Cepat
8. Jika Suhu Panas dan Jarak Sedang, maka Kipas Angin Cepat
9. Jika Suhu Panas dan Jarak Jauh, maka Kipas Angin Cepat

Table 3 merupakan rule base yang akan di program pada Arduino. Dari parameter tersebut, terdapat 3
himpunan fungsi keanggotaan output motor yaitu lambat,sedang dan cepat.

Page 5 of 8
Adapun source code rule base di atas yaitu :

void RuleEva (){


int i, j;
for ( i=0; i<=2; i=i+1)
{

1
2 void RuleEva (){
3 int i, j;
4 for ( i=0; i<=2; i=i+1)
5 {
6    for ( j=0; j<=2; j=j+1)
7    {
8      temp = min(suhu[i], jarak[j]);
9      rule [i][j] = temp;
10    }
11 }
12 rule00 = rule [0][0]; // (dingin,dekat = Lambat)
13 rule01 = rule [0][1]; // (dingin,sedang = Lambat)
14 rule02 = rule [0][2]; // (dingin,jauh = Lambat)
15 rule10 = rule [1][0]; // (hangat,dekat = lambat)
16 rule11 = rule [1][1]; // (hangat,sedang = Sedang)
17 rule12 = rule [1][2]; // (hangat,jauh = Cepat)
18 rule20 = rule [2][0]; // (panas,dekat = Cepat)
19 rule21 = rule [2][1]; // (panas,sedang = Cepat)
20 rule22 = rule [2][2]; // (panas,jauh= Cepat)
21 }}
22

Program yang dirancang akan menggunakan operasi logika AND, dimana nilai rule yang dihasilkan akan
diambil dari nilai terkecil dari kedua derajat keanggotaan dengan menggunakan fungsi matematika (MIN).

3. Kode Program Defuzzifikasi

Pada defuzzifikasi yaitu tahap terakhir pada Fuzzy Logic Controller (FLC). Penyelesaian defuzzifikasi ini
menggunakan metode Sugeno tipe WA (Weighted Average):

Adapun source code nya sebagai berikut :

void Defuzzy () {
// metode sugeno (w eighted av
float lambat = 100;
float sedang = 200;

Page 6 of 8
void Defuzzy () {
1
  // metode sugeno (weighted average)
2
  float lambat = 100;
3
  float sedang = 200;
4
  float cepat = 250;
5
  RuleEva();
6
  pwm = (rule00 * lambat) + (rule01 * lambat)+ (rule02 *lambat)+ (rule10 * lambat)+ (rule11 * sedang)+
7
(rule12 * cepat) + (rule20 * cepat)+ (rule21 * cepat)+ (rule22 * cepat);
8
 
9
  defuz = 0;
10
  int i, j;
11
  for ( i=0; i<=2; i=i+1)
12
  {
13
    for ( j=0; j<=2; j=j+1)
14
    {
15
      defuz = defuz + rule [i][j];
16
    }
17
  }
18
  pwm = pwm / defuz;
19
}

Hasil dan Analisa

Pada tahapan ini akan diuji hasil perancangan dari metode Fuzzy Logic Controller  yang sudah dirancang
untuk mengontrol kecepatan pada motor DC pada prototype kipas angin. Metode Fuzzy Logic Controller ini
dirancang pada Arduino untuk mengatur PWM pada driver motor yang selanjutnya digunakan untuk
mengatur kecepatan motor. Kecepatan motor ini diatur berdasarkan nilai yang diberikan dari sensor LM35
yang mendeteksi suhu dan sensor ultrasonic yang mendeteksi jarak pada objek tertentu.

Percobaan ke-1

Pada percobaan 1 akan diuji coba kecepatan motor dengan set point PWM sebesar = 100, dimana terdapat
nilai suhu sebesar 24 – 25 yang dapat dikategorikan sebagai suhu dingin dan sedang, sementara nilai jarak
berubah-ubah setiap satuan waktu. Jarak akan digunakan sebagai variable yang menentukan kecepatan
baling-baling kipas tersebut.

Gambar 6. Grafik Respon Fuzzy untuk set point kecepatan lambat (100)

Dari grafik di atas terlihat bahwa sistem mengalami rise time yang cepat, yaitu hanya memerlukan 1 detik
untuk menyesuaikan kondisi. Dengan suhu 25 derajat Celcius dan jarak 8 cm, putaran motor dapat
menyesuaikan dengan rule base yaitu 100. Hal ini berlangsung hingga detik ke 9 dengan jarak 11 cm. Namun
ketika jarak dinaikkan dalam rentang nilai 18, 13, dan 10 pada grafik terlihat bahwa sistem mengalami
overshoot. Namun berhasil menyesuaikan kembali ketika detik ke 12. Pada detik ke 12 hingga 14 sistem

Page 7 of 8
berhasil menurunkan suhu walau pun hanya 1 derajat Celcius. Adapun rata-rata error yang dihasilkan oleh
sistem sebesar 15,4545 %. Hal ini dapat disebabkan oleh pembacaan kedua sensor yang kurang sensitif,
selain itu pula rancangan membership function dan rule base untuk nilai input output belum optimal dan
jumlah pengujian data yang sedikit.

Percobaan ke-2

Percobaan 2 tidak jauh berbeda dengan percobaan 1. Hanya saja nilai kecepatan motor yang akan diuji coba
memiliki set point PWM sebesar 250, dan nilai suhu sebesar 28– 29 yang dapat dikategorikan sebagai suhu
panas, sementara nilai jarak berubah-ubah setiap satuan waktu. Jarak akan digunakan sebagai variable yang
menentukan kecepatan baling-baling kipas tersebut. Adapun hasil data yang diuji sebanyak 49 kali
ditunjukkan oleh gambar berikut.

Gambar 7. Grafik Respon Fuzzy untuk set point kecepatan cepat (250)

Dari grafik di atas, sistem menunjukkan rise time yang sama dengan dengan percobaan 1. Sistem hanya
memerlukan waktu 1 detik untuk menyesuaikan kondisi. Selain itu pula, hasil respon yang ditunjukkan
sangat stabil. Tidak ditemukan ada nya overshoot pada sistem yang diuji coba. Walaupun demikian,
penurunan nilai suhu tidak dapat dipertahankan secara lama. Seperti data yang ditunjukkan pada tabel, ketika
detik ke 3 hingga 4 suhu berhasil turun 1 derajat Celcius menjadi 28 derajat Celcius. Namun, pada detik ke 5
hingga 8 suhu kembali naik menjadi 29 derajat Celcius. Meskipun demikian, rata-rata error yang terjadi pada
sistem berhasil diturunkan hingga mencapai 3,06122 %.

Penggunaan jumlah membership function dan perancangan rule base dapat mempengaruhi respon
kepresisian dari metode untuk menentukan keputusan terhadap plan. Semakin banyak jumlah membership
function, maka semakin tingkat keakuratan hasil di plan ini.

Page 8 of 8

Anda mungkin juga menyukai