Laporan Akhir 1 M2



Laporan Akhir 1
 LED, Buzzer, dan LDR

1. Prosedur 
[Kembali]

1. Rangkai rangkaian di proteus sesuai dengan kondisi percobaan.
2. Buat program untuk mikrokontroler Raspbherry Pi Pico di Thonny IDE
3. Running Program di Raspbherry Pi Pico
5. Selesai.

2. Hardware dan Diagram Blok [Kembali]

Hardware :

a) Mikrokontroler Raspbherry Pi Pico








2. LDR




3. LED



4. Power Supply

 
5. Buzzer


6. Resistor


Diagram Blok  :






3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]
Rangkaian Simulasi



Prinsip Kerja : 

Dalam sistem ini, Raspbherry Pi Pico sebagai pengatur dan pengelola data serta pemberi perintah. Prinsip kerja rangkaian ini diawali dengan inisialisasi semua pin—ADC untuk LDR, output digital untuk LED, dan channel PWM untuk buzzer—pada Raspberry Pi Pico. Setelah sistem dinyalakan, mikrokontroler melakukan pembacaan nilai ADC dari LDR untuk mendapatkan nilai lux awal sebagai “lux normal.” Selanjutnya, setiap siklus loop utama Pico membaca kembali nilai LDR dan mengonversinya menjadi lux; jika nilai lux aktu al melebihi ambang lux_normal + 50, maka dianggap terjadi peningkatan cahaya signifikan. Dalam kondisi itu LED akan berfungsi sebagai penanda visual berkedip setiap satu detik, sedangkan buzzer diaktifkan dengan duty cycle tetap dan frekuensi diubah-ubah secara berurutan (500 Hz, 600 Hz, …, hingga 900 Hz) untuk menghasilkan nada peringatan. Jika nilai lux tidak melewati ambang, LED dan buzzer dimatikan agar konsumsi daya minimal. Setiap perubahan LED dikendalikan oleh pengecekan waktu menggunakan fungsi utime.ticks_ms() untuk memastikan interval kedip tetap satu detik, sedangkan PWM buzzer secara langsung diatur lewat PWM.freq() dan PWM.duty_u16()—sehingga seluruh proses berjalan otomatis

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 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



5. Video Demo [Kembali]





6. Analisa [Kembali]

1. Perbedaan implementasi PWM antara STM32 dan Raspberry Pi Pico berdampak langsung pada kualitas kontrol motor dan buzzer. STM32 menggunakan timer hardware khusus (TIMx) yang mampu menghasilkan sinyal PWM dengan resolusi tinggi dan frekuensi yang stabil, bahkan dapat dikontrol secara real-time melalui DMA atau register langsung. Hal ini membuat STM32 sangat ideal untuk mengatur kecepatan motor DC maupun menghasilkan nada yang akurat untuk buzzer. Di sisi lain, Raspberry Pi Pico menggunakan unit PWM slice internal yang dikendalikan melalui Micropython atau C SDK. Meskipun penggunaannya relatif mudah, sinyal PWM pada Pico bergantung pada clock divider dan kontrol perangkat lunak, yang dapat menyebabkan jitter atau delay pada kontrol motor jika beban CPU meningkat. Akibatnya, STM32 lebih unggul dalam aplikasi yang membutuhkan kontrol presisi tinggi dan respon cepat.

2. Pembacaan nilai sensor analog seperti LDR menggunakan ADC pada STM32 dan Raspberry Pi Pico memiliki perbedaan dari segi kecepatan dan kemudahan pemrograman. STM32 dilengkapi ADC 12-bit yang bisa dikonfigurasi untuk melakukan sampling cepat dan dapat dihubungkan dengan DMA agar pembacaan lebih efisien. STM32 juga memiliki kemampuan multi-channel ADC yang memungkinkan pembacaan banyak sensor dalam satu waktu. Sedangkan pada Raspberry Pi Pico, pembacaan ADC dilakukan melalui fungsi read_u16() dalam Micropython, yang mengkonversi hasil ADC 12-bit menjadi nilai 16-bit untuk kemudahan. Walau mudah digunakan, kecepatan pembacaan ADC pada Pico lebih rendah dibanding STM32 dan bergantung pada beban prosesor, sehingga kurang cocok untuk aplikasi sensor analog yang memerlukan kecepatan sampling tinggi.

3. Penggunaan interrupt eksternal pada STM32 dan Raspberry Pi Pico memungkinkan sistem mendeteksi input dari sensor atau tombol secara efisien, namun dengan cara kerja yang berbeda. Pada STM32, interrupt eksternal dikelola melalui EXTI (External Interrupt) yang terhubung dengan NVIC, memungkinkan deteksi sinyal input secara hardware dengan latensi sangat rendah. Konfigurasi interrupt pada STM32 juga mendukung prioritas dan masking, cocok untuk sistem real-time. Sementara itu, Raspberry Pi Pico menangani interrupt melalui fungsi irq() pada objek pin dalam Micropython. Interrupt ini cukup mudah digunakan namun bekerja di level perangkat lunak, sehingga memiliki latensi yang lebih tinggi dan kurang cocok untuk aplikasi yang memerlukan respons instan.

4. Fungsi utime.ticks_ms() pada Raspberry Pi Pico digunakan untuk menghitung waktu dalam milidetik sejak sistem dinyalakan. Fungsi ini bekerja dengan membaca nilai dari timer internal yang terus bertambah sejak sistem boot. Dengan memanfaatkan ticks_ms() dan ticks_diff(), pengguna dapat mengukur durasi waktu antar peristiwa tanpa khawatir terhadap overflow, karena sistem ini menangani wrap-around secara otomatis. Fungsi ini sangat berguna dalam membuat delay non-blocking, mengatur waktu polling sensor, atau memicu event berdasarkan waktu secara efisien dalam program Micropython.

5. Konfigurasi dan kontrol pin PWM serta pemanfaatan timer internal pada STM32 dan Raspberry Pi Pico menunjukkan perbedaan arsitektural yang signifikan. Pada STM32, pin PWM dikontrol oleh timer hardware yang sangat fleksibel dan presisi tinggi. Setiap timer memiliki channel-channel yang bisa dikonfigurasi secara individu dengan frekuensi, duty cycle, serta mode output yang kompleks, bahkan mendukung sinyal komplementer dan dead time untuk mengontrol motor inverter. Sedangkan Raspberry Pi Pico menggunakan 8 slice PWM yang masing-masing memiliki dua channel. Meskipun cukup untuk menghasilkan sinyal gelombang persegi sederhana, kontrolnya lebih terbatas dan tidak sepresisi STM32. Hal ini membuat STM32 unggul dalam aplikasi yang membutuhkan timing kompleks dan kontrol presisi seperti motor servo, inverter, dan sinyal-sinyal digital presisi lainnya.

7. Download File [Kembali]

Download File Rangkaian [Download]
Download Video Simulasi [Download]
Download Listing Program [Download]

Komentar

Postingan populer dari blog ini