Skip to content

Commit dd2fb74

Browse files
authored
Project/camelia.istrate (#1029)
* FIles updated * Image updated * Added schematic * Updated the svg name * Updated the svg name * Update schematic * Update schematic * Added images with the project * FIles updated * Image updated * Added schematic * Updated the svg name * Updated the svg name * Update schematic * Update schematic * Added images with the project * Update schematic * Update schematic
1 parent 86f7bbb commit dd2fb74

5 files changed

Lines changed: 123 additions & 0 deletions

File tree

8.41 KB
Loading
104 KB
Loading
141 KB
Loading
22.5 KB
Loading
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
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+
![Architecture Diagram](./images/architecture_diag.webp)
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+
![Image1](./images/project1.webp)
77+
![Image2](./images/project2.webp)
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+
![Schematic](./images/schematic_pm.webp)
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

Comments
 (0)