LA M3
1. Prosedur [kembali]
- Buatlah rangkaian di breadboard sesuai dengan percobaan ke-4 pada modul yang terhubung dengan 2 buah Raspberry Pi Pico.
- Sambungkan breadboard ke komputer yang terinstal software Thony IDE menggunakan kabel USB.
- Buka Thony IDE dan pastikan Raspberry Pi Pico terdeteksi dengan baik oleh perangkat lunak.
- Buat dan buka program pada Thony IDE yang telah dibuat.
- Upload program ke Thony IDE dan jalankan program untuk mengontrol Ragnkaian.
- Uji rangkaian yang dirangkai sesuai dengan output yang telah ditentukan.
- Selesai.
2. Hardware dan Diagram Blok [kembali]
Hardware
a) Raspberry Pi Pico
Diagram Blok
3. Rangkaian Simulasi dan Prinsip Kerja [kembali]
Rangkaian Simulasi
Prinsip Kerja Sistem
Sistem ini terdiri dari dua komponen utama, yaitu unit pengirim (TX) dan penerima (RX), yang saling berkomunikasi menggunakan protokol UART (Universal Asynchronous Receiver/Transmitter). Tujuan dari sistem ini adalah membaca nilai dari sebuah potensiometer, mengirimkannya melalui komunikasi serial, lalu menampilkannya di layar LCD 16x2 dengan antarmuka I2C.
Bagian Pengirim (TX):
Program pada sisi pengirim dimulai dengan menginisialisasi pin ADC (Analog-to-Digital Converter) untuk membaca nilai dari potensiometer yang terhubung ke pin analog mikrokontroler (GPIO26). Nilai yang diperoleh berupa data digital 16-bit dalam rentang 0 hingga 65535.
Kemudian, modul UART disetting dengan Baudrate 9600, menggunakan dua pin GPIO untuk komunikasi serial (TX dan RX). Setiap 0,5 detik, nilai terbaru dari potensiometer dibaca, diformat menjadi string "POT:\n" agar mudah dikenali oleh penerima, lalu dikirim melalui UART. Nilai ini juga ditampilkan di terminal serial (misalnya di Thonny IDE) sebagai bahan debugging.
Bagian Penerima (RX):
Di sisi penerima, UART diatur dengan baudrate 9600 dan pin yang sesuai untuk menerima data dari TX. Selain itu, jalur I2C dikonfigurasi untuk menghubungkan mikrokontroler dengan modul LCD 16x2, yang akan menampilkan nilai dari potensiometer.
Program kemudian berjalan dalam loop utama yang terus memeriksa apakah ada data yang masuk melalui UART. Jika data diterima, program akan mencoba mengubah data byte menjadi string. Jika format data sesuai, yaitu "POT:", maka angka tersebut akan diambil dan ditampilkan di LCD. LCD akan dibersihkan terlebih dahulu sebelum menampilkan nilai baru untuk mencegah tampilan yang tumpang tindih.
Jika data yang diterima tidak sesuai format atau terjadi kesalahan saat decoding, maka layar LCD akan menampilkan pesan "ERROR" di baris pertama, dan baris kedua akan menunjukkan pesan kesalahan yang telah dipotong agar pas di layar. Informasi kesalahan ini juga dicetak ke terminal sebagai referensi debugging.
Sistem ini secara keseluruhan bekerja dengan cara mengubah data analog menjadi digital, mengirimkannya secara serial, dan menampilkannya secara visual di LCD. Mikrokontroler pertama berfungsi sebagai pembaca dan pengirim data potensiometer, sedangkan mikrokontroler kedua berfungsi menerima data dan menampilkannya.
Dengan pengiriman berkala dan format data yang konsisten, sistem ini memungkinkan pemantauan nilai analog secara real-time menggunakan antarmuka yang sederhana namun efektif.
4. Flowchart dan Listing Program [kembali]
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:<nilai>\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]
6. Kondisi [kembali]
Percobaan 4
Comments
Post a Comment