Tugas Pendahuluan 2 uP & uC : modul 2

 

 By: Rahmad Fajril Ilhami

2210951016



Percobaan 5 kondisi 7

1. Kondisi [Kembali]

 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

2. Rangkaian Simulasi [Kembali]

Prosedur : 
  1. Rangkai dengan inputnya yaitu potensiometer dan outputnya yaitu 1 motor servo dan 1 Buzzer.
  2. Buatlah program dengan konfigurasi pin input dan output berdasarkan pada pin GP Raspberry yang telah dirangkai sebelumnya. Kemudian buatlah program untuk menghasilkan output motor servo bergerak searah jarum jam dan output Buzzer berbunyi bertambah keras seiring diputar potensiometer kearah kiri.
  3. Run program, putar potensiometer untuk melihat output motor servo dan buzzer
  4. Program selesai
 Gambar Rangkaian Sebelum 

Gambar Rangkaian Sesudah

Gambar 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)


4. Prinsip Kerja [Kembali]

Video Penjelasan

Program ini dirancang untuk membaca nilai dari potensiometer menggunakan pin ADC (Analog to Digital Converter) dan mengendalikannya ke dua perangkat output: motor servo dan buzzer. Potensiometer terhubung ke pin GP26 pada mikrokontroler Raspberry Pi Pico yang mendukung fungsi ADC. Nilai yang terbaca dari potensiometer merupakan data 16-bit (rentang 0 hingga 65535), yang mencerminkan posisi fisik dari potensiometer. Nilai ini dibaca dalam loop while True secara terus-menerus untuk memperoleh data real-time.

Setelah membaca nilai potensiometer, program menggunakan fungsi map_value() untuk mengubah rentang nilai ADC (0–65535) menjadi sudut yang dapat dimengerti oleh motor servo, yaitu 0° hingga 180°. Kemudian, sudut ini dikonversi lagi menjadi nilai duty cycle PWM yang sesuai dengan sinyal kontrol servo. Duty cycle dalam bentuk 16-bit (duty_u16) dikalkulasi dari sudut tersebut ke nilai antara 1500 hingga 7500, karena sebagian besar servo motor standar menerima sinyal PWM dengan lebar pulsa antara 0.5 ms (0°) sampai 2.5 ms (180°) dalam periode 20 ms (frekuensi 50 Hz). Duty cycle ini dikirim ke pin PWM (GP16) yang terhubung ke motor servo, sehingga posisi lengan servo menyesuaikan dengan perubahan nilai potensiometer.

Untuk komponen buzzer, program juga menggunakan nilai yang sama dari potensiometer untuk mengatur frekuensi suara. Namun, buzzer hanya akan aktif apabila sudut servo berada antara lebih dari 0° dan kurang dari 180° — artinya, selama potensiometer tidak berada di posisi ujung minimum atau maksimum. Nilai ADC dari potensiometer digunakan untuk menghasilkan frekuensi buzzer antara 200 Hz sampai 2000 Hz, yang dihitung secara linier. Buzzer diatur menggunakan pin PWM (GP14) dengan duty cycle sebesar 30000 (dari total 65535), yang memberikan volume suara tertentu.

Dengan prinsip kerja seperti ini, pengguna dapat mengontrol arah servo motor dan sekaligus mendengar perubahan nada buzzer cukup hanya dengan memutar potensiometer. Program ini efektif untuk mendemonstrasikan prinsip pengolahan sinyal analog menjadi kontrol digital terhadap perangkat output melalui mikrokontroler. Pendekatan ini sering digunakan dalam aplikasi interaktif seperti kendali posisi, sistem alarm berbasis sensor, atau pembelajaran dasar mekatronika dan kontrol servo berbasis PWM.


5. Link Download [Kembali]

Komentar

Postingan populer dari blog ini

MATA KULIAH ELEKTRONIKA

PRATIKUM SISTEM DIGITAL

PRATIKUM MIKROKONTROLEL DAN MIKROPROSESOR