
Root
GonzaCerv/noah-hardware
This repo contains all the hardware description for the Noah project. Here lies 3D models, electronics PCB and Firmware software of the robot.

4-DoF anthropomorphic robotic manipulator
OttolinkPCB is an open-source printed circuit board by Jackhammer9, from the Jackhammer9/Ottolink repository on GitHub. It is a 2-layer board of 98 × 99.5 mm with 41 parts on 34 nets, routed with 494 tracks and 31 vias.
It is built around the XL4015E1, LM2596S-5.0 and XT60-M. Its parts include 10 capacitors, 9 connectors, 4 resistors, 2 switches and 1 IC. It belongs with the robots and motor control boards and the AVR (ATmega, ATtiny) boards of this library.

Ottolink is a custom 4-DoF anthropomorphic robotic manipulator designed and built for spatial end-effector trajectory execution. The project combines mechanical design, embedded real-time control, Jacobian-based inverse kinematics, custom electronics, and MuJoCo simulation into a complete robotic system.
Ottolink features a 3-DoF shoulder configuration and 1-DoF pitch elbow, providing spatial control of the end effector.
The project was developed as a complete robotics pipeline:
CAD → Mechanical Assembly → Kinematics → Simulation → Embedded Control → Custom PCB → Physical Robot
The controller runs on an ATmega328P-based embedded system and executes Cartesian-space trajectories using a Jacobian pseudoinverse controller.
You can watch the arm in action on my Portfolio Website.
The robotic arm was designed and assembled in Autodesk Inventor, with component geometry optimized for 3D printing tolerances.
The mechanical design considers:
The final design was manufactured using 3D-printed components and integrated with the actuator and control system.
The CAD/ directory contains the mechanical design files and supporting models.
Ottolink uses a Jacobian pseudoinverse controller to map Cartesian end-effector errors into joint-space corrections.
Given the end-effector error:
e = x_target - x_currentthe joint-space update is calculated using:
Δq = J⁺ ewhere:
J is the manipulator JacobianJ⁺ is the Moore-Penrose pseudoinversee is the Cartesian position errorΔq is the resulting joint-space correctionThe controller iteratively updates the joint configuration to reduce the Cartesian position error and converge toward the target trajectory.
Rodrigues' rotation formula is used to represent arbitrary rotations around the robot's joint axes.
This is particularly important for handling the physical robot's non-ideal axis configurations and maintaining consistency between:
A lightweight custom C++ matrix and linear algebra library was developed specifically for the ATmega328P.
The library provides the operations required by the real-time controller, including:
The implementation was designed around the memory and computational constraints of the ATmega328P rather than relying on a large external numerical library.
The physical robot is controlled by an ATmega328P-based embedded system.
The firmware provides:
The controller was implemented using C++ and PlatformIO.
The embedded controller can be found in:
OttolinkController/The main source code is located in:
OttolinkController/src/A custom control PCB was designed in KiCad.
The PCB provides:
The board was designed to reduce wiring complexity while providing a more robust electrical interface for the robotic system.
PCB source files are available in:
OttolinkPCB/The directory contains the KiCad schematic, PCB layout, project files, and custom footprint data required for the board.
Manufacturing files are available in:
PCBGerberFiles/A complete MuJoCo simulation of the robotic arm was developed to validate the kinematic and control system before deployment to the physical hardware.
The simulation includes:
The simulation files are located in:
Sim/
├── meshes/
├── ottolink.xml
└── OttolinkSimulation.pyThe simulation was used to validate:
The project was developed with a simulation-first workflow.
Mechanical Design
│
▼
Kinematic Model
│
▼
MuJoCo Model
│
▼
Controller Validation
│
▼
Embedded Implementation
│
▼
Physical RobotThis workflow allowed the kinematic and trajectory-control algorithms to be tested in simulation before being executed on the embedded controller and physical hardware.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 4 | 100nF | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C5, C6, C7, C8 |
| 4 | 100uF | Capacitor_THT:CP_Radial_D5.0mm_P2.00mm | C1, C2, C3, C4 |
| 3 | 10k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal | R1, R3, R4 |
| 2 | 22pF | Capacitor_THT:C_Disc_D5.0mm_W2.5mm_P5.00mm | C9, C10 |
| 2 | XL4015 | LM2596:XL4015 | J2, J3 |
| 1 | +5v | TestPoint:TestPoint_Pad_D2.0mm | TP2 |
| 1 | +6.5v_A | TestPoint:TestPoint_Pad_D2.0mm | TP3 |
| 1 | +6.5v_B | TestPoint:TestPoint_Pad_D2.0mm | TP4 |
| 1 | 16MHz | Crystal:Crystal_HC49-4H_Vertical | Y1 |
| 1 | 20k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal | R2 |
| 1 | Display | Connector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_Vertical | J5 |
| 1 | Free Ports | Connector_PinHeader_2.54mm:PinHeader_1x07_P2.54mm_Vertical | J9 |
| 1 | Fuse | Fuse:Fuseholder_Cylinder-5x20mm_Schurter_0031_8201_Horizontal_Open | F1 |
| 1 | GND | TestPoint:TestPoint_Pad_D2.0mm | TP1 |
| 1 | IR Reciever | Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical | J7 |
| 1 | ISP | PROG | Connector_PinHeader_2.54mm:PinHeader_2x05_P2.54mm_Vertical | J6 |
| 1 | LM2596 | LM2596:LM2596 Step Down Module | J4 |
| 1 | MCU | Package_DIP:DIP-28_W7.62mm | U1 |
| 1 | SERVO_ELBOW_PITCH | Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical | M4 |
| 1 | SERVO_SHOULDER_PITCH | Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical | M1 |
| 1 | SERVO_SHOULDER_ROLL | Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical | M3 |
| 1 | SERVO_SHOULDER_YAW | Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical | M2 |
| 1 | SW_Push | Button_Switch_THT:SW_PUSH_6mm | SW2 |
| 1 | SW_SPDT | Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical | SW1 |
| 1 | UART | Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical | J8 |
| 1 | VBAT | TestPoint:TestPoint_Pad_D2.0mm | TP5 |
| 1 | XT60-M | Connector_AMASS:AMASS_XT60-M_1x02_P7.20mm_Vertical | J1 |
The 37 most common of 41 parts.
It measures 98 × 99.5 mm and has 2 copper layers, 1.6 mm thick.
41 parts, built around the XL4015E1, LM2596S-5.0 and XT60-M. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
From the Jackhammer9/Ottolink repository on GitHub, at the commit this page was made from: the board is OttolinkPCB/OttolinkPCB.kicad_pcb and its schematic OttolinkPCB/OttolinkPCB.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask Jackhammer9 before reusing the design.

GonzaCerv/noah-hardware
This repo contains all the hardware description for the Noah project. Here lies 3D models, electronics PCB and Firmware software of the robot.





SshgurkiratSingh/CCMS_PORTAL
A full-stack smart streetlight fleet management system with real-time monitoring, remote control, and analytics.


Rami-Troudi/Electrique-Eurobot-IEEE-INSAT-2026
Repo for my electrical work for the Eurobot competition