LA 1: PERCOBAAN 6
- Siapkan alat dan bahan
- Rangkai alat dan bahan sesuai dengan gambar pada modul
- Hubungkan hardware pada software
- Inputkan listing program
- Uji Coba hasilnya
b. Diagram Blok
3. Rangkaian Simulasi dan Prinsip Kerja [kembali]
prinsip kerja:
1. Potensiometer sebagai Sumber Input Analog
-
Potensiometer menghasilkan sinyal tegangan analog dalam rentang 0 hingga 3.3 volt, bergantung pada posisi putarannya.
-
Raspberry Pi Pico membaca tegangan tersebut menggunakan pin ADC, misalnya pada pin GP26.
-
Tegangan yang dibaca oleh pin ADC akan dikonversi menjadi nilai digital, biasanya dalam skala 0–65535 atau 0–1023 tergantung resolusi konversi yang digunakan.
2. Pengendalian Sudut Servo Motor
-
Data digital yang diperoleh dari potensiometer digunakan untuk menentukan sudut rotasi servo motor, umumnya dalam rentang 0° sampai 180°.
-
Raspberry Pi Pico mengirimkan sinyal PWM melalui salah satu pin kontrol (contohnya GP16) untuk mengatur posisi servo.
-
Servo akan bergerak menyesuaikan dengan nilai input dari potensiometer.
3. Pengaturan Warna pada LED RGB
-
LED RGB dikendalikan dengan menghubungkan ketiga komponennya (Merah, Hijau, dan Biru) ke tiga pin GPIO terpisah.
-
Raspberry Pi Pico mengatur tingkat intensitas masing-masing warna menggunakan sinyal PWM untuk setiap pin.
-
Kombinasi dari ketiga sinyal PWM tersebut menentukan warna akhir yang terlihat, dan warna tersebut berubah berdasarkan nilai input dari potensiometer.
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)
led_blue.value(led_state)
utime.sleep_ms(50) # Delay pendek untuk kestabilan pembacaan
PERCOBAAN 6: LED RGB,MOTOR SERVO DAN POTENSIOMETER
Komentar
Posting Komentar