Laporan Akhir
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
Program ini terdiri dari dua bagian utama, yaitu bagian pengirim (TX) dan penerima (RX) yang saling berkomunikasi menggunakan protokol UART (Universal Asynchronous Receiver/Transmitter). Sistem ini digunakan untuk membaca nilai dari sebuah potensiometer, mengirimkan nilainya secara serial, lalu menampilkannya pada LCD 16x2 menggunakan komunikasi I2C.
Bagian Pengirim (TX):
Program pada bagian TX dimulai dengan inisialisasi pin ADC (Analog-to-Digital Converter) yang digunakan untuk membaca nilai dari potensiometer yang terhubung ke salah satu pin analog mikrokontroler (GPIO26). Nilai yang dibaca berupa data digital 16-bit dalam rentang 0 hingga 65535.
Selanjutnya, modul UART dikonfigurasi dengan baudrate 9600 dan menggunakan dua pin GPIO (TX dan RX) sebagai jalur komunikasi serial. Setiap 0,5 detik, mikrokontroler membaca nilai terbaru dari potensiometer, membungkus nilai tersebut dalam format string "POT:<nilai>\n"
agar mudah dikenali di sisi penerima, lalu mengirimkannya melalui jalur UART. Selain itu, nilai tersebut juga dicetak ke terminal serial (misalnya, Thonny IDE) sebagai alat bantu debugging.
Bagian Penerima (RX):
Pada sisi penerima, UART juga dikonfigurasikan dengan baudrate 9600 dan menggunakan pin yang sesuai untuk menerima data dari pengirim. Selain itu, jalur I2C diinisialisasi untuk menghubungkan mikrokontroler dengan modul LCD 16x2, yang digunakan untuk menampilkan nilai dari potensiometer.
Program kemudian masuk ke dalam loop utama di mana ia terus memeriksa apakah ada data masuk melalui UART. Ketika data diterima, program mencoba mendekode data dari format byte ke string. Jika data tersebut berformat "POT:<angka>"
, maka nilai angka akan diekstrak dan ditampilkan pada LCD. Sebelum menampilkan nilai baru, LCD akan dibersihkan terlebih dahulu untuk menghindari tampilan yang tumpang tindih.
Jika data yang diterima tidak sesuai format, atau terjadi kesalahan dalam proses decoding, maka program akan menampilkan pesan "ERROR" pada baris pertama LCD, dan pada baris kedua akan ditampilkan pesan kesalahan yang dipotong agar sesuai dengan ukuran layar LCD. Hal ini juga dicetak ke terminal untuk keperluan debugging.
Sistem ini bekerja dengan prinsip pengambilan data analog, pengolahan dan pengiriman data digital secara serial, serta penampilan data dalam bentuk visual di LCD. Mikrokontroler pertama bertugas sebagai pembaca potensiometer dan pengirim data, sedangkan mikrokontroler kedua bertugas sebagai penerima data dan penampil hasil.
Dengan interval pengiriman yang tetap dan format data yang konsisten, sistem ini memungkinkan pemantauan nilai analog secara real-time menggunakan interface sederhana dan 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
Komentar
Posting Komentar