RC CAR DENGAN GESTURE TANGAN

RC CAR DENGAN GESTURE TANGAN

KELAS RE-3D KELOMPOK D1 LABORATORIUM SISTEM TERBENAM

Agil Rifky Ramandhani1, Dzaky Abdurrahman Mubarok2, Muhammad Alfi Kirom3, Rakha Ramiro4, Yonanda Andriawan5

Program Studi Teknologi Rekayasa Elektronika Jurusan Teknik Elektro Politeknik Negeri Semarang 2025/2026
Jl. Prof. Soedarto, Tembalang, Kec, Tembalang, Kota Semarang, Jawa Tengah, 50275

ABSTRAK - Perkembangan teknologi Computer Vision dan Artificial Intelligence memungkinkan pengendalian perangkat elektronik dilakukan tanpa kontak fisik. Salah satu penerapannya adalah pengendalian robot bergerak menggunakan gestur tangan melalui kamera. Pada proyek ini dirancang sebuah RC Car berbasis Raspberry Pi 4 yang dikendalikan menggunakan pengenalan gestur tangan dengan bantuan pustaka MediaPipe dan OpenCV. Sistem terdiri atas dua bagian, yaitu Raspberry Pi sebagai server yang mengendalikan motor DC, buzzer, kamera, dan pengambilan foto melalui web server Flask, sedangkan komputer bertugas melakukan pendeteksian gestur tangan menggunakan webcam. Hasil deteksi dikirimkan melalui jaringan Wi-Fi menggunakan protokol HTTP menuju Raspberry Pi. Robot mampu bergerak maju, mundur, belok kanan, belok kiri, membunyikan klakson, berhenti, serta mengambil foto berdasarkan gestur tangan yang dikenali secara real-time. Berdasarkan hasil pengujian, sistem mampu bekerja dengan baik dan memberikan respons yang cepat terhadap perubahan gestur pengguna.

Kata Kunci: RC Car, Gesture Tangan, Raspberry Pi 4, MediaPipe, OpenCV, Flask.

I. PENDAHULUAN

    A. LATAR BELAKANG

Perkembangan teknologi robotika semakin pesat dengan adanya integrasi Computer Vision dan Artificial Intelligence. Salah satu teknologi yang banyak diterapkan adalah pengenalan gestur tangan sebagai media interaksi antara manusia dan robot. Metode ini memungkinkan pengguna mengendalikan perangkat tanpa menggunakan remote control maupun joystick sehingga lebih praktis dan intuitif.

MediaPipe merupakan salah satu framework yang mampu melakukan pendeteksian titik-titik tangan (hand landmark) secara real-time dengan tingkat akurasi yang tinggi. Dikombinasikan dengan OpenCV sebagai pengolah citra serta Raspberry Pi sebagai pengendali robot, sistem dapat mengenali berbagai bentuk gestur tangan untuk mengendalikan arah gerak robot.

Berdasarkan hal tersebut, pada praktikum ini dirancang sebuah RC Car berbasis Raspberry Pi 4 yang dikendalikan menggunakan gestur tangan melalui kamera. Sistem diharapkan mampu menjadi implementasi teknologi Computer Vision dalam bidang robotika bergerak.

    B. RUMUSAN MASALAH

  1. Bagaimana merancang RC Car berbasis Raspberry Pi 4 yang dapat dikendalikan melalui jaringan Wi-Fi?
  2. Bagaimana mengimplementasikan pendeteksian gestur tangan menggunakan MediaPipe?
  3. Bagaimana menghubungkan hasil pendeteksian gestur dengan pergerakan robot secara real-time?
  4. Bagaimana mengimplementasikan fitur tambahan berupa klakson dan pengambilan foto pada robot?

C. TUJUAN

  1. Merancang RC Car berbasis Raspberry Pi 4.
  2. Mengimplementasikan pengenalan gestur tangan menggunakan MediaPipe.
  3. Mengendalikan robot menggunakan komunikasi HTTP melalui Flask.
  4. Mengimplementasikan fitur streaming kamera, klakson, dan pengambilan foto secara otomatis. 

II. METODOLOGI

    Pembuatan prototype ini dilakukan melalui beberapa tahapan sebagai berikut:

    1. Studi Literatur

  • Mempelajari Raspberry Pi 4 sebagai pengendali robot.
  • Mempelajari framework Flask sebagai web server.
  • Mempelajari OpenCV untuk pengolahan citra digital.
  • Mempelajari MediaPipe Hands sebagai pendeteksi gestur tangan.
  • Mempelajari komunikasi HTTP menggunakan pustaka Requests.

    2. Perancangan Sistem

    Desain Hardware

    Merancang rangkaian yang terdiri atas:

  • Raspberry Pi 4
  • Modul RTKA
  • Driver Motor
  • Motor DC kanan dan kiri
  • Webcam
  • Buzzer Aktif
  • Battery
  • Laptop

    Desain Software

    Perangkat lunak dibagi menjadi dua program utama.

    Program Raspberry Pi

    Bertugas sebagai server menggunakan Flask yang menerima perintah dari komputer kemudian     mengendalikan:

  • Motor DC
  • Kamera
  • Buzzer
  • Penyimpanan foto
    Program Komputer

    Menggunakan OpenCV dan MediaPipe untuk:

  • Mengambil citra webcam.
  • Mendeteksi posisi tangan.
  • Menghitung jumlah jari.
  • Mengenali gestur tertentu.
  • Mengirimkan perintah ke Raspberry Pi melalui HTTP.

     3.      Pengujian

  • Respon gerakan robot.
  • Akurasi pengenalan gestur.
  • Streaming video.
  • Pengambilan foto.
  • Klakson.
  • Komunikasi jaringan Wi-Fi.

    4.     Penyusunan Laporan

    Menyusun laporan berdasarkan hasil perancangan, implementasi, dan pengujian sistem.

 

III. TINJAUAN PUSTAKA

    A. ALAT DAN BAHAN

    Peralatan yang digunakan antara lain:

  • Raspberry Pi 4
  • Webcam USB
  • Driver Motor
  • Dua Motor DC
  • Buzzer Aktif
  • RC Car Chassis
  • Laptop/PC
  • Wi-Fi Hotspot
  • OpenCV
  • MediaPipe
  • Flask
  • Requests

    B. DIAGRAM BLOK

    C. GAMBAR RANGKAIAN    


    D. GAMBAR PENGAWATAN

     


    E. DIAGRAM ALIR

    1. Program Pada Laptop    

    2. Program Pada RTKA    

    F. KODE PROGRAM

    1. Program pada Laptop

"""============================================================================

 Pemrogram      : Kelompok RE-3D/1

  1. 01-Agil Rifky Ramandani        NIM: 4.34.23.3.01

  2. 07-Dzaky Abdurrahman Mubarok   NIM: 4.34.23.3.07

  3. 13-Muhammad Alfi Kirom         NIM: 4.34.23.3.13

  4. 19-Rakha Ramiro                NIM: 4.34.23.3.19

  5. 25-Yonanda Andriawan           NIM: 4.34.23.3.25

 Tgl. Praktikum : Rabu, 10 Juni 2026

===============================================================================

 Proyek Akhir

 D1a-Request.py

 Program untuk mendeteksi gestur tangan secara real-time menggunakan

    MediaPipe dan OpenCV.

-------------------------------------------------------------------------------

 Komponen:

 - Laptop/PC

 - Webcam USB/Internal Camera

 - Raspberry Pi 4

 - Robot Mobile

 - Jaringan Wi-Fi

 - Pustaka OpenCV

 - Pustaka MediaPipe

 - Pustaka Requests

 

=========================================================================== """

import cv2

import mediapipe as mp

import requests

import time

import math

 

IP_PI = "192.168.137.125"

URL = f"http://{IP_PI}:5000/cmd"

 

mp_hands = mp.solutions.hands

hands = mp_hands.Hands(

    max_num_hands=1,

    min_detection_confidence=0.7,

    min_tracking_confidence=0.7

)

 

draw = mp.solutions.drawing_utils

 

cap = cv2.VideoCapture(0)

 

last_action = ""

last_time = 0

 

last_photo = 0

PHOTO_DELAY = 5

 

 

def send(action):

    global last_action, last_time

 

    # anti spam

    if action == last_action and time.time() - last_time < 0.3:

        return

 

    try:

        requests.get(URL, params={"action": action}, timeout=0.2)

        print("Kirim:", action)

 

        last_action = action

        last_time = time.time()

 

    except:

        pass

 

 

def distance(p1, p2):

    return math.sqrt(

        (p1.x - p2.x) ** 2 +

        (p1.y - p2.y) ** 2

    )

 

 

def count_fingers(hand):

    lm = hand.landmark

    count = 0

 

    # index, middle, ring, pinky

    tips = [8, 12, 16, 20]

 

    for tip in tips:

        if lm[tip].y < lm[tip - 2].y:

            count += 1

 

    # thumb

    if lm[4].x < lm[3].x:

        count += 1

 

    return count

 

 

while True:

    ret, frame = cap.read()

 

    if not ret:

        break

 

    frame = cv2.flip(frame, 1)

 

    rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

    result = hands.process(rgb)

 

    gesture = "stop"

 

    if result.multi_hand_landmarks:

 

        for handLms in result.multi_hand_landmarks:

 

            draw.draw_landmarks(

                frame,

                handLms,

                mp_hands.HAND_CONNECTIONS

            )

 

            lm = handLms.landmark

 

            jari = count_fingers(handLms)

 

            # =====================

            # FIST = STOP

            # =====================

 

            is_fist = (

                lm[8].y > lm[6].y and

                lm[12].y > lm[10].y and

                lm[16].y > lm[14].y and

                lm[20].y > lm[18].y

            )

 

            # =====================

            # AIR PINCH = PHOTO

            # =====================

 

            pinch_distance = distance(

                lm[4],   # thumb tip

                lm[8]    # index tip

            )

 

            is_pinch = pinch_distance < 0.07

 

            if is_fist:

 

                gesture = "stop"

 

            elif is_pinch:

 

                if time.time() - last_photo > PHOTO_DELAY:

                    gesture = "photo"

                    last_photo = time.time()

 

            elif jari == 1:

                gesture = "forward"

 

            elif jari == 2:

                gesture = "backward"

 

            elif jari == 3:

                gesture = "right"

 

            elif jari == 4:

                gesture = "left"

 

            elif jari == 5:

                gesture = "horn"

 

            send(gesture)

 

            # tampilkan nilai pinch

            cv2.putText(

                frame,

                f"Pinch:{pinch_distance:.3f}",

                (20, 80),

                cv2.FONT_HERSHEY_SIMPLEX,

                0.7,

                (0, 255, 0),

                2

            )

 

    else:

        gesture = "stop"

        send("stop")

 

    cv2.putText(

        frame,

        f"{gesture}",

        (20, 40),

        cv2.FONT_HERSHEY_SIMPLEX,

        1,

        (0, 255, 0),

        2

    )

 

    cv2.imshow("Robot Control", frame)

 

    if cv2.waitKey(1) & 0xFF == ord('q'):

        break

 

cap.release()

cv2.destroyAllWindows()

    2. Program pada RTKA

"""============================================================================

 Pemrogram      : Kelompok RE-3D/1

  1. 01-Agil Rifky Ramandani        NIM: 4.34.23.3.01

  2. 07-Dzaky Abdurrahman Mubarok   NIM: 4.34.23.3.07

  3. 13-Muhammad Alfi Kirom         NIM: 4.34.23.3.13

  4. 19-Rakha Ramiro                NIM: 4.34.23.3.19

  5. 25-Yonanda Andriawan           NIM: 4.34.23.3.25

 Tgl. Praktikum : Rabu, 10 Juni 2026

===============================================================================

 Proyek Akhir Lab. Sistem Terbenam

  D1a-main.py

-------------------------------------------------------------------------------

 Deskripsi:

    Program untuk mengendalikan robot bergerak menggunakan antarmuka web

    berbasis Flask.

-------------------------------------------------------------------------------

 Komponen:

 - Raspberry Pi 4

 - Kamera USB / Webcam

 - Driver Motor

 - 2x Motor DC

 - Buzzer Aktif

 - Catu Daya Robot

 - Jaringan Wi-Fi

 

=========================================================================== """

from flask import Flask, request, Response

from gpiozero import Motor, Buzzer

import cv2

import time

import os

 

app = Flask(__name__)

 

last_photo_time = 0

PHOTO_COOLDOWN = 5

 

# ===== GPIOZERO =====

 

motor_kanan = Motor(

    forward=13,

    backward=19

)

 

motor_kiri = Motor(

    forward=25,

    backward=26

)

 

buzzer = Buzzer(27)

 

# ===== MOTOR =====

 

def stop():

    motor_kanan.stop()

    motor_kiri.stop()

 

def forward():

    motor_kanan.forward()

    motor_kiri.forward()

 

def backward():

    motor_kanan.backward()

    motor_kiri.backward()

 

def left():

    motor_kanan.forward()

    motor_kiri.backward()

 

def right():

    motor_kanan.backward()

    motor_kiri.forward()

 

# ===== BUZZER =====

 

def horn():

    stop()

 

    buzzer.on()

    time.sleep(0.2)

    buzzer.off()

 

# ===== CAMERA =====

 

camera = cv2.VideoCapture(1, cv2.CAP_V4L2)

 

camera.set(cv2.CAP_PROP_FRAME_WIDTH, 320)

camera.set(cv2.CAP_PROP_FRAME_HEIGHT, 240)

 

 

def generate():

 

    while True:

 

        ret, frame = camera.read()

 

        if not ret:

            continue

 

        ret, buffer = cv2.imencode(

            '.jpg',

            frame,

            [int(cv2.IMWRITE_JPEG_QUALITY), 50]

        )

 

        frame = buffer.tobytes()

 

        yield (

            b'--frame\r\n'

            b'Content-Type: image/jpeg\r\n\r\n'

            + frame +

            b'\r\n'

        )

 

# ===== FOTO =====

 

def save_photo():

 

    global last_photo_time

 

    now = time.time()

 

    if now - last_photo_time < PHOTO_COOLDOWN:

        print("Foto cooldown")

        return

 

    ret, frame = camera.read()

 

    if ret:

 

        folder = "/home/pi/RE23D-01/ProyekAkhir/photos"

        os.makedirs(folder, exist_ok=True)

 

        filename = (

            f"{folder}/photo_{int(now)}.jpg"

        )

 

        cv2.imwrite(filename, frame)

 

        print("Foto disimpan:", filename)

 

        last_photo_time = now

 

# ===== ROUTE =====

 

@app.route('/')

def home():

    return "Robot Ready"

 

@app.route('/cmd')

def cmd():

 

    aksi = request.args.get("action")

 

    print("CMD:", aksi)

 

    if aksi == "forward":

        forward()

 

    elif aksi == "backward":

        backward()

 

    elif aksi == "left":

        left()

 

    elif aksi == "right":

        right()

 

    elif aksi == "horn":

        horn()

 

    elif aksi == "photo":

        save_photo()

 

    else:

        stop()

 

    return "OK"

 

@app.route('/video')

def video():

 

    return Response(

        generate(),

        mimetype='multipart/x-mixed-replace; boundary=frame'

    )

 

# ===== RUN =====

 

if __name__ == "__main__":

 

    try:

 

        app.run(

            host="0.0.0.0",

            port=5000,

            threaded=True

        )

 

    except KeyboardInterrupt:

 

        stop()

 

        motor_kanan.close()

        motor_kiri.close()

        buzzer.close()

 

        camera.release()

IV. HASIL DAN PEMBAHASAN

    A. CARA KERJA RANGKAIAN

Saat sistem dijalankan, Raspberry Pi berfungsi sebagai web server menggunakan Flask dan menunggu perintah yang dikirim dari komputer melalui jaringan Wi-Fi. Secara bersamaan, program pada komputer mengaktifkan webcam dan melakukan proses pendeteksian gestur tangan menggunakan MediaPipe.

Citra dari webcam diproses menggunakan OpenCV, kemudian MediaPipe mendeteksi posisi 21 titik landmark tangan. Berdasarkan posisi landmark tersebut, sistem menghitung jumlah jari yang terbuka dan menentukan jenis gestur yang dilakukan pengguna.

Apabila pengguna mengangkat satu jari, komputer mengirimkan perintah forward sehingga kedua motor DC bergerak maju. Dua jari akan menghasilkan perintah backward, tiga jari menghasilkan perintah right, sedangkan empat jari menghasilkan perintah left.

Ketika seluruh jari terbuka, sistem mengirimkan perintah horn sehingga buzzer aktif sebagai klakson. Sebaliknya, apabila tangan mengepal atau tidak ada tangan yang terdeteksi, sistem mengirimkan perintah stop sehingga kedua motor berhenti.

Selain itu, sistem juga mengenali gestur pinch, yaitu ketika ujung ibu jari dan telunjuk saling mendekat. Gestur ini digunakan untuk mengambil foto melalui kamera yang terpasang pada robot. Foto akan disimpan secara otomatis ke dalam folder penyimpanan Raspberry Pi dengan mekanisme cooldown selama lima detik agar tidak terjadi penyimpanan berulang.

Selama robot beroperasi, Raspberry Pi juga menyediakan layanan video streaming sehingga pengguna dapat memantau kondisi sekitar robot melalui browser secara real-time. Berdasarkan hasil pengujian, seluruh fitur seperti navigasi robot, streaming kamera, klakson, dan pengambilan foto berhasil bekerja sesuai dengan gestur tangan yang dikenali.

    B.    FOTO PROTOTYPE

V. SIMPULAN

Berdasarkan hasil perancangan dan pengujian, RC Car berbasis Raspberry Pi 4 berhasil dikendalikan menggunakan gestur tangan secara real-time. MediaPipe mampu mengenali berbagai gestur tangan dengan baik sehingga robot dapat bergerak maju, mundur, belok kanan, belok kiri, berhenti, membunyikan klakson, serta mengambil foto sesuai perintah pengguna. Komunikasi menggunakan protokol HTTP melalui Flask berjalan dengan baik pada jaringan Wi-Fi, sedangkan fitur video streaming mampu memberikan tampilan kondisi sekitar robot secara langsung. Sistem yang dikembangkan menunjukkan bahwa penerapan Computer Vision dapat menjadi alternatif antarmuka yang efektif dalam pengendalian robot bergerak.

VI. REFERENSI

Bradski, G. and Kaehler, A., 2008. Learning OpenCV: Computer Vision with the OpenCV Library. Sebastopol: O'Reilly Media.

Google, 2025. MediaPipe Documentation. Available at: https://ai.google.dev/edge/mediapipe [Diakses pada 30 June 2026].

OpenCV, 2025. OpenCV Documentation. Available at: https://docs.opencv.org [Diakses pada 30 June 2026].

Palachko, A., 2023. Flask Web Development. Sebastopol: O'Reilly Media.

Raspberry Pi Ltd., 2025. Raspberry Pi Documentation. Available at: https://www.raspberrypi.com/documentation/ [Diakses pada 30 June 2026].

VII. LAMPIRAN

    A.    LINK YOUTUBE : 

    B.    LINK PPT : https://canva.link/y1uuu2cgpwto7w9

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