Cari Blog Ini

LA 1 Modul 2

 






1. Prosedur [kembali]

- siapkan komponen yang dibutuhkan seperti ,raspberry pi pico,motor Servo, Buzzer, Potensiomter, & DHT22
- buatlah rangkaian seperti pada modul 
- masukkan listing program yang sesuai
- simulasikan rangkaian


2. Hardware dan Diagram Blok [kembali]
a. Hardware

1. Rasberry Pi Pico

                                                                                    (a)                                                (b)
Gambar Mikrokontroler Rasberry Pi Pico (a) tampilan hardware, (b) tampilan simulasi

Raspberry Pi Pico adalah papan mikrokontroler berbasis RP2040, sebuah chip yang dikembangkan oleh Raspberry Pi Foundation. Mikrokontroler ini menggunakan prosesor ARM Cortex-M0+ dual-core, memiliki 264KB RAM, dan mendukung berbagai antarmuka seperti GPIO, I2C, SPI, dan UART. Raspberry Pi Pico cocok untuk proyek embedded systemsIoT, dan otomasi



2. LED

                            (a)                                                                         (b)
Gambar LED (a) tampilan hardware, (b) tampilan simulasi

LED adalah dioda semikonduktor yang dapat memancarkan cahaya ketika dialiri arus listrik. LED digunakan dalam berbagai aplikasi seperti indikator elektronik, pencahayaan, dan display. LED hanya bekerja pada arah bias maju dan memiliki berbagai warna yang ditentukan oleh material semikonduktornya.

3. motor servo

4. potensiometer






b. Diagram Blok


3. Rangkaian Simulasi dan Prinsip Kerja [kembali]







Prinsip Kerja:

DHT22 membaca suhu dan kelembaban lingkungan secara berkala.Potensiometer memberikan nilai tegangan analog yang dikonversi menjadi nilai digital oleh ADC di Raspberry Pi Pico. Mikrokontroler membandingkan nilai dari DHT22 dengan nilai ambang (bisa ditentukan oleh potensiometer atau nilai tetap di program).Jika suhu/kelembaban melampaui batas, maka: Servo motor bisa diputar ke posisi tertentu (misalnya membuka jendela/ventilasi).Buzzer akan menyala untuk memberikan peringatan. 
Servo bergerak sesuai dengan logika (misalnya sudut tergantung kelembaban).Buzzer aktif jika kondisi kritis terjadi (misalnya suhu terlalu tinggi).


4. Flowchart dan Listing Program [kembali]
a. Flowchart




b. Listing Program
               
from machine import Pin, ADC, PWM import time import dht # Inisialisasi potensiometer pada GPIO 26 (ADC0) pot = ADC(26) # Inisialisasi motor servo pada GPIO 15 (PWM) servo = PWM(Pin(1)) servo.freq(50) # Frekuensi PWM untuk servo # Inisialisasi buzzer sebagai PWM pada GPIO 14 buzzer = PWM(Pin(14)) buzzer.duty_u16(0) # Tidak ada suara saat awal # Inisialisasi sensor DHT22 pada GPIO 16 dht_sensor = dht.DHT22(Pin(16)) # Fungsi mapping nilai 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) # Fungsi untuk membunyikan buzzer dengan nada tertentu def play_buzzer_note(frequency, duration_ms): buzzer.freq(frequency) buzzer.duty_u16(32768) # Volume setengah time.sleep_ms(duration_ms) buzzer.duty_u16(0) time.sleep_ms(50) # Jeda antar nada # Fungsi melodi untuk suhu tinggi def play_high_temp_melody(): play_buzzer_note(880, 200) # A5 play_buzzer_note(988, 200) # B5 play_buzzer_note(1047, 200) # C6 # Fungsi melodi untuk kelembapan tinggi def play_high_humidity_melody(): play_buzzer_note(659, 200) # E5 play_buzzer_note(698, 200) # F5 play_buzzer_note(784, 200) # G5 # Fungsi melodi kombinasi suhu dan kelembapan tinggi def play_combined_alert_melody(): play_buzzer_note(1047, 200) # C6 play_buzzer_note(1175, 200) # D6 play_buzzer_note(1319, 200) # E6 while True: # Baca potensiometer pot_value = pot.read_u16() servo_angle = map_value(pot_value, 0, 65535, 0, 180) servo_duty = map_value(servo_angle, 0, 180, 1638, 8192) servo.duty_u16(servo_duty) # Baca suhu dan kelembapan dari DHT22 try: dht_sensor.measure() temperature = dht_sensor.temperature() humidity = dht_sensor.humidity() print(f"Suhu: {temperature}°C | Kelembapan: {humidity:.1f}%") # Cek kondisi dan mainkan melodi sesuai kondisi if temperature > 25 and humidity > 50: print("🔥💧 Buzzer ON: Suhu & Kelembapan tinggi!") play_combined_alert_melody() elif temperature > 25: print("🔥 Buzzer ON: Suhu tinggi!") play_high_temp_melody() elif humidity > 50: print("💧 Buzzer ON: Kelembapan tinggi!") play_high_humidity_melody() else: buzzer.duty_u16(0) # Matikan suara jika normal except OSError: print("⚠️ Gagal membaca sensor DHT22.") time.sleep(0.5)

5. Video Demo [kembali]




6. Analisa [kembali]

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

Pada STM32, PWM (Pulse Width Modulation) diimplementasikan menggunakan timer internal yang dikonfigurasi melalui HAL Library. Setiap timer memiliki beberapa channel yang dapat digunakan untuk menghasilkan sinyal PWM, dengan pengaturan prescaler dan period yang menentukan frekuensi dan resolusi sinyal. Pendekatan ini memungkinkan kontrol PWM yang sangat presisi, baik untuk aplikasi motor maupun LED.

Sementara itu, pada Raspberry Pi Pico, PWM dapat diakses melalui pustaka MicroPython (machine.PWM) atau melalui C SDK. PWM Pico juga menggunakan timer internal, tetapi pengaturannya lebih sederhana, meskipun tetap mendukung resolusi hingga 16-bit. Namun, sinkronisasi antar pin PWM pada Pico cenderung lebih sulit dibandingkan STM32, yang bisa menyinkronkan beberapa channel pada satu timer.

Dari sisi dampak, STM32 memberikan kontrol yang lebih halus dan presisi terhadap kecepatan motor atau kecerahan LED, terutama pada aplikasi yang membutuhkan waktu siklus yang sangat stabil. Pico cukup efektif untuk penggunaan umum, tetapi bisa terbatas untuk aplikasi industri presisi tinggi.

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

jawab:

STM32 menggunakan ADC (Analog-to-Digital Converter) internal yang dapat diakses melalui fungsi HAL seperti HAL_ADC_Start(), HAL_ADC_PollForConversion(), dan HAL_ADC_GetValue(). ADC pada STM32 biasanya memiliki resolusi 12-bit, dan dapat bekerja dalam mode polling, interrupt, atau DMA, memungkinkan pengambilan data sensor secara efisien dan terus-menerus.

Pada Raspberry Pi Pico, pembacaan ADC dilakukan melalui pin analog yang tersedia, dengan menggunakan pustaka machine.ADC pada MicroPython. ADC Pico juga memiliki resolusi 12-bit, tetapi pembacaannya umumnya dilakukan dengan cara polling, tanpa dukungan DMA secara langsung di MicroPython.

Kelebihan STM32 terletak pada fleksibilitas mode pembacaan dan kemampuannya menangani data dalam jumlah besar dengan efisiensi tinggi, sementara Pico lebih cocok untuk aplikasi sederhana dengan frekuensi pembacaan yang tidak terlalu tinggi.

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

jawab:

STM32 mendukung penggunaan interrupt eksternal yang sangat fleksibel melalui fungsi HAL_GPIO_EXTI_Callback() dan konfigurasi NVIC. Pin dapat dikonfigurasi untuk memicu interrupt pada rising edge, falling edge, atau keduanya. Ini memungkinkan deteksi perubahan input (seperti tombol atau sensor digital) secara real-time tanpa harus terus-menerus melakukan polling.

Pada Raspberry Pi Pico dengan MicroPython, interrupt dapat diatur menggunakan fungsi irq() dari objek pin, yang juga dapat dikonfigurasi untuk rising atau falling edge. Namun, penanganan interrupt di MicroPython memiliki latensi lebih tinggi dan terbatas kemampuannya dibandingkan implementasi di level C atau STM32.

Dengan demikian, STM32 lebih unggul untuk aplikasi yang sangat bergantung pada respons cepat terhadap perubahan input, seperti deteksi pulsa encoder atau sinyal sensor digital berkecepatan tinggi.

4.

4. Cara Kerja HAL_GetTick() pada STM32 dan utime.ticks_ms() pada Raspberry Pi Pico

Fungsi HAL_GetTick() pada STM32 menggunakan timer sistem (SysTick) yang menghasilkan interrupt setiap 1 ms. Nilai waktu ini disimpan dalam variabel global dan diinkrementasi setiap milidetik oleh interrupt handler. Oleh karena itu, HAL_GetTick() memberikan nilai waktu sejak sistem dinyalakan dalam satuan milidetik dan sangat andal untuk melakukan delay atau pengukuran waktu relatif.

Sebaliknya, utime.ticks_ms() pada Raspberry Pi Pico juga mengembalikan waktu dalam milidetik sejak board dinyalakan, menggunakan sistem waktu internal. Namun, dalam MicroPython, ada batasan overflow nilai (biasanya 30 bit), sehingga perlu hati-hati saat menghitung selisih waktu menggunakan utime.ticks_diff().

Secara umum, kedua fungsi bekerja dengan prinsip yang serupa, tetapi STM32 lebih akurat untuk aplikasi real-time karena kestabilan clock dan integrasi erat dengan sistem interrupt-nya.

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

Pada STM32, konfigurasi pin PWM sangat bergantung pada pemetaan pin terhadap timer internal (misalnya TIM1, TIM2, dll.). HAL Library menyediakan API yang memungkinkan pengguna mengatur frekuensi dan duty cycle dengan sangat spesifik. Timer di STM32 memiliki banyak fitur seperti auto-reload, prescaler, dan mode output compare, yang bisa digunakan untuk menghasilkan gelombang persegi dengan presisi tinggi dan sinkronisasi antar channel.

Di Raspberry Pi Pico, PWM disediakan oleh delapan slice PWM, masing-masing dengan dua channel. Setiap pin PWM dipetakan ke salah satu slice, dan konfigurasi dilakukan melalui fungsi PWM dalam MicroPython atau SDK di C. Pico memungkinkan pengaturan frekuensi dan duty cycle, tetapi tidak semudah STM32 dalam hal sinkronisasi antar pin atau manipulasi tingkat lanjut dari timer.

Secara keseluruhan, STM32 lebih unggul dalam pengendalian presisi sinyal gelombang persegi, terutama pada sistem tertanam yang kompleks dan kritis terhadap waktu. Pico tetap efektif, tetapi lebih cocok untuk prototipe dan aplikasi edukatif.




7. Download file [kembali]
Download video Demo klik disini
Download Datasheet LED klik disini
Download Datasheet IC Rasberry Pi Pico klik disini

Tidak ada komentar:

Posting Komentar

Postingan Populer