PROTOTIPE SISTEM KENDALI KECEPATAN KIPAS DC OTOMATIS MENGGUNAKAN LOGIKA FUZZY SUGENO ORDE-0 BERBASIS RASPBERRY PI PICO

 

PROTOTIPE SISTEM KENDALI KECEPATAN KIPAS DC OTOMATIS MENGGUNAKAN LOGIKA FUZZY SUGENO ORDE-0 BERBASIS RASPBERRY PI PICO

KELAS RE-3D KELOMPOK D5 LABORATORIUM SISTEM TERBENAM

Ariska Nur Rahmawati1, Haidar Faozan Azhiema1, Pudjarafi Aqil Arvin Saputra1, Shafira Az Zahra Dzatin Nithaqaini1

Program Studi Teknologi Rekayasa Elektronika

Jurusan Teknik Elektro, Politeknik Negeri Semarang

2026

Jl. Prof. Soedarto, Tembalang, Kec. Tembalang, Kota Semarang, Jawa Tengah, 50275

ABSTRAK - Peningkatan suhu lingkungan akibat perubahan iklim serta kebutuhan efisiensi energi mendorong pengembangan sistem pendingin ruangan yang dapat bekerja secara otomatis dan adaptif. Penelitian ini merancang prototipe sistem kendali kecepatan kipas DC otomatis berbasis Raspberry Pi Pico yang menerapkan metode logika fuzzy Sugeno orde-0 sebagai algoritma pengambilan keputusan. Sistem menggunakan sensor DHT22 untuk membaca suhu dan kelembapan udara, kemudian nilai tersebut diolah melalui proses fuzzifikasi, evaluasi sembilan aturan (rule base), dan defuzzifikasi rata-rata terbobot (weighted average) untuk menghasilkan nilai duty cycle PWM. Sinyal PWM tersebut dikuatkan oleh MOSFET IRLZ44N untuk menggerakkan kipas DC 5V, sementara informasi suhu, kelembapan, mode, dan kecepatan kipas ditampilkan melalui LCD I2C 16x2. Selain mode otomatis, sistem juga menyediakan mode manual berbasis potensiometer yang dapat diaktifkan melalui push button. Hasil pengujian menunjukkan bahwa sistem mampu menyesuaikan kecepatan kipas ke dalam tiga kategori keluaran, yaitu lambat (30%), sedang (60%), dan cepat (90%), sesuai dengan kondisi suhu dan kelembapan yang terbaca oleh sensor. Prototipe ini masih berada pada tahap pengujian skala laboratorium dan berpotensi dikembangkan lebih lanjut untuk aplikasi smart fan pada skala ruangan yang lebih luas.

Kata Kunci: DHT22, Fuzzy Sugeno Orde-Nol, MOSFET, Motor DC, PWM, Raspberry Pi Pico.

I. PENDAHULUAN

A. Latar Belakang

Perubahan iklim global dan pemanasan lingkungan menyebabkan suhu udara di berbagai wilayah, termasuk Indonesia, semakin meningkat dan sulit diprediksi. Kondisi ini dapat mengurangi kenyamanan aktivitas manusia serta meningkatkan kebutuhan akan sistem pendingin yang mampu bekerja secara otomatis dan efisien. Namun, kipas angin konvensional umumnya masih dioperasikan secara manual sehingga kecepatan putarannya tidak dapat menyesuaikan kondisi suhu dan kelembapan lingkungan secara langsung.

Untuk mengatasi permasalahan tersebut, diperlukan sistem kendali otomatis yang mampu membaca kondisi lingkungan secara real-time dan mengatur kecepatan kipas sesuai kebutuhan. Pada penelitian ini digunakan Raspberry Pi Pico sebagai pengendali utama karena memiliki modul PWM dan ADC bawaan, mendukung pemrograman MicroPython, serta memiliki biaya implementasi yang relatif rendah sehingga sesuai untuk pengembangan prototipe.

Metode pengambilan keputusan menggunakan logika fuzzy Sugeno orde-0 karena menghasilkan keluaran berupa nilai konstan sehingga proses komputasinya lebih sederhana dan cepat dibandingkan metode Mamdani. Karakteristik tersebut membuat metode ini sesuai diterapkan pada mikrokontroler dengan sumber daya terbatas, namun tetap mampu menghasilkan pengaturan kecepatan kipas yang adaptif terhadap perubahan suhu dan kelembapan.

Berdasarkan hal tersebut, penelitian ini merancang prototipe sistem kendali kecepatan kipas DC otomatis menggunakan sensor DHT22, logika fuzzy Sugeno orde-0, PWM melalui MOSFET, dan LCD I2C sebagai media tampilan. Prototipe ini bertujuan membuktikan konsep penerapan logika fuzzy pada sistem kendali kipas otomatis dan menjadi dasar pengembangan menuju aplikasi yang lebih luas.

B. Rumusan Masalah

1. Bagaimana merancang sistem kendali kecepatan kipas DC otomatis berbasis Raspberry Pi Pico yang mampu menyesuaikan kecepatan putaran kipas terhadap kondisi suhu dan kelembapan lingkungan secara real-time?

2. Bagaimana menerapkan metode logika fuzzy Sugeno orde-0 sebagai algoritma pengambilan keputusan untuk menentukan kecepatan kipas berdasarkan dua variabel masukan, yaitu suhu dan kelembapan?

3. Bagaimana merancang mekanisme peralihan antara mode otomatis (fuzzy) dan mode manual (potensiometer) menggunakan push button sehingga sistem tetap fleksibel dioperasikan oleh pengguna?

4. Bagaimana menampilkan hasil pembacaan sensor DHT22 serta status kerja sistem secara informatif dan real-time melalui LCD I2C 16x2?

C. Tujuan

1. Merancang dan merealisasikan prototipe sistem kendali kecepatan kipas DC otomatis berbasis Raspberry Pi Pico.

2. Mengimplementasikan metode logika fuzzy Sugeno orde-0 untuk pengambilan keputusan kecepatan kipas berdasarkan variabel suhu dan kelembapan.

3. Merancang mode kendali ganda, yaitu mode otomatis berbasis fuzzy dan mode manual berbasis potensiometer, dengan push button sebagai selektor mode.

4. Mengukur unjuk kerja sistem melalui pengujian pembacaan sensor DHT22, hasil perhitungan fuzzy, dan keluaran sinyal PWM terhadap MOSFET penggerak kipas.

5. Menyediakan tampilan informasi suhu, kelembapan, mode operasi, dan kecepatan kipas secara real-time melalui LCD I2C.

II. METODOLOGI

Pembuatan prototipe ini dilakukan melalui beberapa tahapan sebagai berikut:

1. Studi Literatur

Tahap ini dilakukan dengan mempelajari konsep dasar logika fuzzy, khususnya metode Sugeno orde-0, serta mengkaji penelitian-penelitian terdahulu yang menerapkan fuzzy Sugeno maupun fuzzy Mamdani pada sistem kendali kipas berbasis sensor suhu dan kelembapan. Selain itu dipelajari pula dokumentasi resmi Raspberry Pi Pico, bahasa pemrograman MicroPython, karakteristik sensor DHT22, prinsip kerja MOSFET sebagai saklar PWM, serta antarmuka LCD I2C 16x2.

2. Perancangan Hardware

Perancangan perangkat keras meliputi penyusunan rangkaian antara Raspberry Pi Pico dengan sensor DHT22, potensiometer 10K sebagai masukan mode manual, push button sebagai selektor mode, MOSFET IRLZ44N sebagai saklar PWM untuk kipas DC 5V, dioda 1N4007 sebagai flyback diode pelindung MOSFET dari tegangan induksi balik kipas, resistor 220Ω dan 10KΩ sebagai resistor pembatas arus dan pull-down/pull-up, serta LCD I2C 16x2 sebagai media tampilan.

3. Perancangan Software

Perangkat lunak dikembangkan menggunakan MicroPython pada Raspberry Pi Pico, mencakup modul pembacaan sensor DHT22, modul fuzzifikasi dan defuzzifikasi Sugeno orde-0, modul pembangkitan sinyal PWM, modul pembacaan potensiometer melalui ADC, modul pembacaan status push button, serta modul penampil data pada LCD I2C melalui protokol I2C.

4. Pengujian

Pengujian dilakukan terhadap keakuratan pembacaan sensor DHT22, kesesuaian hasil perhitungan fuzzy dengan aturan yang telah ditetapkan, keluaran duty cycle PWM terhadap kecepatan putar kipas, fungsi peralihan mode otomatis dan manual, serta tampilan informasi pada LCD.

5. Penyusunan Laporan

Tahap akhir berupa penyusunan laporan dan artikel berdasarkan hasil perancangan, implementasi, dan pengujian sistem yang telah dilakukan.

III. TINJAUAN PUSTAKA

A. Alat dan Bahan

1.     Raspberry Pi Pico       : 1 buah

2.     Sensor DHT22            : 1 buah

3.     LCD I2C 16×2            : 1 buah

4.     Potensiometer 10 kΩ  : 1 buah

5.     Push Button                : 1 buah

6.     MOSFET IRLZ44N    : 1 buah

7.     Resistor 220 Ω            : 1 buah

8.     Resistor 10 kΩ            : 1 buah

9.     Dioda 1N4007             : 1 buah

10.  Motor DC 5 V             : 1 buah

B. Diagram Blok

Diagram blok sistem menggambarkan alur kerja secara umum, dimulai dari blok masukan berupa sensor DHT22 dan potensiometer, kemudian diproses oleh blok pengendali utama yaitu Raspberry Pi Pico yang menjalankan algoritma fuzzy Sugeno orde-0 pada mode otomatis atau pembacaan langsung ADC pada mode manual, dilanjutkan ke blok keluaran berupa sinyal PWM yang dikuatkan oleh MOSFET untuk menggerakkan kipas DC, serta blok tampilan berupa LCD I2C yang menampilkan informasi hasil pemrosesan secara real-time.

C. Gambar Rangkaian

Gambar rangkaian menunjukkan hubungan elektris antar komponen, di mana sensor DHT22 dihubungkan ke salah satu pin GPIO digital Raspberry Pi Pico, potensiometer dihubungkan ke pin ADC, push button dihubungkan ke pin GPIO dengan konfigurasi pull-down, LCD I2C dihubungkan ke pin SDA dan SCL, sedangkan MOSFET IRLZ44N dihubungkan ke pin PWM pada gate-nya, dengan drain terhubung ke terminal negatif kipas DC dan source terhubung ke ground. Dioda 1N4007 dipasang paralel terhadap kipas untuk melindungi rangkaian dari tegangan induksi balik.

D. Diagram Pengawatan

Pengawatan sistem dirancang agar setiap komponen terhubung sesuai dengan alokasi pin pada Raspberry Pi Pico. Pin data sensor DHT22 dihubungkan ke salah satu pin GPIO digital dengan tambahan resistor pull-up 10KΩ antara jalur data dan VCC sesuai rekomendasi datasheet sensor. Jalur SDA dan SCL LCD I2C dihubungkan ke pin GPIO yang mendukung komunikasi I2C pada Raspberry Pi Pico. Potensiometer dihubungkan sedemikian rupa sehingga jalur wiper terhubung ke pin ADC, sementara kedua ujungnya terhubung ke tegangan referensi 3.3V dan ground. Push button dihubungkan ke pin GPIO dengan resistor pull-down 10KΩ agar pembacaan logika saat tombol tidak ditekan berada pada kondisi low yang stabil. Gate MOSFET IRLZ44N dihubungkan ke pin PWM melalui resistor 220Ω, sedangkan drain dan source MOSFET dihubungkan pada jalur suplai kipas DC 5V yang disuplai dari catu daya eksternal agar arus yang dibutuhkan kipas tidak dibebankan langsung pada regulator Raspberry Pi Pico.

E. Diagram Alir

1. Mode Otomatis (Fuzzy)

Pada mode otomatis, program dimulai dengan inisialisasi sistem, kemudian sensor DHT22 dibaca untuk mendapatkan nilai suhu dan kelembapan. Kedua nilai tersebut selanjutnya melalui proses fuzzifikasi untuk memperoleh derajat keanggotaan pada masing-masing himpunan fuzzy (Dingin, Normal, Panas untuk suhu; Kering, Normal, Lembap untuk kelembapan). Derajat keanggotaan tersebut dievaluasi terhadap sembilan aturan fuzzy Sugeno, kemudian dilakukan proses defuzzifikasi menggunakan metode rata-rata terbobot untuk memperoleh nilai duty cycle PWM. Nilai tersebut dikirimkan ke pin PWM yang terhubung ke gate MOSFET, sehingga kecepatan kipas berubah sesuai hasil perhitungan, dan hasil suhu, kelembapan, serta kecepatan kipas ditampilkan pada LCD.

2. Mode Manual

Pada mode manual, program membaca nilai analog dari potensiometer melalui pin ADC Raspberry Pi Pico. Nilai pembacaan ADC tersebut dikonversi secara linear menjadi nilai duty cycle PWM tanpa melalui proses fuzzy, kemudian nilai tersebut dikirimkan ke pin PWM yang mengendalikan MOSFET, sehingga kecepatan kipas berubah sesuai posisi putaran potensiometer yang diatur oleh pengguna. Informasi kecepatan kipas pada mode manual turut ditampilkan pada LCD.

F. Kode Program

Struktur program pada Raspberry Pi Pico dibagi menjadi beberapa bagian fungsional sebagai berikut. Bagian Inisialisasi berisi konfigurasi pin GPIO, ADC, PWM, serta objek sensor DHT22 dan LCD I2C pada awal program. Bagian Membership Function berisi fungsi-fungsi keanggotaan berbentuk kurva segitiga dan trapesium untuk variabel suhu (Dingin, Normal, Panas) dan kelembapan (Kering, Normal, Lembap), yang menghitung derajat keanggotaan suatu nilai masukan terhadap setiap himpunan fuzzy. Bagian Rule Base Sugeno berisi implementasi sembilan aturan IF-THEN yang memetakan kombinasi suhu dan kelembapan terhadap nilai keluaran konstanta (singleton) kecepatan kipas, sebagaimana ditunjukkan pada Tabel 1.

Aturan

Suhu

Kelembapan

Kecepatan Kipas (Singleton)

R1

Dingin

Kering

Lambat (30%)

R2

Dingin

Normal

Lambat (30%)

R3

Dingin

Lembap

Sedang (60%)

R4

Normal

Kering

Lambat (30%)

R5

Normal

Normal

Sedang (60%)

R6

Normal

Lembap

Sedang (60%)

R7

Panas

Kering

Sedang (60%)

R8

Panas

Normal

Cepat (90%)

R9

Panas

Lembap

Cepat (90%)

Tabel 1. Basis Aturan Fuzzy Sugeno Orde-0

Bagian Defuzzifikasi berisi fungsi yang menghitung nilai keluaran tegas (crisp) menggunakan metode rata-rata terbobot (weighted average), yaitu hasil penjumlahan perkalian derajat keanggotaan (α-predikat) setiap aturan dengan nilai singleton-nya, dibagi dengan jumlah seluruh derajat keanggotaan. Bagian PWM berisi fungsi untuk mengonversi hasil defuzzifikasi menjadi nilai duty cycle dan mengirimkannya ke pin PWM yang terhubung ke MOSFET. Bagian LCD berisi fungsi untuk menampilkan nilai suhu, kelembapan, mode operasi, dan persentase kecepatan kipas melalui komunikasi I2C. Bagian Program Utama (main loop) mengatur alur keseluruhan sistem, meliputi pembacaan status push button untuk menentukan mode aktif, pemanggilan fungsi pembacaan sensor atau potensiometer sesuai mode yang dipilih, pemanggilan fungsi fuzzy apabila mode otomatis aktif, serta pembaruan keluaran PWM dan tampilan LCD secara berulang.

"""============================================================================

Pemrogram : Kelompok RE-3D/5

    1. 05-Ariska Nur Rahmawati                  NIM:4.34.23.3.05

    2. 11-Haidar Faozan Azhiema                 NIM:4.34.23.3.11

    3. 17-Pudjarafi Aqil Arvin Saputra          NIM:4.34.23.3.17

    4. 23-Shafira Az Zahra Dzatin Nithaqaini    NIM:4.34.23.3.23

Proyek Akhir

PA01-SugenoControlledFan.py

Sistem Kendali Kecepatan Kipas DC Menggunakan

Fuzzy Logic Sugeno Berbasis Raspberry Pi Pico

Materi Baru:

- Raspberry Pi Pico

- Sensor DHT22

- LCD 16x2 I2C

- ADC (Analog to Digital Converter)

- Potensiometer

- PWM (Pulse Width Modulation)

- Push Button

- Fuzzy Logic Sugeno Orde-0

- MOSFET Driver

-------------------------------------------------------------------------------

Komponen:

- Raspberry Pi Pico

- Sensor DHT22 x1

- LCD 16x2 I2C x1

- Potensiometer 10KΩ x1

- Push Button x1

- MOSFET IRLZ44N x1

- Resistor 220Ω (Gate MOSFET) x1

- Resistor 10KΩ (Pull-down MOSFET) x1

- Dioda IN4007 x1

- Fan DC 5V x1

-------------------------------------------------------------------------------

Fitur Sistem:

- Mode Otomatis menggunakan Fuzzy Logic Sugeno Orde-0

- Mode Manual menggunakan Potensiometer

- Monitoring suhu dan kelembapan DHT22

- Pengaturan kecepatan fan menggunakan PWM

- Tampilan data suhu, kelembapan, dan kecepatan fan pada LCD

- Tombol toggle Auto / Manual

-------------------------------------------------------------------------------

Variabel Input

Suhu : Dingin 0 – 30°C, Normal 25 – 35°C, Panas 30 – 50°C

Kelembapan : Kering 0 – 60%, Normal 45 – 75%, lembap 60 – 100%

Variabel Output

Kecepatan Kipas: Lambat : 70%, Sedang : 85%, Cepat  : 100%

============================================================================"""

 

#=== pustaka ===

from machine import Pin, ADC, I2C, PWM

from pico_i2c_lcd import I2cLcd

import dht

import time

 

#=== Pengesetan Awal ===

i2c = I2C(                                  #inisialisasi LCD I2C

    0,                                      #menggunakan I2C channel 0

    scl=Pin(1),                             #pin clock LCD

    sda=Pin(0),                             #pin data LCD

    freq=400000                             #kecepatan komunikasi 400 kHz (LCD lebih responsif di frekuensi ini)

)

lcd = I2cLcd(i2c, 0x27, 2, 16)              #inisialisasi LCD alamat 0x27

lcd.clear()                                 #membersihkan tampilan LCD

sensor = dht.DHT22(Pin(15))                 #DHT22

button = Pin(2, Pin.IN, Pin.PULL_UP)        #Push Button (pin input, pin pull up aktif saat LOW)

pot = ADC(26)                               #Potensiometer

fan = PWM(Pin(16))                          #inisialisasi PWM fan pada GP16

fan.freq(25000)                              #frekuensi PWM 1 kHz (Fan masih bisa merespon PWM dengan baik. kalo pake 100Hz misal nanti fan bisa bunyi, kalo kegedean mosfet bekerja lebih keras)

auto_mode = True                            #mode awal sistem otomatis

last_button = 1                             #status tombol sebelumnya

last_mode = auto_mode                       #penyimpan mode sebelumnya

 

#Membership Function Suhu

def dingin(t):                              #Kurva turun: semakin rendah suhu, semakin "dingin"

    if t <= 25:                             #suhu <= 25°C dianggap dingin

        return 1                            #pasti dingin, derajat keanggotaan maksimal, derajat keanggotaan = 100%

    elif t < 30:                            #turun linear, semakin mendekati 30 semakin "tidak dingin"

        return (30 - t) / 5

    return 0                                #sudah tidak dingin sama sekali

def normal_temp(t):                         #Kurva segitiga: puncak di t=30 (µ=1.0), turun ke dua sisi

    if 25 < t < 30:                         #Sisi kiri naik: t=27 → (27-25)/5 = 0.4

        return (t - 25) / 5                 #Sisi kanan turun: t=32 → (35-32)/5 = 0.6

    elif 30 <= t < 35:                      #Di luar rentang 25–35°C → tidak normal (µ = 0.0)

        return (35 - t) / 5

    return 0

def panas(t):                               #Kurva naik: semakin tinggi suhu, semakin "panas"                             

    if t <= 30:                            

        return 0                            #Suhu ≤ 30°C → belum panas sama sekali (µ = 0.0)

    elif t < 35:                           

        return (t - 30) / 5                 #transisi ke panas,  naik linear

    return 1                                #pasti panas (µ = 1.0), derajat keanggotaan maksimal, derajat keanggotaan = 100%

 

#Membership Function Kelembapan

def kering(h):                             

    if h <= 45:

        return 1                            #Kelembapan ≤ 45% → pasti kering (µ = 1.0)

    elif h < 60:                           

        return (60 - h) / 15                #Kelembapan 45–60% → kering sebagian, Contoh: h=50 → (60-50)/15 = 0.667

    return 0                                #Kelembapan ≥ 60% → tidak kering (µ = 0.0)

def normal_hum(h):                          #Kurva segitiga: puncak di h=60 (µ=1.0)

    if 45 < h < 60:

        return (h - 45) / 15                #Sisi kiri naik: h=52 → (52-45)/15 = 0.467

    elif 60 <= h < 75:

        return (75 - h) / 15                #Sisi kanan turun: h=65 → (75-65)/15 = 0.667

    return 0                                #Di luar rentang 45–75% → tidak normal (µ = 0.0)

def lembap(h):                              #Kurva naik: semakin tinggi kelembapan, semakin "lembap"

    if h <= 60:

        return 0                            #Kelembapan ≤ 60% → belum lembap (µ = 0.0)

    elif h < 75:

        return (h - 60) / 15                #Kelembapan 60–75% → lembap sebagian, Contoh: h=65 → (65-60)/15 = 0.333

    return 1                                #Kelembapan ≥ 75% → pasti lembap (µ = 1.0)

 

def sugeno(temp, hum):                      #Fuzzy Sugeno

    d  = dingin(temp)                       #µ suhu dingin,  rentang 0.0–1.0

    n  = normal_temp(temp)                  #µ suhu normal,  rentang 0.0–1.0

    p  = panas(temp)                        #µ suhu panas,   rentang 0.0–1.0

 

    k  = kering(hum)                        #µ hum kering,   rentang 0.0–1.0

    nh = normal_hum(hum)                    #µ hum normal,   rentang 0.0–1.0

    l  = lembap(hum)                        #µ hum lembap,   rentang 0.0–1.0

    rules = [

    #Operator AND diimplementasikan dengan fungsi min()

        (min(d, k),  30),                   # IF Dingin  AND Kering  THEN PWM 25% (lambat)

        (min(d, nh), 30),                   # IF Dingin  AND Normal  THEN PWM 25% (lambat)

        (min(d, l),  60),                   # IF Dingin  AND Lembap  THEN PWM 60% (sedang)

        (min(n, k),  60),                   # IF Normal  AND Kering  THEN PWM 60% (sedang)

        (min(n, nh), 60),                   # IF Normal  AND Normal  THEN PWM 60% (sedang)

        (min(n, l),  90),                  # IF Normal  AND Lembap  THEN PWM 90% (cepat)

        (min(p, k),  90),                  # IF Panas   AND Kering  THEN PWM 90% (cepat)

        (min(p, nh), 90),                  # IF Panas   AND Normal  THEN PWM 90% (cepat)

        (min(p, l),  90),                  # IF Panas   AND Lembap  THEN PWM 90% (cepat)

    ]

   

    #Defuzzifikasi: Weighted Average. Rumus: z* = Σ(αi × zi) / Σ(αi)

    atas = 0                                #akumulator pembilang  → Σ(αi × zi)

    bawah = 0                               #akumulator penyebut   → Σ(αi)

   

    #alpha = firing strength = MIN(µ_suhu, µ_kelembapan)

    #z = output konstanta (Sugeno Orde-0)

    # Operator AND diimplementasikan dengan fungsi min()

    for alpha, z in rules:

        atas += alpha * z                   #tambahkan bobot × output ke pembilang

        bawah += alpha                      #tambahkan bobot ke penyebut

    if bawah == 0:

        return 0                            #hindari pembagian nol (semua rule α=0)

    return atas / bawah                     #hasil akhir: kecepatan kipas dalam persen (%)

 

def set_fan(percent):                       #Mengatur kecepatan kipas DC via sinyal PWM 16-bit

    if percent < 0:

        percent = 0

    if percent > 100:

        percent = 100

    duty = int(percent * 65535 / 100)       #Konversi persen → nilai PWM 16-bit. Rumus: duty = percent/100 × 65535. int() membulatkan ke bawah karena duty_u16 hanya menerima bilangan bulat

    fan.duty_u16(duty)                      #Kirim nilai duty cycle ke pin PWM kipas

 

#=== Program Utama ===

print("================================")

print("SMART FAN SUGENO ORDE-0 CONTROL")

print("Kelompok RE-3D/5")

print("Button = Toggle Auto / Manual")

print("================================")

 

while True:                                 #loop utama, berjalan terus-menerus

    try:                                    #Baca DHT22

        sensor.measure()

        temp = sensor.temperature()

        hum = sensor.humidity()

    except:                                 #try-except untuk menangani kegagalan baca sensor (checksum error, dll)

        temp = 0

        hum = 0

    current = button.value()                #membaca status tombol

    if current == 0 and last_button == 1:   #deteksi tombol ditekan

        auto_mode = not auto_mode           #ubah mode auto/manual

        lcd.clear()                         #hapus tampilan LCD

        time.sleep_ms(5)                    #delay stabilisasi LCD

        lcd.move_to(0,0)                    #posisi baris pertama

        lcd.putstr("MODE CHANGED")          #tampilkan informasi mode

        lcd.move_to(0,1)                    #posisi baris kedua

        if auto_mode:

            lcd.putstr("AUTO MODE")         #tampilkan mode otomatis

            print(">>> AUTO MODE <<<")     

        else:

            lcd.putstr("MANUAL MODE")       #tampilkan mode manual

            print(">>> MANUAL MODE <<<")

        time.sleep(1)                       #delay tampilan mode

    last_button = current                   #simpan status tombol

    if auto_mode != last_mode:              #Jika mode berubah

        lcd.clear()                         #LCD dibersihkan

        time.sleep_ms(5)

        last_mode = auto_mode               #Untuk mendeteksi perubahan mode Auto dan Manual

    if auto_mode:                           #mode fuzzy otomatis

        fan_speed = sugeno(temp, hum)       #Panggil fungsi Sugeno dengan input suhu & kelembapan

        set_fan(fan_speed)                  #Kirim sinyal PWM ke kipas sesuai hasil Sugeno

        pwm_8bit = int(fan_speed * 255 / 100)#Konversi persen ke skala 8-bit (0-255) HANYA untuk keperluan tampilan di LCD/serial

        fan_voltage = 5 * fan_speed / 100   #Estimasi tegangan efektif fan berdasarkan duty cycle PWM, V_rata-rata = Vsuplai × (duty cycle/100), bukan hasil pengukuran langsung

        lcd.move_to(0,0)                    #Pindah kursor LCD ke kolom 0, baris 0 (baris atas)

        lcd.putstr(

            "T:{:2.0f} H:{:2.0f} V:{:.1f} ".format(     #{:2.0f} = tampilkan angka lebar 2 digit, 0 desimal. Contoh: temp=28.4 → "28", hum=65.1 → "65"

                temp,                                   # {:.1f} = 1 angka desimal tanpa lebar tetap (untuk tegangan, presisi lebih penting dari lebar)

                hum,

                fan_voltage

            )

        )

        lcd.move_to(0,1)                    #Pindah kursor LCD ke kolom 0, baris 1 (baris bawah)

        lcd.putstr(

            "F:{:3.0f}% P:{:3d}      ".format(    #{:3.0f} = lebar 3 digit, 0 desimal. Contoh: fan_speed=57.6 → "FAN: 58%". Spasi di belakang untuk menghapus sisa karakter lama

                fan_speed,                        #{:3d} = lebar tetap 3 digit untuk integer, menjaga alignment PWM 8-bit (0-255) di LCD

                pwm_8bit

            )

        )

        print(

            "AUTO | Temp={:.1f}C | Hum={:.1f} | PWM={}%".format(    #cetak status mode auto ke serial monitor untuk debugging

        temp,

        hum,

        fan_speed,

        pwm_8bit

        )

    )

    else:                                  

        adc = pot.read_u16()                #Baca nilai ADC dari potensiometer

        fan_speed = adc * 100 / 65535       #konversi nilai ADC ke persen. Contoh: adc=32767 → 32767×100/65535 ≈ 50%

        set_fan(fan_speed)                  #kirim sinyal PWM ke kipas sesuai posisi potensio

        pwm_8bit = int(fan_speed * 255 / 100)#Konversi persen ke skala 8-bit (0-255) HANYA untuk keperluan tampilan di LCD/serial

        fan_voltage = 5 * fan_speed / 100   #Estimasi tegangan efektif fan berdasarkan duty cycle PWM, V_rata-rata = Vsuplai × (duty cycle/100), bukan hasil pengukuran langsung

        lcd.move_to(0,0)                    #Pindah kursor ke baris atas LCD

        lcd.putstr(

            "T:{:2.0f} H:{:2.0f} V:{:.1f} ".format(

                temp,

                hum,

                fan_voltage

            )

        )

        lcd.move_to(0,1)                    #Pindah kursor ke baris bawah LCD

        lcd.putstr(

            "F:{:3.0f}% P:{:3d}     ".format(

                fan_speed,                   #Tampilkan kecepatan kipas dari potensio

                pwm_8bit

            )

        )

        print(

            "MAN | Temp={:.1f}C | Hum={:.1f}% | PWM={}".format(   #cetak status mode auto ke serial monitor untuk debugging

        temp,

        hum,

        fan_speed,

        pwm_8bit

        )

    )

    time.sleep(0.2)                         #delay 200ms agar tidak membebani CPU dan DHT22 (DHT22 butuh jeda min ~2s antar baca, tapi loop tetap jalan cepat untuk responsivitas tombol/potensio)

IV. HASIL DAN PEMBAHASAN

A. Cara Kerja Rangkaian

Saat sistem dinyalakan, Raspberry Pi Pico melakukan inisialisasi seluruh modul, termasuk sensor DHT22, LCD I2C, serta pin PWM dan ADC. Sistem kemudian membaca status push button untuk menentukan mode operasi yang aktif, yaitu mode otomatis atau mode manual, dan status tersebut ditampilkan pada LCD.

Pada mode otomatis, Raspberry Pi Pico membaca sensor DHT22 untuk memperoleh nilai suhu dan kelembapan udara di sekitar kipas. Kedua nilai tersebut kemudian diproses melalui tahap fuzzifikasi, di mana setiap nilai dipetakan ke dalam derajat keanggotaan pada himpunan fuzzy suhu (Dingin, Normal, Panas) dan kelembapan (Kering, Normal, Lembap) menggunakan fungsi keanggotaan berbentuk kurva segitiga dan trapesium. Derajat keanggotaan tersebut selanjutnya dievaluasi terhadap sembilan aturan fuzzy Sugeno menggunakan operator AND (mengambil nilai minimum), sehingga diperoleh α-predikat untuk masing-masing aturan. Karena metode Sugeno orde-0 memiliki konsekuen berupa konstanta, setiap aturan yang aktif langsung memberikan kontribusi berupa nilai singleton kecepatan kipas (30%, 60%, atau 90%) yang dibobotkan oleh α-predikat-nya.

Proses defuzzifikasi kemudian menghitung nilai keluaran tegas menggunakan metode rata-rata terbobot, yaitu menjumlahkan hasil perkalian α-predikat dengan nilai singleton setiap aturan, kemudian membaginya dengan jumlah total α-predikat yang aktif. Nilai keluaran tegas inilah yang dikonversi menjadi duty cycle sinyal PWM yang dikirimkan ke gate MOSFET IRLZ44N. Ketika duty cycle meningkat, MOSFET akan lebih lama berada pada kondisi ON dalam satu periode PWM, sehingga tegangan rata-rata yang diterima kipas DC meningkat dan kipas berputar lebih cepat; sebaliknya, duty cycle yang rendah akan membuat kipas berputar lebih lambat. Dioda 1N4007 yang dipasang paralel terhadap kipas berfungsi menyalurkan arus induksi balik saat MOSFET beralih dari ON ke OFF, sehingga melindungi MOSFET dari lonjakan tegangan yang dapat merusak komponen.

Pada mode manual, sistem tidak menjalankan proses fuzzy, melainkan langsung membaca nilai tegangan dari potensiometer melalui pin ADC dan mengonversinya secara linear menjadi nilai duty cycle PWM, sehingga kecepatan kipas dapat diatur secara langsung oleh pengguna melalui putaran potensiometer. Pada kedua mode, hasil pembacaan suhu, kelembapan (khusus mode otomatis), mode aktif, dan persentase kecepatan kipas ditampilkan secara real-time pada LCD I2C 16x2, sehingga pengguna dapat memantau kondisi sistem tanpa perlu terhubung ke komputer.

B. Hasil Pengujian

Pengujian dilakukan dengan memberikan variasi kondisi suhu dan kelembapan pada mode otomatis, serta variasi posisi potensiometer pada mode manual. Contoh hasil pengujian sistem ditunjukkan pada Tabel 2 berikut.

No

Suhu (°C)

Kelembapan (%)

Mode

Output Fuzzy PWM (%)

Kecepatan Kipas

Keterangan

1

27,5

55

Otomatis

30

Lambat

Suhu dingin, kelembapan kering

2

29,0

68

Otomatis

42

Lambat–Sedang

Suhu dingin–normal, kelembapan normal

3

31,2

72

Otomatis

60

Sedang

Suhu normal, kelembapan normal–lembap

4

33,8

58

Otomatis

58

Sedang

Suhu normal–panas, kelembapan normal

5

36,4

80

Otomatis

90

Cepat

Suhu panas, kelembapan lembap

6

38,1

65

Otomatis

78

Sedang–Cepat

Suhu panas, kelembapan normal

7

-

-

Manual

45

Sesuai potensiometer

Kecepatan diatur langsung oleh pengguna

8

-

-

Manual

85

Sesuai potensiometer

Kecepatan diatur langsung oleh pengguna

Tabel 2. Contoh Hasil Pengujian Sistem

Berdasarkan Tabel 2, dapat dilihat bahwa pada mode otomatis, kecepatan kipas cenderung meningkat seiring dengan naiknya suhu dan kelembapan yang terbaca oleh sensor DHT22, sesuai dengan basis aturan fuzzy Sugeno yang telah ditetapkan pada Tabel 1. Pada kondisi suhu dan kelembapan yang berada pada wilayah tumpang tindih (overlap) antar himpunan fuzzy, seperti suhu 33,8°C, keluaran PWM berada pada nilai peralihan antara kategori sedang dan cepat, yang menunjukkan bahwa proses defuzzifikasi rata-rata terbobot mampu menghasilkan keluaran yang halus (smooth) dan tidak berubah secara mendadak (non-linear jump) antar kategori kecepatan. Pada mode manual, kecepatan kipas terbukti dapat diatur secara langsung dan responsif sesuai posisi potensiometer, tanpa dipengaruhi oleh pembacaan sensor DHT22.

C. Foto Prototype

V. KESIMPULAN

Berdasarkan hasil perancangan dan pengujian prototipe sistem kendali kecepatan kipas DC otomatis berbasis Raspberry Pi Pico, dapat disimpulkan bahwa metode logika fuzzy Sugeno orde-0 berhasil diimplementasikan untuk mengolah data suhu dan kelembapan dari sensor DHT22 menjadi nilai duty cycle PWM yang mengatur kecepatan kipas DC melalui MOSFET IRLZ44N. Sistem mampu menghasilkan tiga kategori kecepatan kipas, yaitu lambat, sedang, dan cepat, dengan transisi antar kategori yang halus berkat proses defuzzifikasi rata-rata terbobot. Selain mode otomatis, sistem juga menyediakan mode manual berbasis potensiometer yang dapat dipilih melalui push button, sehingga pengguna tetap memiliki kendali langsung apabila diperlukan, dan seluruh informasi suhu, kelembapan, mode, serta kecepatan kipas dapat dipantau secara real-time melalui LCD I2C 16x2.

Prototipe yang dihasilkan pada penelitian ini masih berada pada tahap pengujian skala laboratorium dengan cakupan pengujian yang terbatas, sehingga belum merepresentasikan kondisi operasional pada skala ruangan yang sesungguhnya maupun pengujian jangka panjang. Pengembangan lebih lanjut dapat diarahkan pada penambahan variabel masukan lain seperti keberadaan manusia melalui sensor PIR, penerapan konektivitas IoT untuk pemantauan jarak jauh, serta optimasi fungsi keanggotaan dan basis aturan fuzzy agar respons sistem semakin sesuai dengan kebutuhan kenyamanan termal pengguna.

VI. REFERENSI

Aosong Electronics Co., Ltd., n.d. Digital Humidity and Temperature Sensor AM2302/DHT22 Product Manual. [pdf] Tersedia di: <https://cdn-shop.adafruit.com/datasheets/Digital+humidity+and+temperature+sensor+AM2302.pdf> [Diakses 3 Juli 2026].

MicroPython, 2026. MicroPython Documentation. [daring] Tersedia di: <https://docs.micropython.org/> [Diakses 3 Juli 2026].

Putri, N., 2024. Implementasi dan Perbandingan Kinerja Algoritma Fuzzy Tsukamoto dan Fuzzy Mamdani untuk Sistem Kendali Kecepatan Kipas Exhaust. Journal Tech-E, 8(1). Tangerang: Universitas Buddhi Dharma.

Raspberry Pi Ltd., 2025. Pico Microcontroller Boards — Raspberry Pi Documentation. [daring] Tersedia di: <https://www.raspberrypi.com/documentation/microcontrollers/pico-series.html> [Diakses 3 Juli 2026].

Raspberry Pi Ltd., 2026. MicroPython — Raspberry Pi Documentation. [daring] Tersedia di: <https://www.raspberrypi.com/documentation/microcontrollers/micropython.html> [Diakses 3 Juli 2026].

Rizal, M.M., Ikhsan, M. dan Hasibuan, M.S., 2024. Sistem Pemantau Suhu dan Kelembapan Kandang Puyuh Menggunakan Metode Logika Fuzzy Sugeno Berbasis Internet of Things. Jurnal Fasilkom, 14(1), pp.242-249.

Robson, W., Ernawati, I. dan Nugrahaeni, C., 2021. Design of Multisensor Automatic Fan Control System Using Sugeno Fuzzy Method. Journal of Robotics and Control (JRC), 2(4), pp.302-306. DOI: 10.18196/jrc.2496.

Shema, D.I., 2022. Implementasi Metode Logika Fuzzy Sugeno pada Prototipe Robot Pemadam Api dengan Kemampuan Navigasi. Jurnal Teknologi Elektro, 13(1), pp.55-60. DOI: 10.22441/jte.2022.v13i1.010.

VII. LAMPIRAN

A.  Link PPT: https://canva.link/tle3pem9d9skfh2

B.  Link YouTube: https://youtu.be/FEG4JEvUtI0

C.  Link GitHub: https://github.com/shazahradz/fan-speed-control

 

Komentar

Postingan populer dari blog ini

SISTEM KONVEYOR OTOMATIS DENGAN SENSOR INFRARED DAN KONTROL MANUAL

Pompa Air Otomatis Berbasis ATMega8535

SISTEM PEMANTAUAN SUHU DAN KELEMBABAN PADA SUATU RUANGAN MENGGUNAKAN SENSOR DHT22 BERBASIS MIKROKONTROLLER ARDUINO UNO ATMEGA328P