Pecobaan 6
1. Prosedur
[Kembali]1. Siapkan komponen dan alat yang diperlukan seperti LED RGB, resistor, respberry pi pico, Potensiometer, dan Motor Servo
2. Rangkai lah komponen seperti pada gambar percobaan di modul
3. jika komponen sudah selesai di rangkai, hubungkan ke software Thonny untuk mendapatkan program
4. Inputkan listing program ke dalam Thonny
5. Simulasikan Rangkaian
3. Rangkaian Simulasi dan Prinsip Kerja
[Kembali]
a. Rangkaian
b. Prinsip Kerja
Percobaan ini menggunakan potensiometer sebagai input analog untuk mengatur sudut motor servo dan mengendalikan warna serta kedipan LED RGB secara terkoordinasi.
Berikut prinsip kerjanya langkah demi langkah:
-
Pembacaan Nilai ADC dari Potensiometer:
-
Mengubah Nilai ADC menjadi Sudut Servo:
-
Mengatur Warna LED Berdasarkan Sudut Servo:
-
PWM untuk Servo:
a. Flowchart
b. Listing Program
from machine import Pin, PWM, ADC
import utime
# Definisi pin
servo = PWM(Pin(16)) # Servo pada GP16
pot = ADC(Pin(28)) # Potensiometer pada GP28
led_red = Pin(1, Pin.OUT) # LED Merah pada GP1
led_green = Pin(2, Pin.OUT) # LED Hijau pada GP2
led_blue = Pin(3, Pin.OUT) # LED Biru pada GP3
# Konfigurasi servo (frekuensi 50Hz)
servo.freq(50)
# 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 kontrol kedipan LED
last_blink = utime.ticks_ms()
led_state = True # Mulai dalam keadaan menyala
while True:
# Waktu sekarang
now = utime.ticks_ms()
# Membaca 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 sudut ke duty cycle (1500 - 7500) → sesuai servo PWM
duty = map_value(angle, 0, 180, 1500, 7500)
servo.duty_u16(duty)
# Print untuk debugging
print(f"Pot Value: {pot_value}, Angle: {angle}, Duty: {duty}")
# Jika sudah lewat 1000 ms (1 detik), ubah status LED RGB
if utime.ticks_diff(now, last_blink) >= 1000:
led_state = not led_state
last_blink = now # reset waktu blink
# Nyalakan salah satu warna 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:
led_red.value(0)
led_green.value(0)
Percobaan 6 Modul 2
Tidak ada komentar:
Posting Komentar