Percobaan 4
Motor Servo, Buzzer, & Potensiomter
1. Prosedur[Kembali]
1. Rangkai rangkaian sesuai dengan rangkaian percobaan 4.
2. Setelah semua komponen (Potensiometer, motor servo, dan buzzer , dihubungkan ke Raspberry pi pico), hubungkan USB Raspberry pi pico ke laptop.
3. Inisaialisasi program menggunakan thonny
4. Setelah program selesai, simulasikan rangkaian.
5. Selesai.
2. Hardware dan Diagram Blok[Kembali]
Hardware :
3. Rangkaian Simulasi[Kembali]
Rangkailah seperti rangkaian percobaan 4 pada modul 2
Rangkaian berhasil dijalankan sesuai dengan kondisi yang diberikan pada program
Rangkaian dan program yang bekerja dengan berbasis Raspberry Pi Pico yang mengontrol servo motor dan buzzer menggunakan potensiometer sebagai input utama. Potensiometer terhubung ke pin ADC (GP26) pada Raspberry Pi Pico dan berfungsi sebagai pengatur nilai analog, yang akan dibaca dan diubah menjadi nilai digital (0–65535). Nilai ini kemudian digunakan untuk dua keperluan.
Pertama, nilai dari potensiometer dikonversi menjadi sudut (0°–180°) untuk mengatur posisi servo motor. Selanjutnya, sudut ini dikonversi lagi menjadi nilai duty cycle PWM (1500–7500) yang sesuai dengan standar kontrol servo, dan dikirim ke pin GP16 untuk mengatur posisi motor.
Kedua, nilai ADC juga digunakan untuk menghasilkan frekuensi PWM untuk buzzer pada pin GP14. Nilai ADC diubah ke rentang frekuensi 200 Hz hingga 2000 Hz, sehingga semakin besar nilai potensiometer, semakin tinggi nada yang dihasilkan buzzer. Duty cycle buzzer ditetapkan pada nilai tetap (30000) untuk menghasilkan suara yang stabil.
4. Flowchart dan Listing Program[Kembali]
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 ===
# Ubah val ke frekuensi (200 Hz - 2000 Hz)
freq = int(200 + (val / 65535) * (2000 - 200))
buzzer.freq(freq)
buzzer.duty_u16(30000) # Volume/suaranya
sleep(0.05)
5. Video Demo[Kembali]
Tidak ada komentar:
Posting Komentar