import machine
import dht
import time
import numpy as np
import skfuzzy as fuzz
from skfuzzy import control as ctrl
# Định nghĩa chân kết nối
DHT_PIN = 4
LED_COLD = 18
LED_NORMAL = 19
LED_HOT = 21
# Khởi tạo cảm biến DHT22
dht_sensor = dht.DHT22(machine.Pin(DHT_PIN))
# Khởi tạo các chân LED
led_cold = machine.Pin(LED_COLD, machine.Pin.OUT)
led_normal = machine.Pin(LED_NORMAL, machine.Pin.OUT)
led_hot = machine.Pin(LED_HOT, machine.Pin.OUT)
# Tắt tất cả LED ban đầu
led_cold.off()
led_normal.off()
led_hot.off()
# ======= Fuzzy Logic Setup =======
# Định nghĩa biến đầu vào: Nhiệt độ và Độ ẩm
temperature = ctrl.Antecedent(np.arange(10, 50, 1), 'temperature')
humidity = ctrl.Antecedent(np.arange(20, 90, 1), 'humidity')
# Định nghĩa biến đầu ra: LED mức độ (0: lạnh, 1: bình thường, 2: nóng)
led_output = ctrl.Consequent(np.arange(0, 3, 1), 'led_output')
# Định nghĩa tập mờ
temperature['cold'] = fuzz.trimf(temperature.universe, [10, 15, 25])
temperature['normal'] = fuzz.trimf(temperature.universe, [20, 27, 30])
temperature['hot'] = fuzz.trimf(temperature.universe, [28, 35, 50])
humidity['low'] = fuzz.trimf(humidity.universe, [20, 30, 40])
humidity['medium'] = fuzz.trimf(humidity.universe, [35, 50, 65])
humidity['high'] = fuzz.trimf(humidity.universe, [60, 75, 90])
led_output['cold'] = fuzz.trimf(led_output.universe, [0, 0, 1])
led_output['normal'] = fuzz.trimf(led_output.universe, [0, 1, 2])
led_output['hot'] = fuzz.trimf(led_output.universe, [1, 2, 2])
# Định nghĩa các quy tắc mờ
rule1 = ctrl.Rule(temperature['cold'] & humidity['low'], led_output['cold'])
rule2 = ctrl.Rule(temperature['normal'] & humidity['medium'], led_output['normal'])
rule3 = ctrl.Rule(temperature['hot'] & humidity['high'], led_output['hot'])
# Tạo hệ thống điều khiển mờ
led_ctrl = ctrl.ControlSystem([rule1, rule2, rule3])
led_system = ctrl.ControlSystemSimulation(led_ctrl)
while True:
try:
dht_sensor.measure()
temp = dht_sensor.temperature()
hum = dht_sensor.humidity()
print(f"Nhiệt độ: {temp:.1f} °C, Độ ẩm: {hum:.1f} %")
# Cập nhật giá trị vào hệ mờ
led_system.input['temperature'] = temp
led_system.input['humidity'] = hum
led_system.compute()
output = led_system.output['led_output']
# Điều khiển LED theo giá trị mờ
if output < 0.5:
led_cold.on()
led_normal.off()
led_hot.off()
elif 0.5 <= output < 1.5:
led_cold.off()
led_normal.on()
led_hot.off()
else:
led_cold.off()
led_normal.off()
led_hot.on()
except OSError as e:
print("Lỗi đọc cảm biến DHT22!", e)
time.sleep(2)