LA M3





Percobaan 6 I2C (Pico – LCD)

1. Prosedur[Kembali]

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

2. Hardware dan Diagram Blok[Kembali]

1. Raspberry PI PICO

 

 


3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]

Rangkaian: 






Prinsip Kerja:

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
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. Analisa[Kembali]





6. Video Demo[Kembali]




7. Download File[Kembali]

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




Posting Komentar

Lebih baru Lebih lama