from machine import Pin, PWM, ADC
import utime
# Inisialisasi sensor dan aktuator
ldr = ADC(28) # Pin ADC LDR
led = Pin(6, Pin.OUT) # LED Merah
buzzer = PWM(Pin(15)) # Buzzer
buzzer.freq(1000)
buzzer.duty_u16(0)
# Fungsi konversi ADC ke Lux
def adc_to_lux(adc_value):
return (adc_value / 65535) * 900 + 10
# Kalibrasi Lux Normal selama 2 detik
print("Kalibrasi Lux Normal...")
sampel = []
start = utime.ticks_ms()
while utime.ticks_diff(utime.ticks_ms(), start) < 2000:
sampel.append(adc_to_lux(ldr.read_u16()))
utime.sleep(0.05)
lux_normal = sum(sampel) / len(sampel)
print(f"Lux Normal = {lux_normal:.2f} Lux")
# Variabel status
led_blinking = False
blink_start = 0
last_toggle = 0
led_state = False
alarm_triggered = False
# Loop utama
while True:
nilai_adc = ldr.read_u16()
lux = adc_to_lux(nilai_adc)
print(f"Lux Sekarang: {lux:.2f} Lux")
# Cek apakah lebih terang dari normal + 300 LUX
if not alarm_triggered and (lux - lux_normal) >= 300:
buzzer.duty_u16(int(0.25 * 65535)) # Buzzer duty cycle 25%
led_blinking = True
blink_start = utime.ticks_ms()
last_toggle = blink_start
alarm_triggered = True
print(">>> Alarm Aktif <<<")
# Proses kedip LED selama 2 detik
if led_blinking:
now = utime.ticks_ms()
# Toggle LED setiap 300ms
if utime.ticks_diff(now, last_toggle) >= 300:
led_state = not led_state
led.value(led_state)
last_toggle = now
# Hentikan blinking setelah 2 detik
if utime.ticks_diff(now, blink_start) >= 2000:
led_blinking = False
led.value(0)
buzzer.duty_u16(0) # Matikan buzzer setelah 2 detik
print(">>> Alarm Selesai <<<")
utime.sleep(0.1)