LA Percobaan 4 (Modul 2)
2. Buat program untuk mikrokontroler Raspberry Pi Pico di software Thonny.
3. Inputkan program ke dalam mikrokontroler melalui USB.
4. Setelah program diinputkan, uji rangkaian yang telah dirangkai sesuai dengan output yang ditentukan.
Rangkaian ini menggunakan Raspberry Pi Pico untuk mengendalikan motor servo, buzzer, dan potensiometer. Potensiometer berfungsi sebagai input yang menghasilkan sinyal analog untuk mengatur posisi sudut motor servo dan frekuensi suara buzzer.
Sistem dimulai dengan inisialisasi komponen, lalu dalam loop utama potensiometer dibaca terus-menerus. Nilai analog dari potensiometer dikonversi menjadi sudut servo dan frekuensi buzzer. Sudut servo diatur melalui sinyal PWM, sedangkan frekuensi buzzer disesuaikan untuk menghasilkan suara sesuai nilai potensiometer. Data hasil konversi juga ditampilkan, dan proses ini diulang setiap 0,05 detik.
from machine import Pin, PWM, ADC
from time import sleep
# ======================= Inisialisasi ==========================
pot = ADC(26) # GP26 = ADC0
servo = PWM(Pin(16)) # Servo di pin GP16
buzzer = PWM(Pin(14)) # Buzzer di pin GP14
# ======================= Konfigurasi PWM ========================
servo.freq(50) # Servo biasanya menggunakan 50 Hz
buzzer.freq(1000) # Frekuensi awal buzzer
# ======================= Fungsi Mapping ========================
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)
# ======================= Loop Utama ============================
while True:
val = pot.read_u16() # Nilai ADC 16-bit (0 - 65535)
# === Servo Motor ===
# Konversi nilai potensiometer ke sudut (0° - 180°)
angle = map_value(val, 0, 65535, 0, 180)
# Konversi sudut ke duty cycle (1500 - 7500) sesuai dengan servo PWM
duty = map_value(angle, 0, 180, 1500, 7500)
servo.duty_u16(duty)
# Debug print
print(f"Pot Value: {val}, Angle: {angle}, Duty: {duty}")
# === Buzzer ===
# Ubah nilai ADC ke frekuensi (200 Hz - 2000 Hz)
freq = int(200 + (val / 65535) * (2000 - 200))
buzzer.freq(freq)
buzzer.duty_u16(30000) # Volume/suara buzzer
sleep(0.05)
Komentar
Posting Komentar