Skip to content


markmaker edited this page Jun 29, 2022 · 21 revisions
Clone this wiki locally


What is it?

A step up from the ReferenceStripFeeder, this light 3D-printed feeder can hold and reload cut pieces of SMT tape and protect the parts using a sliding cover. The cover can be opened/closed automatically by the nozzle tip. Feeders are printed in whole arrays. Uses computer vision and fiducials for setup and operation. Intended for prototyping and very small runs.

BlindsFeeder on Wood


Watch the Quick Demo Video:

Features and Use Cases

  1. Holds cut tape strips. Indexed to sprocket holes.
  2. Can be reloaded/reused.
  3. For taping/gluing down on a sturdy surface.
  4. Fast 3D print using an OpenSCAD parametric model.
  5. No additional parts or tools needed (except tweezers, double-sided tape).
  6. Multiple feeders can be printed in one array, even mixed in type.
  7. Covers prevent parts from falling out: allows off-machine preparation and storage.
  8. Two cover types: blinds cover and push-away cover.
  9. Blinds cover for tapes where part pockets are spaced out (e.g. most passives on paper carrier tape). The cover, having openings at the same pitch, can be shifted by half pitch to close up the parts. Uses almost no extra space on the machine table.
  10. The push-away cover can be used for tapes with tightly spaced parts (e.g. larger parts in embossed plastic carrier tapes). The cover will be pushed away from the parts as they are used up. Uses extra space for the pushed-away cover.
  11. Both covers are simply opened/closed using the nozzle tip.
  12. Nozzle tips pushing can be allowed/disallowed.
  13. All covers can be opened at Job start i.e. a special (sturdy) nozzle tip can be used to open all the covers. (Travelling salesman solver implemented to optimize the machine motion path).
  14. If nozzle tip pushing is not wanted, the feeder supports manual cover operation with vision-based “is open” check.
  15. Resilient "Green Screen" vision system (that's why the feeders must be green).
  16. Fiducials to accurately vision-calibrate the feeder local coordinate system (all the feeders in the array at once). Lazy evaluation, once per homing automatic calibration.
  17. Vision based “one-click” tape setup for the blinds cover: pocket centerline, pocket size, pocket pitch (for the push-away cover, the pocket pitch must be entered manually).
  18. Vision based calibration of the blinds cover push edges.
  19. Tolerates mechanical imprecision of all kinds, including attaching feeders to the machine by simple means (+/-2mm tolerance). Supports full affine transformation (position, rotation, optionally shear).
  20. High accuracy and vision robustness by using knowledge of the EIA-481-C standard for carrier tapes and the 3D printing model, i.e. all the important local coordinates are made to be integral 1mm, 2mm or even 4mm multiples.
  21. Shared properties of the arrayed feeders (such as fiducial locations etc.) are automatically synced.
  22. Can later move/rotate a whole feeder array on the machine table, by recapturing one fiducial (move) or two (move and rotate).
  23. Z height capture.
  24. OCR/QR-Code part recognition.

Setting up a Feeder

Modelling the Feeder

The feeder is created using the cool Open Source program OpenSCAD. Download and install it to proceed.


To get the feeder's OpenSCAD model files, it's easiest to extract them from OpenPNP, so we need to add the first BlindsFeeder right now:


Then press the Extract 3D-Printing Files button. OpenPNP will ask you where to save and then open the two files.


You can also get the newest ones from GitHub (i.e. regardless of the version of OpenPNP you have).

There are two files, the BlindsFeeder-3DPrinting.scad and the BlindsFeeder-Library.scad. Go to the first one, which is used to customize the actual feeder 3D-print. Just press the Preview button to see the standard example:


Rotate the preview for the Y axis to point downwards to get the standard view (why, will be explained later).


In the source code window, you see several TapeDefinitions. You can use those to define the geometrical properties of your SMT tapes and assign names to them. You can have as many as you like, and there is no need to delete any, as you can later decide which to print and which not. The idea is that you will build up a repository of proven TapeDefinitions over time.


The parameters (and there are more available) are all documented in the BlindsFeeder-Library.scad file. We'll only explain the most important ones here.


Measure your tapes or look at datasheets for parts/tapes that you don't have yet. There are generic datasheets that may also help.

Use the nominal tape_width: must be 8mm, 12mm, 16mm etc. (increments of 4mm). Any inaccuracy in the real tape width must not be entered here. Instead, we will adjust these later, using tape_play.

Use the nominal pocket_pitch: must be 2mm, 4mm, 8mm, 12mm etc. (increments of 4mm).

Get the tape_thickness, pocket_portrusion from the datasheets or measure from the physical tape. You probably need a caliper. But don't worry too much, the printer can only resolve this in layers of e.g. 0.2mm and that's good enough.

The pocket_width is the width the physical pocket across the tape. You can make it a bit larger, as long as there is space. The model will make the blinds opening in the cover slightly larger than that.

tape_play, cover_play (negative or positive) are empirical. Start from the examples. There is more about those in the Advanced section.

Building up the Feeder Array

NEW VERSION: newer OpenPnP versions have changed the way to define the tape lanes (see below this section for the old way):


Use the margin_length_begin parameter to set aside a margin for OCR Labels and visualize them:


There are many more parameters available. Open the BlindsFeeder-Library.scad file to look them up, then copy them into your BlindsFeeder-3DPrinting.scad file at the call. For example, if you want to change the floor_thickness, add it like so:

// Create the feeder array with these tape definitions.
// Note the BlindsFeeder has a myriad of parameters you can tweak, the ones used here are just the most important. 
// See the Library file to learn more. 
rotate([0, 0, 180]) BlindsFeeder(
    // Tape length from feeder edge to edge (not including the margin), usually multiples of 4mm.
    // Other values are supported if you manually adjust the default 2mm edge distance in the OpenPNP feeder.
    // The feeder floor thickness. This feeder is based on the idea that it is taped/glued to a sturdy 
    // surface. No need to be very thick.

    // Want to print the label?

    // For OCR, add a margin at the begin of the tape.
    . . . 

OLD VERSION: Once you've defined your TapeDefinitions, you can multiply and mix them to build up a feeder array i.e. print many feeders in one piece (at end of the BlindsFeeder-3DPrinting.scad file):


The tape_length, should again be specified in multiples of 4mm.

The arrayed_tape_lanes and the arrayed_tapes contain the number and definitions of tapes to be arrayed. Just set the lanes entry to 0 to not print a tape definition at all (no need to delete slots from the arrays).

You can set debug=true to see how the feeder will look when the covers are mounted.

Creating the STL File

Once you're ready, press the Render button. This will now calculate a true solids model. Takes a while.


Then press Export as STL:


3D Printing the Feeder

Import the STL into your slicer. PrusaSlicer for a PRUSA i3 MK3 is the example here:


Print Settings

The Print Settings (derived from 0.2mm SPEED MK3) have only been changed minimally (indicated by the orange Unlocked Lock symbols):


The essential one is "Detect thin walls", that allows the slicer to create walls that are only one extrusion thin.

Reducing the Solid layers settings speeds up the print (only for embossed plastic tapes).

The extrusion widths have all been unified for printing speed. With these, the slicer will not disrupt the fast rectlinear filling pattern across multiple tape lanes of varying height.


Filament Settings

You need a vivid green filament to allow for the "green screen" computer vision effect that the BlindsFeeder uses extensively. Other vivid colors will work too, but you will have to more profoundly tweak the OpenPNP vision pipeline. I recommend PETG because it is easy to print, doesn't smell and is surprisingly tough and elastic.

Measure your filament. This is important for the precision we need (and for repeatability):


Enter the Diameter and also make sure to set the correct temperatures given by the filament manufacturer. The Extrudr PETG signal green I used, surprisingly needed 20°C less than the generic PETG profile (and it mattered).


Slice and Export The G-Code

Use the slicer and then press Export G-code to write the print to the SD card.


Side Note: Don't try printing using USB. The filigrane structures of the BlindsFeeder create so many G-codes per time unit that the serial transmission and/or the G-code interpreter/motion planner are overwhelmed. The Printer slows down to a crawl, especially on the sprocket thorns. The quality of the 3D print is affected by this, the sprocket thorns come out differently. It still does that to a degree even from the SD card (guess that's the 8bit controller finally showing its limits).

3D Print

Getting the first layer right, is probably the key element for success.

Be sure to prepare the print bed with an adhesive. Having single extrusion structures on the first layer, it simply won't work without. I use a 3D-printing adhesive spray with very reliable results. Use plenty, until the platter looks slightly wet for a moment.

Also make sure your first layer calibration is right. Follow the manual of your printer.

Then go for it:


After the print, you might want to add an anti-static coating and let it dry (for ESD sensitive parts, and for all 0402 packages, because those will fly out of pockets just by static forces).

Mounting the Feeder

Using double-sided tape or even glue, mount the feeder on a flat sturdy surface. The mechanical stability comes from the surface, not the 3D print. The flat surface is also essential to give the feeders the right tension against their covers (otherwise it will bend backwards and the covers will just fall out).


You can directly attach the feeder to the machine table or use a detachable "slate" design. The BlindsFeeder nicely supports the later, because it can work with mounting tolerances of up to +/-2mm through the use of fiducials.

Loading Tapes

Align with the sprocket thorns and wedge the tape in, sprocket side first. I use the smooth back of the tweezers to press both tape edges down. Cut to length.


Make sure your feeder is now rock stable. If your "slate" is too light to damp vibrations, clamp it down on a table.

Now remove the cover foil, carefully. It is usually no problem with 0603 and up, but for 0402 it can be tricky.

Closing the Cover

For 0603 and up: Align the cover with the blinds openings between the parts (closed position) and press-snap it down.

For 0402: Better to very carefully slide the cover in from the side. Take your time.

Positioning and orienting the Feeder on the Machine Table

The feeder position and orientation is defined by the four fiducials (the diamond shaped holes in the corners). The first fiducial is the one with the square besides it. Note the fiducial numbers from this graphic for later.


Feeding starts from the right edge, this side usually points towards the center of the machine table.

Obviously the nozzle needs to be able to reach all of the feeder area (and a bit beyond).

Ideally the camera can reach all four fiducials. However the feeder will also work if it can reach the right half of the feeder (highlighted in yellow here). This way you can exploit more of the space on your machine table. The BlindsFeeder will automatically do the right thing, if you have defined and enabled your machine Soft Limits.

Feeder Setup in OpenPNP

Once the feeder is mounted on the machine and loaded with tape (computer vision won't work without), we can go back to OpenPNP and the BlindsFeeder that we already added earlier (or just add a new one).

You can give the feeder a name (use F2 on the list entry). A structured naming scheme, numbering the array and then individual feeder on the array, is recommended. Something like "001_01 Resistors 1%". OpenPNP can sort feeders by name, so they will be properly grouped this way.

You might want to enable the feeder.

Pin down the Fiducials

To define the feeder array position and rotation, we need to capture three out of the four fiducials. You must use number 1 and 2 (see the graphic above), but you can freely choose 3a or 3b as the third. Usually 3b is the better choice (faster to reach).

Capture them using the camera grafik or the nozzle tip, if not reachable by the camera grafik.

It is best to always press Apply after each capture, as there are some automatisms at play internally (that will come handy later).


Once you pinned down the first feeder in the whole array, it becomes real easy.

Auto Setup of the Tape

Roughly move the camera onto the parts in the tape and press Auto Setup. Using computer vision i.e. the "green screen" effect, OpenPNP will automatically recognize the blinds in the cover and determine the tape centerline, the pocket pitch and the pocket size.


The BlindsFeeder implements the EIA-481-C standard and its own geometry makes sure, all the relevant specs are integral millimeter values. Therefore computer vision does not need to be super precise.

Rotation in Tape


The Rotation in Tape setting must be interpreted relative to the tape's orientation, regardless of how the feeder/tape is oriented on the machine.

Proceed as follows:

  1. Look at the neutral upright orientation of the part package/footprint as drawn inside your E-CAD library.

  2. Double-check you are in the library, do not look at the part in the project PCB, this is not neutral!

  3. Note how pin 1, polarity, cathode etc. are oriented. This is your 0° for the part.

    library part

  4. Look at the tape so that the sprocket holes are on top. This is your 0° tape orientation (EIA-481 industry standard).

  5. Determine how the part is rotated inside the tape pocket, relative from its upright orientation in (1). Positive rotation goes counter-clockwise, negative clockwise. This is the Rotation in Tape.

    Rotation in Tape

  6. Our example has a 90° clockwise rotation from its upright orientation in (1), so the correct Rotation in Tape is -90°.

Setting the Z

Like on other feeders, set the Part Z. For the BlindsFeeder this the surface of the tape. With paper tape, best capture it between the pockets.


Lower the nozzle tip down until it barely touches the tape, then press the Part Z capture button.


Allowing the Nozzle Tip to Push the Cover

Before the BlindsFeeder can automatically open and close a cover, you need to set up the Nozzle Tip's Push and Drag Usage:


Open and Close the Cover Edges

You can now press the Calibrate Cover Edges button to find the best pushing offsets for opening and closing the cover. OpenPNP uses computer vision to optimize this automatically.

Then test grafik and grafik.

Hint: use the Pick Location button to have a look with the camera:



Choosing when the Cover will be opened

You can choose when the cover will automatically be opened.


  • Manual: The user is responsible to open the cover manually. OpenPNP will just go ahead and pick.
  • CheckOpen: The user must still open the cover manually, but OpenPNP will check if the cover is open using computer vision. If not, the operation is stopped. The check is only performed before the first pick after machine homing, or after pressing the feed count Reset button.
  • OpenOnFirstUse: The cover is opened before the first pick after machine homing, or after pressing the feed count Reset button.
  • OpenOnJobStart: The cover is opened when the job starts. This happens collectively for all the BlindsFeeders with this setting. OpenPNP solves the Travelling Salesman Problem using Simulated Annealing to optimize the path among the feeders. If the pick happens outside a job, or if the feeder wasn't opened on job start (feeder enabled later, reloaded tape and reset, etc.), it behaves like OpenOnFirstUse.

You can also use the Open / Close all Covers buttons.

OCR / QR Code

The BlindsFeeder also supports OCR and Barcodes to detect parts automatically, similar to the ReferencePushPullFeeder.

BlindsFeeder with OCR

You can add OCR or Barcode (QR-codes etc.) labels on the margin of the feeder. Their position is automatically calculated.


OCR Action determines the OCR functionality:

OCR Action

  • None: OCR Switched off
  • CheckCorrect: Checks if the part in the feeder is correct. If not, the running job/action is interrupted.
  • ChangePart: Changes the part in the feeder automatically. If this happens during a job, the job is interrupted after all the feeders have been handled.

OCR Text Orientation determines whether the text runs away from the tape of towards it, i.e. it can turn the text upside down, if the feeder is oriented towards the left:

OCR Text Orientation

OCR Margin sets the width of the label. Set a negative width, if youz want the label on the other side of the feeder (not recommended).

OCR Font can set the font used for OCR. It is highly recommended to use a monospace font. Make sure the font is installed on the machine that does the recognition (it is used to create character templates). Barcode/QR-Code recognition is enabled by selectting the [Barcode] font:

OCR Font

Font Size [pt] sets the OCR Font size. It must be accurate to get good recognition results.

The Set OCR Settings to all button can distribute OCR settings to all BlindsFeeders on the machine.


Use the Edit Pipeline and Reset Pipeline buttons as usual.

Pipeline, when set to a normal font:


Pipeline, when set to [Barcode]:


More Feeders on the same Array

For the next Feeder on the same array, you can go directly to the Auto Setup ("one click setup"). OpenPNP knows that the camera position is on the area already pinned down by the fiducials of the first feeder. It can simply copy the fiducials (and other information) over.

The feeders are now linkend and all the common information is constantly synced, if you change it on any one of them.


TODO: other cover types etc.

Adjusting Play Values

(preliminary, copied from group discussion)

Be sure to set your filament diameter precisely in the slicer, then print small sample feeders. TIP: you can print a series of almost identical TapeDefinitions where you vary the tape_play, cover_play values systematically.

These play values can only be tested with the tape loaded, because the cover is designed with a combination of sideways and downwards clamping forces in mind. Using double-sided tape on the full underside, tack the feeder on a flat hard surface (important, so it can't bend against the covers' spreading forces), load the tapes, peel off the cover foil, and then test how easy it is to move the cover. The cover must move quite easily but there should be no skidding after a fast push.

WARNING: if the cover really sticks, don't try on the machine. No point in ruining your nozzle tips. Forget lubricants, they might have side effects for soldering and it really should work without.

Note that PETG takes a day or so to really settle. The cover will slide much more easily after that. Also be aware that the longer the feeder is, the more friction the cover will get, so don't jump up from printing a tiny sample to filling up your print volume in one step. Also print multiple lanes to get a representative side-by-side tension.

These tape_play, cover_play are forgiving for 0603 and up. I hope my examples will mostly just work. For your 0805 "bricks", I expect you to get it right on the very first try. Actually, everything is very easy for 0603 and up. You can just snap in the cover on top of the parts without danger of parts jumping out. Just ease in the cover edge with the blinds first, align the "closed" position and then press the whole cover in. Don't be afraid, you can twist and pinch a PETG cover a lot before it gives.

Having said that, things can be quite frustrating to get right for 0402 (so don't start there). The 0402 is so hard mostly because the cover must not only just "be there", but also press down just right on top of the tape to keep these incredibly tiny parts in their very shallow pockets. If this is not just right, the parts will be "rolled" into the air gap between cover and tape. It is quite a challenge to get the balance between this pressing-down and too much friction right. Expect to print a few :-)

My hope is that once people get it right for their printer model, they can reproduce 0402 feeders reliably, anytime. It works for me and my PRUSA i3 MK3. And I hope that the community will share back these tape_play, cover_play values and other tips so others with the same printer model can just get it right on the first try. Everybody: If you have a printer other than PRUSA i3 MK3, please report back your findings, thanks!

If parts keep jumping out, I found that an anti-static coating on the feeder helps. This anti-static coating is also a must for ESD sensitive parts, I guess.