Laporan Akhri 1 - Percobaan 1
PERCOBAAN 1
LED, BUZZER DAN LDR
- Rangkai semua komponen pada breadboard yang terhubung ke Raspberry Pi Pico.
- Hubungkan Raspberry Pi Pico dengan aplikasi Thonny IDE menggunakan kabel USB
- Build program yang telah dibuat, lalu inputkan program ke dalam mikrokontroler melalui stlink.
- Setelah program diinputkan, uji rangkaian yang telah dirangkai sesuai dengan output yang ditentukan.
- Selesai.
2. Hardware dan Diagram Blok [Kembali]
3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]
Kode yang diberikan berfungsi untuk membaca nilai dari sensor LDR (Light Dependent Resistor) dan mengontrol LED serta buzzer berdasarkan tingkat cahaya yang terdeteksi. Pertama, kode mengimpor pustaka yang diperlukan, seperti
Pin
, PWM
, ADC
, dan utime
, untuk mengontrol pin GPIO, menghasilkan sinyal PWM, membaca nilai analog, dan mengelola fungsi terkait waktu. Selanjutnya, pin untuk LDR, LED, dan buzzer diinisialisasi, dengan buzzer dikonfigurasi untuk beroperasi pada frekuensi awal 1 kHz dan dimatikan pada awalnya. Fungsi adc_to_lux
digunakan untuk mengonversi nilai ADC yang dibaca dari LDR menjadi nilai lux dalam rentang 10 hingga 1000 lux.Dalam loop utama, kode terus-menerus membaca nilai dari LDR dan mengonversinya menjadi lux. Jika nilai lux normal belum ditentukan, nilai saat ini disimpan sebagai nilai normal. Kode kemudian mencetak nilai LDR dan lux ke konsol. Jika nilai lux melebihi nilai normal ditambah 50, LED akan berkedip dan buzzer akan aktif dengan duty cycle tertentu, serta frekuensi buzzer akan bervariasi antara 500 Hz hingga 1000 Hz. Sebaliknya, jika nilai lux tidak melebihi ambang batas, LED dimatikan dan buzzer juga dimatikan. Selain itu, jika LED harus berkedip, kode akan mengatur waktu kedipan LED setiap detik. Akhirnya, terdapat delay singkat untuk menghindari pembacaan LDR yang terlalu cepat.
4. FlowChart dan Listing Program [Kembali]
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
b. Flowchart
6. Video Simulasi [Kembali]
7. Download File [Kembali]
Download HMTL Klik disini
Download Simulasi Rangkaian Klik disini
Download Video Simulasi Klik disini
Download Datasheet STM32 Klik disini
Download Datasheet Button Klik disini
Download Datasheet LED Klik disini
Komentar
Posting Komentar