M2LA1




1. Prosedur [Kembali]

Pada percobaan ini, alat dan bahan yang diperlukan antara lain sebuah Raspberry Pi Pico, sensor LDR (Light Dependent Resistor), LED, buzzer, resistor 220Ω untuk LED, resistor 10KΩ untuk pull-down pada LDR, breadboard, kabel jumper, laptop atau PC yang sudah terpasang Thonny IDE, serta kabel micro USB sebagai konektor antara Raspberry Pi Pico dan laptop.

Langkah pertama, siapkan seluruh komponen di atas dan letakkan di atas breadboard. Hubungkan salah satu kaki LDR ke jalur 3,3V pada Raspberry Pi Pico, kemudian sambungkan kaki lainnya ke pin GP28 yang berfungsi sebagai input ADC. Pada titik sambungan antara LDR dan pin GP28, pasang resistor 10KΩ yang dihubungkan ke ground sebagai pull-down resistor, agar tegangan di pin ADC dapat stabil saat tidak ada input cahaya.

Berikutnya, hubungkan LED dengan cara menyambungkan kaki anoda (kaki panjang) ke pin GP6 pada Raspberry Pi Pico, dan kaki katoda (kaki pendek) dihubungkan ke ground melalui resistor 220Ω, berfungsi untuk membatasi arus yang masuk ke LED. Kemudian, sambungkan kaki positif buzzer ke pin GP15, sedangkan kaki negatifnya dihubungkan langsung ke ground.

Setelah semua rangkaian selesai, hubungkan Raspberry Pi Pico ke laptop menggunakan kabel micro USB. Buka aplikasi Thonny IDE di laptop, lalu pilih interpreter Raspberry Pi Pico pada menu Run > Select Interpreter. Masukkan program pengendalian LDR, LED, dan buzzer ke dalam Thonny sesuai dengan kebutuhan percobaan. Program ini akan membaca nilai ADC dari LDR, lalu mengatur kondisi LED dan buzzer. Jika nilai ADC lebih kecil dari batas yang ditentukan (misalnya 20000), maka LED akan menyala dan buzzer akan berbunyi. Sebaliknya, jika nilai ADC lebih tinggi (karena intensitas cahaya yang lebih terang), maka LED dan buzzer akan mati.

Setelah program dimasukkan, jalankan program dengan menekan tombol Run di Thonny. Amati hasilnya melalui konsol Thonny untuk melihat nilai ADC yang terbaca, serta periksa apakah LED dan buzzer berfungsi sesuai dengan perubahan kondisi cahaya di sekitar sensor LDR. Dengan demikian, percobaan ini dapat digunakan untuk memahami prinsip kerja sensor cahaya sederhana yang terintegrasi dengan Raspberry Pi Pico menggunakan aplikasi Thonny.

2. Hardware dan Diagram Blog [Kembali]

Hardware 

  • Raspberry Pi Pico
Raspberry Pi Pico adalah mikrokontroler berbasis RP2040, yaitu chip buatan Raspberry Pi yang memiliki dual-core ARM Cortex-M0+ dengan kecepatan hingga 133 MHz. Mikrokontroler ini digunakan untuk berbagai proyek embedded system, seperti robotika, otomasi, dan pemrosesan sinyal, karena memiliki GPIO (General Purpose Input Output) yang fleksibel serta mendukung pemrograman dengan MicroPython dan C/C++.
  • Resistor 220 ohm
Resistor adalah komponen elektronik yang berfungsi untuk menghambat arus listrik dalam suatu rangkaian. Nilai hambatan resistor diukur dalam ohm (Ω) dan sering digunakan untuk mengontrol tegangan, membatasi arus, serta melindungi komponen lain seperti LED dari kerusakan akibat arus berlebih. Resistor tersedia dalam berbagai jenis, seperti tetap, variabel (potensiometer), dan termistor yang peka terhadap suhu.
  • LDR


LDR (Light Dependent Resistor) adalah jenis resistor yang nilai resistansinya berubah tergantung pada intensitas cahaya yang diterimanya. Ketika cahaya jatuh pada permukaan LDR, resistansinya akan menurun, sementara dalam kondisi gelap, resistansinya akan meningkat. Fungsi utama LDR adalah untuk mendeteksi tingkat cahaya, yang sering digunakan dalam aplikasi seperti pengaturan otomatis pencahayaan, sensor cahaya pada perangkat elektronik, serta sebagai input pada sistem pengukuran intensitas cahaya atau pengendalian pencahayaan secara otomatis.
  • Buzzer


Buzzer adalah komponen elektronik yang menghasilkan suara sebagai output dari sinyal listrik yang diterimanya. Buzzer biasanya digunakan untuk memberi tanda atau peringatan melalui suara dalam berbagai perangkat, seperti alarm, perangkat pengingat, atau sistem kontrol. Terdapat dua jenis buzzer, yaitu piezoelectric dan elektromagnetik. Buzzer piezoelectric bekerja dengan mengubah sinyal listrik menjadi getaran mekanik yang menghasilkan suara, sedangkan buzzer elektromagnetik menghasilkan suara dengan cara menggerakkan membran menggunakan medan magnet. Buzzer sering digunakan dalam aplikasi yang membutuhkan pemberitahuan atau peringatan suara, seperti alarm keamanan, timer, atau indikator status perangkat.
  • LED Merah
LED merah adalah dioda pemancar cahaya yang menghasilkan warna merah saat diberikan arus listrik. LED ini sering digunakan sebagai indikator status dalam rangkaian elektronik, seperti menunjukkan daya aktif, kesalahan sistem, atau sinyal peringatan. Karena konsumsi dayanya rendah dan umur pakainya panjang, LED merah banyak diaplikasikan dalam perangkat elektronik dan sistem otomatisasi.

Blok Diagram :

3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]


Pada percobaan ini, rangkaian terdiri dari Raspberry Pi Pico yang terhubung dengan sensor LDR, LED, dan buzzer. Sensor LDR berfungsi untuk mendeteksi intensitas cahaya lingkungan, di mana perubahan nilai cahaya akan memengaruhi nilai ADC yang dibaca oleh Raspberry Pi Pico melalui pin GP28. Nilai ADC inilah yang kemudian dikonversi ke nilai lux menggunakan sebuah fungsi konversi di dalam program.

Ketika rangkaian dihubungkan sesuai langkah-langkah sebelumnya, sensor LDR dipasang dengan satu kaki ke tegangan 3,3V dan kaki lainnya ke pin GP28 (sebagai input ADC). Selain itu, kaki ini juga dihubungkan ke ground melalui resistor 10KΩ sebagai pull-down resistor agar sinyal tetap stabil saat tidak ada input. LED dipasang dengan anoda ke pin GP6 dan katoda ke ground melalui resistor 220Ω, sedangkan buzzer dipasang dengan kaki positif ke pin GP15 dan kaki negatif ke ground. Raspberry Pi Pico sendiri dihubungkan ke laptop menggunakan kabel micro USB dan diprogram melalui Thonny IDE.

Prinsip kerja rangkaian ini diawali dengan membaca nilai ADC dari sensor LDR. Nilai ini kemudian dikonversikan menjadi nilai lux menggunakan fungsi adc_to_lux(). Saat program pertama kali dijalankan, nilai lux awal (kondisi normal lingkungan) disimpan sebagai acuan. Setelah itu, program secara berkala membandingkan nilai lux terkini dengan nilai lux normal yang sudah disimpan.

Apabila terjadi perubahan intensitas cahaya yang cukup signifikan — yaitu nilai lux saat ini lebih besar dari lux normal ditambah 50 (lux > lux_normal + 50) — maka program akan mengatur mode kedip LED dan mengaktifkan buzzer. Buzzer diatur menggunakan PWM dengan duty cycle tertentu (duty_u16(30000)) agar dapat menghasilkan suara, dan frekuensinya divariasikan dari 500 Hz hingga 1000 Hz dalam selang 0,1 detik agar menghasilkan efek suara berubah-ubah.

Pada saat bersamaan, LED akan berkedip dengan interval 1 detik. Hal ini dilakukan dengan mencatat waktu saat LED terakhir berganti status (nyala atau mati) menggunakan fungsi utime.ticks_ms(). Jika waktu yang telah berlalu mencapai atau lebih dari 1000 milidetik (1 detik), maka kondisi LED dibalik (ON jadi OFF, OFF jadi ON).

Sebaliknya, jika tidak terjadi perubahan cahaya yang signifikan, maka LED akan dimatikan dan buzzer dihentikan (duty cycle diatur ke 0). Program akan terus membaca sensor LDR setiap 0,1 detik untuk mendeteksi perubahan cahaya secara real-time.

Dengan demikian, prinsip kerja rangkaian ini adalah mengendalikan output LED dan buzzer berdasarkan perubahan nilai lux dari sensor LDR, dengan kondisi LED berkedip dan buzzer berbunyi saat lingkungan menjadi lebih terang dari kondisi normalnya, serta mematikan kedua komponen tersebut saat kondisi cahaya kembali normal atau tidak berubah signifikan.

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. Kondisi [Kembali]

Ketika LDR membaca lebih terang dari normal sebesar 50 lux, LED merah hidup berkedip tiap 1 detik dan buzzer aktif duty cycle 46% (duty_u16(30000)) dengan frekuensi berubah dari 500 Hz sampai 1000 Hz.Saat cahaya normal (selisih ≤ 50 lux dari lux normal), LED mati dan buzzer tidak bunyi.

7. Analisa [Kembali]

ANALISA MODUL 2: PWM, ADC, INTERRUPT, & MILLIS 



1. Perbedaan Implementasi PWM pada STM32 dan Raspberry Pi Pico serta Dampaknya terhadap Kontrol Motor dan Buzzer

STM32 dilengkapi dengan timer-timer khusus yang mampu menghasilkan sinyal PWM dengan tingkat presisi dan fleksibilitas yang tinggi. Hal ini memungkinkan pengaturan frekuensi dan duty cycle yang sangat akurat, sehingga kontrol terhadap motor DC maupun buzzer dapat dilakukan secara halus, stabil, dan responsif. Proses konfigurasi pada STM32 umumnya melibatkan pengaturan register timer dan pemilihan fungsi alternatif pada pin (alternate function).
Di sisi lain, Raspberry Pi Pico yang berbasis chip RP2040 juga memiliki kemampuan untuk menghasilkan sinyal PWM melalui blok PWM internal. Namun, tingkat fleksibilitas dan kontrol terhadap parameter PWM biasanya lebih terbatas dibandingkan STM32. Meskipun demikian, PWM pada Pico sudah cukup untuk aplikasi sederhana seperti pengendalian kecepatan motor atau buzzer berbasis nada, walaupun presisinya tidak setinggi STM32 dalam kasus penggunaan yang menuntut akurasi tinggi.

2. Pembacaan Sensor Analog (LDR) Menggunakan ADC pada STM32 dan Raspberry Pi Pico

STM32 menyediakan beberapa kanal ADC dengan resolusi tinggi, umumnya 12-bit, yang dapat dikonfigurasi untuk membaca sinyal analog dari sensor seperti LDR. Proses pembacaan ini dilakukan dengan mengatur register ADC, memilih kanal input, dan memicu proses konversi. Hasil pembacaan kemudian dapat dikalibrasi untuk mendapatkan nilai tegangan atau intensitas cahaya yang representatif.
Sementara itu, Raspberry Pi Pico juga memiliki fitur ADC internal dengan resolusi 12-bit, namun umumnya hanya tersedia pada tiga pin input analog. Pembacaan ADC pada Pico dilakukan melalui fungsi-fungsi yang disediakan oleh SDK (C/C++) atau modul machine dalam MicroPython. Meskipun Pico cukup andal untuk pembacaan analog dasar, performa dan kecepatan sampling-nya mungkin tidak seoptimal STM32 dalam sistem yang memerlukan pemrosesan data sensor secara cepat dan presisi tinggi.

3. Penggunaan Interrupt Eksternal untuk Deteksi Input Sensor atau Tombol pada STM32 dan Raspberry Pi Pico

Baik STM32 maupun Raspberry Pi Pico mendukung penggunaan interrupt eksternal (EXTI) yang memungkinkan deteksi otomatis terhadap perubahan status pin (seperti tombol ditekan atau sensor aktif) tanpa perlu terus melakukan polling secara manual.
STM32 menawarkan konfigurasi yang lebih luas, seperti pemilihan trigger (rising edge, falling edge, atau both), prioritas interrupt, serta pemetaan pin ke jalur interrupt melalui sistem NVIC dan EXTI. Hal ini membuat STM32 lebih fleksibel dan cocok untuk aplikasi real-time.
Di sisi lain, Raspberry Pi Pico juga mendukung interrupt melalui pustaka SDK atau MicroPython dengan cara yang lebih sederhana. Pengguna dapat menetapkan fungsi callback yang akan dijalankan ketika perubahan status pin terdeteksi. Namun, kontrol terhadap prioritas atau konfigurasi lanjutan biasanya lebih terbatas dibandingkan STM32.

4. Cara Kerja utime.ticks_ms() pada Raspberry Pi Pico dalam Menghitung Waktu Sejak Sistem Dinyalakan

Fungsi utime.ticks_ms() pada Raspberry Pi Pico berfungsi untuk mendapatkan waktu dalam satuan milidetik sejak sistem pertama kali dijalankan. Fungsi ini bekerja dengan membaca nilai counter dari timer internal yang berjalan terus-menerus, mirip dengan konsep timer berbasis millisecond pada sistem embedded lainnya.
Fungsi ini sangat berguna untuk pengukuran durasi, pembuatan delay non-blocking, maupun manajemen waktu dalam loop utama program.
Sebagai pembanding, STM32 menggunakan SysTick atau general-purpose timer yang dapat dikonfigurasi untuk menghitung waktu dalam satuan tertentu. Timer ini juga dapat digunakan sebagai dasar untuk implementasi fungsi delay atau pengukuran interval waktu dengan presisi tinggi, tergantung pada frekuensi clock dan konfigurasi prescaler.

5. Perbedaan Konfigurasi dan Kontrol Pin PWM serta Pemanfaatan Timer Internal untuk Sinyal Gelombang Persegi

STM32 memungkinkan konfigurasi PWM yang sangat terperinci dengan mengandalkan timer internal yang mendukung berbagai mode operasi. Pengguna dapat menentukan frekuensi, duty cycle, dan mode output (misalnya edge-aligned atau center-aligned). Pengaturan ini dilakukan melalui register timer dan pengaturan pin output PWM melalui fungsi alternatif. Hal ini memungkinkan pembuatan sinyal gelombang persegi yang sangat presisi dan konsisten.
Raspberry Pi Pico juga menggunakan timer internal untuk menghasilkan sinyal PWM dan gelombang persegi, namun dengan konfigurasi yang lebih sederhana melalui SDK atau MicroPython. Meskipun cukup efektif untuk aplikasi umum, pengaturan frekuensi dan resolusi PWM mungkin lebih terbatas dibanding STM32, sehingga aplikasi yang memerlukan timing sangat presisi mungkin lebih cocok menggunakan STM32.

8. Download File [Kembali]

 Datasheet raspberry Pi Pico klik disini

- Datasheet LED klik disini

- Datasheet resistor klik disini 

- Datasheet buzzer klik disini

- Data Sheet LDR [klik disini]

 

Komentar

Postingan populer dari blog ini

Modul 1 Prak SIsDIg

Tugas Besarr

Modul 2 PrakSisdig