LAPORAN AKHIR 1 MODUL 2
By: Rahmad Fajril Ilhami
2210951016
Modul 1 Percobaan 4
Motor Servo, Buzzer, & Potensiometer
2. Alat dan Bahan [Kembali]
3. Rangkaian [Kembali]
4. Prinsip Kerja Rangkaian [Kembali]
potensiometer, buzzer, dan servo motor. Potensiometer berfungsi sebagai input analog yang terhubung ke pin GP26 (ADC0) Raspberry Pi Pico. Saat potensiometer diputar, nilai tegangan analog yang keluar dari pin tengah potensiometer berubah, dan Raspberry Pi Pico membacanya sebagai nilai digital 16-bit (kisaran 0 hingga 65535). Nilai ini kemudian di-mapping ke sudut antara 0° hingga 180°, yang mewakili posisi sudut servo. Nilai sudut ini selanjutnya dikonversi ke sinyal PWM dengan frekuensi 50 Hz, lalu dikirimkan ke pin GP16 untuk mengatur posisi servo motor. Secara bersamaan, buzzer yang terhubung ke pin GP14 akan mengeluarkan bunyi jika sudut servo berada di antara 0° dan 180° (tidak pada batas ekstrim). Buzzer dibunyikan menggunakan sinyal PWM dengan frekuensi 1000 Hz dan duty cycle 50%. Namun, jika servo berada tepat di posisi 0° atau 180°, maka buzzer akan mati karena tidak menerima sinyal PWM. Rangkaian ini memungkinkan interaksi langsung antara posisi potensiometer dengan gerakan servo dan bunyi buzzer sebagai indikator aktifnya pergerakan.
from machine import Pin, PWM, ADC
from time import sleep
# Inisialisasi
pot = ADC(26) # Potensiometer di GP26 (ADC0)
servo = PWM(Pin(16)) # Servo di GP16
buzzer = PWM(Pin(14)) # Buzzer di GP14
# Konfigurasi frekuensi awal
servo.freq(50) # Frekuensi untuk servo (50 Hz)
buzzer.freq(1000) # Frekuensi awal buzzer
# Fungsi mapping dari satu rentang ke rentang lain
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 dari potensiometer (0 - 65535)
# === Kontrol Servo Motor ===
angle = map_value(val, 0, 65535, 0, 180) # Mapping ke sudut 0–180°
duty = map_value(angle, 0, 180, 1500, 7500) # Duty cycle untuk PWM servo
servo.duty_u16(duty)
# Debug output
print(f"Pot Value: {val}, Angle: {angle}, Duty: {duty}")
# === Kontrol Buzzer ===
freq = int(200 + (val / 65535) * (2000 - 200)) # Mapping ke frekuensi 200–2000 Hz
buzzer.freq(freq)
buzzer.duty_u16(30000) # Volume buzzer (50% duty cycle)
sleep(0.05) # Delay untuk kestabilan
Komentar
Posting Komentar