SISTEM KENDALI ROBOT BERDASARKAN GERAKAN JARI TELUNJUK BERBASIS RASPBERRY PI 4 DAN DROIDCAM
SISTEM KENDALI ROBOT BERDASARKAN
GERAKAN JARI TELUNJUK BERBASIS
RASPBERRY PI 4 DAN DROIDCAM
Dosen Pengampu :
Dr. Samuel Beta K., Ing. Tech,
M.T.
Disusun
Oleh
Kelompok
4 :
1. Annas Ade Iskandar
RE-2C
4.34.23.2.03
2. Ganesha Keyzar Muhammad Al Faize
RE-2C 4.34.23.2.09
3. Muhammad Rizha Alfrendy
RE-2C
4.34.23.2.16
4. Tegar Bagas Ksatria Arghawana
RE-2C
4.34.23.2.23
PROGRAM STUDI TEKNOLOGI REKAYASA ELAKTRONIKA
JURUSAN TEKNIK ELEKTRO
POLITEKNIK NEGERI SEMARANG
2026
KATA PENGANTAR
Puji syukur kami panjatkan kepada Tuhan Yang Maha Esa
atas rahmat dan karunia-Nya, sehingga proyek tugas besar berjudul “Sistem
Kendali Robot Berdasarkan Gerakan Jari Telunjuk Berbasis Raspberry Pi 4 dan
Droidcam” dapat diselesaikan dengan baik. Proyek ini merupakan upaya kami dalam
mengaplikasikan prinsip-prinsip otomasi dan sistem kendali yang krusial bagi
perkembangan teknologi modern.
Sistem kendali robot ini dirancang menggunakan Raspberry
Pi 4, aplikasi DroidCam, dan algoritma pendeteksi tangan (MediaPipe)
untuk mendeteksi karakteristik arah jari telunjuk secara real-time.
Melalui integrasi mikrokontroler Raspberry Pi 4, aliran video nirkabel dari smartphone,
serta aktuator motor DC melalui driver L298N, sistem mampu mengarahkan
dan memindahkan robot sesuai dengan instruksi gestur manusia secara otomatis.
Keberhasilan proyek ini tentu tidak terlepas dari
bimbingan dan dukungan berbagai pihak. Oleh karena itu, kami mengucapkan terima
kasih yang sebesar-besarnya kepada dosen pengampu, serta kepada teman-teman
yang telah berkolaborasi dalam pengerjaan proyek ini. Semoga hasil dari proyek
tugas besar ini dapat memberikan manfaat, baik sebagai referensi bagi mahasiswa
lain maupun sebagai inspirasi untuk pengembangan teknologi interaksi
manusia-mesin cerdas di masa depan.
BAB
1
PENDAHULUAN
1.1 Latar Belakang
Perkembangan
pesat di era Revolusi Industri 4.0 menuntut berbagai sektor, khususnya otomasi
industri, untuk terus meningkatkan efisiensi operasional dan kualitas interaksi
antara manusia dengan mesin (Human-Machine Interface). Secara
konvensional, proses pengendalian robot atau kendaraan nirawak (Automated
Guided Vehicle/AGV) masih sangat mengandalkan perangkat keras fisik seperti
tuas kendali (joystick) atau remote control. Metode konvensional
ini dinilai memiliki beberapa keterbatasan, mulai dari jarak operasional yang
terbatas oleh panjang kabel atau jangkauan sinyal radio dasar, keausan komponen
mekanik pada perangkat pengendali, hingga kurangnya fleksibilitas ruang gerak
operator saat harus mengendalikan mesin.
Oleh
karena itu, transisi menuju sistem otomasi industri dan antarmuka mesin yang
lebih cerdas serta intuitif menjadi sebuah keharusan. Penggunaan teknologi Computer
Vision (Kecerdasan Visual) menghadirkan paradigma baru yang memungkinkan
mesin untuk "melihat" dan memahami perintah langsung dari bahasa
tubuh atau gestur manusia. Melalui pendekatan tanpa sentuh (contactless),
operator tidak lagi memerlukan perangkat tambahan atau sensor elektronik (wearable
device) yang melekat di tangan. Hal ini membuat proses pengendalian menjadi
jauh lebih ergonomis, praktis, dan dapat diaplikasikan pada lingkungan kerja
yang membutuhkan tingkat sterilitas atau keamanan tinggi.
Namun,
pengembangan sistem kendali visual ini tidak terlepas dari berbagai tantangan
teknis. Tantangan utama dalam perancangannya adalah bagaimana mensinkronkan
pembacaan aliran video dari sensor kamera secara real-time, pemrosesan
algoritma deteksi struktur sendi tangan (Hand Tracking), dan eksekusi
mekanisme pergerakan mekanik robot secara mulus. Dibutuhkan sebuah sistem
kendali terintegrasi yang tidak hanya mampu memproses beban komputasi data
visual yang besar dengan cepat, tetapi juga mampu meminimalisasi waktu tunda (delay)
komunikasi jaringan agar instruksi aktuasi yang diberikan kepada motor
penggerak tetap presisi.
Untuk
menjawab kebutuhan komputasi dan tantangan tersebut, Single Board Computer
(SBC) Raspberry Pi 4 menawarkan solusi arsitektur perangkat keras yang sangat
tangguh. Dengan kemampuan pemrosesan multi-core yang dimilikinya,
Raspberry Pi 4 mampu menjalankan algoritma kecerdasan buatan secara lokal (edge
computing). Selain itu, guna meningkatkan fleksibilitas dan mobilitas,
sistem ini mengandalkan kamera smartphone melalui aplikasi DroidCam yang
berfungsi sebagai IP Camera nirkabel. Pemanfaatan smartphone ini
memungkinkan ekstraksi nilai matriks koordinat jari telunjuk secara akurat
berkat kualitas lensa resolusi tinggi, sekaligus membebaskan sistem dari
batasan kabel fisik.
1.2 Tujuan
1. Merealisasikan purwarupa fisik sistem robot cerdas berbasis Raspberry Pi 4 yang terintegrasi dengan kamera smartphone (DroidCam).
2. Mengimplementasikan penggunaan library OpenCV dan MediaPipe dalam sistem pembacaan karakteristik objek (jari tangan) melalui aliran video nirkabel (wireless streaming) secara real-time.
3. Menerapkan prinsip-prinsip sistem kendali (control systems) untuk mengatur motor DC melalui driver motor secara akurat.
1.3 Rumusan Masalah
1. Bagaimana merancang dan membangun perangkat keras (hardware) sistem robot pengikut gestur menggunakan Raspberry Pi 4?
2. Bagaimana mengintegrasikan aplikasi DroidCam dan Computer Vision agar dapat mendeteksi keberadaan dan mengklasifikasikan arah jari telunjuk secara presisi melalui jaringan Wi-Fi?
3. Bagaimana menyusun algoritma pengendalian motor melalui driver L298N menggunakan bahasa pemrograman Python?
BAB II
TINJAUAN PUSTAKA
2.1
Raspberry
Pi 4
Gambar
2.1 Raspberry Pi 4
Raspberry
Pi 4 adalah komputer papan tunggal (Single Board Computer) berkinerja
tinggi yang memiliki prosesor Quad-core ARM Cortex-A72. Berbeda dengan
mikrokontroler biasa, Raspberry Pi 4 mampu menjalankan sistem operasi penuh dan
memiliki kapasitas RAM yang besar, menjadikannya sangat ideal untuk memproses
tugas-tugas berat seperti Computer Vision dan Kecerdasan Buatan (AI)
secara real-time.
2.2
DroidCam
DroidCam
adalah aplikasi yang memungkinkan smartphone berfungsi sebagai kamera
jaringan (IP Camera) nirkabel. Dalam proyek ini, kamera smartphone
menangkap frame video dan mengirimkannya melalui jaringan Wi-Fi lokal ke
Raspberry Pi. Keunggulan penggunaan DroidCam adalah fleksibilitas penempatan
kamera tanpa batasan kabel fisik, serta kualitas resolusi lensa smartphone
yang umumnya sangat baik.
2.3
Driver Motor L298N
Gambar
2.3 Driver Motor L298N
Modul
driver motor ganda (H-Bridge) yang digunakan untuk mengatur kecepatan
dan arah putaran motor DC penggerak roda robot. Modul ini menjadi jembatan
antara Raspberry Pi (yang beroperasi pada tegangan dan arus rendah) dengan
motor DC yang membutuhkan arus lebih tinggi dari baterai terpisah.
2.4
Motor DC
Gambar
2.4 Motor DC
Motor
DC adalah suatu perangkat aktuator elektromekanik yang berfungsi mengubah
energi listrik arus searah (Direct Current) menjadi energi mekanik
berupa gerak putaran. Prinsip kerja motor DC didasarkan pada prinsip
elektromagnetisme dan gaya Lorentz; ketika sebuah kumparan penghantar yang
dialiri arus listrik ditempatkan di dalam medan magnet, kumparan tersebut akan
mengalami gaya tolak-menolak dan tarik-menarik yang menghasilkan torsi sehingga
poros motor dapat berputar.
2.5
Open Cv dan MediaPipe
OpenCV
(Open Source Computer Vision Library) adalah perpustakaan perangkat
lunak yang ditujukan untuk pemrosesan gambar dinamis secara real-time.
MediaPipe adalah framework sumber terbuka buatan Google yang menyediakan
solusi Machine Learning siap pakai, salah satunya adalah Hand
Tracking yang mampu memetakan 21 titik persendian tangan (Landmarks) dengan
tingkat akurasi dan kecepatan yang sangat tinggi.
BAB III
PERANCANGAN ALAT
3.1
Daftar
Komponen
Komponen yang
digunakan dalam perancangan alat :
1.
1x
Raspberry Pi 4
2.
1x Smartphone
Android/iOS (Diinstal aplikasi DroidCam)
3.
2x Motor
DC
4.
1x Modul
Motor Driver L298N
3.2
Cara
Kerja
Sistem
ini beroperasi dengan memproses aliran video yang dikirimkan oleh smartphone
(DroidCam) melalui jaringan Wi-Fi ke Raspberry Pi secara terus-menerus. Proses
dimulai saat kamera mendeteksi adanya tangan manusia di dalam bingkai layar.
Algoritma MediaPipe kemudian memisahkan jari telunjuk dari jari-jari lainnya. Sistem
memverifikasi apakah jari tengah, manis, dan kelingking dalam keadaan mengepal
dengan mengukur jarak setiap ujung jari ke pergelangan tangan (bebas
orientasi). Jika syarat gestur "satu telunjuk" ini terpenuhi, program
akan menghitung vektor jarak dan arah dari pangkal jari telunjuk menuju
ujungnya. Arah vektor ini diterjemahkan menjadi empat perintah dasar: jika
telunjuk ke atas, maka instruksi "MAJU" dikirimkan ke pin GPIO
Raspberry Pi; jika ke bawah menjadi "MUNDUR"; jika ke kanan menjadi
"BELOK KANAN"; dan jika ke kiri menjadi "BELOK KIRI".
Perintah dari GPIO ini kemudian memicu Driver Motor L298N untuk memutar
roda DC sesuai arah yang diinstruksikan.
3.3
Diagram
Blok
Gambar
3.1 Diagram Blok Sistem
3.4
Flowchart
Gambar
3.2 Flowchart Sistem
3.5
Wiring
Gambar
3.3 Wiring Sistem
3.6
Skematik
Gambar
3.4 Skematik Sistem
3.7
Program
|
4
import cv2 5
import mediapipe as mp 6
import sys 7
import math 8
9
#
===================================================================== 10
# 1. KONFIGURASI UTAMA 11
#
===================================================================== 12
# IP Address sesuai dengan
DroidCam Anda 13
URL_DROIDCAM =
"http://192.168.137.144:4747/video" 14
15 # Ambang batas arah telunjuk (agar gerakan
tidak terlalu sensitif/bergetar) 16
THRESHOLD_ARAH = 0.05 17
18
#
===================================================================== 19
# 2. INISIALISASI GPIO
DRIVER ROBOT 20
#
===================================================================== 21
try: 22
from gpiozero import Robot 23
# Inisialisasi robot berdasarkan pin: 24 #
Motor Kiri -> IN1 (GPIO 17), IN2
(GPIO 18) 25 # Motor Kanan -> IN3 (GPIO 22), IN4 (GPIO
23) 26
robot = Robot(left=(17, 18), right=(22, 23)) 27
mode_hardware = True 28
print("✓ Hardware GPIO berhasil diaktifkan. Robot siap bergerak!") 29
except ImportError: 30
mode_hardware = False 31
print("! Perhatian: gpiozero tidak
terdeteksi. Berjalan dalam MODE SIMULASI (Hanya Visualisasi).") 32
33
#
===================================================================== 34
# 3. FUNGSI PEMBANTU
(GESTUR TELUNJUK - DIPERBARUI) 35
#
===================================================================== 36 def get_jarak(titik1, titik2): 37 """Menghitung jarak
Euclidean antara dua titik (Bebas Orientasi)""" 38
return math.hypot(titik2.x - titik1.x, titik2.y - titik1.y) 39
40
def
hitung_status_jari_kepalan(hand_landmarks): 41
wrist = hand_landmarks.landmark[0] #
Titik acuan: Pergelangan Tangan (Wrist) 42
43
# 1. Cek Telunjuk Lurus: Ujung (8) harus
lebih jauh ke pergelangan dibanding pangkalnya (5) 44
telunjuk_lurus =
get_jarak(hand_landmarks.landmark[8], wrist) >
get_jarak(hand_landmarks.landmark[5], wrist) 45
46
# 2. Cek Jari Lain Mengepal: Ujung jari
melipat masuk sehingga lebih dekat ke pergelangan dibanding pangkalnya 47
tengah_mengepal =
get_jarak(hand_landmarks.landmark[12], wrist) <
get_jarak(hand_landmarks.landmark[9], wrist) 48
manis_mengepal =
get_jarak(hand_landmarks.landmark[16], wrist) <
get_jarak(hand_landmarks.landmark[13], wrist) 49
kelingking_mengepal =
get_jarak(hand_landmarks.landmark[20], wrist) <
get_jarak(hand_landmarks.landmark[17], wrist) 50
51
# Kembalikan True jika telunjuk lurus DAN
ketiga jari lainnya mengepal 52
return telunjuk_lurus and tengah_mengepal
and manis_mengepal and kelingking_mengepal 53
54
def
hitung_orientasi_telunjuk(hand_landmarks, threshold_arah): 55 # Ambil koordinat pangkal (5) dan ujung
telunjuk (8) 56
x5, y5 = hand_landmarks.landmark[5].x, hand_landmarks.landmark[5].y 57
x8, y8 = hand_landmarks.landmark[8].x,
hand_landmarks.landmark[8].y 58
59
# Hitung selisih vektor arah 60
dx = x8 - x5 61
dy = y8 - y5 62
63 #
Cek arah dominan vertikal (Maju / Mundur) 64
if abs(dy) > abs(dx) and abs(dy) > threshold_arah: 65
return "MAJU" if dy < 0
else "MUNDUR" 66
67 # Cek arah dominan horizontal (Kanan / Kiri) 68
elif abs(dx) > abs(dy) and abs(dx) > threshold_arah: 69
return "BELOK KANAN" if dx
> 0 else "BELOK KIRI" 70
71
return "BERHENTI" 72
73
#
===================================================================== 74
# 4. INISIALISASI
MEDIAPIPE & KAMERA DROIDCAM 75
#
===================================================================== 76
mp_hands =
mp.solutions.hands 77
hands = mp_hands.Hands( 78
max_num_hands=1, # Cukup 1 tangan 79
min_detection_confidence=0.7, 80
min_tracking_confidence=0.7 81
) 82
mp_draw =
mp.solutions.drawing_utils 83
84
cap =
cv2.VideoCapture(URL_DROIDCAM) 85
86
# [ANTI-LAG OPTIMIZATION]
Membatasi buffer memori agar selalu membaca frame terbaru 87
cap.set(cv2.CAP_PROP_BUFFERSIZE,
1) 88
89
if not cap.isOpened(): 90 print("❌ ERROR: Gagal terhubung ke DroidCam!") 91 print("Pastikan HP Anda berada di
Wi-Fi yang sama dan IP Address sudah benar.") 92
sys.exit() 93
94
lebar_frame =
int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) 95
tinggi_frame =
int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) 96
97 print("\n--- PROGRAM KONTROL TELUNJUK
(FIXED) AKTIF ---") 98 print("Gunakan SATU JARI TELUNJUK ke
kamera.") 99 print("Atas = Maju | Bawah = Mundur |
Kanan = Belok Kanan | Kiri = Belok Kiri") 100print("Tekan tombol 'q' pada keyboard di
jendela video untuk berhenti.\n") 101 102#
===================================================================== 103# 5. LOOPING UTAMA (PROSES REAL-TIME) 104#
===================================================================== 105while True: 106 success, img = cap.read() 107 if not success: 108 continue 109 110 #
Balik gambar (mirror) agar arah gerakan tangan selaras dengan layar 111 img = cv2.flip(img, 1) 112 113 img_rgb = cv2.cvtColor(img,
cv2.COLOR_BGR2RGB) 114 results = hands.process(img_rgb) 115 116 status_aksi = "BERHENTI" 117 118 if results.multi_hand_landmarks: 119 for hand_landmarks in
results.multi_hand_landmarks: 120
mp_draw.draw_landmarks(img, hand_landmarks, mp_hands.HAND_CONNECTIONS) 121 122 # --- LOGIKA GESTUR
TELUNJUK BARU --- 123 if
hitung_status_jari_kepalan(hand_landmarks): 124 status_aksi =
hitung_orientasi_telunjuk(hand_landmarks, THRESHOLD_ARAH) 125 else: 126
status_aksi = "BERHENTI (Gunakan 1 Telunjuk)" 127
128
# Gambar panah merah pembaca arah di layar
untuk visualisasi 129 x5_abs =
int(hand_landmarks.landmark[5].x * lebar_frame) 130 y5_abs =
int(hand_landmarks.landmark[5].y * tinggi_frame) 131 x8_abs =
int(hand_landmarks.landmark[8].x * lebar_frame) 132 y8_abs =
int(hand_landmarks.landmark[8].y * tinggi_frame) 133 cv2.arrowedLine(img,
(x5_abs, y5_abs), (x8_abs, y8_abs), (0, 0, 255), 4, tipLength=0.3) 134 135 # --- EKSEKUSI
PERINTAH MOTOR --- 136 if mode_hardware: 137 if status_aksi
== "MAJU": 138
robot.forward() 139 elif status_aksi
== "MUNDUR": 140
robot.backward() 141
elif status_aksi == "BELOK KANAN": 142 robot.right() 143 elif status_aksi
== "BELOK KIRI": 144 robot.left() 145 else: 146 robot.stop() 147 else: 148
# PENGAMAN: Jika tangan tidak terdeteksi di layar 149 if mode_hardware: 150 robot.stop() 151 152 #
===================================================================== 153 # 6. VISUALISASI ANTARMUKA
(GUI) 154 #
===================================================================== 155 # Menampilkan teks status
perintah aktif 156 cv2.putText(img,
f"STATUS: {status_aksi}", (20, 50), cv2.FONT_HERSHEY_SIMPLEX, 1,
(0, 255, 0), 3) 157 158 cv2.imshow("Robot
Index-Finger System", img) 159 160 # Tekan 'q' untuk keluar 161 if cv2.waitKey(1) & 0xFF
== ord('q'): 162 break 163 164#
===================================================================== 165# 7. MEMBERSIHKAN SISTEM (CLOSING) 166#
===================================================================== 167if mode_hardware: 168 robot.stop() 169 170cap.release() 171cv2.destroyAllWindows() 172print("Program ditutup dengan
sukses.") |
BAB IV
KESIMPULAN
Kesimpulan dari proyek ini adalah berhasilnya perancangan
purwarupa sistem otomasi robot yang dikendalikan murni menggunakan interaksi
visual gestur tangan manusia secara nirkabel (wireless). Dalam
pengoperasiannya, Raspberry Pi 4 bertindak sebagai pengendali utama (master
controller) yang memproses frame gambar dari kamera smartphone
(via DroidCam), menjalankan algoritma AI MediaPipe secara real-time, dan
secara simultan menggerakkan roda aktuator.
Penggunaan logika komputasi berbasis titik ordinat dan
kalkulasi jarak Euclidean terbukti efektif dalam meminimalisasi kesalahan
pembacaan orientasi jari tangan meskipun tangan diputar ke berbagai sudut.
Pemilihan DroidCam sebagai kamera juga membuktikan bahwa integrasi komunikasi Internet
of Things (IoT) pada jaringan Wi-Fi lokal dapat berjalan lancar tanpa
mengalami kendala delay berarti setelah dilakukan optimasi buffer.
Secara keseluruhan, implementasi sistem interaksi manusia dan mesin ini menjadi
solusi inovatif untuk mengontrol pergerakan robot tanpa kontak fisik maupun
kabel.
BAB V
LAMPIRAN
6.1
Link
PPT
6.2
Link
YouTube
Komentar
Posting Komentar