LA MIKRO M3





Percobaan 6 I2C (Pico – LCD)

1. Prosedur[Kembali]

  • 1. Rangkai semua komponen sesuai dengan percobaan 6 pada modul 
  • 2. Buat program untuk Rspberry pi pico, sesuaikan konfigurasinya dengan rangkaian dan kondisi yang dipakai
  • 3. Masukkan Program ke Thony (micropython)
  • 4. Upload program ke Raspberry Pi Pico
.

2. Hardware dan Diagram Blok[Kembali]

1. Raspberry PI PICO

 

 





3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]

Rangkaian Simulasi: 







Prinsip Kerja:

Rangkaian ini menggunakan komunikasi I2C untuk menghubungkan LCD 16x2 dengan mikrokontroler Raspberry Pi Pico. Penggunaan modul I2C pada LCD bertujuan untuk menyederhanakan koneksi, di mana hanya diperlukan dua jalur komunikasi, yaitu SDA (Serial Data) dan SCL (Serial Clock), dibandingkan dengan koneksi paralel yang memerlukan lebih banyak pin.

Raspberry Pi Pico akan mengirimkan data atau instruksi melalui jalur SDA, yang dikendalikan oleh sinyal clock dari jalur SCL. Data yang dikirim tersebut kemudian diterima oleh modul I2C yang umumnya menggunakan IC seperti PCF8574. IC ini berfungsi untuk mengubah data serial yang diterima menjadi sinyal paralel yang dapat dimengerti oleh LCD. Dengan demikian, LCD dapat menampilkan karakter atau perintah yang dikirimkan oleh mikrokontroler.

Penggunaan potensiometer dalam rangkaian ini berfungsi untuk mengatur tingkat kontras pada layar LCD, agar tampilan karakter dapat terlihat lebih jelas. Secara keseluruhan, sistem ini memungkinkan komunikasi yang lebih efisien antara mikrokontroler dan LCD, dengan penghematan pin GPIO, kabel yang lebih rapi, serta proses pemrograman yang lebih sederhana karena dapat memanfaatkan pustaka I2C yang telah tersedia.

  
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


5. Video demo[Kembali]






6. Analisa[Kembali]







7. Download File[Kembali]

Video simulasi [download]
Datasheet Raspberry Pi Pico [Download]



Komentar

Postingan populer dari blog ini