LAPORAN AKHIR PERCOBAAN 6




Laporan Akhir 2 Modul 2
(Percobaan 6)

1. Prosedur
[Kembali]

1. Rangkai rangkaian di wokwi sesuai dengan kondisi percobaan.
2. Buat program dengan bahasa python.
3. Jalankan simulasi rangkaian.
4. Selesai.

2. Hardware dan Diagram Blok [Kembali]

Hardware :

a) Raspberry Pi Pico









2. Push Button






3. Buzzer










3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

Rangkaian Simulasi :








Prinsip Kerja : 

Pada rangkaian ini, input berupa 2 buah push button dimana terhubung ke pin 10 dan 14 pada raspberry pi pico, lalu ada output berupa 1 buah buzzer yang terhubung ke pin 16. lalu ground pada pin 13
Jika disimulasikan, ketika push button ditekan maka buzzer akan berbunyi.

Analisa :

1. Analisa bagaimana perbedaan implementasi PWM antara STM32 dan Raspberry Pi Pico serta dampaknya terhadap kontrol motor dan LED

PWM pada STM32 diimplementasikan menggunakan timer hardware (seperti TIM1–TIM4) yang mendukung pengaturan frekuensi dan duty cycle secara presisi. STM32 mampu menghasilkan sinyal PWM stabil dengan fitur lanjutan seperti complementary output dan dead time, sehingga kontrol motor menjadi lebih halus dan LED dapat dikendalikan secara bertingkat. Sebaliknya, Raspberry Pi Pico menggunakan PWM slice bawaan dengan pengaturan sederhana lewat PWM(freq, duty_u16). Pico cukup untuk kontrol dasar motor dan LED, tetapi kurang akurat untuk kebutuhan presisi tinggi. Dampaknya, STM32 lebih ideal untuk aplikasi kontrol motor dan pencahayaan yang memerlukan kestabilan dan respon cepat.


2. Analisa bagaimana cara pembacaan nilai sensor analog menggunakan ADC pada STM32 dan Raspberry Pi Pico

STM32 menggunakan ADC 12-bit dengan fitur seperti scan mode, DMA, dan trigger eksternal. Pembacaan nilai sensor dapat dilakukan secara polling, interrupt, maupun DMA, sehingga efisien untuk banyak channel. Pada Raspberry Pi Pico, pembacaan ADC dilakukan melalui fungsi adc.read_u16() dengan resolusi 12-bit yang di-upscale ke 16-bit. Namun, Pico tidak mendukung DMA atau trigger eksternal secara default. Maka, pembacaan sensor analog di STM32 lebih fleksibel dan cocok untuk aplikasi yang membutuhkan sampling cepat dan simultan.


3. Analisa bagaimana penggunaan interrupt eksternal dalam mendeteksi input dari sensor atau tombol pada STM32 dan Raspberry Pi Pico

STM32 menggunakan EXTI (External Interrupt) yang mendukung konfigurasi tepi sinyal (rising/falling), prioritas interrupt, dan integrasi dengan sistem NVIC. Deteksi input dari sensor atau tombol menjadi cepat dan akurat. Sementara itu, Raspberry Pi Pico menggunakan metode irq() pada objek machine.Pin untuk mendeteksi tepi naik atau turun, namun tidak mendukung prioritas atau sistem interrupt kompleks. Hasilnya, STM32 lebih unggul untuk aplikasi real-time dan multi-interrupt, sedangkan Pico cocok untuk deteksi sederhana.


4. Analisa bagaimana cara kerja fungsi HAL_GetTick() pada STM32 dan utime.ticks_ms() pada Raspberry Pi Pico dalam menghitung waktu sejak sistem dinyalakan

Fungsi HAL_GetTick() pada STM32 menghitung waktu dalam milidetik sejak sistem menyala menggunakan interrupt dari timer SysTick yang aktif setiap 1 ms. Sedangkan utime.ticks_ms() pada Raspberry Pi Pico membaca nilai waktu dari counter internal sejak booting. Keduanya memberikan waktu dalam satuan ms, namun STM32 memungkinkan pengaturan presisi lebih tinggi melalui pengaturan SysTick dan juga mendukung interrupt. Pico cukup akurat untuk aplikasi sederhana, tapi STM32 lebih fleksibel untuk sistem waktu presisi tinggi.


5. Analisa bagaimana perbedaan konfigurasi dan kontrol pin PWM serta pemanfaatan timer internal pada STM32 dan Raspberry Pi Pico dalam menghasilkan sinyal gelombang persegi

STM32 mengkonfigurasi pin PWM melalui timer internal (TIMx) dengan register ARR dan CCR untuk menghasilkan sinyal gelombang persegi yang presisi. Timer dapat dikontrol secara langsung melalui HAL dan mendukung mode output kompleks. Raspberry Pi Pico menggunakan PWM slice dengan metode pengaturan frekuensi dan duty cycle dasar. Meskipun Pico cukup untuk gelombang persegi sederhana, STM32 lebih unggul karena dukungan konfigurasi lanjutan dan kontrol yang lebih detail terhadap output PWM.


4. Flowchart dan Listing Program [Kembali]

Flowchart :

   








Listing Program :

from machine import Pin, PWM, ADC
import utime

# =============================
# Inisialisasi Pin
# =============================

# Servo Motor pada pin GP16
servo = PWM(Pin(16))
servo.freq(50)  # Frekuensi PWM untuk servo

# Potensiometer pada pin GP28 (ADC2)
pot = ADC(Pin(28))

# LED RGB pada pin GP1 (Merah), GP2 (Hijau), GP3 (Biru)
led_red = Pin(1, Pin.OUT)
led_green = Pin(2, Pin.OUT)
led_blue = Pin(3, Pin.OUT)

# =============================
# Fungsi Map (seperti di Arduino)
# =============================
def map_value(value, in_min, in_max, out_min, out_max):
    return int((value - in_min) * (out_max - out_min) / (in_max - in_min) + out_min)

# =============================
# Variabel untuk LED berkedip
# =============================
last_blink = utime.ticks_ms()
led_state = True

# =============================
# Loop Utama
# =============================
while True:
    # Baca nilai potensiometer (0 - 65535)
    pot_value = pot.read_u16()

    # Konversi ke sudut servo (0° - 180°)
    angle = map_value(pot_value, 0, 65535, 0, 180)

    # Konversi ke nilai duty cycle (1500 - 7500)
    duty = map_value(angle, 0, 180, 1500, 7500)
    servo.duty_u16(duty)

    # Debug info (optional)
    print(f"Potensiometer: {pot_value} | Sudut: {angle} | Duty: {duty}")

    # Waktu sekarang untuk LED berkedip
    now = utime.ticks_ms()
    if utime.ticks_diff(now, last_blink) >= 1000:
        led_state = not led_state
        last_blink = now

    # Kontrol LED berdasarkan sudut
    if 0 <= angle <= 60:
        led_red.value(led_state)
        led_green.value(0)
        led_blue.value(0)
    elif 60 < angle <= 120:
        led_red.value(0)
        led_green.value(led_state)
        led_blue.value(0)
    else:  # 121 - 180
        led_red.value(0)
        led_green.value(0)
        led_blue.value(led_state)

    # Delay pendek
    utime.sleep_ms(50)

5. Kondisi [Kembali]
Percobaan 5
6. Video Simulasi [Kembali]









7. Download File [Kembali]

Download File Rangkaian [Download]
Link Wokwi [Link]













Komentar

Postingan populer dari blog ini