Tugas Pendahuluan 1
1. Prosedur [kembali]
2. Hardware dan Diagram Blok [kembali]
Hardware :
1. Raspberry Pi Pico
2. Motor Servo
3. Buzzer
4. Potensiometer
Diagram Blok:
3. Rangkaian Simulasi dan Prinsip Kerja [kembali]
from machine import Pin, PWM, ADC
from time import sleep
Import library:
Pin
: Untuk mengakses dan mengontrol pin GPIO.PWM
: Untuk membuat sinyal PWM (Pulse Width Modulation) pada pin.ADC
: Untuk membaca sinyal analog dari pin (seperti potensiometer).sleep
: Untuk membuat jeda (delay) dalam program.
# Inisialisasi
pot = ADC(26) # GP26 = ADC0
servo = PWM(Pin(16))
buzzer = PWM(Pin(14))
Deklarasi perangkat:
pot
: Membaca potensiometer yang dihubungkan ke pin GP26 (ADC channel 0).servo
: Membuat objek PWM di pin GP16, untuk mengendalikan servo motor.buzzer
: Membuat objek PWM di pin GP14, untuk mengendalikan buzzer.
# Konfigurasi PWM
servo.freq(50) # 50 Hz untuk servo
buzzer.freq(1000) # Frekuensi buzzer
Mengatur frekuensi PWM:
Servo motor biasanya dikendalikan dengan sinyal PWM frekuensi 50 Hz.
Buzzer disetting dengan frekuensi 1000 Hz supaya menghasilkan bunyi.
# 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)
Fungsi
map_value
:Untuk mengubah rentang nilai.
Misalnya: dari sudut 0-180 derajat menjadi duty cycle 1638-8192 (sesuai kebutuhan servo).
# Inisialisasi
previous_pot_value = pot.read_u16()
angle = 90 # Awal servo di tengah
Membaca nilai awal potensiometer dan mengatur posisi servo di tengah (90°).
while True:
Memulai loop utama (program berjalan terus-menerus).
pot_value = pot.read_u16()
Membaca nilai potensiometer terbaru (0–65535).
# Cek perubahan potensiometer
if pot_value < previous_pot_value:
angle -= 1 # Diperkecil → berlawanan jarum jam
elif pot_value > previous_pot_value:
angle += 1 # Diperbesar → searah jarum jam
Membandingkan nilai potensiometer saat ini dengan sebelumnya:
Kalau turun → sudut servo dikurangi 1 derajat.
Kalau naik → sudut servo ditambah 1 derajat.
(Catatan: perubahan kecil → supaya gerakan lebih halus.)
# === Buzzer ===
if angle < 0 or angle > 180:
buzzer.duty_u16(30000) # Buzzer ON
else:
buzzer.duty_u16(0) # Buzzer OFF
Mengontrol buzzer:
Jika sudut di luar batas (kurang dari 0 atau lebih dari 180 derajat), buzzer menyala.
Kalau sudut valid (0–180 derajat), buzzer mati.
# Batas sudut supaya servo tetap bergerak normal
if angle < 0:
angle = 0
elif angle > 180:
angle = 180
Menjaga sudut dalam batas aman (0–180 derajat).
Jika keluar batas, dikembalikan ke nilai maksimal atau minimal.
# Konversi sudut ke duty cycle (1638 - 8192)
duty = map_value(angle, 0, 180, 1638, 8192)
servo.duty_u16(duty)
Mengubah sudut menjadi sinyal PWM:
Servo butuh duty cycle tertentu untuk tiap sudut.
Mapping dari 0-180 derajat menjadi nilai duty cycle PWM (1638–8192).
# Debugging
print(f"Pot Value: {pot_value}, Angle: {angle}, Duty: {duty}")
Menampilkan nilai di terminal untuk debugging:
Nilai ADC potensiometer, sudut servo, dan duty cycle.
previous_pot_value = pot_value # Simpan nilai potensiometer sebelumnya
sleep(1)
Menyimpan nilai potensiometer saat ini untuk dibandingkan di loop berikutnya.
Delay 1 detik sebelum mengulangi loop.
Program ini menggerakkan servo berdasarkan perubahan potensiometer secara halus, menghidupkan buzzer jika sudut keluar batas, dan memetakan sudut ke PWM untuk mengontrol servo.
4. Flowchart dan Listing Program [kembali]
Flowchart
Listing Program
5. Kondisi [kembali]
Percobaan 4 Kondisi 4
Buatlah rangkaian seperti gambar pada percobaan 4, jika nilai pada potensiometer diperkecil maka servo bergerak berlawanan jarum jam dan jika jika sudut servo <0 ° dan >180 ° buzzer berbunyi
6. Video Simulasi [kembali]
7. Download File [kembali]
Komentar
Posting Komentar