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?
Check power supply - servos need 5V 3A
Reduce speed:
arm.set_speed(30)Check for mechanical binding
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?
Connect Pico while holding BOOTSEL
Drag new CircuitPython UF2 to RPI-RP2
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
Check USB connection
Verify Pico is running CircuitPython (CIRCUITPY drive visible)
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?
GitHub Issues: github.com/Jshulgach/Mini-Arm/issues
Discussions: github.com/Jshulgach/Mini-Arm/discussions
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.