print("Hello, Pi Pico!")
import machine
import ssd1306
from machine import Pin, I2C
import dht
import time
# Inisialisasi OLED
i2c = I2C(1, scl=Pin(7), sda=Pin(6))
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
# Inisialisasi sensor suhu dan kelembapan
dht_sensor = dht.DHT22(Pin(26))
# Inisialisasi sensor ultrasonik
trigger_pin = Pin(2, Pin.OUT)
echo_pin = Pin(3, Pin.IN)
# Inisialisasi sensor motion
pir_sensor = Pin(22, Pin.IN)
# Inisialisasi lampu LED
led_suhu = Pin(27, Pin.OUT)
led_kelembapan = Pin(28, Pin.OUT)
led_tinggi = Pin(5, Pin.OUT)
led_pergerakan = Pin(20, Pin.OUT)
def read_distance():
# Baca jarak dari sensor ultrasonik
trigger_pin.value(1)
time.sleep_us(10)
trigger_pin.value(0)
pulse_time = machine.time_pulse_us(echo_pin, 1)
distance = (pulse_time / 2) / 29.1 # Faktor konversi untuk mengubah waktu menjadi jarak dalam cm
return distance
def read_temperature_humidity():
# Baca suhu dan kelembapan dari sensor DHT22
dht_sensor.measure()
temperature = dht_sensor.temperature()
humidity = dht_sensor.humidity()
return temperature, humidity
while True:
try:
# Baca nilai dari semua sensor
distance = read_distance()
temperature, humidity = read_temperature_humidity()
motion_detected = pir_sensor.value()
# Tampilkan hasil di OLED
oled.fill(0)
oled.text("Suhu: {:.2f} C".format(temperature), 0, 0)
oled.text("Kelembapan: {:.2f}%".format(humidity), 0, 16)
oled.text("Tinggi: {:.2f} cm".format(distance), 0, 32)
oled.text("Pergerakan: {}".format("Ya" if motion_detected else "Tidak"), 0, 48)
oled.show()
# Kendalikan lampu LED berdasarkan kondisi
led_suhu.value(1 if temperature >= 29 else 0)
led_kelembapan.value(1 if humidity >= 60 else 0)
led_tinggi.value(1 if distance <= 150 else 0)
led_pergerakan.value(1 if motion_detected else 0)
# Tampilkan pesan di OLED berdasarkan kondisi lampu LED
if led_suhu.value() and led_kelembapan.value() and led_tinggi.value() and led_pergerakan.value():
oled.fill(0)
oled.text("Kipas Menyala", 0, 0)
oled.show()
else:
oled.fill(0)
oled.text("Kipas Tidak Menyala", 0, 0)
oled.show()
# Tunggu beberapa detik sebelum membaca ulang sensor
time.sleep(5)
except Exception as e:
# Tangkap kesalahan dan tampilkan pesan
oled.fill(0)
oled.text("Error:", 0, 0)
oled.text(str(e), 0, 16)
oled.show()
time.sleep(5)