from machine import Pin, I2C, ADC
import time
import utime
import machine
import onewire, ds18x20
import ssd1306
# ===== Inisialisasi OLED (I2C) =====
i2c = I2C(0, scl=Pin(21), sda=Pin(20))
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
# ===== HC-SR04 Setup =====
TRIG = Pin(2, Pin.OUT)
ECHO = Pin(3, Pin.IN)
led_hijau = Pin(7, Pin.OUT)
led_merah = Pin(8, Pin.OUT)
relay1 = Pin(4, Pin.OUT)
def ukur_jarak():
TRIG.low()
utime.sleep_us(2)
TRIG.high()
utime.sleep_us(10)
TRIG.low()
while ECHO.value() == 0:
start = utime.ticks_us()
while ECHO.value() == 1:
end = utime.ticks_us()
durasi = utime.ticks_diff(end, start)
jarak_cm = (durasi / 2) / 29.1
return jarak_cm
# ===== DS18B20 Setup =====
datapin = machine.Pin(28)
ds_sensor = ds18x20.DS18X20(onewire.OneWire(datapin))
roms = ds_sensor.scan()
relay2 = Pin(5, Pin.OUT)
# ===== MQ2 Setup =====
mq2_digital = Pin(26, Pin.IN)
relay3 = Pin(6, Pin.OUT)
# ===== Fungsi tampil OLED umum =====
def tampilkan_oled(baris1, baris2=""):
oled.fill(0)
oled.text(baris1, 0, 0)
oled.text(baris2, 0, 20)
oled.show()
# ===== Loop utama =====
while True:
# === Sensor Jarak HC-SR04 ===
jarak = ukur_jarak()
print("Jarak: {:.2f} cm".format(jarak))
if 10 <= jarak <= 20:
led_hijau.value(1)
led_merah.value(0)
relay1.value(0)
tampilkan_oled("Status Air:", "Jumlah air ideal")
elif jarak > 20:
led_hijau.value(0)
led_merah.value(1)
relay1.value(1)
tampilkan_oled("Status Air:", "Jumlah air menipis")
else:
led_hijau.value(0)
led_merah.value(0)
relay1.value(0)
tampilkan_oled("Status Air:", "Air cukup penuh")
time.sleep(1)
# === Sensor Suhu DS18B20 ===
ds_sensor.convert_temp()
time.sleep_ms(750)
for rom in roms:
suhu = ds_sensor.read_temp(rom)
print("Suhu: {:.2f} C".format(suhu))
if suhu < 25:
relay2.value(1)
else:
relay2.value(0)
tampilkan_oled("Suhu Air:", "{:.2f} C".format(suhu))
time.sleep(1)
# === Sensor MQ2 ===
nilai_mq2 = mq2_digital.value()
print("MQ2 DOUT =", nilai_mq2)
if nilai_mq2 == 1:
relay3.value(1)
tampilkan_oled("Kekeruhan:", "Air keruh")
else:
relay3.value(0)
tampilkan_oled("Kekeruhan:", "Air tidak keruh")
time.sleep(1)
Loading
ds18b20
ds18b20