from machine import Pin, PWM, ADC # Import library kontrol pin, PWM, ADC
import utime # Import library untuk fungsi waktu
# Pin Setup
ldr = ADC(28) # Inisialisasi LDR di pin GP28 (ADC)
led = Pin(6, Pin.OUT) # Inisialisasi LED merah di pin GP6 sebagai output
buzzer = PWM(Pin(15)) # Inisialisasi buzzer di pin GP15 dengan PWM
# Konfigurasi awal Buzzer
buzzer.freq(1000) # Set frekuensi buzzer ke 1000Hz
buzzer.duty_u16(0) # Matikan buzzer saat awal
# Fungsi konversi ADC ke Lux
def adc_to_lux(adc_value):
return (adc_value / 65535) * 900 + 10 # Konversi dari ADC ke perkiraan Lux
# Tentukan Lux Normal secara manual
lux_normal = 300
print(f"Lux Normal Set: {lux_normal:.2f} Lux\n")
# Variabel kontrol
alert_triggered = False # Status apakah sudah pernah melewati batas
led_blink_active = False # Status LED blinking aktif
led_state = False # Status LED (ON/OFF)
led_start_time = 0 # Waktu mulai blinking
last_blink_time = utime.ticks_ms() # Waktu terakhir LED kedip
# Main Loop
while True:
analog_value = ldr.read_u16() # Baca nilai ADC dari LDR
lux = adc_to_lux(analog_value) # Konversi ADC ke Lux
print(f"LDR Value: {analog_value} | Lux: {lux:.2f}") # Tampilkan pembacaan
# Cek apakah Lux lebih terang 300 Lux dari normal
if (lux - lux_normal) >= 300:
if not alert_triggered: # Jika belum pernah melewati batas
buzzer.duty_u16(int(0.25 * 65535)) # Nyalakan buzzer dengan duty cycle 25%
led_blink_active = True # Aktifkan mode LED berkedip
led_start_time = utime.ticks_ms() # Catat waktu mulai LED blinking
alert_triggered = True # Set sudah pernah trigger
if led_blink_active: # Jika mode LED blinking aktif
current_time = utime.ticks_ms()
# LED berkedip setiap 300ms
if utime.ticks_diff(current_time, last_blink_time) >= 300:
led_state = not led_state # Toggle LED ON/OFF
led.value(led_state)
last_blink_time = current_time
# Setelah 2 detik, berhenti kedip
if utime.ticks_diff(current_time, led_start_time) >= 2000:
led_blink_active = False # Matikan mode blinking
led.off() # Pastikan LED mati
buzzer.duty_u16(0) # Matikan buzzer setelah LED selesai berkedip
utime.sleep(0.1) # Delay loop utama