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 tape 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.

  • Feed the beast.

    Daren Schwenke3 days ago 0 comments

    I've generated another parallel project to support this one.  It's a head actuated tape feeder.

    #P1 - Tape feeder 

  • Round and round (just give it time).

    Daren Schwenke7 days ago 0 comments

    Since I was re-printing everything anyway due to the heat damage, I decided I would try to print all the parts at 0.3mm nozzle size.  Well actually, I consumed my last 0.4mm nozzle a while back so this was more a choice of attrition.. but anyway,  0.3mm nozzle it was.

    Due to my previous haste, this required far more modifications than just changing the variable representing nozzle_dia in my code.  There were a lot more things dependant on nozzle_dia than I had accounted for, such as the ultimate thickness of the single wall print of the part_light_ring.  At 0.4mm this was still within the range of rendering a wall for Cura.  At 0.3mm, it was not.

    A couple failed prints later I realized that 0.3mm at a 45 degree angle was too thin, so it was stopping the rendering half way up for the angled bits and renderings those areas just exceeding the threshold as a bunch of partial lines.  I was firmly in the area of mathematical rounding for determining if a single wall should exist or not.  

    This of course, made a complete mess.  Doing partial lines for a single wall print just doesn't work.

    I multiplied the wall thickness by 1.44 (45 degree angle horizontal thickness for a 1.0 vertical wall thickness) for those areas, and now have good code again.  

    Looks like this worked.

    Second to last part to re-print, and I'm back in business. 

  • What a world.

    Daren Schwenke07/12/2018 at 03:54 0 comments

    All setup and back at it.

    My current prototype spent a few too many days in hot vehicles and some of the lightweight PLA parts.. melted.

    The mirror arm fared the worst with it's single extrusion width bridge.


  • Back in the Saddle Again

    Daren Schwenke07/04/2018 at 17:12 0 comments

    Several thousand miles later, my shop is finally appearing out of the chaos again.  

    Now if i can just stop bingeing on Westworld I'll be back to this soon.

    Doesn't look like anything to me..

  • Use the Source, Luke

    Daren Schwenke04/23/2018 at 08:52 0 comments

    I haven't read the fine print, but I see other users who are participating in the 2018 Open Hardware design challenge telling their followers to un-like and re-like their projects.  There must be a reason..

    So please un-like, and then re-like this project if you want to see this project move forward.

    I still have zero time right now as I'm moving in 7 days  and been busy packing up a huge house with 2 multi-discipline hackers living in it.  At the same time I've had to setup our RV for living/working.

    Needed to add some shielding here (the aluminum screen) to keep the inside and outside cellular antennas from feeding back and causing the amplifier to shut down.  Eventually I hope to document everything about it, but right now it just has to work.

    Moving and RV setup have been mind bogglingly huge tasks and have been going on for months now.  The end is drawing nigh though, so now I really need to focus.

    Still, I took the time to make a new Github, assign a license, and upload the hardware source for exactly what I've been using.

    It still also contains the source for the C1 as well as I haven't had the time to invest to split it up and document some of it yet, but hey... it's out there now.  When a 'Hey, I wonder...' project evolves into something public, things can get messy so don't judge.  :)

    Let me know if you think that the rendered stl files should accompany it.

  • Busy.

    Daren Schwenke04/10/2018 at 17:13 0 comments

    Sorry for the lack of updates, but it's been busy around here.  Moving and stuff.

    The lack of a suitable printer to just slap this onto also means the C1 needs to work first, and then I got distracted with this:

    I'll be back to this soon.

  • Dual color main light ring.

    Daren Schwenke03/16/2018 at 03:30 0 comments

    You know.. I have a multi-material mixing print head.  Perhaps I should actually use it.

    So I did.

    No actual active mixing, but I programmed the change from white to black at least.  I somehow found I could spare the time required for adding 2 lines of gcode (M163 filament percentage commands for the curious) at a layer change... mostly.  Well.. I liked the idea of the M163 command, so I implemented it within the guidelines of the actual standard.


    My implementation uses non reserved characters...  yes, gcode actually has rules people.... and it is 100x more precise.   I use a range of 100.0 to 0 instead of 10 to 0.  It doesn't matter much here as the swing is from 100.0 to 0, but your get the point.  Yes.. you may have assigned meaning to this Mcode definition, but in the process you used characters (in a very simple system) already assigned to other functions cause they fit your mindset..  And now we are all screwed.

    Sorry.. but coming from the 'other side' I'm annoyed at the general RepRap movement not following the rules.  

    But hey... usage equals reality...  Um... No.  

    Standards exist for a reason.  If you want to deviate, use the built in variables which allow for deviation, or define your own system.  Don't call it gcode unless systems designed to read gcode can actually do so.

    Bastardizing existing standards sucks, and I simply refuse to adopt that kind of M$ mentality.  Well... I have to admit M$ has been getting a lot better at this in the last few years.  But...

     You know how many hours I've spent of my life working around the stupid little changes "companies" have made to established standards, simply because it was easier or they wanted to add feature X and didn't want to do the associated work required?  I actually have no idea...  But I can tell you that I lived through the early days of the internet and that I still deal with this kinda crap for my "real job" on daily basis. Compared to actual problem solving, working around silly choices like these consume an absolutely huge portion of my time.

    So... I have chosen to implement something within the existing standard.  I had to change one character.... 

    Now is the time.  Resist!



    White to black is one of the things that the M2 does exceedingly well.  No thought or planning involved.  The sheer density of the pigmentation of the black filament takes care of everything.

    Going from black to white... that requires actual planning.

    So now I have the perfect light ring.  You can paint yours.  :)

  • A new angle on things.

    Daren Schwenke03/15/2018 at 16:23 0 comments

    Modeled a new groove mount using a single central bolt, and removed the extra plastic.

    The bolt screws through the plastic washer and into a nut glued into a pocket inside the body.  This allows me to tighten it down onto the end effector flange very effectively.

    Printed.  Fitted.  Looks great.

    The slant of plastic I removed makes it lighter and as a bonus I don't have to route all the wires through the body now.

    I'm really happy with it.

    The main light ring nylon diffuser is still too brittle and splits along layer lines instead of bending though.  I recently rebuilt the print head for the M2 and heating capacity was increased, so this may be just the need to do some further calibration.

  • Not groovy enough.

    Daren Schwenke03/14/2018 at 20:09 0 comments

    Added the removable groove mount, and I don't like it.

    I'm going to ditch using the three holes for mounting it and use a single central bolt/nut instead.

    On a good note, the snap fit for the main light ring works well.

  • Interchangeable mounting.

    Daren Schwenke03/09/2018 at 01:21 0 comments

    I've been thinking.. sometimes a dangerous thing.

    I think the groove mount should be removable/moveable.

    Then people can pick which one of the three mounting positions that makes sense for them, and change out the groove mount for... whatever.

    It will likely be a couple grams heavier as I'll need to reinforce each mounting position, but I'm ok with that.

    Working on it.

View all 43 project logs

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