M2_TP1
Percobaan 1 kondisi 3
Led, Buzzer, & LDR
1. Buat rangkaian di wokwi
sesuai dengan kondisi percobaan.
2. Buat program di wokwi.
4. Jalankan simulasinya
2. Buat program di wokwi.
4. Jalankan simulasinya
5. Selesai.
2. Hardware dan Diagram Blok[Kembali]
Hardware :
- Raspberry pi pico
- Push button
- LED
3. Rangkaian Simulasi[Kembali]
- Rangkaian sebelum di running
- Rangkaian setelah di running
- Prinsip Kerja
Rangkaian ini dibuat mengikuti gambar pada Percobaan 1, dengan menggunakan sebuah sensor LDR (Light Dependent Resistor) sebagai input, serta LED merah dan buzzer sebagai output, yang semuanya dikendalikan oleh Raspberry Pi Pico. LDR dihubungkan ke salah satu pin ADC pada Raspberry Pi Pico untuk membaca intensitas cahaya di lingkungan sekitar. Sistem ini dirancang untuk mendeteksi apabila intensitas cahaya yang terbaca lebih terang sebesar 200 lux dibandingkan kondisi normal. Ketika intensitas cahaya melebihi ambang batas tersebut, Raspberry Pi Pico akan mengaktifkan LED merah untuk menyala berkedip selama 4 detik. Selain itu, buzzer juga akan diaktifkan dengan menggunakan sinyal PWM dan duty cycle sebesar 45%. Apabila cahaya yang terbaca tidak melebihi ambang batas yang ditentukan, maka LED dan buzzer akan tetap dalam keadaan mati. Penggunaan mode ADC pada Raspberry Pi Pico memungkinkan pembacaan data LDR secara akurat, sedangkan PWM digunakan untuk mengatur tingkat duty cycle pada buzzer sesuai dengan kebutuhan.
4. Flowchart dan Listing Program[Kembali]
-
Flowchart
- Listing Program
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 (kalau mau dipakai nanti)
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):
normalized_adc = (adc_value - 512) / (65007 - 512) # Normalisasi ADC
lux = normalized_adc * 990 + 10 # Rentang 10 - 1000 lux
return lux
# Variabel untuk menyimpan kondisi normal awal
# 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_akhir = adc_to_lux(analog_value)
lux= 1000-lux_akhir
print(f"LDR Value: {analog_value} | Lux: {lux}")
if lux > 200:
led_should_blink = True # nyalakan mode kedip
buzzer.duty_u16(int(0.45 * 65535)) # 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) >= 4000:
led_state = not led_state
led.value(led_state)
last_blink_time = current_time
else:
led.off()
utime.sleep(0.1) # sedikit delay supaya tidak terlalu cepat baca LDR
Percobaan 1 Kondisi 3
Buatlah rangkaian seperti gambar pada percobaan 1, buatlah ketika LDR membaca Lebih terang dari normal sebesar 200 LUX Led merah hidup berkedip selama 4 detik dan Duty Cycle Buzzer 45%
Komentar
Posting Komentar