PROTOTIPE ROBOT BERODA UNTUK SIMULASI ALAT BANTU DIFABEL BERBASIS GESTUR WAJAH
PROTOTIPE
ROBOT BERODA UNTUK SIMULASI ALAT BANTU DIFABEL BERBASIS GESTUR WAJAH
KELAS
RE3-D KELOMPOK 2 LABORATORIUM SISTEM TERBENAM
Elsa Sukma Hapsari¹, Rif'at Sungkar², Alandra Surya Seta Santosa³, Muhammad Iqbal Ramdhani⁴
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 - Penderita kelumpuhan dari leher ke
bawah (tetraplegia) mengalami kesulitan mengoperasikan alat bantu mobilitas
konvensional karena hilangnya fungsi anggota gerak. Proyek ini merancang
prototipe robot beroda yang dikendalikan melalui gestur wajah sebagai simulasi
awal alat bantu mobilitas difabel, mengadaptasi konsep antarmuka non-manual yang
pernah diterapkan pada kursi roda Stephen Hawking. Sistem terdiri atas dua
bagian: laptop yang melakukan pendeteksian landmark wajah menggunakan MediaPipe
Face Mesh dan OpenCV, serta Raspberry Pi yang menerima perintah melalui
protokol UDP untuk menggerakkan dua motor DC lewat driver L298N Mini. Gestur
mulut terbuka, senyum melebar, dan gerakan menoleh kepala diterjemahkan menjadi
perintah maju, mundur, belok kanan, dan belok kiri. Sensor ultrasonik HC-SR04
ditambahkan sebagai pengaman mandiri yang menghentikan robot secara otomatis
apabila mendeteksi halangan pada jarak kritis 20 cm. Pengujian menunjukkan
robot mampu merespons gestur wajah pengguna secara real-time dengan latensi
rendah melalui jaringan Wi-Fi lokal.
Kata Kunci: Robot Beroda, Gestur Wajah, Raspberry
Pi, MediaPipe Face Mesh, UDP, Alat Bantu Difabel.
I. PENDAHULUAN
A. LATAR BELAKANG
Penderita kelumpuhan dari leher ke bawah tidak mampu mengoperasikan alat bantu mobilitas konvensional karena kehilangan fungsi anggota gerak. Sebagai solusi, proyek ini memanfaatkan otot wajah dan gerakan kepala yang masih berfungsi normal sebagai kendali alternatif tanpa tangan. Mengadaptasi konsep kursi roda Stephen Hawking, pengolahan citra dilakukan pada laptop di depan pengguna untuk efisiensi beban komputasi robot. Untuk mengantisipasi risiko bertabrakan dengan objek, sistem dilengkapi sensor ultrasonik sebagai pengaman mandiri yang otomatis menghentikan robot jika terdapat halangan pada jarak kritis 20 cm.
Pendekatan ini dipilih karena sebagian besar antarmuka kendali robot yang sudah ada, seperti joystick atau gestur tangan, tetap mensyaratkan fungsi motorik anggota gerak yang masih baik. Padahal, pada kasus kelumpuhan total anggota gerak, otot wajah dan leher sering kali menjadi bagian tubuh yang masih dapat digerakkan secara sadar. Oleh karena itu, prototipe ini disusun sebagai simulasi awal untuk menguji kelayakan gestur wajah sebagai media kendali alat bantu mobilitas sebelum diterapkan pada perangkat yang sesungguhnya.
B. RUMUSAN MASALAH
1. Bagaimana
merancang robot beroda berbasis Raspberry Pi yang dapat dikendalikan melalui jaringan tanpa menggunakan tangan?
2. Bagaimana mengimplementasikan pendeteksian gestur wajah menggunakan MediaPipe Face Mesh?
3. Bagaimana menerjemahkan rasio jarak antar-landmark wajah menjadi perintah gerak robot secara real-time?
4. Bagaimana menambahkan mekanisme pengaman mandiri berbasis sensor jarak agar robot berhent otomatis saat mendekati halangan?
C. TUJUAN
1. Merancang prototipe robot beroda berbasis Raspberry Pi sebagai simulasi alat bantu mobilitas difabel.
2. Mengimplementasikan pendeteksian gestur wajah menggunakan MediaPipe Face Mesh dan OpenCV.
3. Mengendalikan robot menggunakan komunikasi UDP antara laptop dan Raspberry Pi.
4. Mengimplementasikan fitur pengaman mandiri menggunakan sensor ultrasonik HC-SR04.
II. METODOLOGI
Pembuatan prototipe ini dilakukan melalui beberapa tahapan sebagai berikut:
A. Studi Literatur
- Mempelajari Raspberry Pi sebagai pengendali robot
- Mempelajari komunikasi UDP menggunakan pustaka socket
- Mempelajari OpenCV untuk pengolahan citra digital
- Mempelajari MediaPipe Face Mesh sebagai pendeteksi landmark wajah
- Mempelajari kelas robot, distancesensor, dan buzzer pada pustaka gpiozero
B. Perancangan Sistem
Desain Hardware
- Merancang rangkaian
- Raspberry Pi
- Driver Motor L298N Mini
- 2x Motor DC
- Sensor Ultrasonik HCSR-04
- Buzzer Aktif
- Baterai Robot
- Kamera Laptop
Desain Software
Program dibagi
menjadi dua.
Program Laptop
(Pengirim)
Bertugas mengambil citra dari
kamera laptop, mendeteksi landmark wajah dengan MediaPipe Face Mesh, menghitung rasio
jarak antar-titik wajah, menentukan perintah gerak, lalu mengirimkannya ke
Raspberry Pi melalui protokol UDP.
Program Raspberry Pi
(Penerima)
Bertugas menerima
perintah UDP dari laptop dan menerjemahkannya menjadi perintah gerak pada dua
motor DC melalui driver L298N Mini menggunakan kelas Robot pada pustaka
gpiozero.
C. Pengujian
- Respon gerakan robot terhadap gestur wajah
- Akurasi pendeteksian landmark wajah pada berbagai kondisi pencahayaan
- Latensi pengiriman perintah melalui jaringan UDP
- Fungsi pengaman mandiri sensor ultrasonik
D. Penyusunan Laporan
Menyusun laporan
berdasarkan hasil perancangan, implementasi, dan pengujian sistem.
III. TINJAUAN PUSTAKA
A. Raspberry Pi 4
B. Driver Motor L298N Mini
C. Motor DC
D. Sensor Ultrasonik HC-SR04
E. Buzzer Aktif
F. Robot Modul Pembelajaran RTKA
G. Laptop
H. Jaringan Wifi
I. Kabel Jumper
J. BLOK DIAGRAM
![]() |
| Gambar 3.10. Blok Diagram Sistem |
K. GAMBAR RANGKAIAN
![]() |
| Gambar 3.11. Gambar Rangkaian |
L. DIAGRAM PENGAWATAN
![]() |
| Gambar 3.12. Gambar Pengawatan |
M. DIAGRAM ALIR
1. Diagram Alir Program Pada Laptop
![]() |
| Gambar 3.13. Diagram Alir Program Pengirim |
2. Diagram Alir Program Pada
Raspberry Pi
![]() |
| Gambar 3.14. Diagram Alir Program Penerima |
N. KODE PROGRAM
1. Program pada Laptop
(RaspberryPi-Sender.py)
"""============================================================================ Pemrogram : Kelompok RE-3D/2 1. 02-Alandra Surya Seta Santosa NIM: 4.34.23.3.02 2. 08-Elsa Sukma Hapsari NIM: 4.34.23.3.08 3. 14-Muhammad Iqbal Ramdhani NIM: 4.34.23.3.14 4. 20-Rif'at Sungkar NIM: 4.34.23.3.20 Tgl. Praktikum : Rabu, 10 Juni 2026 =============================================================================== Proyek07-Robot UDP RaspberryPi-Sender.py Program untuk mengendalikan robot via perintah UDP dari laptop dengan sensor jarak HC-SR04 dan buzzer otomatis ------------------------------------------------------------------------------- Materi baru: - Komunikasi jaringan UDP (socket) - Kelas Robot pada pustaka gpiozero - Kelas DistanceSensor pada pustaka gpiozero - Kelas Buzzer pada pustaka gpiozero - Kendali motor DC via driver L298N Mini ------------------------------------------------------------------------------- Komponen: - 1x Raspberry Pi - 1x L298N Mini - 2x Motor DC - 1x Sensor HC-SR04 - 1x Buzzer ===========================================================================""" import cv2 import mediapipe as mp import math import socket # === Konfigurasi Jaringan UDP === RASPI_IP = "192.168.137.68" PORT = 5005 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # === Inisialisasi MediaPipe === mp_face_mesh = mp.solutions.face_mesh mp_drawing = mp.solutions.drawing_utils mp_drawing_styles = mp.solutions.drawing_styles face_mesh = mp_face_mesh.FaceMesh(max_num_faces=1, refine_landmarks=True) cap = cv2.VideoCapture(0) print("=========================================================") print(" Program Pengirim Kendali Wajah - Standar IP Aktif ") print(" Tekan tombol 'Q' pada jendela kamera untuk keluar. ") print("=========================================================") # === Program Utama === while cap.isOpened(): ret, frame = cap.read() if not ret: print("Gagal memuat kamera laptop!") break # 1. Mirror frame agar tampilan natural frame = cv2.flip(frame, 1) h, w, _ = frame.shape rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) results = face_mesh.process(rgb_frame) # Nilai default tiap frame rasio_mulut = 0.0 rasio_senyum = 0.0 rasio_menoleh = 1.0 status_perintah = "STOP" if results.multi_face_landmarks: for face_landmarks in results.multi_face_landmarks: # Gambar jaring titik wajah di layar mp_drawing.draw_landmarks( image=frame, landmark_list=face_landmarks, connections=mp_face_mesh.FACEMESH_TESSELATION, landmark_drawing_spec=None, connection_drawing_spec=mp_drawing_styles.get_default_face_mesh_tesselation_style() ) landmarks = face_landmarks.landmark # Fungsi jarak 3D (untuk mulut & senyum) def hitung_jarak_3d(p1, p2): return math.sqrt( (landmarks[p1].x - landmarks[p2].x) ** 2 + (landmarks[p1].y - landmarks[p2].y) ** 2 + (landmarks[p1].z - landmarks[p2].z) ** 2 ) # Fungsi jarak 2D (untuk menoleh) def hitung_jarak_2d(p1, p2): return math.sqrt( (landmarks[p1].x - landmarks[p2].x) ** 2 + (landmarks[p1].y - landmarks[p2].y) ** 2 ) # A. Lebar wajah sebagai referensi normalisasi lebar_wajah = hitung_jarak_3d(234, 454) # B. Rasio mulut terbuka -> perintah MAJU jarak_mulut_v = hitung_jarak_3d(13, 14) rasio_mulut = jarak_mulut_v / lebar_wajah # C. Rasio senyum melebar -> perintah MUNDUR jarak_bibir_h = hitung_jarak_3d(61, 291) rasio_senyum = jarak_bibir_h / lebar_wajah # D. Rasio menoleh -> perintah KANAN / KIRI jarak_hidung_ke_kanan = hitung_jarak_2d(1, 234) jarak_hidung_ke_kiri = hitung_jarak_2d(1, 454) rasio_menoleh = jarak_hidung_ke_kanan / jarak_hidung_ke_kiri # Evaluasi threshold -> tentukan perintah if rasio_mulut > 0.19: status_perintah = "MAJU" elif rasio_senyum > 0.4: status_perintah = "MUNDUR" elif rasio_menoleh < 0.585: status_perintah = "BELOK KIRI" elif rasio_menoleh > 2.3: status_perintah = "BELOK KANAN" else: status_perintah = "STOP" # Terjemahkan status ke teks display & teks UDP display_map = { "MAJU" : "MAJU", "MUNDUR" : "MUNDUR", "BELOK KANAN": "BELOK MELENGKUNG KANAN", "BELOK KIRI" : "BELOK MELENGKUNG KIRI", } display_text = display_map.get(status_perintah, "BERHENTI") # Tampilkan status di jendela kamera cv2.putText(frame, f"STATUS : {display_text}", (30, 60), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 0, 255), 2) # Kirim perintah ke Raspberry Pi via UDP sock.sendto(display_text.encode(), (RASPI_IP, PORT)) # Tampilkan frame cv2.imshow('Kalibrasi Monitor Wajah', frame) # Tekan 'q' untuk keluar if cv2.waitKey(1) & 0xFF == ord('q'): break # === Shutdown === cap.release() cv2.destroyAllWindows() sock.close() print("Program monitor dihentikan.")
2. Program pada Raspberry Pi (RaspberryPi-Projek-Akhir.py)
"""============================================================================ Pemrogram : Kelompok RE-3D/2 1. 02-Alandra Surya Seta Santosa NIM: 4.34.23.3.02 2. 08-Elsa Sukma Hapsari NIM: 4.34.23.3.08 3. 14-Muhammad Iqbal Ramdhani NIM: 4.34.23.3.14 4. 20-Rif'at Sungkar NIM: 4.34.23.3.20 Tgl. Praktikum : Rabu, 12 Juni 2026 =============================================================================== Proyek07-Projek-Akhir RaspberryPi-Raspberry.py Program untuk mengendalikan robot via perintah UDP dari laptop ------------------------------------------------------------------------------- Materi baru: - Komunikasi jaringan UDP (socket) - Kelas Robot pada pustaka gpiozero - Kelas Buzzer pada pustaka gpiozero - Kendali motor DC via driver L298N Mini ------------------------------------------------------------------------------- Komponen: - 1x Raspberry Pi - 1x L298N Mini - 2x Motor DC - 1x Buzzer ===========================================================================""" # === Pustaka === import socket from gpiozero import Robot, Buzzer # === Inisialisasi Hardware === robot = Robot(left=(22, 23), right=(24, 25)) # Ganti angka 12 di bawah ini dengan pin GPIO yang kamu hubungkan ke Buzzer (+) buzzer = Buzzer(12) # === Konfigurasi Jaringan === UDP_IP = "0.0.0.0" UDP_PORT = 5005 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.bind((UDP_IP, UDP_PORT)) print("=========================================================") print(f" Raspberry Pi + L298N Mini Siap Mengendalikan Robot! ") print(f" Menunggu perintah wajah di port {UDP_PORT}... ") print("=========================================================") # Variabel pembantu untuk mencatat status terakhir buzzer agar tidak memicu fungsi .blink() berulang-ulang buzzer_sedang_aktif = False # === Program Utama === try: while True: data, addr = sock.recvfrom(1024) perintah = data.decode() print(f"Instruksi -> [ {perintah} ]") if perintah == "MAJU": if buzzer_sedang_aktif: buzzer.off() buzzer_sedang_aktif = False robot.forward(speed=1.0) elif perintah == "MUNDUR": robot.backward(speed=1.0) if not buzzer_sedang_aktif: buzzer.blink(on_time=0.4, off_time=0.15, n=None, background=True) buzzer_sedang_aktif = True elif perintah == "BELOK MELENGKUNG KANAN": if buzzer_sedang_aktif: buzzer.off() buzzer_sedang_aktif = False robot.forward(speed=1.0, curve_right=0.7) elif perintah == "BELOK MELENGKUNG KIRI": if buzzer_sedang_aktif: buzzer.off() buzzer_sedang_aktif = False robot.forward(speed=1.0, curve_left=0.7) elif perintah == "BERHENTI": if buzzer_sedang_aktif: buzzer.off() buzzer_sedang_aktif = False robot.stop() except KeyboardInterrupt: print("\nMematikan sistem robot secara aman...") finally: robot.stop() buzzer.off() sock.close() print("Program Raspberry Pi selesai.")
O. CARA KERJA RANGKAIAN
Saat sistem dijalankan,
Raspberry Pi menjalankan program penerima yang menunggu perintah UDP pada port
5005, sementara laptop mengaktifkan kamera laptop dan menjalankan MediaPipe Face Mesh
untuk mendeteksi 468 titik landmark wajah pengguna secara real-time.
Setiap frame, sistem
menghitung lebar wajah sebagai referensi normalisasi menggunakan jarak antara
titik pipi kiri dan kanan. Nilai ini digunakan untuk menormalkan tiga rasio
jarak lain: rasio bukaan mulut (titik bibir atas-bawah), rasio lebar senyum
(titik sudut bibir kiri-kanan), dan rasio menoleh (perbandingan jarak hidung
terhadap kedua sisi wajah).
Apabila rasio bukaan
mulut melebihi ambang batas tertentu, sistem mengirimkan perintah MAJU. Apabila
rasio senyum melebar melebihi ambangnya, perintah yang dikirim adalah MUNDUR.
Gerakan menoleh ke kiri atau ke kanan yang mengubah rasio jarak hidung terhadap
sisi wajah akan menghasilkan perintah BELOK KIRI atau BELOK KANAN. Jika tidak
ada gestur yang terdeteksi melewati ambang batas, sistem mengirimkan perintah
BERHENTI.
Perintah tersebut dikirim
melalui socket UDP ke alamat IP Raspberry Pi. Pada sisi penerima, Raspberry Pi
membaca data yang masuk lalu memetakannya ke fungsi gerak pada objek Robot dari
pustaka gpiozero, yang mengatur arah putaran dua motor DC melalui driver L298N
Mini. Perintah belok diimplementasikan sebagai gerak melengkung dengan
parameter curve_left/curve_right agar pergerakan robot lebih halus dibanding
belok di tempat.
Sebagai lapisan
keselamatan tambahan, sensor ultrasonik HC-SR04 memantau jarak robot terhadap
objek di depannya. Apabila jarak yang terukur berada di bawah ambang kritis 20
cm, robot akan dihentikan secara otomatis tanpa bergantung pada perintah dari
laptop, sehingga risiko tabrakan dapat diminimalkan meskipun pengguna masih
memberikan gestur gerak maju.
Berdasarkan hasil
pengujian, sistem mampu menerjemahkan gestur wajah menjadi perintah gerak robot
dengan respons yang cukup cepat pada jaringan Wi-Fi lokal, meskipun akurasi
deteksi gestur dipengaruhi oleh kondisi pencahayaan dan sudut kamera terhadap
wajah pengguna.
P. FOTO PROTOTIPE
![]() |
| Gambar 3.15. Modul Robot RTKA |
V. REFERENSI
Google, 2025. MediaPipe
Face Landmarker Documentation. Tersedia di: https://ai.google.dev/edge/mediapipe
[Diakses pada 1 Juli 2026].
OpenCV, 2025. OpenCV
Documentation. Tersedia di: https://docs.opencv.org [Diakses pada 1 Juli 2026].
Raspberry Pi Ltd., 2025.
Raspberry Pi Documentation. Tersedia di:
https://www.raspberrypi.com/documentation/ [Diakses pada 1 Juli 2026].
gpiozero, 2025. gpiozero
Documentation. Tersedia di: https://gpiozero.readthedocs.io [Diakses pada 1
Juli 2026].
Bradski, G. dan Kaehler,
A., 2008. Learning OpenCV: Computer Vision with the OpenCV Library. Sebastopol:
O'Reilly Media.
VI. LAMPIRAN
A. LINK PPT : https://canva.link/pbu0p0nqzslp5d6
B. LINK YOUTUBE : https://youtu.be/M2khdbWeyjM?si=_SwmGMik4HLmigEY
.jpeg)
.jpeg)

.png)


Komentar
Posting Komentar