TP M2 P1K7
PERCOBAAN 1 KONDISI 7
1. Prosedur [kembali]
Led, Buzzer & LDR
- Siapkan alat alat yang diperlukan pada wokwi simulation
- Hubungkan LDR pada pin GPIO 28 dan sumber 3.3 V serta hubungkan juga groundnya
- Hubungkan bagian anoda LED ke pin GPIO 6 dan bagian Katoda ke ground
- Hubungan Buzzer ke pin GPIO 15 dan GND
- Inputkan Listing Program
- Running
2. Hardware dan Diagram Blok [kembali]
- Rasberry Pi Pico
- LED
- LDR
- Buzzer
3. Rangkaian Simulasi dan Prinsip Kerja [kembali]
Rangkaian ini memanfaatkan sensor LDR untuk memantau intensitas cahaya dan memberikan respon melalui LED serta buzzer. Sensor LDR terhubung ke pin GP28 (sebagai input analog), sedangkan LED merah dihubungkan ke GP6 (sebagai output digital), dan buzzer dikendalikan melalui GP15 dengan sinyal PWM 1000 Hz.
- Program ini menggunakan library Pin, PWM, ADC, dan utime. Nilai ADC dari LDR dikonversi menjadi satuan Lux menggunakan fungsi
adc_to_lux()
, dengan rentang konversi antara 10 hingga 910 Lux. Ambang batas normal ditentukan pada 300 Lux.
- Dalam loop utama, sistem terus membaca nilai Lux dari sensor. Bila terdeteksi cahaya ≥ 500 Lux (yakni 200 Lux di atas nilai normal), maka buzzer akan menyala dengan duty cycle 25%, dan LED merah akan berkedip setiap 300 milidetik. Buzzer berbunyi selama 2 detik, yang diatur dengan bantuan variabel seperti
alert_triggered
,led_blink_active
, serta fungsi penghitungan waktu berbasisutime.ticks_ms()
agar proses pemantauan tetap responsif.
- Setiap iterasi loop utama diberi jeda 0,1 detik untuk menjaga efisiensi dan menghindari beban berlebih pada mikrokontroler.
4. Flowchart dan Listing Program [kembali]
Listing Program:
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)
5. Video Demo [kembali]
6. Kondisi [kembali]
P1 K7
Buatlah rangkaian seperti gambar pada percobaan 1, buatlah ketika LDR membaca Lebih terang dari normal sebesar 300 LUX Led merah hidup berkedip selama 2 detik dan Duty Cycle Buzzer 25%
7. Video Simulasi [kembali]
8. Download file [kembali]
Komentar
Posting Komentar