|
| 1 | +# Robotic Arm with Master-Slave Control Mode |
| 2 | +A robotic arm controlled via potentiometers with record and playback functionality. |
| 3 | + |
| 4 | +:::info |
| 5 | + |
| 6 | +**Author**: Istrate Camelia-Elena \ |
| 7 | +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/acs-project-2026-camistrate.git |
| 8 | + |
| 9 | +::: |
| 10 | + |
| 11 | +<!-- do not delete the \ after your name --> |
| 12 | + |
| 13 | +## Description |
| 14 | + |
| 15 | +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. |
| 16 | + |
| 17 | +The system supports two operating modes: |
| 18 | + |
| 19 | +- **Manual Mode**: the master controller (potentiometers) directly controls the slave robotic arm in real time. |
| 20 | +- **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. |
| 21 | + |
| 22 | +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. |
| 23 | + |
| 24 | +## Motivation |
| 25 | + |
| 26 | +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. |
| 27 | +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. |
| 28 | + |
| 29 | +## Architecture |
| 30 | + |
| 31 | +The system is divided into the following main components: |
| 32 | + |
| 33 | +- **Master Controller**: consists of potentiometers and a push button, used to generate control inputs and select the operating mode. |
| 34 | + |
| 35 | +- **Processing Unit (STM32)**: |
| 36 | + - reads analog inputs (ADC) and digital inputs (GPIO) |
| 37 | + - processes control data |
| 38 | + - manages operating modes (manual, record, playback) |
| 39 | + - communicates with external modules |
| 40 | + |
| 41 | +- **Memory Buffer (implemented in STM32 RAM)**: |
| 42 | + - stores recorded servo positions over time during record mode |
| 43 | + - provides stored data during playback mode |
| 44 | + |
| 45 | +- **Servo Driver (PCA9685)**: |
| 46 | + - receives commands from the STM32 via I2C |
| 47 | + - generates PWM signals for controlling multiple servo motors |
| 48 | + |
| 49 | +- **Slave Robotic Arm (Actuators)**: |
| 50 | + - consists of multiple servo motors (base, shoulder, elbow, wrist, gripper) |
| 51 | + - executes movements based on PWM signals |
| 52 | + |
| 53 | + |
| 54 | + |
| 55 | +## Log |
| 56 | + |
| 57 | +<!-- write your progress here every week --> |
| 58 | +### Week 6 - 12 April |
| 59 | +In this week, I did a brainstorming session and chose the project idea. |
| 60 | + |
| 61 | +### Week 20 - 24 May |
| 62 | +In this period, I researched the hardware requirements for the project, identified the necessary components, and placed orders for them. |
| 63 | + |
| 64 | +### Week 27 April - 3 May |
| 65 | +During this week, I focused on developing the project documentation. |
| 66 | + |
| 67 | +### Week 4 - 10 May |
| 68 | +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. |
| 69 | + |
| 70 | +### Week 11 - 17 May |
| 71 | +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. |
| 72 | + |
| 73 | +### Week 18 - 24 May |
| 74 | +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. |
| 75 | + |
| 76 | + |
| 77 | + |
| 78 | + |
| 79 | +## Hardware |
| 80 | + |
| 81 | +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. |
| 82 | + |
| 83 | +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. |
| 84 | + |
| 85 | +All components are connected using standard wires and connectors, and the mechanical structure of the arm is made from 3D printed parts. |
| 86 | + |
| 87 | +### Schematics |
| 88 | + |
| 89 | + |
| 90 | + |
| 91 | + |
| 92 | +### Bill of Materials |
| 93 | + |
| 94 | +| Device | Usage | Price | |
| 95 | +|--------|--------|-------| |
| 96 | +| [STM32 Nucleo Board](https://www.st.com/en/evaluation-tools/stm32-nucleo-boards.html) | Main microcontroller used for processing inputs and controlling the robotic arm | Free (Provided by faculty) | |
| 97 | +| [10k Potentiometer](https://sigmanortec.ro/Potentiometru-1K-5K-10K-20K-50K-100K-p136286400) | Used as analog input for controlling servo positions | 4 x 1.31 RON | |
| 98 | +| [MG996R Servo Motor](https://sigmanortec.ro/servomotor-mg996r-180-13kg) | High torque servo motors used for main joints (base, shoulder, elbow) | 3 x 29.5 RON | |
| 99 | +| [Mini Push Button](https://sigmanortec.ro/buton-mini-6x6x5-4-pini) | Used for switching between operating modes |4 x 0.36 RON | |
| 100 | +| [SG90 Micro Servo](https://sigmanortec.ro/Servomotor-SG90-limit-switch-p141662062) | Used for controlling the gripper | 1 x 9.5 RON | |
| 101 | +| [XT60 Connector](https://sigmanortec.ro/Conector-XT60-Mama-Tata-p148577270) | Used for power supply connection | 2 x 4.3 RON | |
| 102 | +| [Power Switch KCD11](https://sigmanortec.ro/Intrerupator-KCD11-250V-3A-2-pini-p166528374) | Used to turn the system on/off | 1 x 1.19 RON | |
| 103 | +| [PCA9685 Servo Driver](https://sigmanortec.ro/Modul-PCA9685-interfata-I2C-16-CH-servo-motor-p126016016) | Generates PWM signals for controlling multiple servo motors via I2C | 1 x 27.27 RON | |
| 104 | +| **Total** | | **141.5 RON + Free board** | |
| 105 | + |
| 106 | + |
| 107 | +## Software |
| 108 | + |
| 109 | +| Library | Description | Usage | |
| 110 | +|---------|-------------|-------| |
| 111 | +| [embassy-stm32](https://github.com/embassy-rs/embassy) | Hardware abstraction layer for STM32 microcontrollers | Used for accessing peripherals such as ADC, GPIO, and I2C | |
| 112 | +| [embassy-executor](https://github.com/embassy-rs/embassy) | Async runtime for embedded systems | Used to manage tasks and timing in the application | |
| 113 | +| [embedded-hal](https://github.com/rust-embedded/embedded-hal) | Common hardware abstraction traits for embedded systems | Provides generic interfaces for peripherals like I2C and GPIO | |
| 114 | +| PCA9685 driver crate | Driver for controlling the PCA9685 PWM module | Used to control servo motors via I2C | |
| 115 | +| [defmt](https://github.com/knurling-rs/defmt) | Lightweight logging framework for embedded systems | Used for debugging and monitoring values | |
| 116 | +| [panic-probe](https://github.com/knurling-rs/defmt) | Panic handler for embedded Rust applications | Used for debugging runtime errors | |
| 117 | + |
| 118 | +## Links |
| 119 | + |
| 120 | +<!-- Add a few links that inspired you and that you think you will use for your project --> |
| 121 | + |
| 122 | +1. https://www.hackster.io/WolfxPac/simple-and-smart-robotic-arm-using-arduino-1ceda6 |
| 123 | + |
0 commit comments