# Smart Irrigation System with Temperature Monitoring
# Updated: 22/04/2026
from machine import Pin, ADC, PWM
import dht
import time
# --- Setup Pins ---
pot = ADC(Pin(34))
pot.atten(ADC.ATTN_11DB)
dht_sensor = dht.DHT22(Pin(4))
rain_sensor = Pin(14, Pin.IN, Pin.PULL_UP)
water_switch = Pin(27, Pin.IN)
mode_button = Pin(26, Pin.IN, Pin.PULL_UP)
pump = Pin(25, Pin.OUT)
fan = Pin(33, Pin.OUT)
led_blue = Pin(19, Pin.OUT)
led_red = Pin(18, Pin.OUT)
# --- Buzzer Setup (PWM) ---
buzzer = PWM(Pin(15))
buzzer.duty(0) # Pastikan senyap masa start
def beep(status):
if status:
buzzer.freq(1000) # Frekuensi nada bunyi
buzzer.duty(512) # Kelantangan (0-1023)
else:
buzzer.duty(0) # Senyap
# --- Threshold ---
DRY_LEVEL = 2000
print("System Ready...")
while True:
try:
# Baca sensor
soil_value = pot.read()
dht_sensor.measure()
temp = dht_sensor.temperature()
rain = 1 if rain_sensor.value() == 0 else 0
water_ok = water_switch.value()
manual = mode_button.value()
print(f"Soil: {soil_value} | Temp: {temp}C | Rain: {rain} | Water: {water_ok}")
# Auto Mode (manual == 1)
if manual == 1:
if soil_value < DRY_LEVEL and rain == 0 and water_ok == 1:
pump.value(1)
led_red.value(1)
led_blue.value(0)
beep(True) # Buzzer bunyi
else:
pump.value(0)
led_red.value(0)
led_blue.value(1)
beep(False) # Buzzer senyap
# Manual Mode (manual == 0)
else:
pump.value(0)
beep(False)
led_red.value(1)
led_blue.value(0)
# Fan control (Auto)
if temp > 30:
fan.value(1)
else:
fan.value(0)
time.sleep(1)
except Exception as e:
print("Error:", e)