For the complete documentation index, see llms.txt. This page is also available as Markdown.

Micromanipulator

This page documents our build of an open source micromanipulator that can be used for both the lithography stepper and the 2D crystal stack robot.

Assembled micromanipulator v4 (with Kirby)

Summary

This is a replica of version 4 of this open source project: https://github.com/0x23/MicroManipulatorStepper. Almost all resources for assembly can be found here.

NOTE: As of June 2026, there is a complete guide for this project available on StepWiseDocs. We recommend following their guide, but we leave the rest of this page as is in case anyone finds it helpful.

BOM

Below is a list of materials used that worked for this particular build. Parts of the table are copied from the original repository.

Mechanics

Name

Qty

Dimensions

Comments

Suggested Link

Image

Steel ball

12

Ø1 mm (0.04")

1-2mm steel balls should work (e.g 1.2mm)

PU stretch cord

1m

Ø1mm

Any polyurethane cord can be cut to size

Neodym Cylinder Magnet

51

Ø3mm h=5 mm

Diametrically (through diameter) or Axially Magnetized (through thickness) magnets.

Mcmaster or for cheaper but untested (kj)

Solid Brass Pipe

17inch length

Ø2mm

Jewel Crimps

12 small crimps

N/A (min 1mm diameter)

Metal Dowell pins

24

M2x8mm

This is used for homing in the motor horns.

M3 Counter sunk screws

12 total (9 long and 3 short)

10mm for long and 6mm for short

M3 Screws

6

8mm

You can use the counter sunk screws for this but it might not be great

M2 Screws

15

8mm

Blade

1

This is for the rod sharpening jig. We will be bending off a piece of the blade.

Electronics

Name

Qty

Comments

Suggested Link

Image

DC-DC Step Down Module

1

12V->5V step down

1N5819 Diode

(TH or SMD)

1

If you want to keep the RPI and motor power source separate, don’t solder on the diode.

Raspberry Pi Pico 2

1

Do not use a Pico 1 for various compatibility issues (no FPU unit)

TB6612FNG Driver

3

470 µF Electrolytic Capacitor

3

MT6835 Magnetic Encoder Module

3

NEMA 17 Stepper Motor

3

12V 0.4A, 30Ohm resistance motors.

! Note the resistance matters alot!

JST 2mm 4 pin connectors

1 pair

For main PCB

JST 2mm 8 pin connectors

1 pair

For main PCB

Same as above

JST 1.25 mm 6 pin connectors

3 pairs

For encoder connection

XT60H Power Jack

1 pair

DC Power supply and power jack

1

Pin headers

1

Technically not required but makes replacing chips significantly easier

3d Printed

Standard PLA filament for all prints. Estimated ~200g of filament depending on infill.

Name

Qty

Comments

Image

Motor Horn

3

0.4 mm+ nozzle may require post-processing

Motor Horn

RubberBandCollet

12

0.4 mm nozzle, 0.1mm Layer height + may require post-processing

Rubber Band Collet

Motor Mount

3

Motor Mount

End Effector

1

End Effector

Base Block

1

Base Block

Standing Base

1

PCB

Technically both electrical boards (control and spi) could be done via bread board but the PCB is significantly easier and more reliable. The ball joint plate is required.

Name

Qty

Comments

Image

Control board

1

Ball joint plate

6

Could be laser cut or machined but PCB was simpler

SPI breakout board

1

Can be done via veroboard or perfboard but PCB is significantly more reliable

Mechanics

Electronics

3d Printed

Standard PLA filament for all prints. Estimated ~200g of filament depending on infill.

PCB

Technically both electrical boards (control and spi) could be done via bread board but the PCB is significantly easier and more reliable. The ball joint plate is required.

Name

Qty

Comments

Image

Control board

1

Ball joint plate

6

Could be laser cut or machined but PCB was simpler

SPI breakout board

1

Can be done via veroboard or perfboard but PCB is significantly more reliable

Name

Qty

Comments

Image

Motor Horn

3

0.4 mm+ nozzle may require post-processing

Motor Horn

RubberBandCollet

12

0.4 mm nozzle, 0.1mm Layer height + may require post-processing

Rubber Band Collet

Motor Mount

3

Motor Mount

End Effector

1

End Effector

Base Block

1

Base Block

Standing Base

1

Name

Qty

Comments

Suggested Link

Image

DC-DC Step Down Module

1

12V->5V step down

1N5819 Diode

(TH or SMD)

1

If you want to keep the RPI and motor power source separate, don’t solder on the diode.

Raspberry Pi Pico 2

1

Do not use a Pico 1 for various compatibility issues (no FPU unit)

TB6612FNG Driver

3

470 µF Electrolytic Capacitor

3

MT6835 Magnetic Encoder Module

3

NEMA 17 Stepper Motor

3

12V 0.4A, 30Ohm resistance motors.

! Note the resistance matters alot!

JST 2mm 4 pin connectors

1 pair

For main PCB

JST 2mm 8 pin connectors

1 pair

For main PCB

Same as above

JST 1.25 mm 6 pin connectors

3 pairs

For encoder connection

XT60H Power Jack

1 pair

DC Power supply and power jack

1

Pin headers

1

Technically not required but makes replacing chips significantly easier

Name

Qty

Dimensions

Comments

Suggested Link

Image

Steel ball

12

Ø1 mm (0.04")

1-2mm steel balls should work (e.g 1.2mm)

PU stretch cord

1m

Ø1mm

Any polyurethane cord can be cut to size

Neodym Cylinder Magnet

51

Ø3mm h=5 mm

Diametrically (through diameter) or Axially Magnetized (through thickness) magnets.

Mcmaster or for cheaper but untested (kj)

Solid Brass Pipe

17inch length

Ø2mm

Jewel Crimps

12 small crimps

N/A (min 1mm diameter)

Metal Dowell pins

24

M2x8mm

This is used for homing in the motor horns.

M3 Counter sunk screws

12 total (9 long and 3 short)

10mm for long and 6mm for short

M3 Screws

6

8mm

You can use the counter sunk screws for this but it might not be great

M2 Screws

15

8mm

Blade

1

This is for the rod sharpening jig. We will be bending off a piece of the blade.

Tools

  • Super glue

  • Wire stripper + crimper

  • Soldering Iron

  • 3D Printer

  • Calipers

  • Hammer

  • Blade

  • Drill

CAD

Same cad files were used as in the repo aside from the base of the stage.

PCB

Version 4 requires 2 PCBs: the control board and the ball joint plate PCB. We hand soldered the SPI board but it would be a lot easier to just order the SPI board too.

The PCBs can be found in the same repository.

Assembly

For general assembly guidance, please refer to the two videos from the original creator:

Version 3: An Open Source Motorized XYZ Micro-Manipulator - Affordable sub µm Motion Control

Version 4 Additions: Better Ball Joints - For the Open Micro-Manipulator

We would also like to provide some more tips from our experience of putting together a version 4 micromanipulator.

Motor Horns

Each motor horn should be able to fit 17 cylinder magnets like the image below. We used super glue for this step to glue the magnets to the motor horn. A trick is to apply super glue from the top of the magnets and allow it to pool into the cracks for a strong and stable connection.

Motor horn with magnets glued on

When assembling the motor horn, remember to put in the metal dowel pin for homing in the middle (highlighted in the red circle). The insertion of the pin should satisfy the following:

  • The pin should stop the motor horn when hitting the 2 ends of the groove (highlighted in orange underneath)

  • The pin should not be touching the back wall of the groove otherwise there will be extra friction during rotation.

Red: where the dowel pin should be Orange: groove underneath used for homing

Rods

Sanding

The first step of creating the rods is to sand them down so they are of equal length. Here we printed out the 2 rod sanding jigs from the repository. Initially, use coarser grained sanding paper just to get the length down. Then, switch over to finer grained sandpaper and add some water. Try to get the surface to be as smooth against the jig as possible. There should be no noticeable height differences between the two when we touch it.

Jig 1

Jig 2

Sharpening

We sharpen both tips of the rods such that they leave 1mm in diameter at each tip. This step can be quite tedious purely due to the fact that we need to ensure all rods maintain equal lengths. The MicroManipulatorStepper repository provides special CAD jigs that we use to sharpen the rods.

  1. Print the blade carrier and rod guide from this link and collect some materials

1 Blade Carrier
1 Rod Guide
Blade
M3 Screws * 2
Drill

  1. Follow the video “Better Ball Joints” for assembly steps, which includes adding the blade to the blade carrier and positioning the rod for sharpening. imgs: source

Sharpen blade
Insert blade
Rod guide & blade carrier

Screw them together

Driller carries rod, insert rod into sharpening hole

Drill until the tip is 1mm wide

Tips

1) If you’re drilling and the tip is jutting inwards near the center (outer area is taller than inner), then you're likely drilling in the wrong direction

2) To get precise sharpening (not loose equal length for all rods), count how many seconds it took to sharpen the first successful one, then use that as a measure for how long you sharpen for next time

3) Patience is key. Trust the process. And most important of all, be safe.

Denting

One might consider this step to be one that tempts your patience the most. Although seemingly simple of a step, it is one that requires not only determination, but also attention to small details. For the magnetic balls to connect to the rods and ball alignment disc PCBs, we must form a 0.2mm radius dent at both tips of each rod.

Source: https://www.youtube.com/watch?v=NM2KXvRGmpg

To complete this step, first print out the necessary jigs to complete this step. Next, find a caliper to use, as it’ll become your source of measurement verification (not really, but we’ll explain this later).

Hammer
Rubber Band
A table that you can sacrifice
2 * M2 Screws + 1 * M3 Screw

Print Jigs:

Steps:

Fit caliper clamps into the teeth of the caliper, this may require some brute force.

Then screw them on tightly.

Drill hole into collets to ensure rod fits into it, then assemble them with the PCBs, and superglue the balls on after

Put Rod in Rod Guide, attach assembled collets to both ends of the rod. Then fit them to caliper, and attach the rubber band

Set your caliper to 0. Use a hammer to bang one side against your “table” like so. Hammar until it reaches 0.2mm in delta

Tips

if your dents are bad, many reasons:

  1. Not hitting caliper and jig hard enough (going past 0.2mm is fine)

  2. Rod collet not assembled well (3D print is fine, but breaks easily)

  3. Human error

For us, instead of hitting the dent on both sides at time, denting 1 side at a time worked well, we just replaced one collet with a modified collet that doesn’t have the hole.

Rubber band collets

The next step is to push the rubber band collets onto the finished rods. Remember to orient the rounded side of the collet towards the two ends. For our build, it was oriented incorrectly and when we were trying to hook up the rubber bands, they would keep slipping off easily. Aside from this initial difficulty to assemble the stage, the error did not affect functionality so we did not fix it.

Since the holes on the collets are very small, we’ve found that using the rod as a drill tip and drilling it through the rubber band collet helps with sliding it on. It's also important to place the collets at the same distance from the edge for each rod.

Here is a picture of the rods with the rubber band collets on the wrong way :

This is the correct way: source

Electrical Assembly

Connections

  • The path: Encoder - SPI board - control board should be as short as possible. Keep the wire length to be less than 25 cm if possible. This is because SPI protocol does not do well with off chip connections and so we must try to keep this connection short for the communication to remain stable.

  • The encoders require JST 1.25mm pitch connectors. Since JST connectors are harder to disconnect, we convert it to a dupont connection which we can then easily plug/unplug. Below is an image of the connection:

Image of wire connections from encoder

Note: for the SPI board connections, refer to the PCB schematic in the original repository.

Software

The CMU HackerFab uses a custom fork of the Open Micro-manipulator located on github: github.com/hacker-fab/MicroManipulatorStepper with improvements on error checking, homing, and custom changes for our specific stepper motors.

As of now we require users to install PlatformIO (we recommend using the vs code extension). After installing PlatformIO open the project located in the firmware folder at /firmware/MotionControllerRP. Finally you can build and upload the code

Last updated