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

 

Keywords: Network-Controlled Robot, Raspberry Pi 5, Flask, HTTP, MJPEG, HC-SR04

 


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 Diagram Alir Program Utama

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 Diagram Alir Fungsi Camera Thread

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 Diagram Alir Kendali Dengan HTTP

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

https://canva.link/bxsmvycju3htdqt

Komentar

Postingan populer dari blog ini

SISTEM KONVEYOR OTOMATIS DENGAN SENSOR INFRARED DAN KONTROL MANUAL

Pompa Air Otomatis Berbasis ATMega8535

SISTEM PEMANTAUAN SUHU DAN KELEMBABAN PADA SUATU RUANGAN MENGGUNAKAN SENSOR DHT22 BERBASIS MIKROKONTROLLER ARDUINO UNO ATMEGA328P