1. Prosedur [kembali]
- Buka WOKWI di browser.
- Klik Pi Pico pada Simulate with Wokwi Online.
- Klik Microphyton pada Starter Templates.
- Rangkai rangkaian sesuai dengan kondisi yang dipilih.
- Tulis program sesuai kondisi.
- Klik tombol Start Simulation.
2. Hardware dan Diagram Blok [kembali]
3. Rangkaian Simulasi [kembali]
- Prinsip Kerja
Buatlah rangkaian sesuai kondisi. Dimana ada rasberry pi pico. Buzzer kaki positif dihubungkan ke GP14 dan kaki negatif dihubungkan ke GND rasberry pi pico. Potensiometer kaki VCC dihubungka ke 3,3V pi pico, kaki GND dihubungkan ke GND pi pico, kaki out[ut tengah dihubungkan ke GP26 (ADC0). Servo motor kaki VCC dihubungkan ke 5V pipico, kaki GND dihubungkan ke GND pipico, kaki sinyal dihubungkan ke GP16 pi pico.
Kemudian buatkan listing program sesuai kondisi agar dapat menjalankan rangkaian. Pada program ada yang mengatur pin terhubung dengan potensiometer, servo, dan buzzer. Servo menggunakan frekuensi 50 Hz, buzzer 1000 Hz. Membaca nilai analog dari potensiometer (0–65535), kemudian di-mapping ke sudut 0°–180° untuk servo. Sudut diubah ke sinyal PWM dengan duty cycle yang sesuai agar servo bergerak. Jika sudut antara 0° dan 180°, buzzer akan berbunyi (duty 50%). Namun, logika ini bisa disederhanakan (lihat catatan di bawah).
Ketika potensiometer diputar, nilai ADC dari GP26 berubah.
Nilai tersebut dimapping ke sudut 0°–180°, kemudian servo bergerak sesuai sudut tersebut (searah jarum jam saat nilai potensiometer naik).
Selama sudut servo berada dalam rentang > 0° dan < 180°, buzzer akan menyala/bunyi karena diberikan sinyal PWM.
Jika servo tidak berada dalam rentang itu (idealnya jika sudut tepat di 0° atau 180°), buzzer akan mati.
4. Flowchart dan Listing Program [kembali]
- Flowchart
- Listing Program
from machine import Pin, PWM, ADC
from time import sleep
import utime
# Inisialisasi
pot = ADC(26) # GP26 = ADC0
servo = PWM(Pin(16))
buzzer = PWM(Pin(14))
# Konfigurasi PWM
servo.freq(50) # 50 Hz untuk servo
buzzer.freq(1000) # Awal frekuensi buzzer
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)
while True:
val = pot.read_u16() # Nilai ADC 16-bit (0 - 65535)
# === Servo Motor ===
# 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}")
# === Buzzer ===
# Buzzer hanya aktif saat sudut antara 0° dan 180° eksklusif
if 0 < angle < 180:
# Ubah val ke frekuensi (200 Hz - 2000 Hz)
freq = int(200 + (val / 65535) * (2000 - 200))
buzzer.freq(freq)
buzzer.duty_u16(30000) # Volume/suaranya
else:
buzzer.duty_u16(0) # Matikan suara
sleep(0.05)
5. Kondisi [kembali]
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.
Tidak ada komentar:
Posting Komentar