Percobaan 4



1. Prosedur [Kembali]

  • Rangkai semua komponen 
  • Buat program di Thonny IDE
  • Jalankan program dan cobakan sesuai percobaan

Hardware :

  • Raspberry pi pico


  • Potensiometer


  • LCD



Diagram Blok



  • Rangkaian




  • Prinsip Kerja
    Rangkaian ini terdiri dari dua bagian utama, yaitu **Transmitter (TX)** dan **Receiver (RX)**, yang saling berkomunikasi melalui **UART (Universal Asynchronous Receiver-Transmitter)**. Pada sisi **TX**, nilai dari potensiometer dibaca menggunakan **ADC (Analog-to-Digital Converter)** pada pin GPIO 26, yang mengubah tegangan analog (0-3,3V) menjadi nilai digital (0-65535). Nilai ini kemudian diformat menjadi string dengan format **"POT:<nilai>\n"** dan dikirim melalui UART dengan baudrate 9600. Data juga dicetak di console untuk keperluan debugging, memastikan bahwa nilai yang dikirim sudah benar sebelum diteruskan ke RX.  Di sisi **RX**, data dari UART dibaca dan diproses. Jika data yang diterima sesuai dengan format yang ditentukan (diawali dengan **"POT:"**), nilai potensiometer akan diekstrak dan ditampilkan pada **LCD 16x2** yang terhubung via **I2C**. Namun, jika terjadi kesalahan—seperti format tidak sesuai, data korup, atau konversi nilai gagal—sistem akan menampilkan pesan error di LCD untuk memudahkan troubleshooting. Komunikasi antara TX dan RX harus dilakukan dengan koneksi yang tepat, yakni **TX perangkat 1 (GPIO 0) terhubung ke RX perangkat 2 (GPIO 1)** dan sebaliknya, dengan baudrate yang sama (9600) agar data dapat dikirim dan diterima dengan benar.  


  • Flowchart


  • Listing Program
TX from machine import Pin, ADC, UART import time pot = ADC(26) # GPIO 26 (ADC0) uart = UART(0, baudrate=9600, tx=Pin(0), rx=Pin(1)) while True: pot_value = pot.read_u16() # Baca nilai (0-65535) data = f"POT:{pot_value}\n" # Format: "POT:\n" uart.write(data) print("Sent:", data.strip()) # Debug: Cek di Thonny time.sleep(0.5) RX from machine import UART, I2C, Pin from i2c_lcd import I2cLcd from time import sleep uart = UART(0, baudrate=9600, tx=Pin(0), rx=Pin(1)) i2c = I2C(0, sda=Pin(4), scl=Pin(5)) lcd = I2cLcd(i2c, 0x27, 2, 16) # Ganti 0x27 jika perlu while True: if uart.any(): raw_data = uart.readline() try: decoded_data = raw_data.decode('utf-8').strip() print("Received RAW:", repr(raw_data)) # Tampilkan data mentah (termasuk \n) print("Decoded:", decoded_data) # Data tanpa \n if decoded_data.startswith("POT:"): pot_value = int(decoded_data.split(':')[1]) lcd.clear() lcd.putstr(f"Value:{pot_value}") else: raise ValueError("Format salah") except Exception as e: lcd.clear() lcd.putstr("ERROR") lcd.move_to(0, 1) lcd.putstr(str(e)[:16]) # Tampilkan pesan error print("Error:", e, "| Data:", raw_data) \ 
            sleep(0.1)  

5. Video Demo [Kembali]


Komentar

Postingan populer dari blog ini

Modul M3