Meat PnP

Semi-automated pick and place machine and related tools

Similar projects worth following
I've made mistakes.
I have to assemble 1000 PCBs myself (& w/ friends).

I'm going to build some tools to make it less painful. But I'm going to try to be lazy and avoid spending more time building the tools than it would have taken to do the work without them.

The PCBs are for this project:

Because of the chip shortage I had to redesign the electronics 6 times and buy parts piecemeal when I could and ship them to my apartment. The cost to ship the parts to a fab house for assembly is too much relative to the modest art project funding we have. And I am nervous about sending out the parts anywhere because if they disappeared I would have no way to complete the project. So I am doing the assembly in my studio with the help from many friends and any hacky tools I can build or buy.

  • Meat PnP - v1

    Owen Trueblood07/20/2022 at 01:20 0 comments


    I took the gantry out of an old laser cutter, flipped it over, added legs, hooked up the steppers to an Arduino running GRBL, and made a laser cut tray to hold 6 of my PCBs at the end of an arm just below the "bottom" of the laser cutter, which is now the working surface.

    I cut one big square hole for loading the tray of PCBs and another small circular hole for placing parts. The gantry can move the tray around to position the footprint of the next part to be placed in the center of the hole.

    I had a USB microscope mounted with an LCD monitor to be able to see what I was doing better but eventually decided that was just getting in the way and eyeballs were good enough.

    Eventually I made a better tray that has magnets to snap in and a 3D printed part that fits onto the 80-20 and has alignment posts which fit into holes on the laser cut tray:


    I made a Python web server that communicates with GRBL over serial and presents a web UI to the user. The Python code loads up a CSV of part centroids that is generated from KiCad (File > Fabrication Outputs > Component Placement (.pos)). It makes this available to the web UI so the user can cycle the machine through the parts on the board.


    I bought some Joy-Cons from the Nintendo Switch because they are fun little controllers to use for robotics projects. They can be paired over Bluetooth and used like standard gamepads. There's a gamepad API for browsers. So I added support for controlling the machine from the web UI remotely using a Joy-Con. It can jog the machine at different speeds using the d-pad. The shoulder buttons move the machine to the next or previous part. Finally, there's a button to move the tray to the loading position.

    Calibrating Positioning

    The rigidity of my hacked gantry is very bad. Instead of just solving it by strengthening the gantry I solved it in code by adding a calibration routine where the user moves the 4 holes at the corners of the board into the center of the hole and tells the system which hole is which. Then on the backend the Python code finds an affine transform between the coordinate system of the machine and the coordinate system of the board. This handles translation and rotation (and technically skew but I really hope that's not present in the boards).

    Vacuum Picker

    I made a quick and dirty vacuum picker to use to pull the parts from the reels. It has one pump for sucking to pick up parts but also another pump for blowing to dislodge them if they get stuck. I quickly realized that pump wasn't necessary. Instead I cut a hole near the tip that I cover with my thumb. When I want to drop a part I take my foot off the vacuum pump pedal and pull my thumb off the hole.

    Parts Reels

    I printed a bunch of this part reel and put all my parts in them. That part reel design is great because it is parametric and easily adjusted for the different sized part tapes. Then I rearranged the parts in the CSV and the physical reels so they are ordered by how many there are on the board, starting with the most numerous part. I wrote how many of each part there are on top of each spool.


    It takes about 10 minutes to assemble a board once you get used to the setup. I've made about 20 boards so far, but have 180 to go (oof). You can see what they are for in this other HaD project here:

View project log

Enjoy this project?



Similar Projects

Does this project spark your interest?

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