MENGGERAKKAN RODA ROBOT BERDASARKAN GESTURE - TUTORIAL 13

 

LAPORAN PRAKTIKUM

MENGGERAKKAN RODA ROBOT BERDASARKAN GESTURE 

TUTORIAL 13

LAPORAN PRAKTIKUM LABORATORIUM MIKROKONTROLER II

 

 

 



 

 

Dosen Pengampu:
Dr. Samuel Beta K., Ing. Tech., M.T.

Disusun oleh:
Kelompok 1

06 - Bagas Agung Pramudya

RE-3A (4.34.22.0.06)

15 - M. Ajik Al-Khusain

RE-3A (4.34.22.0.16)

20 - Roytua Daud S.

RE-3A (4.34.22.0.22)

22 - Tiara Hande Dias K.

RE-3A (4.34.22.0.25)

 

PROGRAM STUDI TEKNOLOGI REKAYASA ELEKTRONIKA
JURUSAN TEKNIK ELEKTRO
POLITEKNIK NEGERI SEMARANG
2025

BAB I

PENDAHULUAN

1.1 Latar Belakang

Perkembangan teknologi robotika dan kecerdasan buatan telah mendorong terciptanya sistem interaktif berbasis visi komputer. Salah satu pendekatan yang populer adalah pemanfaatan gesture tangan sebagai input alami dalam sistem kendali. Dibandingkan kontrol konvensional seperti tombol dan joystick, gesture tangan menawarkan antarmuka yang lebih intuitif, fleksibel, dan bersifat non-kontak, sehingga cocok diterapkan dalam berbagai bidang, mulai dari robot asisten hingga sistem aksesibilitas.

Raspberry Pi sebagai mini komputer telah menjadi platform yang ideal untuk pengembangan sistem cerdas karena memiliki kemampuan pemrosesan yang cukup, port GPIO untuk kontrol perangkat keras, dan kompatibilitas dengan pustaka Python seperti OpenCV dan MediaPipe. Dengan kemampuan tersebut, Raspberry Pi dapat dimanfaatkan untuk mengolah citra dari kamera, mengenali pola gesture, dan menerjemahkannya menjadi sinyal kendali motor.

Pada praktikum ini, dilakukan perancangan sistem robot sederhana yang mampu bergerak maju, mundur, berbelok kiri dan kanan, serta berhenti, berdasarkan jumlah jari yang terdeteksi dari kamera menggunakan MediaPipe. Pustaka OpenCV digunakan untuk menangkap dan menampilkan video secara real-time, sedangkan RPi.GPIO digunakan untuk mengontrol motor melalui pin GPIO. Praktikum ini tidak hanya mengajarkan konsep pemrograman dan kendali motor, tetapi juga membuka wawasan mahasiswa terhadap aplikasi computer vision dalam otomasi sistem fisik.

1.2 Tujuan

Tujuan dari praktikum ini adalah:

1.    Mempelajari cara kerja integrasi MediaPipe dan OpenCV dalam pendeteksian gesture tangan.

2.    Mengembangkan program Python yang dapat mengenali jumlah jari dan mengubahnya menjadi perintah kendali motor.

3.    Mengimplementasikan sistem kendali robot berbasis Raspberry Pi dan GPIO.

4.    Mengamati performa sistem kendali gesture secara real-time da mahami dasar interaksi manusia–robot berbasis visual.

1.3 Rumusan Masalah

1.    Bagaimana sistem dapat mendeteksi gesture tangan secara real-time?

2.    Bagaimana cara menghitung jumlah jari dari hasil deteksi landmark tangan?

3.    Bagaimana sistem menerjemahkan jumlah jari menjadi sinyal pengendali motor?

4.    Bagaimana Raspberry Pi mengatur arah motor melalui pin GPIO?

5.    Apa saja tantangan dalam mendeteksi gesture dan mengendalikan robot secara bersamaan?

 


 

BAB II

TINJAUAN PUSTAKA

2.1 Raspberry Pi

Raspberry Pi merupakan komputer mini berbasis ARM yang populer di kalangan hobiis dan pengembang sistem tertanam karena ukurannya yang kecil, hemat daya, serta kemampuannya menjalankan sistem operasi Linux dan berbagai aplikasi. Raspberry Pi dilengkapi dengan pin GPIO (General Purpose Input Output) yang dapat digunakan untuk mengendalikan atau membaca perangkat eksternal seperti sensor, motor, LED, dan lainnya. Dalam praktikum ini, Raspberry Pi digunakan sebagai otak sistem yang bertugas memproses input dari kamera dan mengatur output berupa kendali arah motor melalui motor driver.

2.2 GPIO dan Motor Driver

GPIO adalah antarmuka digital pada Raspberry Pi yang dapat dikonfigurasi sebagai input atau output. Dengan menggunakan pustaka RPi.GPIO, pengguna dapat mengatur pin GPIO sebagai sinyal digital untuk mengontrol arah dan kecepatan motor. Untuk dapat mengendalikan motor DC, Raspberry Pi membutuhkan motor driver seperti L298N yang berfungsi sebagai penguat arus. Motor driver ini menerima sinyal dari GPIO dan meneruskannya ke motor sesuai dengan arah logika HIGH atau LOW yang diberikan. Empat pin GPIO digunakan untuk mengatur dua motor DC sehingga dapat bergerak maju, mundur, berbelok kiri, kanan, maupun berhenti.

2.3 OpenCV dan MediaPipe

OpenCV (Open Source Computer Vision) adalah pustaka pemrosesan citra digital dan visi komputer yang memungkinkan deteksi dan pelacakan objek, pengolahan gambar, dan banyak fungsi lainnya. Dalam praktikum ini, OpenCV digunakan untuk menangkap gambar dari kamera secara real-time dan mengubahnya menjadi format RGB yang dapat diproses oleh MediaPipe.

MediaPipe adalah framework dari Google yang dirancang untuk mengembangkan pipeline visi komputer berbasis AI. Salah satu fitur unggulannya adalah MediaPipe Hands, yang memungkinkan deteksi dan pelacakan posisi jari secara akurat dari sebuah tangan yang terdeteksi di kamera. Data dari MediaPipe digunakan untuk menghitung jumlah jari yang terangkat dan memetakannya menjadi logika perintah kontrol robot.

2.4 Gesture Recognition

Gesture recognition atau pengenalan isyarat tangan merupakan teknologi yang memungkinkan sistem mengenali gerakan tangan sebagai bentuk input. Dalam sistem ini, gesture yang dikenali berupa jumlah jari yang terlihat (1 sampai 5). Logika pengambilan keputusan sederhana digunakan untuk mengubah jumlah jari menjadi aksi tertentu, seperti bergerak maju jika satu jari terangkat, atau berhenti jika lima jari terangkat. Metode ini memberikan bentuk interaksi manusia dan robot yang alami tanpa memerlukan alat bantu tambahan seperti remote atau tombol.

2.5 Integrasi Sistem

Sistem pada praktikum ini menggabungkan antara input visual (kamera + MediaPipe), pemrosesan logika (Python + OpenCV), dan aktuasi fisik (motor driver + motor DC). Hal ini merupakan bentuk nyata dari sistem embedded vision, di mana visi komputer tidak hanya sekadar mendeteksi, tetapi juga menghasilkan aksi fisik secara langsung berdasarkan hasil pengolahan citra. Konsep ini menjadi dasar dari banyak teknologi modern seperti kendaraan otonom, robot pelayanan, dan smart interaction system.

 

 


 

BAB III

PERANCANGAN SISTEM

3.1 Alat dan Bahan

Perangkat keras dan lunak yang digunakan dalam praktikum ini antara lain:

  • Raspberry Pi 4 Model B
  • Kamera USB
  • 2 Motor DC dengan roda
  • Motor Driver (L298N)
  • Kabel jumper
  • Breadboard
  • Power bank (sebagai sumber daya motor)
  • Python 3
  • Library Python: OpenCV (cv2), MediaPipe, dan RPi.GPIO

3.2 Diagram Blok


Diagram blok di atas menunjukkan bahwa sistem terdiri dari tiga bagian utama. Input berupa gesture tangan dibaca oleh kamera dan dikirim ke Raspberry Pi. Proses dilakukan oleh program Python yang menggunakan MediaPipe dan OpenCV untuk mendeteksi jumlah jari. Output dari sistem berupa kendali arah motor berdasarkan jumlah jari yang terdeteksi.. Selanjutnya, data visual diproses oleh MediaPipe untuk mendeteksi landmark tangan dan menghitung jumlah jari. Output jumlah jari kemudian dikonversi oleh program Python menjadi sinyal kontrol motor, yang dikirimkan melalui pin GPIO ke motor driver dan akhirnya menggerakkan motor DC.

3.3 Diagram Alir

Diagram alir berikut menjelaskan alur kerja sistem secara umum:




3.4 Langkah-Langkah Praktikum

  1. Persiapkan Raspberry Pi yang telah terinstal sistem operasi, hubungkan dengan monitor dan keyboard, lalu login menggunakan username dan password default (biasanya 'pi' dan 'raspberry'). Setelah berhasil login, pastikan Raspberry Pi terkoneksi dengan jaringan internet.
  2. Pasang kamera USB pada port USB Raspberry Pi dan uji dengan aplikasi kamera sederhana (seperti fswebcam atau cheese).
  3. Hubungkan motor ke driver L298N, dan sambungkan pin input motor driver ke GPIO Raspberry Pi sesuai skema:
    • A1 → GPIO 17
    • A2 → GPIO 27
    • B1 → GPIO 22
    • B2 → GPIO 23
  4. Sambungkan suplai daya 5V eksternal (misalnya power bank) ke motor driver untuk memberi daya motor DC.
  5. Buka terminal, aktifkan virtual environment (jika ada), lalu instal pustaka:

pip install opencv-python mediapipe RPi.GPIO

  1. Buat file Python baru bernama gesture_motor.py dan tuliskan program utama:

import cv2

import mediapipe as mp

import time

import RPi.GPIO as GPIO

 

# Inisialisasi MediaPipe Hands

mp_hands = mp.solutions.hands

mp_draw = mp.solutions.drawing_utils

hands = mp_hands.Hands(max_num_hands=1, min_detection_confidence=0.7)

 

# Inisialisasi GPIO

GPIO.setmode(GPIO.BCM)

GPIO.setwarnings(False)

 

# Definisi pin motor

A1 = 17

A2 = 27

B1 = 22

B2 = 23

 

GPIO.setup(A1, GPIO.OUT)

GPIO.setup(A2, GPIO.OUT)

GPIO.setup(B1, GPIO.OUT)

GPIO.setup(B2, GPIO.OUT)

 

# Fungsi kontrol motor

def maju():

    GPIO.output(A1, GPIO.HIGH)

    GPIO.output(A2, GPIO.LOW)

    GPIO.output(B1, GPIO.HIGH)

    GPIO.output(B2, GPIO.LOW)

 

def mundur():

    GPIO.output(A1, GPIO.LOW)

    GPIO.output(A2, GPIO.HIGH)

    GPIO.output(B1, GPIO.LOW)

    GPIO.output(B2, GPIO.HIGH)

 

def belok_kiri():

    GPIO.output(A1, GPIO.LOW)

    GPIO.output(A2, GPIO.HIGH)

    GPIO.output(B1, GPIO.HIGH)

    GPIO.output(B2, GPIO.LOW)

 

def belok_kanan():

    GPIO.output(A1, GPIO.HIGH)

    GPIO.output(A2, GPIO.LOW)

    GPIO.output(B1, GPIO.LOW)

    GPIO.output(B2, GPIO.HIGH)

 

def berhenti():

    GPIO.output(A1, GPIO.LOW)

    GPIO.output(A2, GPIO.LOW)

    GPIO.output(B1, GPIO.LOW)

    GPIO.output(B2, GPIO.LOW)

 

# Inisialisasi VideoCapture

cap = cv2.VideoCapture(0)

 

def count_fingers(hand_landmarks):

    tips_ids = [4, 8, 12, 16, 20]

    fingers = []

 

    if hand_landmarks.landmark[tips_ids[0]].x < hand_landmarks.landmark[tips_ids[0] - 1].x:

        fingers.append(1)

    else:

        fingers.append(0)

 

    for i in range(1, 5):

        if hand_landmarks.landmark[tips_ids[i]].y < hand_landmarks.landmark[tips_ids[i] - 2].y:

            fingers.append(1)

        else:

            fingers.append(0)

 

    return sum(fingers)

 

while True:

    success, frame = cap.read()

    if not success:

        break

 

    frame = cv2.flip(frame, 1)

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

    results = hands.process(rgb_frame)

 

    if results.multi_hand_landmarks:

        for hand_landmarks in results.multi_hand_landmarks:

            mp_draw.draw_landmarks(frame, hand_landmarks, mp_hands.HAND_CONNECTIONS)

            total_fingers = count_fingers(hand_landmarks)

 

            cv2.putText(frame, f"Fingers: {total_fingers}", (10, 50),

                        cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)

 

            if total_fingers == 1:

                print("Maju")

                maju()

            elif total_fingers == 2:

                print("Mundur")

                mundur()

            elif total_fingers == 3:

                print("Belok Kiri")

                belok_kiri()

            elif total_fingers == 4:

                print("Belok Kanan")

                belok_kanan()

            elif total_fingers == 5:

                print("Berhenti")

                berhenti()

 

    cv2.imshow("Gesture Control", frame)

 

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

        break

 

berhenti()

GPIO.cleanup()

cap.release()

cv2.destroyAllWindows()

 

  1. Jalankan program dengan perintah:

python3 gesture_motor.py

  1. Uji coba dengan menunjukkan gesture tangan ke kamera:
    • 1 jari → motor bergerak maju
    • 2 jari → motor mundur
    • 3 jari → belok kiri
    • 4 jari → belok kanan
    • 5 jari → berhenti
  2. Hentikan program dengan menekan tombol q pada jendela tampilan video.
  3. Setelah selesai, bersihkan konfigurasi GPIO dengan GPIO.cleanup() untuk menghindari error pada pemanggilan berikutnya. dengan pustaka utama cv2, mediapipe, dan RPi.GPIO. Program dibagi dalam beberapa bagian utama yaitu inisialisasi pustaka dan pin GPIO, pemrosesan citra, penghitungan jumlah jari, pemetaan jumlah jari ke perintah motor, serta pengontrolan motor.

Kode program dituliskan dalam bentuk modular agar mudah dibaca dan diperluas. Fungsi seperti maju(), mundur(), belok_kiri(), belok_kanan(), dan berhenti() masing-masing mengatur kombinasi sinyal digital ke pin GPIO untuk mengatur arah gerak motor DC melalui motor driver.

Bagian utama program juga mencakup pengambilan video dari kamera, penggunaan MediaPipe untuk mendeteksi tangan, menghitung jari yang terbuka, serta melakukan pengambilan keputusan berbasis jumlah jari. Output juga ditampilkan secara visual melalui jendela OpenCV.


 

BAB IV

HASIL DAN PEMBAHASAN

4.1 Hasil Praktikum

Berdasarkan hasil pengujian sistem, diperoleh data sebagai berikut:

  • Sistem berhasil menampilkan video secara real-time dari kamera USB.
  • Deteksi gesture tangan menggunakan MediaPipe Hands berjalan stabil.
  • Sistem dapat membedakan jumlah jari yang terbuka dari 1 hingga 5.
  • Respon kendali motor sesuai dengan gesture:
    • 1 jari → motor bergerak maju
    • 2 jari → motor mundur
    • 3 jari → belok kiri
    • 4 jari → belok kanan
    • 5 jari → berhenti
  • Tampilan jumlah jari muncul pada layar secara real-time.
  • Fungsi GPIO.cleanup() berhasil mengakhiri proses tanpa error.

4.2 Pembahasan

Pada praktikum ini, sistem dibangun dengan menggabungkan deteksi gesture tangan menggunakan MediaPipe dan kendali motor melalui pin GPIO pada Raspberry Pi. Sistem membaca input dari kamera USB, memproses frame menggunakan OpenCV, dan mendeteksi posisi jari dengan MediaPipe Hands. Jumlah jari terbuka digunakan sebagai logika kendali gerak motor.

Setiap jumlah jari diasosiasikan dengan satu perintah arah gerak motor, sehingga pengguna dapat mengontrol robot hanya dengan membuka jari tertentu. Saat gesture dikenali, sistem mengaktifkan kombinasi sinyal pada pin GPIO untuk mengatur arah motor melalui driver L298N.

Deteksi gesture sangat bergantung pada pencahayaan, posisi tangan, dan stabilitas gerakan. Jika tangan berada dalam bayangan, terlalu dekat, atau terlalu jauh dari kamera, maka sistem cenderung gagal mendeteksi gesture secara akurat. Oleh karena itu, posisi tangan ideal berada pada jarak 30–50 cm dari kamera dengan pencahayaan cukup.

Respon motor cukup cepat, dan sistem dapat mengenali perubahan gesture dalam waktu kurang dari satu detik. Namun demikian, saat gesture terlalu cepat berubah, sistem bisa tertinggal satu langkah. Hal ini dapat diatasi dengan menambahkan penundaan atau filter smoothing.Fungsi GPIO.cleanup() yang dipanggil saat keluar dari program berguna untuk me-reset kondisi pin GPIO agar tidak terjadi error pada eksekusi berikutnya. Ini adalah praktik penting dalam penggunaan GPIO di Raspberry Pi.

BAB V

PENUTUP

5.1 Kesimpulan

Berdasarkan hasil praktikum yang telah dilakukan, dapat disimpulkan bahwa sistem berhasil mengimplementasikan kendali motor berdasarkan gesture tangan menggunakan Raspberry Pi. Dengan memanfaatkan MediaPipe, sistem mampu mendeteksi jumlah jari secara real-time dan akurat. Informasi jumlah jari yang terdeteksi kemudian digunakan sebagai input untuk menentukan arah gerak motor. Motor mampu merespon sesuai dengan perintah gesture yang diberikan, sehingga sistem berjalan sesuai dengan tujuan praktikum.

5.2 Tanya Jawab

1. Gimana caranya kalau kita mau sistem ini bisa baca dua tangan sekaligus? (Raka Ramadhana)

Jawaban:
Di program MediaPipe, kita tinggal ubah pengaturannya biar bisa deteksi dua tangan (max_num_hands=2). Tapi nanti programnya juga harus dibedain mana tangan kiri, mana kanan. Terus, tinggal kasih aturan baru, misalnya tangan kiri 2 jari dan tangan kanan 3 jari artinya robot putar balik. Jadi perlu logika yang lebih kompleks dari sebelumnya.

2. Apa dampaknya jika sistem gesture control ini diterapkan pada lingkungan dengan gangguan visual tinggi seperti latar belakang bergerak atau pencahayaan berkedip? (Andhika Surya-03)

Jawaban:
Lingkungan seperti itu dapat menyebabkan akurasi deteksi gesture menurun drastis. MediaPipe akan kesulitan membedakan kontur jari dari latar belakang, dan fluktuasi cahaya bisa menyebabkan landmark melompat atau tidak stabil. Solusinya adalah menambahkan preprocessing gambar (seperti thresholding atau segmentasi warna kulit), serta menggunakan latar belakang polos dan stabil untuk meningkatkan kontras visual gesture tangan.

3. Jika program gesture control ini diintegrasikan dengan komunikasi nirkabel (misalnya via WiFi atau Bluetooth), fitur tambahan apa yang paling relevan dan bagaimana strukturnya berubah? (Rizky Maulana- 19)

Jawaban:
Fitur tambahan yang relevan misalnya adalah pemantauan status motor dari jarak jauh, logging data gesture, atau remote override kontrol via aplikasi mobile. Struktur program harus mencakup komunikasi client-server, seperti socket atau MQTT. Program gesture tetap berjalan seperti biasa, tetapi setiap perintah juga dikirim sebagai data ke modul komunikasi atau server untuk pengolahan lanjutan.

4. Seandainya sistem ini digunakan pada robot dengan lebih dari dua roda atau motor servo, bagian mana dari program yang perlu dimodifikasi dan bagaimana logikanya diubah? (Bakhtiar Bimantoro-07)

Jawaban:
Bagian program yang harus diubah adalah fungsi kontrol motor (maju(), belok_kiri(), dll.). Untuk robot 4 roda, misalnya, semua pin output harus diatur serempak sesuai arah gerak. Untuk motor servo, kontrol PWM harus ditambahkan dan posisi sudut diatur berdasarkan gesture. Maka logika GPIO.output() diganti atau dilengkapi dengan PWM.start() dan PWM.ChangeDutyCycle().

5. Bandingkan efisiensi gesture control ini dengan metode pengendalian lainnya (seperti tombol fisik atau voice command) untuk sistem robotik. Dalam konteks apa gesture lebih unggul? (M. Zidaan F. - 17)

Jawaban:
Gesture control unggul pada situasi hands-free, non-kontak, dan lingkungan bising (di mana suara sulit dikenali). Namun, tombol fisik lebih andal dalam lingkungan buruk pencahayaan dan memiliki delay yang lebih rendah. Voice command unggul dalam aksesibilitas pengguna (misalnya untuk disabilitas). Gesture cocok untuk robot interaktif, edukasi, dan demonstrasi di lingkungan bersih dan terang.

 

 Untuk video selengkapnya dapat diakses melalui:
 https://youtu.be/EHIn1GXxyY4

Komentar

Postingan populer dari blog ini

PROTOTYPE SMART HOME DENGAN ESP32 BERBASIS INTERNET OF THINGS

IoT Health Monitoring System for Sports: Real-Time Heart Rate and Temperature Tracking

MONITORING PENETAS TELUR BERBASIS IoT