LA uP uC M2P4



Percobaan 4

Motor Servo, Buzzer dan Potensiometer

1. Prosedur[Kembali]

  1. Rangkailah sistem percobaan sesuai dengan diagram yang ada, dengan input berupa potensiometer, serta output berupa buzzer dan motor servo. Sambungkan potensiometer, motor servo dan buzzer menggunakan kabel jumper ke pin rapsberry pi pico yang sesuai dengan pengaturan program.
  2. Uploadlah program pada thonny IDE
  3. Setelah program selesai, percobaan dapat dilihat dengan menyesuaikan prinsip kerja rangkaian

2. Hardware dan Diagram Blok[Kembali]

A. Hardware

1. Raspberry Pi Pico







2. Potensiometer


3. Buzzer



4. Motor Servo







B. Blok Diagram




3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]

Rangkaian Percobaan:



Prinsip Kerja Rangkaian:

Program diawali dengan langkah Mulai, yaitu saat sistem dinyalakan. Setelah itu, sistem melakukan inisialisasi terhadap tiga komponen utama: potensiometer sebagai input, serta buzzer dan motor servo sebagai output. Inisialisasi ini mencakup konfigurasi pin, setup PWM, dan pengaturan awal lainnya yang dibutuhkan agar ketiga perangkat tersebut dapat bekerja dengan baik.

Setelah inisialisasi selesai, program masuk ke dalam loop utama yang berjalan terus-menerus selama sistem hidup. Di dalam loop ini, pertama-tama sistem akan membaca nilai dari potensiometer. Nilai ini merupakan sinyal analog yang akan dikonversi ke dalam bentuk digital menggunakan ADC (Analog to Digital Converter).

Nilai hasil pembacaan potensiometer kemudian digunakan untuk dua proses yang berjalan secara paralel. Proses pertama adalah konversi nilai potensiometer ke dalam bentuk sudut servo. Setelah itu, sudut tersebut dikonversi lagi menjadi nilai duty cycle PWM yang sesuai, kemudian posisi motor servo di-update sesuai duty cycle tersebut sehingga arah gerakannya berubah berdasarkan posisi potensiometer.

Di sisi lain, proses kedua mengubah nilai potensiometer menjadi frekuensi yang akan digunakan oleh buzzer. Setelah frekuensinya dikonversi, frekuensi buzzer diperbarui agar menghasilkan nada yang sesuai. Selain itu, data hasil pembacaan dan konversi ini juga dicetak ke layar monitor (misalnya melalui komunikasi serial) untuk keperluan debugging atau pemantauan.

Setelah semua proses dalam loop selesai dijalankan, program akan menunggu selama 0,05 detik (50 milidetik) sebelum mengulangi proses dari awal dalam loop utama. Delay ini berfungsi untuk menstabilkan sistem dan mencegah pembacaan data yang terlalu cepat dan tidak terbaca dengan baik.

Prinsip Kerja Program:

Program ini ditujukan untuk membaca input dari sebuah potensiometer dan menggunakannya untuk mengontrol posisi servo serta frekuensi suara buzzer secara real-time menggunakan mikrokontroler seperti Raspberry Pi Pico.

Program diawali dengan mengimpor library yang diperlukan, yaitu Pin, PWM, dan ADC dari modul machine, serta sleep dari time dan utime (meskipun utime tidak digunakan dalam kode ini).

Setelah itu, dilakukan inisialisasi perangkat keras:

  • Potensiometer dihubungkan ke pin ADC0 (GP26).

  • Servo motor dikendalikan lewat PWM pada pin GP16.

  • Buzzer dikendalikan lewat PWM pada pin GP14.

PWM servo diset dengan frekuensi 50 Hz, karena sebagian besar servo bekerja pada frekuensi ini. Buzzer diawali dengan frekuensi 1000 Hz.

Program juga memiliki fungsi map_value, yang berfungsi untuk memetakan suatu rentang nilai ke rentang lain, misalnya dari nilai ADC ke sudut servo atau dari sudut ke duty cycle PWM.

Di dalam loop utama (yang terus berjalan):

  1. Nilai potensiometer dibaca menggunakan read_u16(), menghasilkan nilai 16-bit antara 0 dan 65535.

  2. Nilai tersebut kemudian digunakan untuk:

    • Menghitung sudut servo dari 0° hingga 180°, lalu dikonversi ke duty cycle PWM antara 1500 hingga 7500 (nilai ini mewakili lebar pulsa dalam satuan duty_u16 untuk menentukan posisi servo).

    • Servo dikendalikan berdasarkan duty cycle tersebut, sehingga posisinya berubah sesuai putaran potensiometer.

  3. Nilai potensiometer juga digunakan untuk mengatur frekuensi buzzer, diubah ke rentang 200 Hz hingga 2000 Hz, menciptakan suara dengan nada yang berubah tergantung posisi potensiometer.

  4. Nilai duty buzzer diset ke 30000 agar buzzer tetap berbunyi dengan intensitas tertentu.

  5. Data pembacaan nilai potensiometer, sudut servo, dan duty cycle dicetak ke serial monitor untuk keperluan debugging.

  6. Program menunggu selama 50 milidetik sebelum mengulangi proses.

 

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 === 

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





6. Analisa[Kembali]







7. Download File[Kembali]


Download File HTML Klik Disini
Download File Video  Klik Disini
Download File Program Klik Disini
Download File Datasheet Raspberry Pi Pico Klik Disini











Tidak ada komentar:

Posting Komentar

Home

  BAHAN PRESENTASI UNTUK MATAKULIAH                                                 ELEKTRONIKA 2022 Nama: Hafizh Qisthi Bakri NIM: 22109530...