Part III – Mengendalikan Robot Arm Menggunakan Python
1 Agustus 2026 · Kodea Robotics Learning Series · Part III
Mengendalikan Robot Arm Menggunakan Python
Kendalikan Robot Anda Langsung dari Komputer
Robot yang hanya bergerak otomatis memang menarik. Namun, kemampuan untuk mengendalikan robot secara langsung dari komputer merupakan langkah penting untuk memahami konsep Industrial Robotics, otomasi, dan Artificial Intelligence.
Pada Part III ini, kita akan menghubungkan Python dengan Arduino Nano menggunakan komunikasi serial. Setiap input dari keyboard akan diterjemahkan menjadi perintah yang dikirim ke Arduino sehingga Robot Arm dapat dikendalikan secara langsung dan responsif.
Pendahuluan
Pada bagian sebelumnya, Robot Arm telah berhasil dikalibrasi dan menjalankan program menggunakan Arduino Nano.
Pada Part III, kita akan membuat komputer menjadi pengendali Robot Arm menggunakan Python.
Komunikasi antara Python dan Arduino dilakukan melalui koneksi serial menggunakan library PySerial. Sementara itu, library pynput digunakan untuk membaca input keyboard.
Materi yang akan dipelajari meliputi:
- Home Position
- Auto Sequence
- Keyboard Event
- Multithreading
- Komunikasi Serial
- Pengendalian Servo dari komputer
Konsep-konsep tersebut menjadi dasar sebelum memasuki tahap yang lebih lanjut seperti Computer Vision, OpenCV, dan YOLO Object Detection.
Pada tahap tersebut, Robot Arm nantinya dapat dikembangkan agar mampu mengenali objek menggunakan kamera dan mengambil keputusan berdasarkan hasil deteksi AI.
Kontrol Keyboard
Gunakan tombol berikut untuk mengendalikan Robot Arm:
| Tombol | Fungsi |
|---|---|
| W | Shoulder naik |
| S | Shoulder turun |
| A | Base ke kiri |
| D | Base ke kanan |
| Q | Elbow naik |
| E | Elbow turun |
| SPACE | Membuka / menutup gripper |
| H | Home Position |
| R | Menjalankan Auto Sequence |
| ESC | Keluar dari program |
Persiapan Software
Pastikan Python telah terpasang pada komputer.
Kemudian instal library yang dibutuhkan:
pip install pyserial pynput
Library yang digunakan:
- PySerial — komunikasi serial antara Python dan Arduino.
- pynput — membaca input keyboard.
- threading — menjalankan proses pengiriman perintah secara bersamaan.
- time — memberikan jeda pada proses komunikasi.
Menentukan Serial Port
Sebelum menjalankan program, tentukan serial port yang digunakan Arduino Nano.
Windows
Pada Windows, serial port biasanya menggunakan format COM.
Contoh:
controller = RobotArmController(port='COM9')
Port dapat diperiksa melalui:
Arduino IDE → Tools → Port
Linux
Pada Linux, Arduino biasanya menggunakan device seperti:
controller = RobotArmController(port='/dev/ttyUSB0')
macOS
Pada macOS, serial device dapat berbentuk:
controller = RobotArmController(port='/dev/cu.usbserial-XXXX')
Sesuaikan nama port dengan perangkat yang terdeteksi pada komputer.
Program Python
Berikut program lengkap untuk mengendalikan Robot Arm menggunakan keyboard.
import serial
import time
import threading
from pynput import keyboard
class RobotArmController:
def __init__(self, port='COM9', baudrate=115200):
self.ser = serial.Serial(
port,
baudrate,
timeout=1
)
# Tunggu Arduino selesai melakukan reset
time.sleep(2.5)
# Tunggu Arduino mengirimkan status READY
while True:
if self.ser.in_waiting > 0:
response = self.ser.readline().decode().strip()
if response == "READY":
break
time.sleep(0.1)
# Posisi awal servo
self.base = 90
self.shoulder = 90
self.elbow = 90
# Gripper dalam kondisi tertutup
self.gripper = 80
self.step = 5
self.pressed_keys = set()
self.running = True
print("Robot Arm Controller Aktif!")
print("=" * 50)
print("KONTROL KEYBOARD:")
print(" W/S = Shoulder Naik/Turun")
print(" A/D = Base Kiri/Kanan")
print(" Q/E = Elbow Naik/Turun")
print(" SPACE = Gripper Buka/Tutup")
print(" H = Home Position")
print(" R = Auto Sequence")
print(" ESC = Keluar")
print("=" * 50)
print("Gripper: TERTUTUP")
# Thread untuk mengirim perintah servo
self.send_thread = threading.Thread(
target=self.send_loop
)
self.send_thread.daemon = True
self.send_thread.start()
def send_command(self, servo, value):
command = f"{servo}{value}\n"
self.ser.write(command.encode())
def send_loop(self):
while self.running:
# Shoulder naik
if 'w' in self.pressed_keys and self.shoulder < 180:
self.shoulder += self.step
self.send_command('S',self.shoulder)
# Shoulder turun
if 's' in self.pressed_keys and self.shoulder > 0:
self.shoulder -= self.step
self.send_command('S',self.shoulder)
# Base ke kiri
if 'a' in self.pressed_keys and self.base > 0:
self.base -= self.step
self.send_command('B',self.base)
# Base ke kanan
if 'd' in self.pressed_keys and self.base < 180:
self.base += self.step
self.send_command('B',self.base)
# Elbow naik
if 'q' in self.pressed_keys and self.elbow < 180:
self.elbow += self.step
self.send_command('E',self.elbow)
# Elbow turun
if 'e' in self.pressed_keys and self.elbow > 0:
self.elbow -= self.step
self.send_command('E',self.elbow
time.sleep(0.05)
def toggle_gripper(self):
if self.gripper == 80:
self.gripper = 0
self.send_command('G',0)
print("Gripper: BUKA")
else:
self.gripper = 80
self.send_command('G',80)
print("Gripper: TERTUTUP")
def on_press(self, key):
try:
k = key.char.lower()
self.pressed_keys.add(k)
except AttributeError:
# Tombol khusus seperti SPACE dan ESC
if key == keyboard.Key.space:
self.toggle_gripper()
elif key == keyboard.Key.esc:
self.running = False
return False
return
# Home Position
if k == 'h':
self.base = 90
self.shoulder = 90
self.elbow = 90
self.gripper = 80
self.send_command('H',0)
print("Home Position")
# Auto Sequence
elif k == 'r':
self.send_command('A',0)
print("Auto Sequence dimulai...")
def on_release(self, key):
try:
k = key.char.lower()
self.pressed_keys.discard(k)
except AttributeError:
pass
def start(self):
with keyboard.Listener(on_press=self.on_press,on_release=self.on_release) as listener:
listener.join()
print("Controller dimatikan.")
self.ser.close()
if __name__ == "__main__":
controller = RobotArmController(port='COM9')
controller.start()
Cara Menjalankan Program
Setelah kode disimpan, misalnya dengan nama:
robot_arm_controller.py
jalankan melalui terminal:
python robot_arm_controller.py
Jika koneksi berhasil, program akan menunggu Arduino mengirimkan status:
READY
Setelah Arduino siap, program akan menampilkan:
Robot Arm Controller Aktif!
Selanjutnya Robot Arm dapat dikendalikan menggunakan keyboard.
Home Position
Tombol H digunakan untuk mengembalikan Robot Arm ke posisi awal.
Pada program ini posisi awal servo ditentukan sebagai:
Base = 90°
Shoulder = 90°
Elbow = 90°
Gripper = 80
Home Position berguna sebagai titik referensi sebelum robot menjalankan gerakan berikutnya.
Mengendalikan Servo Secara Real-Time
Saat tombol W, S, A, D, Q, atau E ditekan, program akan memasukkan tombol tersebut ke dalam pressed_keys.
Thread send_loop() kemudian memeriksa tombol yang sedang ditekan dan mengirimkan perintah ke Arduino secara berulang.
Contohnya:
if 'w' in self.pressed_keys and self.shoulder < 180:
self.shoulder += self.step
self.send_command(
'S',
self.shoulder
)
Dengan metode ini, servo dapat bergerak selama tombol masih ditekan.
Mengendalikan Gripper
Tombol SPACE digunakan untuk mengubah kondisi gripper.
Jika posisi gripper saat ini adalah:
80
maka program akan mengubahnya menjadi:
0
Sebaliknya, jika posisi gripper adalah:
0
maka akan dikembalikan menjadi:
80
Dengan demikian, satu tombol dapat digunakan sebagai fungsi toggle:
SPACE → BUKA → SPACE → TUTUP
Auto Sequence
Tombol R digunakan untuk menjalankan sequence otomatis yang telah diprogram pada Arduino.
Python mengirimkan perintah:
self.send_command('A', 0)
Arduino kemudian dapat menerjemahkan perintah tersebut sebagai instruksi untuk menjalankan rangkaian gerakan otomatis.
Dengan pendekatan ini, Python dapat berfungsi sebagai antarmuka pengendali sementara Arduino tetap menangani proses gerakan Robot Arm.
Komunikasi Python dan Arduino
Komunikasi dilakukan menggunakan serial communication.
Format perintah yang dikirim oleh Python adalah:
S90
atau:
B120
atau:
G80
Setiap perintah diakhiri dengan karakter newline:
command = f"{servo}{value}\n"
Kemudian data dikirim melalui koneksi serial:
self.ser.write(command.encode())
Arduino menerima data tersebut dan menerjemahkannya menjadi perintah untuk servo.
⚠️ Tips Jika Terjadi Error
SerialException: could not open port
Error ini biasanya terjadi ketika Python tidak dapat membuka serial port Arduino.
Kemungkinan penyebab:
- Serial port yang digunakan salah.
- Arduino belum terhubung.
- Driver USB belum terpasang.
- Serial port sedang digunakan aplikasi lain.
- Arduino IDE masih membuka Serial Monitor.
Solusi
Periksa port Arduino melalui:
Arduino IDE → Tools → Port
Kemudian sesuaikan bagian berikut:
controller = RobotArmController(
port='COM9'
)
Misalnya Arduino terdeteksi sebagai COM3:
controller = RobotArmController(
port='COM3'
)
Tutup juga aplikasi lain yang sedang menggunakan serial port.
Arduino Tidak Mengirim READY
Program Python menunggu Arduino mengirimkan:
READY
Jika pesan tersebut tidak pernah diterima, Python akan terus menunggu.
Pastikan program Arduino memang mengirimkan status tersebut setelah proses inisialisasi selesai.
Contoh:
Serial.println("READY");
Pastikan juga nilai baud rate sama pada kedua perangkat.
Python:
baudrate=115200
Arduino:
Serial.begin(115200);
Robot Tidak Bergerak
Jika Python berhasil berjalan tetapi Robot Arm tidak bergerak, periksa beberapa hal berikut:
- Pastikan Arduino terhubung dengan benar.
- Pastikan baud rate Python dan Arduino sama.
- Pastikan serial port sudah benar.
- Pastikan power supply servo mencukupi.
- Pastikan kabel servo terpasang dengan benar.
- Pastikan program Arduino dapat menerima format perintah dari Python.
- Pastikan tidak ada aplikasi lain yang sedang menggunakan serial port.
⚠️ Perhatikan Batas Sudut Servo
Program menggunakan batas:
0° – 180°
Namun, tidak semua servo atau mekanisme Robot Arm aman bergerak sampai batas tersebut.
Sebelum menjalankan Robot Arm secara penuh, lakukan pengujian secara perlahan dan pastikan tidak ada bagian mekanik yang mengalami benturan.
Jika diperlukan, batas sudut dapat dibuat lebih kecil pada program Python maupun Arduino.
Kesimpulan
Pada Part III ini kita telah membuat komunikasi antara Python dan Arduino Nano untuk mengendalikan Robot Arm menggunakan keyboard.
Konsep yang telah dipelajari meliputi:
- Komunikasi serial
- PySerial
- Keyboard event
- Multithreading
- Home Position
- Auto Sequence
- Pengendalian servo
- Toggle Gripper
Dengan komunikasi ini, komputer tidak lagi hanya digunakan untuk melakukan upload program Arduino, tetapi dapat menjadi bagian dari sistem kendali Robot Arm.
Pada tahap berikutnya, konsep ini dapat dikembangkan menjadi sistem yang lebih kompleks dengan Computer Vision, OpenCV, dan YOLO Object Detection.
Robot tidak hanya menerima perintah dari keyboard, tetapi dapat dikembangkan untuk melihat objek melalui kamera, mengenali objek menggunakan AI, dan menentukan gerakan Robot Arm secara otomatis.
Part Berikutnya
Part IV – Computer Vision & Object Detection
Pada tahap selanjutnya kita akan mulai memasuki konsep Computer Vision, yaitu bagaimana kamera digunakan sebagai sensor visual bagi Robot Arm.
Materi berikutnya akan menjadi dasar untuk mengembangkan sistem Robot Arm yang mampu mengenali dan merespons objek secara otomatis menggunakan teknologi AI.
