TUGAS PENDAHULUAN 1

[menuju akhir]

1. Prosedur [kembali]

1. Susun rangkaian di situs Wokwi sesuai dengan kondisi percobaan yang dipilih.
2. Tulis program pada situs Wokwi.
3. Setelah program selesai dibuat, jalankan simulasi rangkaian di Wokwi sesuai dengan skenario yang telah ditentukan.
4. Proses selesai.

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]

 


Prinsip Kerja

  1. Deklarasi Variabel:

    • ADC_HandleTypeDef hadc1; untuk menginisialisasi ADC.

    • current_mode untuk menentukan apakah motor berputar searah jarum jam (CW) atau berlawanan arah jarum jam (CCW).

  2. Urutan Langkah Stepper:

    • STEP_SEQ_CW dan STEP_SEQ_CCW mendefinisikan urutan langkah motor untuk berputar searah atau berlawanan arah jarum jam.

  3. Fungsi RunStepper:

    • Digunakan untuk menggerakkan motor stepper sesuai dengan urutan langkah yang diberikan (STEP_SEQ_CW atau STEP_SEQ_CCW).

  4. Fungsi MX_ADC_Init dan MX_GPIO_Init:

    • MX_ADC_Init mengonfigurasi ADC untuk membaca nilai dari saluran yang diinginkan.

    • MX_GPIO_Init mengonfigurasi GPIO untuk output motor dan input sensor.

  5. Fungsi SystemClock_Config:

    • Mengonfigurasi clock sistem, yang memastikan bahwa MCU bekerja dengan frekuensi yang benar.

  6. Loop Utama:

    • Dalam loop utama, ADC dibaca dan motor stepper dijalankan berdasarkan nilai ADC (mode CW atau CCW).

        Prinsip kerja dari kode ini terhadap rangkaian adalah sebagai berikut: mikrokontroler membaca nilai tegangan analog dari sebuah sensor melalui modul ADC (Analog to Digital Converter) yang telah dikonfigurasi menggunakan fungsi MX_ADC_Init. Nilai ADC ini digunakan untuk menentukan arah putaran motor stepper, apakah searah jarum jam (CW) atau berlawanan arah jarum jam (CCW), dengan mengatur variabel current_mode. Berdasarkan nilai ini, fungsi RunStepper akan dipanggil untuk mengaktifkan urutan sinyal yang sesuai dari array STEP_SEQ_CW atau STEP_SEQ_CCW, dan sinyal tersebut dikirimkan ke pin-pin GPIO yang telah dikonfigurasi melalui fungsi MX_GPIO_Init

        Secara fisik, sensor analog (seperti potensiometer atau sensor tekanan) dihubungkan ke salah satu pin ADC mikrokontroler (misalnya PA0). Kemudian, beberapa pin GPIO output (misalnya PA1–PA4) dihubungkan ke input driver motor stepper (seperti ULN2003 atau A4988). Driver ini bertugas menerima sinyal dari mikrokontroler dan mengatur arus ke fasa-fasa motor stepper. Output dari driver dihubungkan ke empat kabel fasa motor stepper, sehingga motor dapat berputar sesuai arah yang ditentukan. Catu daya eksternal (misalnya 12V) digunakan untuk memberi daya pada motor stepper melalui driver, sementara mikrokontroler mendapat catu daya terpisah melalui USB atau regulator (misalnya 5V/3.3V). Fungsi SystemClock_Config memastikan sistem bekerja dengan frekuensi yang stabil. Dengan demikian, rangkaian ini bekerja secara otomatis dan dinamis, di mana perubahan nilai analog dari sensor langsung memengaruhi arah putaran motor stepper melalui kontrol logika yang dilakukan oleh mikrokontroler.

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

# Fungsi mapping nilai
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)

# Variabel untuk menyimpan nilai pot sebelumnya
prev_pot_value = pot.read_u16()

while True:
    pot_value = pot.read_u16()  # Baca nilai ADC
    angle = map_value(pot_value, 0, 65535, 180, 0)  # Konversi ke sudut servo
    duty = map_value(angle, 0, 180, 1500, 7500)  # Konversi ke duty cycle
    servo.duty_u16(duty)  # Set posisi servo
   
    # Debugging
    print(f"Pot Value: {pot_value}, Angle: {angle}, Duty: {duty}")
   
    # Deteksi apakah potensiometer diperkecil → nilai menurun
    if pot_value < prev_pot_value:
        # Servo diarahkan searah jarum jam
        # (sudah terjadi dengan duty yang diubah berdasarkan nilai potensiometer)
        pass
   
    # Kondisi buzzer berbunyi jika sudut antara 0 dan 180 derajat
    if 0 < angle < 180:
        freq = int(200 + (pot_value / 65535) * (2000 - 200))
        buzzer.freq(freq)
        buzzer.duty_u16(30000)
    else:
        buzzer.duty_u16(0)  # Matikan buzzer di luar rentang
   
    prev_pot_value = pot_value  # Simpan nilai potensiometer untuk pembacaan berikutnya
    sleep(0.05)


5. Kondisi [kembali]

    Percobaan 4 Kondisi 7

Buatlah rangkaian seperti gambar pada percobaan 4, jika nilai pada potensiometer diperkecil maka servo bergerak searah jarum jam dan jika jika sudut servo >0 ° dan <180 ° buzzer berbunyi

6. Video Simulasi [kembali]





7. Download File [kembali]

Rangkaian [klik disini]
Video Simulasi [klik disini]
Listing Program [klik disini]



Tidak ada komentar:

Posting Komentar

  BAHAN PRESENTASI UNTUK MATA KULIAH  MIKROPROSESOR DAN MIKROKONTROLER 2024 OLEH: RAHMIDA 2210952005 Dosen Pengampu: Darwison, M.T Referensi...