Modul 3 Percobaan 6
I2C (Pico – LCD)
- Rangkai dengan inputnya yaitu potensiometer dan outputnya yaitu 1 motor servo. Kemudian LCD I2C sebagai slave dan raspberry pi pico sebagai master.
- 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.
- Buat inisialisasi program LCD I2C, LCD diatur sebagai slave yang akan menampilkan data sudut servo.
- Run program, putar potensiometer untuk melihat output motor servo dan tulisan sudut servo beserta nilainya.
- 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.
- 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.
- HTML [klik disini]
- Rangkaian simulasi [klik disini]
- Video demo [klik disini]
Tidak ada komentar:
Posting Komentar