Laporan Akhir M3 Percobaan 6

 




 1. Prosedur  [kembali]


  1. 1. Persiapan Alat dan Bahan

  • Raspberry Pi Pico
  • Breadboard
  • Kabel jumper secukupnya
  • Servo motor
  • Potensiometer
  • LCD 16x2 (dengan modul I2C atau paralel sesuai konfigurasi)
  • Sumber daya (USB ke Raspberry Pi Pico)
  • Aplikasi Thonny

  1. 2. Perakitan Rangkaian

  • Sambungkan potensiometer ke pin GP26 (ADC0) pada Pico, serta VCC dan GND.

  • Sambungkan pin sinyal servo ke GP15, VCC servo ke 5V, dan GND servo ke ground.

  • Hubungkan modul LCD I2C:

    • SDA → GP0

    • SCL → GP1

    • VCC → 5V

    • GND → GND Pico.

  • Pastikan semua ground (servo, LCD, potensiometer, Pico) terhubung bersama.


    1.3. Pemrograman
  • Buka Thonny IDE lalu tuliskan program sesuai listing yang diberikan.

  • Program akan:

    • Membaca nilai analog dari potensiometer (0–65535).

    • Mengubah nilai tersebut menjadi sudut servo (0–180°).

    • Mengatur duty cycle PWM pada servo agar bergerak sesuai sudut.

    • Menampilkan nilai sudut servo pada LCD 16x2.


    1.4. Pengujian
  • Upload program ke Raspberry Pi Pico.

  • Putar potensiometer secara perlahan.

  • Amati:

    • Servo bergerak mengikuti perubahan potensiometer.

    • LCD menampilkan teks “Sudut Servo:” pada baris pertama dan nilai sudut dalam derajat pada baris kedua.

    1.5. Pengamatan
  • Catat hubungan antara perputaran potensiometer, perubahan sudut servo, dan nilai yang ditampilkan di LCD.

  • Periksa apakah sudut pada LCD sesuai dengan posisi servo secara nyata.

2. Hardware dan Diagram Blok [kembali]


  2.1 Daftar Komponen

  • 1 × Raspberry Pi Pico (atau kompatibel RP2040)

Gambar Raspberry Pi Pico 
Spesifikasi Raspberry Pi Pico

  • 1 ×Servo

Gambar Servo


  • 1 × Potentiometer

Gambar Potentiometer

  • 1 x LCD 16x2

Gambar LCD 16x2


  • Kabel Jumper

Gambar Kabel Jumper

2.2 Diagram Blok






       

3. Rangkaian Simulasi dan Prinsip Kerja [kembali]

3.1 Rangkaian Simulasi



Gambar Rangkaian Percobaan 6

3.2 Prinsip Kerja

Prinsip kerja rangkaian ini adalah memanfaatkan potensiometer sebagai pengendali sudut putaran servo motor yang ditampilkan secara real-time pada LCD I2C 16x2. Potensiometer terhubung ke pin ADC (GP26) pada Raspberry Pi Pico untuk mengubah perubahan resistansi menjadi nilai digital 0–65535. Nilai ini kemudian diproses dalam program untuk dikonversi menjadi sudut antara 0° hingga 180°. Hasil konversi sudut tersebut digunakan untuk mengatur duty cycle sinyal PWM yang dikirimkan ke pin servo (GP15), sehingga servo dapat bergerak sesuai sudut yang ditentukan. Pada saat yang sama, nilai sudut servo ditampilkan ke layar LCD melalui komunikasi I2C (GP0 = SDA, GP1 = SCL). Dengan demikian, perubahan posisi potensiometer secara langsung akan mengubah sudut servo, dan pengguna dapat memantau besar sudut yang dihasilkan melalui tampilan LCD.


4. Flowchart dan Listing Program [kembali]
    







Listing Program

from machine import Pin, ADC, PWM, I2C
from pico_i2c_lcd import I2cLcd
import utime

# 1. Setup Potensiometer (GP26 = ADC0)
pot = ADC(Pin(26))

# 2. Setup Servo (GP15)
servo = PWM(Pin(15))
servo.freq(50)  # Frekuensi PWM standar servo

# 3. Setup LCD I2C 16x2
I2C_ADDR = 0x27          # Alamat I2C LCD (bisa 0x3F tergantung modul)
I2C_NUM_ROWS = 2
I2C_NUM_COLS = 16
i2c = I2C(0, sda=Pin(0), scl=Pin(1), freq=400000)  # GP0 = SDA, GP1 = SCL
lcd = I2cLcd(i2c, I2C_ADDR, I2C_NUM_ROWS, I2C_NUM_COLS)

# Fungsi untuk mapping nilai
def map_value(x, in_min, in_max, out_min, out_max):
    return (x - in_min) * (out_max - out_min) // (in_max - in_min) + out_min

# Kalibrasi servo (sesuaikan jika perlu)
SERVO_MIN_DUTY = 1500   # Duty cycle untuk 0°
SERVO_MAX_DUTY = 7500   # Duty cycle untuk 180°

while True:
    # Baca nilai potensiometer (0–65535)
    pot_value = pot.read_u16()

    # Konversi ke sudut 0–180°
    angle = map_value(pot_value, 0, 65535, 0, 180)

    # Konversi sudut ke duty cycle
    duty = map_value(angle, 0, 180, SERVO_MIN_DUTY, SERVO_MAX_DUTY)
    servo.duty_u16(duty)

    # Tampilkan di LCD
    lcd.clear()
    lcd.putstr("Sudut Servo:")
    lcd.move_to(0, 1)
    lcd.putstr(f"{angle} derajat")

    utime.sleep_ms(200)  # Delay untuk mengurangi flicker


Penjelasan Listing Program

1. Import library

from machine import Pin, ADC, PWM, I2C from pico_i2c_lcd import I2cLcd import utime
  • Pin → digunakan untuk mengakses pin GPIO.

  • ADC → membaca nilai analog dari potensiometer.

  • PWM → menghasilkan sinyal PWM untuk mengendalikan servo.

  • I2C → komunikasi dengan LCD melalui protokol I2C.

  • I2cLcd → library untuk mengontrol LCD 16x2 I2C.

  • utime → modul delay (waktu).

2. Setup Potensiometer

pot = ADC(Pin(26))
  • Potensiometer dihubungkan ke pin GP26 (ADC0).

  • Pico akan membaca nilai analog dalam rentang 0 – 65535.

3. Setup Servo

servo = PWM(Pin(15)) servo.freq(50) # Frekuensi PWM standar servo
  • Servo dihubungkan ke pin GP15.

  • Sinyal PWM dengan frekuensi 50 Hz (standar untuk servo motor) digunakan untuk mengatur sudut.

4. Setup LCD I2C

I2C_ADDR = 0x27 I2C_NUM_ROWS = 2 I2C_NUM_COLS = 16 i2c = I2C(0, sda=Pin(0), scl=Pin(1), freq=400000) lcd = I2cLcd(i2c, I2C_ADDR, I2C_NUM_ROWS, I2C_NUM_COLS)
  • LCD menggunakan alamat I2C 0x27 (bisa berbeda, misalnya 0x3F).

  • Menggunakan I2C0 dengan GP0 = SDA, GP1 = SCL.

  • Inisialisasi LCD dengan ukuran 16 kolom × 2 baris.

5. Fungsi Mapping

def map_value(x, in_min, in_max, out_min, out_max): return (x - in_min) * (out_max - out_min) // (in_max - in_min) + out_min
  • Fungsi ini mengubah skala nilai dari satu rentang ke rentang lain.

  • Digunakan untuk mengonversi nilai potensiometer (0–65535) menjadi sudut servo (0–180) dan kemudian menjadi duty cycle PWM.

6. Kalibrasi Servo

SERVO_MIN_DUTY = 1500 # untuk sudut 0° SERVO_MAX_DUTY = 7500 # untuk sudut 180°
  • Menentukan batas duty cycle untuk servo agar sesuai dengan sudut penuh (0° hingga 180°).

7. Program Utama (Loop)

while True: pot_value = pot.read_u16() # Baca potensiometer (0–65535) angle = map_value(pot_value, 0, 65535, 0, 180) # Ubah ke sudut 0–180 duty = map_value(angle, 0, 180, SERVO_MIN_DUTY, SERVO_MAX_DUTY) servo.duty_u16(duty) # Atur servo sesuai sudut lcd.clear() lcd.putstr("Sudut Servo:") lcd.move_to(0, 1) lcd.putstr(f"{angle} derajat") # Tampilkan sudut di LCD utime.sleep_ms(200) # Delay agar LCD tidak flicker

Penjelasan langkah-langkahnya:

  1. Baca nilai potensiometer.

  2. Konversi nilai analog ke sudut servo.

  3. Ubah sudut menjadi duty cycle PWM.

  4. Kirim sinyal PWM ke servo → servo bergerak.

  5. Tampilkan nilai sudut di LCD.

  6. Ulangi proses secara terus-menerus.




5. Video Demo [kembali]







6. Kondisi [kembali]
    
Pada percobaan ini digunakan sebuah potensiometer sebagai pengendali sudut servo yang terhubung ke pin GP26 Raspberry Pi Pico. Ketika potensiometer diputar, nilai tegangan analog yang terbaca akan diubah menjadi sudut servo antara 0° hingga 180° melalui proses konversi menggunakan fungsi mapping. Servo motor yang terhubung ke pin GP15 kemudian akan bergerak sesuai dengan sudut yang dihasilkan dari nilai potensiometer tersebut. Selain itu, sudut posisi servo yang sedang aktif akan ditampilkan secara real-time pada LCD I2C 16x2 yang terhubung melalui pin GP0 (SDA) dan GP1 (SCL). Dengan demikian, pengguna dapat memutar potensiometer untuk mengontrol posisi servo sekaligus memantau informasi sudut servo secara langsung di layar LCD.
    


7. Download File  [kembali]
   
    Download Video Demo Percobaan 6 [link]
    Download datasheet Raspberry pi pico [link]
    Download datasheet Servo [link]
    Download datasheet Potentiometer [link]
    Download datasheet LCD 16x2 [link]

Comments

Popular posts from this blog