Laporan Akhir 1 Modul 2
Raspberry Pi Pico berfungsi sebagai pengendali utama dalam sistem ini. Rangkaian dimulai dengan inisialisasi pin ADC untuk LDR, pin digital untuk LED, dan channel PWM untuk buzzer. Saat sistem aktif, mikrokontroler membaca nilai ADC dari LDR untuk menentukan nilai lux awal sebagai acuan normal. Setiap siklus, Pico membaca ulang nilai lux. Jika terdeteksi kenaikan lebih dari 50 lux dari nilai normal, LED berkedip tiap satu detik sebagai penanda visual, dan buzzer berbunyi dengan frekuensi berubah dari 500 Hz hingga 900 Hz. Jika nilai lux tidak melebihi ambang, LED dan buzzer dimatikan untuk menghemat daya. Interval kedip LED dikendalikan oleh utime.ticks_ms(), sedangkan buzzer diatur melalui PWM.freq() dan PWM.duty_u16(). Seluruh proses berlangsung otomatis.
from machine import Pin, PWM, ADC import utime # Pin Setup ldr = ADC(28) # Pin AO dari LDR ke GP28 ldr_digital = Pin(0, Pin.IN) # Pin DO dari LDR ke GP0 led = Pin(6, Pin.OUT) # LED di GP6 buzzer = PWM(Pin(15)) # Buzzer di GP15 dengan PWM # Konfigurasi PWM Buzzer buzzer.freq(1000) # Frekuensi awal buzzer (1kHz) buzzer.duty_u16(0) # Mulai dengan buzzer mati # Fungsi untuk mengonversi nilai ADC ke lux def adc_to_lux(adc_value): return (adc_value / 65535) * 900 + 10 # Rentang 10 - 1000 lux # Variabel untuk menyimpan kondisi normal awal lux_normal = 0 # Variabel untuk kedip LED last_blink_time = utime.ticks_ms() led_state = False led_should_blink = False # hanya True saat kondisi mendeteksi perubahan cahaya signifikan # Loop utama while True: analog_value = ldr.read_u16() lux = adc_to_lux(analog_value) if lux_normal == 0: lux_normal = lux print(f"Lux Normal: {lux_normal}") print(f"LDR Value: {analog_value} | Lux: {lux}") if lux > lux_normal + 50: led_should_blink = True # nyalakan mode kedip buzzer.duty_u16(30000) # nyalakan buzzer for i in range(500, 1000, 100): # variasi frekuensi buzzer buzzer.freq(i) utime.sleep(0.1) else: led_should_blink = False led.off() buzzer.duty_u16(0) # Kedip LED jika perlu if led_should_blink: current_time = utime.ticks_ms() if utime.ticks_diff(current_time, last_blink_time) >= 1000: led_state = not led_state led.value(led_state) last_blink_time = current_time utime.sleep(0.1) # sedikit delay supaya tidak terlalu cepat baca LDR
Komentar
Posting Komentar