from machine import Pin, ADC, PWM, I2C
from time import sleep
import ssd1306
# === I2C OLED SETUP ===
i2c = I2C(0, scl=Pin(1), sda=Pin(0)) # GP1 = SCL, GP0 = SDA
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
# === ANALOG INPUT SETUP ===
acs = ADC(27) # GP27 (simulasi ACS712 pakai potensiometer)
lm35 = ADC(28) # GP28 (simulasi LM35 pakai potensiometer)
# === LED SETUP (Pengganti Buzzer) ===
led = Pin(14, Pin.OUT) # GP14 untuk LED
# === SERVO SETUP ===
servo = PWM(Pin(15)) # GP15 untuk servo
servo.freq(50) # Frekuensi standar servo 50Hz
# === FUNGSI SET SUDUT SERVO ===
def set_servo_angle(degree):
min_duty = 2000 # duty_u16 untuk 0 derajat
max_duty = 8000 # duty_u16 untuk 180 derajat
duty = int(min_duty + (degree / 180) * (max_duty - min_duty))
servo.duty_u16(duty)
# === LOOP UTAMA ===
while True:
# === BACA SENSOR TEGANGAN (SIMULASI ACS) ===
acs_val = acs.read_u16() >> 8 # Skala dari 0-255 untuk display
# === KONVERSI SUHU LM35 ===
lm35_raw = lm35.read_u16()
voltage = (lm35_raw / 65535) * 3.3
temperature_c = voltage * 100
temperature_c = min(max(temperature_c, 0), 150)
# === CEK SUHU TINGGI UNTUK LED ===
if temperature_c > 50:
led.on()
else:
led.off()
# === GERAKKAN SERVO JIKA SUHU > 65°C ===
if temperature_c > 65:
set_servo_angle(180)
else:
set_servo_angle(0)
# === TAMPILKAN DI OLED ===
oled.fill(0)
oled.text("Suntracker", 0, 0)
oled.text(f"Tegangan: {acs_val} mV", 0, 16)
oled.text(f"Suhu: {temperature_c:.1f} C", 0, 28)
if temperature_c > 50:
oled.text("!! PANAS COY !!", 0, 54)
oled.show()
sleep(0.2)
ACS712
LM35