Frequently Asked Questions

General

What is Mini-Arm?

Mini-Arm is a miniature 6-DOF 3D-printed robot arm designed for education, research, and hobbyist projects. It runs on a Raspberry Pi Pico with CircuitPython firmware and includes a built-in inverse kinematics solver.

How much does it cost to build?

The complete build costs approximately $80-100 USD, with the main expenses being servos ($20-30) and the Raspberry Pi Pico ($5).

What’s the payload capacity?

With the stock MG90S servos, Mini-Arm can lift approximately 50-100 grams at full extension. Upgrading to MG996R servos increases this to ~200g.

What’s the reach/workspace?

  • Maximum reach: ~200mm from base center

  • Vertical reach: ~250mm

  • Full 360° base rotation

Hardware

What servos should I use?

  • Stock (recommended): MG90S micro servos - good balance of torque/size

  • Budget: SG90 - works but less torque

  • Upgraded: MG996R - more torque, requires larger printed parts

Can I use a different microcontroller?

The firmware is designed for Raspberry Pi Pico but can be adapted:

  • Pico W - adds WiFi capability

  • ESP32 - requires firmware port

  • Arduino - possible but limited flash/RAM

Why isn’t my servo moving smoothly?

  1. Check power supply - servos need 5V 3A

  2. Reduce speed: arm.set_speed(30)

  3. Check for mechanical binding

  4. Add capacitor (100-1000µF) on power line

Software

What Python version is required?

Python 3.8 or higher.

Can I use Mini-Arm without ROS2?

Yes! The Python client library works standalone. ROS2 is optional for advanced features.

How do I update the firmware?

  1. Connect Pico while holding BOOTSEL

  2. Drag new CircuitPython UF2 to RPI-RP2

  3. Copy updated pico/ folder contents to CIRCUITPY

The IK solver fails - what should I do?

The position may be outside the workspace:

from mini_arm.kinematics import is_reachable

if is_reachable(x, y, z):
    arm.move_to(x, y, z)
else:
    print("Position out of reach!")

Alternatively, the configuration may be singular (e.g., arm fully extended).

Troubleshooting

“Port not found” error

  1. Check USB connection

  2. Verify Pico is running CircuitPython (CIRCUITPY drive visible)

  3. Try specifying port manually:

arm = MiniArm(port="COM3")  # Windows
arm = MiniArm(port="/dev/ttyACM0")  # Linux

Servos jitter or make noise

  • Normal holding torque hum is expected

  • Excessive jitter: check wiring, add capacitor

  • Use arm.disable_freedrive() when not moving to reduce stress

Arm moves to wrong position

Calibration may be off:

python -m mini_arm.calibrate

“I2C device not found” error

  • Check GP0 → SDA, GP1 → SCL connections

  • Verify 3.3V power to PCA9685

  • Test with I2C scanner

3D Printing

What material should I use?

PLA is fine for most uses. Use PETG for more durability.

My parts don’t fit together

  • Print a calibration cube first

  • Adjust horizontal expansion in slicer (-0.1 to -0.2mm)

  • Light sanding on tight fits

How long does printing take?

Approximately 12-15 hours total for all parts at 0.2mm layer height.

Community

Where can I get help?

Can I contribute?

Yes! See Contributing for guidelines.

Can I use Mini-Arm commercially?

Mini-Arm is MIT licensed - you can use it for any purpose, including commercial, as long as you include the license.