000
KODEA
Portofolio Layanan Tentang Jurnal Mulai Proyek Login Klien
Arduino, Motor Servo, Python

Part III Robot Arm Menggunakan Python

kodea.id Part III Mengendalikan Robot Arm Menggunakan Python

Dipublikasikan1 Agustus 2026
Waktu baca6 menit
Part III Robot Arm Menggunakan Python

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:

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:

Bash
pip install pyserial pynput

Library yang digunakan:


Menentukan Serial Port

Sebelum menjalankan program, tentukan serial port yang digunakan Arduino Nano.

Windows

Pada Windows, serial port biasanya menggunakan format COM.

Contoh:

Python
controller = RobotArmController(port='COM9')

Port dapat diperiksa melalui:

Arduino IDE → Tools → Port


Linux

Pada Linux, Arduino biasanya menggunakan device seperti:

Python
controller = RobotArmController(port='/dev/ttyUSB0')

macOS

Pada macOS, serial device dapat berbentuk:

Python
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.

Python
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:

Teks
robot_arm_controller.py

jalankan melalui terminal:

Bash
python robot_arm_controller.py

Jika koneksi berhasil, program akan menunggu Arduino mengirimkan status:

Teks
READY

Setelah Arduino siap, program akan menampilkan:

Teks
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:

Teks
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:

Python
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:

Teks
80

maka program akan mengubahnya menjadi:

Teks
0

Sebaliknya, jika posisi gripper adalah:

Teks
0

maka akan dikembalikan menjadi:

Teks
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:

Python
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:

Teks
S90

atau:

Teks
B120

atau:

Teks
G80

Setiap perintah diakhiri dengan karakter newline:

Python
command = f"{servo}{value}\n"

Kemudian data dikirim melalui koneksi serial:

Python
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:

Solusi

Periksa port Arduino melalui:

Arduino IDE → Tools → Port

Kemudian sesuaikan bagian berikut:

Python
controller = RobotArmController(
    port='COM9'
)

Misalnya Arduino terdeteksi sebagai COM3:

Python
controller = RobotArmController(
    port='COM3'
)

Tutup juga aplikasi lain yang sedang menggunakan serial port.


Arduino Tidak Mengirim READY

Program Python menunggu Arduino mengirimkan:

Teks
READY

Jika pesan tersebut tidak pernah diterima, Python akan terus menunggu.

Pastikan program Arduino memang mengirimkan status tersebut setelah proses inisialisasi selesai.

Contoh:

C++
Serial.println("READY");

Pastikan juga nilai baud rate sama pada kedua perangkat.

Python:

Python
baudrate=115200

Arduino:

C++
Serial.begin(115200);

Robot Tidak Bergerak

Jika Python berhasil berjalan tetapi Robot Arm tidak bergerak, periksa beberapa hal berikut:

  1. Pastikan Arduino terhubung dengan benar.
  2. Pastikan baud rate Python dan Arduino sama.
  3. Pastikan serial port sudah benar.
  4. Pastikan power supply servo mencukupi.
  5. Pastikan kabel servo terpasang dengan benar.
  6. Pastikan program Arduino dapat menerima format perintah dari Python.
  7. Pastikan tidak ada aplikasi lain yang sedang menggunakan serial port.

⚠️ Perhatikan Batas Sudut Servo

Program menggunakan batas:

Teks
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:

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.

ARTIKEL TERKAIT

Lanjut Membaca

Lihat Semua Artikel