from machine import Pin, ADC, I2C, PWM
from time import sleep
import dht
import lcd_api
import pico_i2c_lcd
import hx711
# ---------- INISIALISASI SENSOR ----------
# LDR
ldr = ADC(26) # GP26
led_kuning = Pin(9, Pin.OUT) # GP9 untuk LED LDR
# MQ2
mq2 = ADC(27) # GP27
led_merah = Pin(8, Pin.OUT) # GP8
# DHT22
dht22 = dht.DHT22(Pin(2)) # GP2
led_hijau = Pin(15, Pin.OUT) # GP15
# Loadcell HX711
hx = hx711.HX711(d_out=Pin(3), pd_sck=Pin(4)) # GP3 dan GP4
hx.set_scale(2280) # Sesuaikan skala ini berdasarkan kalibrasi
hx.tare()
# Servo motor
servo = PWM(Pin(16))
servo.freq(50)
# LCD I2C
i2c = I2C(1, scl=Pin(7), sda=Pin(6), freq=400000)
lcd = pico_i2c_lcd.I2cLcd(i2c, 0x27, 2, 16)
# ---------- FUNGSI BANTU ----------
def adc_to_lux(adc_value):
return (65535 - adc_value) / 65535 * 1000 # 0-1000 lux
def adc_to_ppm(adc_value):
return (adc_value / 65535) * 10000 # 0–10000 ppm
def gerakkan_servo(derajat):
min_us = 500
max_us = 2500
us = min_us + (max_us - min_us) * derajat / 180
duty = int(us * 65535 / 20000)
servo.duty_u16(duty)
# ---------- LOOP UTAMA ----------
while True:
lcd.clear()
# === SENSOR LDR ===
lux = adc_to_lux(ldr.read_u16())
print(f"LDR: {lux:.2f} lux")
if lux < 100:
led_kuning.value(1)
lcd.putstr("Cahaya: Kurang")
else:
led_kuning.value(0)
lcd.putstr("Cahaya: Cukup")
sleep(2)
lcd.clear()
# === SENSOR MQ2 ===
ppm = adc_to_ppm(mq2.read_u16())
print(f"MQ2: {ppm:.2f} ppm")
if ppm >= 200:
led_merah.value(1)
lcd.putstr("Amonia Berbahaya")
else:
led_merah.value(0)
lcd.putstr("Amonia Rendah")
sleep(2)
lcd.clear()
# === SENSOR DHT22 ===
try:
dht22.measure()
suhu = dht22.temperature()
print(f"Suhu: {suhu} C")
if suhu > 35:
led_hijau.value(1)
lcd.putstr("Suhu Tinggi")
else:
led_hijau.value(0)
lcd.putstr("Suhu Rendah")
except Exception as e:
print("DHT22 Error:", e)
lcd.putstr("Error DHT22")
sleep(2)
lcd.clear()
# === SENSOR LOADCELL + SERVO ===
try:
berat = hx.get_units(5)
print(f"Berat: {berat:.2f} gram")
if berat < 100:
gerakkan_servo(90)
lcd.putstr("Berat pakan\nkurang")
elif berat > 120:
gerakkan_servo(0)
lcd.putstr("Pakan mencukupi")
else:
lcd.putstr("Berat stabil")
except Exception as e:
print("HX711 Error:", e)
lcd.putstr("Error HX711")
sleep(2)
lcd.clear()