Arcus-3D-P1 - Pick and Place for 3D printers

Open source, mostly 3D printable, lightweight pick and place head for a standard groove mount

Similar projects worth following
Part rotation and bottom looking vision using two 9g digital hobby servos.

Bottom vision is currently implemented by using the top vision and a flying set of mirrors.

At 59 grams including the camera and mirrors, it weighs about the same as an E3D v6 hotend.

Standard groove mount, so you can just replace your hotend.


A pair of 9g digital hobby servos are utilized for part rotation and swinging a set of mirrors in front of the top vision to allow it to also provide the bottom vision.

360 degrees of part rotation is implemented, has an accuracy of about 1.6 degrees, and a best case rotation speed of 0.13sec/90 degrees.

The mirrors should be able to extend or retract in 0.19sec.

Full rotation and clearance for parts up to 21.5x21.5x12mm is implemented. 

The current design including the camera weighs 59 grams which is lighter than an assembled E3D v6, and the goal is to allow this to fit in its place.

This should allow adapting any existing 3D printer with decent accuracy, Z axis speed, and a stable build platform for small scale pick and place.

Other parallel projects are addressing some of the remaining requirements such as an inexpensive vacuum source, 3D printable bump tape feeder, 3D printable drag feeder and 3-way valve.


It should be noted that the cheap, knock-off version servos will not work here for part rotation.  The measured accuracy of the knock-offs was almost 5x worse and they had significant backlash as well. This almost killed the project before it started as that was my original servo for testing.  

However, I was pleasantly surprised when I tried some still relatively inexpensive, but genuine manufacturer servos.  In this case, they were Tower Pro.  They exhibited basically zero backlash (as the potentiometer is tightly coupled to the output shaft), and accuracy within 1 degree for most of the scale.  As I'm using a 2:1 drive, that puts the overall accuracy at about 2 degrees.

There would need to be compensation for linearity if I used these for absolute positioning and temperature/timing issues could cause drift, but the nature of this task is relative if approached correctly.  You pick up a part, rotate, check the positioning, and then rotate it relative to the previous position.  This pattern will inherently correct for drift related errors.  They should perform that task just about as well as the common Nema 8 stepper solution.

Another caveat is that if the requested motion is less than 2 degrees, the servo sometimes doesn't move at all.  So I'm anticipating needing to code a minimum move size which backs off and then rotates to the target to compensate.

Lastly, a flying bottom looking camera doing vision during moves requires special sauce to work in OpenPnP.  It does have a defined path for implementation though.

A couple of these things may require modifications to OpenPnP to work, but I think the result will be worth it.

  • 1 × Raspberry Pi 3b
  • 1 × 2m CSI cable
  • 2 × 9g Geniune manufacturer Tower Pro SG90 servo
  • 1 × Amazon gear set
  • 1 × 2mm OD hypodermic tubing

View all 10 components

  • This is perfect...

    Daren Schwenke03/20/2019 at 01:15 0 comments

    I just got a little excited about this again.

    Cuda cores for hardware accelerated machine vision, 4 cores of arm cpu, enough ram, gpio, and a raspberry pi camera port.  For $99...

  • Purpose.. Contribute!

    Daren Schwenke02/12/2019 at 03:57 0 comments

    In the grand scheme of things, this project currently does not have a defined purpose for me right now.  Everything I currently have on my plate does not require the population of > 1 board, or is getting hacked together on perf board.

    will be picking this up again as it bothers me to leave it like this, but you will have to be patient.

    In the meantime, you could download the existing source files, plop it on any 3D printer, and go to town.  I won't hold it against you.  

    If you need something from me which I forgot to make public, mention my name in Hackchat and I will assist you.  If you are in the Tampa area, perhaps you could even borrow the prototype...  :)

    If you do anything which advances the project, you will be added as a contributor.

    Thank you for your interest.

  • Flex

    Daren Schwenke11/03/2018 at 01:01 0 comments

    My base is way, way too flexible.  

    I can get about 1 cm of variation in the end effector position just by lifting a corner.  This explains a lot about the issues I've been having.

    My nice looking 1/2in oak faced plywood should have been my 3/4in plain Jane MDF apparently.

    I have some new 3/4in MDF parked by the door, and this time I'm going to do two layers with cross beams.  I need to route out the cable holes through, which in my current 'borrowed shop' situation, requires tools I need to use outside.  

    It's raining here in Montana, and has been for days.  MDF really doesn't like moisture.  I'll see if I have a window this weekend, although the forecast says Tuesday.  Wish me luck.

    <EDIT> No luck, and now it's snowing.  So I have cleaned up/moved stuff around my borrowed outdoor wood working area so I should be able to get this cut tomorrow rain or shine, or more likely.. snow.</EDIT>

  • It's not a good morning for Youtube.

    Daren Schwenke10/22/2018 at 15:06 0 comments

    3 minute video.  4 crappy versions.  Third try at uploading the last one, 69 minutes and counting to process it.  This has not been my day.

    Well I guess now at least I can stop focusing on the Prize and get back to more of the fun stuff.  :)

  • Cooked servo.

    Daren Schwenke10/22/2018 at 08:42 2 comments

    I cooked my SG90 mirror arm servo, and I don't have another one just like it.  I set the up position too high, so it was stalled the entire time I was figuring out why I lost half my light ring.

    It still works, ironically, but it gets really hot now, and moves really slowly.  Like 10 seconds per 1/4 rotation slow.

    I have the MG90 knockoffs which jitter terribly, and some HS-53 Hitec ones, without arms long enough.

    There is some super glue attempting to make the Hitec ones work.  Cross your fingers, and I might actually get a video done.


    And I cooked another one.  Limits were off by 2.5 degrees.  Homing set the servo to 0, which was just outside of the range.  Fixed in software now...


  • New spooling rods

    Daren Schwenke10/21/2018 at 06:58 0 comments

    Took a significant amount of time, and remade the spooling rods to be accurate in diamater to within .01mm.

    That should do it.

  • SPI chaining

    Daren Schwenke10/17/2018 at 18:16 0 comments

    I want to use the TMC2130 as my drivers, soldered on-board.  However, I don't want to consume a CS pin per chip to do it (as I don't have a lot of extra pins on the Pocketbeagle) and I can't figure out how to daisy chain them properly. (Section 4.2 of the PDF) Kind of important.

    I also wanted to be able to use the end of that SPI chain to onboard a simple shift register based open drain LED driver chip.  That gives me 8 more low current PWM outputs without consuming any more pins.  Then, terminate that SPI chain to pins, and I could just keep going...

    I don't think I'll be done in time, and actually have a working board the first time around going this route.  Time to make a choice.  :(

    I did find a nice starting point in this ready-made cape for import as a template into Kicad.

    As a bonus though, I have discovered UART based chaining with internal step generation and velocity control in the TMC5160 line though.  That would be very useful for the mass of steppers I use on the M2.  One serial line and power would be all that is needed to run them all.  Sweet, but off-topic.

    I'm going to slow down and do the Pocketbeagle board right.  I'll find something else to assemble.


    The consensus seems to be run the SDO to the SDI of the next driver, and bus the rest of the pins for chaining.  I'm past my deadline now though, so still going to slow down and do it right.


  • PCB.

    Daren Schwenke10/17/2018 at 03:53 0 comments

    I've had some personal stuff come up which has consumed a few weeks here, and will probably consume a lot more.  However, tonight I have some time.

    So, I'm designing a board in Kicad for this to run on a Pocketbeagle.  If I can pull this off, I should have just enough time to have the parts and board in hand. 

    Then, I can have this build itself for my entry video.  :)

    Oh.. have I mentioned I've never actually designed a board in Kicad before?  I just downloaded it.  I have watched a couple tutorials so this may work..  

    Most stuff I've done was just deadbugged or hand routed.  The 'best' work I've done up to point this was routed in my head, drawn using Gimp, printed on transparencies, and transferred using some spray photoresist.  That was an arcade cabinet Jamma 4 board switch.

    Wish me luck..


    Well that was confusing.  Turns out if you install the kicad-libraries meta-package, it doesn't install the symbols, but marks them as installed.  So... no parts.  Hours later, removed, purged, installed each package by itself.. now downloading 360mb.  That's better.


  • Milwaukee, Not bad..

    Daren Schwenke10/02/2018 at 08:11 0 comments

    Everything mostly worked, with a couple show stopping issues along the way.

    The 3D printer lost extruder 4 just after power up.  Don't know why yet.  All of my 'ready to go' gcode which used black, in other words... all of them, couldn't be used as a result.  cymKwt = Cyan, Yellow, Magenta, Black, White, Clear.

    So I improvised and pulled out a 2 layer butterfly model which I could quickly slice, and then added some color codes shifting to avoid the broken extruder, with a Perl script.  Probably the best accident I've had happen yet.  As long as I cared not for quality..  I could print them in about 2 minutes, and so pretty much every kid got one.  

    @OshCatPrince was captured here by @pdp7 sporting one.

    The actual project got a little screwed up in transport, and I lost positioning on the A axis endstop.  As the tuning is completely manual at this moment, I never got it back for the duration of the show.  Just too much going on for me to concentrate on any task for more than 5 minutes at a time.

    I also lost the use of the monitor which had my presentation slideshow on it.  That's probably the most sucky thing, as that had my website, repository information, the project point, pretty much everything people needed to know on it.

    So I just ended up explaining things a lot, and set it up looking pretty.

    Me, noticing my Pi camera wasn't plugged in..

    A day of handing it to people and never cleaning the optics = wow.. that's dirty... and green.  Resetting the camera fixed the green part.

    12mm and 8mm tapes, same LEGO mount.  The top for the third block was MIA by this point.  It probably ended up in the 'failures pile', from which I let people take stuff.

    By this point the batteries in my wireless keyboard were dead and I couldn't locate my spares until after the end, so my exposure would only move in increments of 50 with the mouse.  7,57,107..  The light is pretty bright and the exposure range goes from 1 to 1000.  It's about right at 35.  Above it was set to 7.

    It could have been better, but it certainly could have been worse.  I'll take it.

  • Milwaukee here I come

    Daren Schwenke09/29/2018 at 13:59 0 comments

    At the Milwaukee Maker Faire today and tomorrow. If you're in the area come on out!

    I discovered another issue and solved it. Turns out one of my spooling rods was a slightly different diameter. During the last iteration of rebuilding a schooling rods I replace them with the carbon fiber rods I use for the uprights. I thought I remember measuring them to make sure they were all the same, but I guess not.

    That was contributing to the X & Y axis not being at 90° from each other. I entered the correct value for the diameter for the oddball spooling rod and the issue went away. Yay. So I got it all tuned and perfect, and then took it back apart for transport.

    So I'm bringing an unfinished project to the Maker Faire, but I got a lot of those so I guess it's okay.

    Hope to see you there!

View all 105 project logs

  • 1
    Follow the videos.

    There are a number of videos, each showing a part as they were developed.

    This video shows the final assembly, of all the parts.

View all instructions

Enjoy this project?



jediminer543 wrote 03/10/2018 at 10:28 point

This is pretty awesome.

Do you have any idea when you will be releasing the files? My local hackspace has been wanting a pick and place facility for a while now, and has a couple of unused 3D printer frames lying around.


  Are you sure? yes | no

Daren Schwenke wrote 04/26/2018 at 23:20 point

Files are up.  Not cleaned up, but they are up.

  Are you sure? yes | no

Marc Peltier wrote 02/19/2018 at 11:10 point

Hi Daren!
I had guessed the organization of gear train, and the need for a 90° gearbox, between the servo output and the actuator gear.

I recently experimented with gears in POM, very cheap on aliexpress. com. There are all kinds of models, straight, in crown, or at 45°, with different numbers of teeth. The bore is generally 1.95mm, when they are designed to be pressed together on a 2mm shaft, or 2.1mm, when they are designed to rotate freely on the shaft.

I was able to resize the bore with my lathe, according to my needs. For the small series we use, it is better to base the design on existing gears, to be modified at the lathe. Moulds are very expensive!

You can probably also make the splines for coupling with the servo output by heat, deforming an existing POM part with a brass servo output coupler, used as a heated punch. A hijacked hot-end will be perfect for that...

  Are you sure? yes | no

Daren Schwenke wrote 02/19/2018 at 15:11 point

That is pretty much exactly the path I took and the parts I used.  The fitment depth is critical though to prevent backlash and binding which took some iteration.

  Are you sure? yes | no

Marc Peltier wrote 02/20/2018 at 09:38 point

Just an idea this morning:
Dismantle the servo. Mount the potentiometer directly on the Pick&Place rotary tube, and try to directly link the last pinion of the servo gear train to this tube, with no 90° deflection, making it a part of the servo system. By the way, you will probably be able to improve the transmission ratio, and in the whole the precision in rotation. The very short stroke of the Z-Probe should make it possible to find a pinion thick enough to take up this movement without loss of link.

Of course, this will completely call into question the beautiful symmetrical architecture that you currently have, but I'm sure you will be able to quickly find a new layout logic, just as satisfying !

  Are you sure? yes | no

Daren Schwenke wrote 02/20/2018 at 10:06 point

Yep.  If I can't get the accuracy I need with just the digital servo, reading the output shaft angle directly is one way to move forward.  The servo potentiometer is still only 180 degrees though and a rotary encoder of sufficient resolution to actually improve the situation would greatly increase the cost.  

Rolling your own encoder you would need at least 400 cuts in a disk to improve here.  3D printing that at even 1 nozzle width per cut is still too large to fit nicely in the current design.

I toyed with the idea of drilling some holes in the third to last gear inside the servo and adding an optical gate there (with the servo re-wired for continous rotation).  The PID loop would move to Machinekit which is well suited to do a good job at it out of the box. That would work and I even have a suitable gate in my parts bin.  I would rather not though.

There are even existing multi-turn servos which are not continuous rotation designed for RC sailboats too, but again... many times the cost.

In the end, I'll probably just live with whatever accuracy I can get here.

  Are you sure? yes | no

Marc Peltier wrote 02/20/2018 at 13:11 point

Many RC servo potentiometers have a 270° stroke. These 9g servos are very economical, and trying to make your P&P head with just two digital servo controls makes sense. It's attractive because it's simple. And you could make a speed daemon with that, installed on a delta robot !

If you give up this approach, then why not just use this type of stepper motor Ø15mm, with directly usable output pinion and integrated planetary reduction: 

2 PCS high torque 5 V dc 2 phase 4 fil Dia 15mm moteur pas à pas avec micro planétaire réducteur avec engrenage conique(China),searchweb201602_2_10152_10151_10065_10344_10068_10342_10343_10340_10341_10084_10083_10618_10630_10305_10304_10307_10306_10302_5722316_5711211_10313_10059_10184_10534_100031_10629_10103_10626_10625_10624_10623_10622_10621_10620_10142,searchweb201603_25,ppcSwitch_5&algo_expid=17e14cc8-4653-4261-ab15-56833755b9ca-4&algo_pvid=17e14cc8-4653-4261-ab15-56833755b9ca&transAbTest=ae803_5&priceBeautifyAB=0

You will get more than 2000 steps per revolution, about 2 turns/sec, with a backlash of about 5°, which can be cancelled by a spring. It is probably easier than using a position encoder and MachineKit...

  Are you sure? yes | no

Marc Peltier wrote 02/19/2018 at 06:35 point

Very well done !

I'm very happy to see this, because it's totally in line with what I imagine as equipment for my own Zatsit delta robot, very soon on KickStarter:

Zatsit does not need the standard mount. Do you intend to publish the STL files, or better, the design files, so that it is easier to make the necessary adaptations?

You can get very cheap front surface mirrors here :

Congratulations again!

  Are you sure? yes | no

Daren Schwenke wrote 02/19/2018 at 08:01 point

Thank you.

The source is a mess right now and I'd be embarrassed to release it.  I rushed it and most of my scaling and dimensional dependency best practices for OpenSCAD files went out the window. It's also started as an offshoot and is dependent on the code for the C1 so it would need to be split.  Eventually.

There are a couple bits like the right angle drive gears for rotation which require accuracy/fine detail beyond what any 3D printer can handle though.  I made the gears for the prototype by hand from existing injection moulded nylon gears, but it took a lot of patience and a couple tries to get them right.  If it works well, I'm going to look at getting them injection moulded with the servo splines built in.  Even then I think the only way to make the molds will be EDM.  Tiny stuff.

Thanks for the link.  I should be able to get a perfect set of mirrors here next time.  Still learning.  I got about 3 more tries here before I have to go spring for another $1 mirror.  Long term I'd definitely just source them cut to size, but this is something that people with a lot of patience can DIY to cut costs if I figure out how to do it and document it.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates