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
- 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.
- Pasang
kamera USB pada port USB Raspberry Pi dan uji dengan aplikasi kamera
sederhana (seperti fswebcam atau cheese).
- 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
- Sambungkan
suplai daya 5V eksternal (misalnya power bank) ke motor driver untuk
memberi daya motor DC.
- Buka
terminal, aktifkan virtual environment (jika ada), lalu instal pustaka:
pip
install opencv-python mediapipe RPi.GPIO
- 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()
- Jalankan
program dengan perintah:
python3
gesture_motor.py
- 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
- Hentikan
program dengan menekan tombol q pada jendela tampilan video.
- 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.
Komentar
Posting Komentar