Laporan Akhir (P6)



Modul 3 Percobaan 6

I2C (Pico – LCD)


1. Prosedur [Kembali]

  1. Rangkai dengan inputnya yaitu potensiometer dan outputnya yaitu 1 motor servo. Kemudian LCD I2C sebagai slave dan raspberry pi pico sebagai master.
  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.
  3. Buat inisialisasi program LCD I2C, LCD diatur sebagai slave yang akan menampilkan data sudut servo.
  4. Run program, putar potensiometer untuk melihat output motor servo dan tulisan sudut servo beserta nilainya.
  5. Program selesai.

2. Hardware dan Diagram Blok[Kembali]

  • Hardware :



  • Diagram Blok : 




3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]

  • Rangkaian Simulasi

  • Prinsip Kerja :
Rangkaian ini bekerja dengan sebuah potensiometer sebagai input dan motor servo sebagai output. Raspberry Pi Pico menjadi Master dan LCD I2C menjadi slave. Seiring potensiometer diperbesar nilainya maka akan menggerakkan motor servo searah jarum jam dan LCD menampilkan data sudut motor servo.


4. Flowchart dan Listing Program[Kembali]

  • Flowchart : 



  • 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

SERVO_MIN_DUTY = 1500  # Duty cycle untuk 0°

SERVO_MAX_DUTY = 7500  # Duty cycle untuk 180°

 

while True:

    # Baca nilai potensiometer

    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








Percobaan 6
Buatlah rangkaian seperti gambar pada percobaan 6, jika nilai pada potensiometer diperbesar maka servo bergerak searah jarum jam dan LCD akan menampilkan nilai derajat sudut motor servo.


7. Download File[Kembali]

 

 

 



 

Tidak ada komentar:

Posting Komentar

  BAHAN PRESENTASI UNTUK MATA KULIAH   ELEKTRONIKA    Oleh : Yuningsih Vebhy Selvania 2210953042 Elektronika (A)     Dosen Pengampu : Dr.  D...