Close
0%
0%

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.

Overview

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.

Caveats

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

  • It's not a good morning for Youtube.

    Daren Schwenke4 hours ago 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 hours ago 0 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.

    <EDIT> 

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

    </EDIT>

  • New spooling rods

    Daren Schwenkea day ago 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 Schwenke5 days ago 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.

    <EDIT>

    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.

    </EDIT>

  • PCB.

    Daren Schwenke6 days ago 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..

    <EDIT>

    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.

    </EDIT>

  • 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!

  • Tuning... sucks.

    Daren Schwenke09/28/2018 at 07:34 0 comments

    Using vision has uncovered some annoying details about tuning for the C1 motion platform.

    Turns out if an axis not being perfectly planar in it's travel, due to an end-stop being even slightly off, that also throws off the X-Y linearity in a big way.  

    So even if you have the machine tracking perfectly along Y, but you have either of the front axis end-stops off by a tiny bit, X will track an angle which is not 90 degrees from the travel you get for Y.

    And so just when I have it basically perfect in all directions, I can then detect that my tripod kinematics numbers were off by like .5%.  So I fix that... and it throws off the endstops and axis scale again.  And then while adjusting the endstops, I break one.  So I redesigned them to be a bit thicker where it needed it... reprinted them all... and then started all over.

    Blew another entire day on that.  

    If people are going to remain sane, I'm going to have to implement visual homing.

    Also, my base plywood board I picked is not stiff enough.  With the camera I can easily detect the board flexing if I happen to lean on it.  I'll need to glue some cross bracing in underneath.

  • Visual tuning

    Daren Schwenke09/27/2018 at 12:22 0 comments

    Staring at a screen of full of the tops of Lego pegs for hours... where 4 pegs fills an HD image and every spec of dirt looks like a boulder.. the slightest mis-tuning will drive you absolutely mad.

    First I had to re-align the camera as the image sensor inside it was rotated by ~2 degrees.  It was also tilted by about the same.  I think I got that about as good as I can get it, so I glued it down.  In the process I disconnected the sensor from the board a bunch of times while under power.  Thankfully, I didn't destroy it.

    I also had a Star Wars flashback as the camera flew down rows of mountainous Lego pegs at high speed...  :)

    Now.. I can tell you this.  

    My motion platform is reliable, aka... my errors are consistent.

    And... it is still not tuned properly.  :)  Over 64mm, I'm off by about 1mm still.

    I should be able to pick any 8mm multiple of X or Y now, and see the same image (as the Lego sheet I'm imaging, the pegs are all at 8mm spacing).  They still shift a little.

    Eventually, I hope to use this to automatically calibrate everything, but I'm not there yet.

    Working on it..

  • Segmented light ring

    Daren Schwenke09/26/2018 at 07:20 0 comments

    With the latest light ring, I've split the ring into two parts internally.

    So now I can run 3 segments, 4 segments, or 7 segments depending on where I apply power.

    This will let me control the brightness without using PWM, and if I extended the shadow mask up to the top, light either only the outside or the inside as well.

    The latter would be useful if I'm still getting glare from the camera even with the ring moved way out.

    <EDIT>

    Well, it worked for the most part.

    I need to turn on 3 elements for down looking, and all 7 for the up looking camera to be in the same exposure range and the down looking is still a bit over exposed.   A lot better than it was though...

    </EDIT>

View all 102 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?

Share

Discussions

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.

Thanks.

  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)

https://fr.aliexpress.com/item/2pcs-2-phase-4-wire-Dia-15mm-stepper-motor-with-micro-planetary-reducer-high-torque-micro/32701351677.html?spm=a2g0w.search0104.3.28.9f4d765fv3pf93&ws_ab_test=searchweb0_0,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: www.zatsit.fr

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 :

https://www.surplusshed.com/search.php?search=front+surface+mirror

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