LA M4
Percobaan 4
1. Prosedur [Kembali]
- Rangkai semua komponen
- Buat program di Thonny IDE
- Jalankan program dan cobakan sesuai percobaan
- Rangkaian
- Prinsip Kerja
Rangkaian ini terbagi menjadi dua bagian utama, yaitu Transmitter (TX) dan Receiver (RX), yang berkomunikasi melalui protokol UART (Universal Asynchronous Receiver-Transmitter). Pada bagian TX, sinyal dari potensiometer dibaca menggunakan ADC (Analog-to-Digital Converter) melalui pin GPIO 26. Tegangan analog antara 0 hingga 3,3V dikonversi menjadi nilai digital dalam rentang 0–65535. Nilai digital ini kemudian dikemas dalam bentuk string dengan format "POT:\n" dan dikirim lewat UART pada baudrate 9600. Nilai tersebut juga ditampilkan di console sebagai sarana debugging untuk memastikan data yang dikirim sudah benar sebelum diteruskan ke bagian RX.
Sementara itu, di sisi RX, data yang diterima melalui UART akan dianalisis. Bila formatnya benar—yaitu diawali dengan "POT:"—nilai potensiometer akan diambil dan ditampilkan pada LCD 16x2 yang terhubung melalui I2C. Jika terjadi kesalahan seperti format yang salah, data rusak, atau kegagalan konversi, maka sistem akan menampilkan pesan error di LCD untuk memudahkan proses perbaikan. Untuk memastikan komunikasi berjalan lancar, koneksi antara TX dan RX harus tepat, yaitu TX dari perangkat pertama (GPIO 0) dihubungkan ke RX perangkat kedua (GPIO 1), dan sebaliknya, serta menggunakan baudrate yang sama (9600) agar data dapat ditransmisikan dan diterima dengan akurat.
- 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)
Video Simulasi [Download]
Komentar
Posting Komentar