Laporan Akhir 1 Praktikum Modul 2





Laporan Akhir

Percobaan 6

Motor Servo, LED RGB, & Potensiometer

1. Prosedur [kembali]
  1. Buatlah Rangkaian berupa komponen potensiometer, LED RGB, servo motor, dan resistor sesuai dengan skema yang tersedia pada dev board. 

  2. Sambungkan board Raspberry Pi Pico ke komputer menggunakan kabel USB.

  3. Jalankan aplikasi Thonny IDE di komputer, Salin dan unggah program yang telah disiapkan ke dalam Thonny IDE.

  4. Putar potensiometer secara perlahan untuk mengubah nilainya.

  5. Perhatikan bagaimana gerakan servo motor berubah mengikuti nilai potensiometer.

  6. Amati perubahan warna pada LED RGB yang menunjukkan respons sistem.

2. Hardware dan Diagram Blok [kembali]

Hardware 
  • Raspberry Pi Pico

  • Potensiometer



  • Breadboard


  • Jumper male to male





  • Servo





  • LED RGB




Diagram Blok :



3. Rangkaian Simulasi dan Prinsip Kerja [kembali]

- Rangkaian


- Prinsip Kerja :

Rangkaian ini menggunakan potensiometer sebagai input untuk mengatur sudut dari sebuah servo motor, serta menampilkan indikasi sudut tersebut melalui LED RGB yang berkedip dengan warna tertentu. Berikut penjelasan prinsip kerjanya:

  1. Inisialisasi

    • Sistem mulai bekerja dengan melakukan inisialisasi terhadap pin-pin yang digunakan untuk servo, potensiometer (ADC), dan LED RGB.

    • Ini berarti microcontroller akan menyiapkan pin-pin tersebut sebagai input/output sesuai fungsinya.

  2. Pembacaan Nilai Potensiometer

    • Potensiometer dibaca melalui ADC (Analog to Digital Converter) untuk mendapatkan nilai tegangan analog.

    • Nilai ADC ini kemudian dikonversikan menjadi sudut servo, biasanya dalam rentang 0–180 derajat.

    • Servo diarahkan ke posisi sesuai dengan nilai sudut ini.

  3. Pengkondisian Sudut dan Output LED RGB

    • Sistem memeriksa nilai sudut yang terbaca dan menentukan LED mana yang akan berkedip berdasarkan rentang berikut:

      • Jika sudut < 60°:

        • LED RGB Merah akan menyala dan berkedip.

      • Jika sudut antara 61° hingga 120°:

        • LED RGB Hijau akan menyala dan berkedip.

      • Jika sudut antara 121° hingga 180°:

        • LED RGB Biru akan menyala dan berkedip.

      • Jika sudut tidak masuk ke dalam ketiga kondisi di atas, maka sistem tidak mengaktifkan LED (dalam flowchart langsung ke “Selesai”).

  4. Pengulangan

    • Setelah satu siklus selesai, program kembali ke atas untuk membaca ulang nilai ADC dari potensiometer, sehingga sistem bekerja secara looping terus-menerus dan merespon setiap perubahan pada potensiometer secara real-time.


4. Flowchart dan Listing Program [kembali]

  • Flowchart



  • Listing Program
from machine import Pin, PWM, ADC
import utime

# Definisi pin
servo = PWM(Pin(16))         # Servo pada GP16
pot = ADC(Pin(28))           # Potensiometer pada GP28
led_red = Pin(1, Pin.OUT)    # LED Merah pada GP1
led_green = Pin(2, Pin.OUT)  # LED Hijau pada GP2
led_blue = Pin(3, Pin.OUT)   # LED Biru pada GP3

# Konfigurasi servo (frekuensi 50Hz)
servo.freq(50)

# Fungsi map seperti di Arduino
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 kontrol kedipan LED
last_blink = utime.ticks_ms()
led_state = True  # Mulai dalam keadaan menyala

while True:
    # Waktu sekarang
    now = utime.ticks_ms()
    
    # 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}")
    
    # Jika sudah lewat 1000 ms (1 detik), ubah status LED RGB
    if utime.ticks_diff(now, last_blink) >= 1000:
        led_state = not led_state
        last_blink = now  # reset waktu blink

    # Nyalakan salah satu warna LED berdasarkan sudut
    if 0 <= angle <= 60:
        led_red.value(led_state)
        led_green.value(0)
        led_blue.value(0)
    elif 60 < angle <= 120:
        led_red.value(0)
        led_green.value(led_state)
        led_blue.value(0)
    else:
        led_red.value(0)
        led_green.value(0)
        led_blue.value(led_state)
    
    utime.sleep_ms(50)  # Delay pendek untuk kestabilan pembacaan

5. Video Demo [kembali]




6. Analisa [kembali]







7. Download file [kembali]









Komentar

Postingan populer dari blog ini

Modul 2 Praktikum Sistem Digital

Modul 1 (GPIO) Praktikum Mikroprosesor dan Mikrokontroller

Modul 1 Praktikum Sistem Digital