# Yuningsih Vebhy Selvania
# 2210953042
# Kelompok 9
# Percobaan 4 Kondisi 5
# Buatlah rangkaian seperti gambar pada percobaan 4, jika nilai pada potensiometer diperbesar maka servo bergerak searah jarum jam dan jika jika sudut servo >0 ° dan <180 ° buzzer berbunyi
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 PWM
servo.freq(50) # Frekuensi servo 50Hz
buzzer.freq(1000) # Frekuensi buzzer 1kHz (bisa diubah)
def map_value(value, in_min, in_max, out_min, out_max):
# Fungsi untuk mapping nilai ADC ke rentang PWM
return int((value - in_min) * (out_max - out_min) / (in_max - in_min) + out_min)
while True:
pot_value = pot.read_u16() # Baca nilai ADC dari 0-65535
angle = map_value(pot_value, 0, 65535, 0, 180) # Mapping ke sudut 0-180 derajat
# Konversi sudut ke sinyal PWM servo (1300–7700 kira-kira duty untuk 0-180 derajat)
duty = map_value(angle, 0, 180, 1400, 7500)
servo.duty_u16(duty)
# Kondisi buzzer
if angle < 0 or angle < 180:
buzzer.duty_u16(30000) # Buzzer bunyi 50% duty cycle
else:
buzzer.duty_u16(0) # Buzzer mati
sleep(0.05) # Delay kecil untuk kestabilan pembacaan