Skip to main content
Version: ACS CC

Robotic Arm with Master-Slave Control Mode

A robotic arm controlled via potentiometers with record and playback functionality.

info

Author: Istrate Camelia-Elena
GitHub Project Link: https://github.com/UPB-PMRust-Students/acs-project-2026-camistrate.git

Description

This project implements a robotic arm controlled by an STM32 microcontroller programmed in Rust. The system consists of a master controller with potentiometers and a slave robotic arm driven by multiple servo motors.

The system supports two operating modes:

  • Manual Mode: the master controller (potentiometers) directly controls the slave robotic arm in real time.
  • Record & Playback Mode: the system records a sequence of movements performed in manual mode (master) and later replays them automatically on the slave robotic arm.

The STM32 reads analog input values from the master controller, processes them, and sends commands to a PWM servo driver module that controls the robotic arm in real time.

Motivation

The idea for this project originated from a brainstorming session, inspired by a simple robotic arm concept seen on social media. I wanted to improve that concept by building a more refined and reliable system. To extend the original idea, I added a record and playback feature, enabling the robotic arm to capture and reproduce movements, making the system more advanced and interactive.

Architecture

The system is divided into the following main components:

  • Master Controller: consists of potentiometers and a push button, used to generate control inputs and select the operating mode.

  • Processing Unit (STM32):

    • reads analog inputs (ADC) and digital inputs (GPIO)
    • processes control data
    • manages operating modes (manual, record, playback)
    • communicates with external modules
  • Memory Buffer (implemented in STM32 RAM):

    • stores recorded servo positions over time during record mode
    • provides stored data during playback mode
  • Servo Driver (PCA9685):

    • receives commands from the STM32 via I2C
    • generates PWM signals for controlling multiple servo motors
  • Slave Robotic Arm (Actuators):

    • consists of multiple servo motors (base, shoulder, elbow, wrist, gripper)
    • executes movements based on PWM signals

Architecture Diagram

Log

Week 6 - 12 April

In this week, I did a brainstorming session and chose the project idea.

Week 20 - 24 May

In this period, I researched the hardware requirements for the project, identified the necessary components, and placed orders for them.

Week 27 April - 3 May

During this week, I focused on developing the project documentation.

Week 4 - 10 May

In this period, I received the first ordered components, printed the 3D parts required for the robotic arm structure, and placed additional orders for the remaining hardware components.

Week 11 - 17 May

During this week, the last ordered components arrived. I focused on the hardware part of the project, assembled the main mechanical structure, connected the electronic components, and tested the basic wiring.

Week 18 - 24 May

In this week, I implemented the software part of the project in Rust, tested the interaction between the potentiometers, buttons, PCA9685 driver, and servo motors, and verified that the main functionalities worked correctly. I also mounted all components on the final support structure.

Image1 Image2

Hardware

The project uses an STM32 development board as the main controller. A set of potentiometers and a push button are used as input devices to control the system.

The robotic arm is driven by multiple servo motors, controlled through a PCA9685 servo driver module using I2C communication. The servos are powered by an external power supply, while the STM32 handles the control logic.

All components are connected using standard wires and connectors, and the mechanical structure of the arm is made from 3D printed parts.

Schematics

Schematic

Bill of Materials

DeviceUsagePrice
STM32 Nucleo BoardMain microcontroller used for processing inputs and controlling the robotic armFree (Provided by faculty)
10k PotentiometerUsed as analog input for controlling servo positions4 x 1.31 RON
MG996R Servo MotorHigh torque servo motors used for main joints (base, shoulder, elbow)3 x 29.5 RON
Mini Push ButtonUsed for switching between operating modes4 x 0.36 RON
SG90 Micro ServoUsed for controlling the gripper1 x 9.5 RON
XT60 ConnectorUsed for power supply connection2 x 4.3 RON
Power Switch KCD11Used to turn the system on/off1 x 1.19 RON
PCA9685 Servo DriverGenerates PWM signals for controlling multiple servo motors via I2C1 x 27.27 RON
Total141.5 RON + Free board

Software

LibraryDescriptionUsage
embassy-stm32Hardware abstraction layer for STM32 microcontrollersUsed for accessing peripherals such as ADC, GPIO, and I2C
embassy-executorAsync runtime for embedded systemsUsed to manage tasks and timing in the application
embedded-halCommon hardware abstraction traits for embedded systemsProvides generic interfaces for peripherals like I2C and GPIO
PCA9685 driver crateDriver for controlling the PCA9685 PWM moduleUsed to control servo motors via I2C
defmtLightweight logging framework for embedded systemsUsed for debugging and monitoring values
panic-probePanic handler for embedded Rust applicationsUsed for debugging runtime errors
  1. https://www.hackster.io/WolfxPac/simple-and-smart-robotic-arm-using-arduino-1ceda6