3-bit Mechanical Punch Card Reader

by chris, published

3-bit Mechanical Punch Card Reader by chris Nov 3, 2012

Featured Thing!

0 Share
Download All Files

Thing Apps Enabled

Order This Printed View All Apps


Liked By

View All

Give a Shout Out

If you print this Thing and display it in public proudly give attribution by printing and displaying this tag.

Print Thing Tag

Thing Statistics

27763Views 8783Downloads Found in Mechanical Toys


This is a proof-of-concept, 3-bit Jacquard-style, all-mechanical punch card reader. The design was inspired by designs in a textbook called "The Mechanism of Weaving" by T.W. Fox (it's about 100 years old, but I found a copy on Amazon), and adapted to work within the limitations of my Makerbot ToM printer. It is a single-cylinder, single-acting, positive-action device. This design could readily be adapted to a higher number of 'bits' (needles) by re-designing only a few parts. With minor modifications, it should be suitable to mounting over a miniature loom, with the bottom eyes of the hooks lifting healds or warp threads directly. This is probably as impractical as it sounds.


These instructions probably miss some important details, and I will try to update them as they are discovered. Feel free to chime in in the comment section as well.

  1. Print out 4 copies of "Cylinder_wall.stll", and 2 copies of "Cylinder_end.stl". This parts should fit together pretty snugly to form the card cylinder that the punch-card chain gets wrapped around. Tape or glue is probably needed to secure things (I used blue painters tape, and then just punched holes corresponding with the holes in the cylinder walls).

  2. Print 2 copies of "hook cage wall.stl" and "hook cage wall lower.stl". These will form the walls of the main 'chassis'

  3. Print 2 copies of "needle holder.stl"

  4. Print 2 copies of "rail holder back.stl"

  5. Print 2 copies of "rail holder front.stl", but print the 2nd one as a mirrored copy of the first (they attach to either side of the chassis).

  6. Print 1 copy of "hook plate.stl"

  7. Assemble the main chassis! Press the hook_plate through the two copies of 'hook cage wall lower', with the raised rectangles on hook_plate pointed downward. Using m3 nuts/bolts as necessary, attach one needle_holder along with the rail_holder_back objects to the two copies of hook_cage_wall and hook_cage_wall_lower (needle_holder goes in between the hook cage walls, the rail_holder_back objects should both be outside the hook cage walls). The back of the hook_cage_wall_lower objects have the cantilevered hole for the small_drive_gear. Using the rail_holder_front objects and the other needle_holder, bolt together the front side as well (the flat spring that protrudes from rail_holder_front should be on top on both sides.

  8. Print out two copies of cylinder_rail.stl.

  9. Print out two copies of gooseneck.stl, being sure to mirror one of them (they go on either side of the chassis, and attach to the cylinder rail objects to horizontally translate the cylinder during a cycle).

  10. Print out two copies of griff_end.stl. Procure a single 5/32" brass tube, and cut it to be ~3.6" long. This tube will eventually get pressed into both of the 'griff_ends' and be used to raise/lower the hooks.

  11. Print out 3 copies of hook.stl

  12. Print out 3 copies of needle.stl

  13. Print out two copies of small_drive_gear.stl.

  14. Print out two copies of griff_drive_wheel.stl.

  15. Print out two copies of griff_drive_linkage.stl

  16. Print out two copies of griff_drive_linkage_cap.stl

  17. Print out two copies of drive_wheel_axle_A.stl and two copies of drive_wheel_axle_B.stl

  18. Using m3 nuts/bolts as necessary, use drive_wheel_axle_A and drive_wheel_axle_B to sandwich a copy of the griff_drive_wheel through both sides of hook_cage_wall_lower, with the peg rising from griff_drive_wheel rising outward, away from the chassis on both sides.

  19. Using m3 nuts/bolts as necessary, use the griff_drive_linkage_cap to sandwich the griff_drive_linkage between the cap and the griff_drive_wheel. It should move fairly easily. The 'long' cylinder protruding from the griff_drive_linkage should extend towards the middle of the chassis on both sides.

  20. Using an m3 nut/bolt, slide the two copies of small_drive_gear through the cantilevered holes in the hook_cage_wall_lower so that they engage with the griff_drive_wheel gears and bolt them together. You should be able to spin the small drive gear assembly and have it spin the two larger griff drive wheel gears. Be sure that the griff drive wheel gears are both in the same position when you bolt the small drive gear together, so that the linkages attached to both can raise the griff on both sides in unison.

  21. Push the 5/32", 3.6"-long brass rod into one of the griff_end objects, and insert the griff_end into one of the slots in a hook_cage_wall so that the brass rod is protruding towards the inside. Push the griff_end through the free hole in the griff_drive_linkage. Push the other griff_end through the slot (and griff drive linkage) on the other side, and push them both to the top (where the hook_cage_walls can both flex outward a bit). Without breaking anything, try to insert the free end of the rod into the other griff_end. You should now have a brass rod capped by two griff_ends that can move vertically in the slots of the hook_cage_walls. You could also do this step when you assemble the chassis earlier, but this seemd to work well enough for me. When you rotate the small drive gear now, it should move the griff up and down as the griff drive wheel rotates.

  22. Insert the two cylinder_rail objects into the cylinder rail holders on either side, such that they can slide freely back and forth. The 'long' side of cylinder_rail should be twoards the front, and the notch cut out of the middle should point towards the inside of the chassis.

  23. On both sides, slide the gooseneck over the protruding cylinder end use an m3 nut/bolt to attach it to the cylinder rail. The protruding tab at the bottom of the gooseneck should lay flush in the notch on the cylinder rail. When you rotate the small drive gear now, the griff should move up and down as before, and the rails should move forward and back at the same time.

  24. Use long m3 nuts/bolts through the hole at the 'front' of the rails so that the bolts extend towards one another. A nut should be able to sit flush inside the rail and hopefully won't move too much, allowing you to screw it in from the other side. As you're installing the screws, insert the cylinder so that it hangs between them, and can rotate freely. I used another 5/32" brass rod and put it through the cylinder, cut so that it is more or less flush with both of the cylinder ends, and had the screws insert into that to try to reduce horizontal play, but this shouldn't really be necessary if the cylinder is assembled rigidly.

  25. Finally, print out two copies of the cylinder_catch.stl object, and attach them using an m3 nut/bolt to either side of the hook_cage_wall above where the rail_holder_front objects sit. They should project forward, with the 'catch' extending down past the pegs that protrude from the cylinder_ends. As the cylinder slides backwards during the cycle, it should catch on the cylinder_catch and rotate the next punch card into place.

  26. Now, insert the three hooks so that they extend downwards through the three vertical slots in the hook plate. This might need a bit of sanding to slide freely. The two protruding tabs in the middle of the hooks should prevent them from falling all the way through.

  27. Take the three needles and insert them into the needle holders on either side. The 'short' side of the needle (one side should be slightly longer than the other) should be towards the front, so that it protrudes less towards the cylinder than the out the back side. Flex the needles gently so that the 'notch' in the middle goes around the corresponding needle. The bottom protruding tab on the hook should now rest on the 'notch' in the needle.

  28. If you rotate the small drive gear now (with no cards in place), the cylinder should move in and out, rotating every time it moves out, and the griff should lift the three hooks once on every revolution, before pushing them back down and starting a new cycle.

  29. Print out as many punch cards as you would like (at least 4!), and use pliers/scissors/knife to modify the pattern on them. A hole means that the corresponding hook will be raised when that punch card is read. Lace them together into a chain using thread at the corners, and hang them over the cylinder to load your 'program.' This is probably best done when the cylinder is removed, but it should be relatively easy to remove/re-install.

These punch cards should really be made out of thin card-stock, since the clearances are so tight, but I temporarily lost access to a laser cutter due to the recent hurricane. The needles may need filed slightly due to the increased thickness of the printed punch-cards.

Enjoy your tiny jacquard-style punch card reader!

More from Mechanical Toys

view more

File Name



All Apps

Auto-magically prepare your 3D models for 3D printing. A cloud based 3D models Preparing and Healing solution for 3D Printing, MakePrintable provides features for model repairing, wall thickness...

App Info Launch App

Kiri:Moto is an integrated cloud-based slicer and tool-path generator for 3D Printing, CAM / CNC and Laser cutting. *** 3D printing mode provides model slicing and GCode output using built-in...

App Info Launch App
KiriMoto Thing App

With 3D Slash, you can edit 3d models like a stonecutter. A unique interface: as fun as a building game! The perfect tool for non-designers and children to create in 3D.

App Info Launch App

Print through a distributed network of 3D printing enthusiasts from across the US, at a fraction of the cost of the competitors. We want to change the world for the better through technology, an...

App Info Launch App

Quickly Scale, Mirror or Cut your 3D Models

App Info Launch App

3D Print a wide range of designs with Treatstock. Easy to use tools to get the perfect result. The global 3D printing network that connects you with high-quality and fast working print services nea...

App Info Launch App

This is awesome. I've been reading the mechanism of weaving, and thinking about building a Jacquard mechanism. I would probably want to design it to handle at least 32 yarns at a much narrower spacing though.

Give it a shot! I have a working prototype with 10 hooks across (about the most I can do width-wise while keeping to my business-card-sized punch cards) and proper spring-driven needles. I would love it if someone could figure out how to do multiple rows and have it work well.

The book mentioned is out of copyright in the US and is available online here:


On a brighter note, I bet this could be adapted to knit rugs, or in a circular configuration to make socks.

 I'll give 1000 internet-points to the first person to actually knit something using this! You could probably fit 8 hooks across without issue if you modified a few parts on it.

At 3 bits you can represent 8 different states and, coincidentally, 8 just so happens to be the number of different commands in the brainfuck language.

You could very well turn this into a program tape reader for a steam-powered brainfuck interpreter.


 Yea thats why I want to leave the USA and live in another country where the majority of people arent a bunch of raging assholes.

I'm afraid you might have misunderstood me, brainf is a rather unfortunately named extremely minimalistic programming language.

As it is extremely minimalistic it should lend itself well to making a printable interpreter or in other words a true turing complete computer! You could probably even use the input and output functions to control a RepRap.

In fact, I wouldn't be surprised if the gate count for such an interpreter would be under 100 gates! Of course, you'd need someway to do memory that's reasonably sized...