# ex_3_3_05_smart_irrigation.py (จำลอง: https://wokwi.com/projects/469816634682867713)
from machine import ADC, Pin
import time
soil = ADC(Pin(34))
soil.atten(ADC.ATTN_11DB)
pump = Pin(23, Pin.OUT) # รีเลย์ปั๊มน้ำที่ GPIO23
pump.value(0) # pin-safety: เริ่มที่ปิดเสมอ
DRY_CAL = 3150 # ค่าสอบเทียบ (ต้องวัดใหม่กับเซนเซอร์ของตนเอง)
WET_CAL = 1250
THRESHOLD = 30 # เกณฑ์รดน้ำ 30% (ค่าตัวอย่าง ปรับตามชนิดพืช)
def read_moisture():
total = 0
for _ in range(12): # กรองสัญญาณก่อนตัดสินใจเสมอ
total += soil.read()
time.sleep_ms(10)
raw = total / 12
percent = (DRY_CAL - raw) / (DRY_CAL - WET_CAL) * 100
return max(0.0, min(100.0, percent))
while True:
moisture = read_moisture()
if moisture < THRESHOLD:
pump.value(1) # ดินแห้ง: เปิดปั๊ม
state = "ON"
else:
pump.value(0) # ชื้นพอ: ปิดปั๊ม
state = "OFF"
print("ความชื้นดิน: {:.1f}% ปั๊ม: {}".format(moisture, state))
time.sleep(2) # ตรวจซ้ำทุก 10 วินาที (ค่าตัวอย่าง)