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

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