Introduction: Digi-Comp I Redux
This Instructable is my tribute to the individuals from the 1950's and 60's that helped to promote computer learning by marketing simple electric or mechanical "computing" devices. While not what we would consider true computers by today's standards, these machines were ingeniously designed, shipped with well written and instructive manuals, and most importantly were affordable to the average person.
Lately I have been making replicas of some of these classic "computers". Originals are now rare and very expensive to buy when they infrequently appear for sale on eBay. In fact most of my replicas were modeled from photos because I could not find or afford an original.
Today's Instructable is a little different. It's a brand new machine that is a "mashup" of the following classics:
|Digi-Comp I: My new design is mostly based on the mechanics and "programming model" from this machine.|
|Digi-Comp II: The look and feel of the new machine came from both my Digi-Comp II replica and the Digi-Comp I.|
|Minivac 601: From the Minivac 601 I used the old telephone switchboard patch cord mechanism to connect the solenoids to the proper logic elements.|
|GENIAC Redux: The GENIAC Redux replica used magnetic reed switches and magnets to implement the logic elements. My new design follows suit.|
I wanted my new machine to have the wonderful ascetic of these vintage models that I know and love. I want people to believe that it could in fact have been from the 50's or 60's. However since it is not a replica I didn't feel compelled to limit myself to the technologies of the era. What does this mean? Read on and find out. In the mean time here is a short video of Digi-Comp I Redux counting to 16.
Along with the STL files and instructions for this project, you will find a PDF of the manual that came with the original Digi-Comp I. All of the experiments from this manual can be "programmed" and "executed" on the Digi-Comp I Redux design presented here by following the manual's "coding sheets". In addition this new design adds ONE EXTRA BIT of precision, DOUBLING the numbers that can be expressed from 8 to 16! (Sorry I couldn't resist. You have to read some of the ads that were use to sell these vintage devices.)
I can't give enough credit to companies and the original designers of these awesome educational machines:
- Digi-Comp I - E.S.R., Inc. - William H. Duerig, Irving J. Lieberman, and C. David Hogan
- Digi-Comp II - E.S.R., Inc. - John Thomas Godfrey
- Minivac 601 - Scientific Development Corporation - Claude Shannon
- GENIAC - Designed and marketed by Edmund Berkeley
My design is based solely on their inspiration and skill. All of the 3D printable parts were modeled using Fusion 360.
In addition to the printed parts you will need the following:
- 20 Smooth Edge Lug Terminal Flat Connector - Digi-Key part number 36-4004-ND
- 40 0.089" (2.26mm) Eyelets Brass, Tin Plated - Digi-Key part number 36-35-ND
- 30 Premium Brushed Nickel Round Magnets 6 mm diameter X 3 mm height - Amazon
- 20 Jumper Wires with male connector at one end suitable to connect to an Arduino Uno - Amazon
- 40 N/O N/C SPDT Magnetic Switch Reed Switches 2.5 mm x 14 mm - Banggood
- 8 Medium Push-Pull Solenoid 5V - Digi-Key part number 1528-2797-ND - Adafruit Product Id 3992
- 1 ELEGOO 8 Channel DC 5V Relay Module - Amazon
- 1 ELEGOO UNO R3 Board ATmega328P (or equivalent) - Amazon
- 1 9V 1.5A power adapter with 5.5 mm x 2.1 mm plug for Arduino - Amazon
- 1 5.5 mm x 2.1 mm power jack (optional) - Digi-Key part Number 486-3380-ND (or use battery pack)
- 1 6V 2A power adapter with 5.5 mm x 2.1 mm plug for solenoid power (optional) - Amazon (or battery)
- 1 4 AA cell battery holder (optional) - Picked one up at my local surplus store (or use power adapter)
- 16 M3 x 4 mm bolts
- 12 M3 x 10 mm bolts and nuts
- 2 M3 x 12 mm bolts and nuts
- 3 feet (or so) of 22 AWG hookup wire
- 20 22-16 Gauge Butt End Connectors - Hilitchi 100pcs 22-16 Gauge Butt Insulated Splice Terminals Electrical Wire Crimp Connectors - Amazon
- 20 Taper Pins - Spaenaur part number 239-497
- 40 feet (or so) of 20 AWG Hookup Wire
Step 1: Print the Parts
Print parts in their default orientation. Unless otherwise stated use the following print settings:
Print Resolution: .30 mm
Filament: AMZ3D PLA in Black, White, Blue, and Red
Notes: All parts were printed in PLA. To create a Digi-Comp I Redux you will need to print the following parts:
- 1 Main Panel Top - Depending on the size of your print bed you can print the Main Panel Top as 1 or 2 pieces. Most will probably be printing 2 pieces: Left and Right. All of the holes in the top panels should be very "robust" to support soldering to the rivets and lugs so change the perimeters for this part to 5. Print in white. I set a pause at the 2.20 mm mark to change the filament to blue in order print the panel text, and again at 2.80 mm to change the filament to red to highlight the Digi-Comp I Redux label.
- 1 Main Panel Bottom - Depending on the size of your print bed you can print the Main Panel Bottom as 1 or 2 pieces. Most will probably be printing 2 pieces: Left and Right. Print in white.
- 1 Main Panel Bottom Support (optional) - Print this part if the Main Panel Bottom was printed as two pieces. Any color.
- 4 Flip Flop - Print in red. Pause at the 3.20 mm mark and switch to white filament for the small number labels and large numbers background. Pause again at the 3.80 mm mark for the 01 text in black. And finally pause again at the 4.40 mm mark and switch back to red for the rest of the print.
- 1 Display Cover - Print in red.
- 1 Display Cover Labels - Start with red. Pause at the 1.40 mm mark and switch to white for the labels.
- 1 Clock Handle - Print in red.
- 25+ Programming Peg - Print in white.
- 16 Reed Switch Holder End - Print in white. These parts are pretty small so I printed them at .10 mm.
- 8 Reed Switch Holder Middle - Print in white. These parts are pretty small so I printed them at .10 mm.
- 1 Reed Switch Soldering Rig (optional) - Any color. Used to attach sets of 4 magnetic reed switches together for insertion into the Main Panel Bottom. Recommended.
- 2 Solenoid Cover Labels - There are 4 labels in this file so print twice (or double up on the print bed). Print in white and pause at the 1.40 mark and switch to blue for the letters.
- 4 Base Foot (optional) - Print in blue.
- 6 Wire Clip (optional) - Any color. For wire management.
- 2 Wire Cover (optional) - Any color. For wire management.
- 1 Arduino Uno Mounting Plate (optional) - Any color. A convenient way to mount the Arduino under the Main Panel.
- 1 Eight Channel Relay Holder (optional) - Any color. A convenient way to mount the Eight Channel Relay under the Main Panel.
- 1 Power Jack Bracket (optional) - Any color. If used in lieu of batteries.
- Arduino Uno Mounting Plate.stl
- Base Foot.stl
- Clock Handle.stl
- Display Cover Labels.stl
- Display Cover.stl
- Eight Channel Relay Holder.stl
- Flip Flop.stl
- Main Panel Bottom Left.stl
- Main Panel Bottom Right.stl
- Main Panel Bottom Support.stl
- Main Panel Bottom.stl
- Main Panel Top Right.stl
- Main Panel Top Left.stl
- Main Panel Top.stl
- Power Jack Bracket.stl
- Programming Peg.stl
- Reed Switch Holder End.stl
- Reed Switch Holder Middle.stl
- Reed Switch Soldering Rig.stl
- Solenoid Cover Labels.stl
- Wire Clip.stl
- Wire Cover.stl
Step 2: Build the Box
I laser cut the console frame from a single 1 x 2 foot piece of 1/8 inch (6 mm) plywood. Attached you will find the cut file used. See the drawings above for the rough position of each piece within the frame. Reds are the tallest outside pieces, blues slightly shorter inside supports, and yellows inside corner 1/2 inch square dowels. Pieces were mostly glued in place with a few brad nails added for strength.
When finished I painted the console in a dark blue color. I added "soft" Velcro patches as pictured above to secure the Main Panel to the frame.
The dowels extend about 1/2 inch below the frame and the blue Base Foot parts were added with shims if necessary to help level the console.
Step 3: Prepare the Main Panel Top
The upper part of the Main Panel has a small patch area to connect the logic elements (the columns numbered 1 to 8) with the set or reset solenoids (labeled A to D). In order to accomplish this you need to add some small rivets to the front panel along with corresponding solder lugs on the back. The rivets or eyelets provide a place to insert and connect the jumper wires used to create circuits, and the solder lugs allow you attach the rivets to the components below the panel.
In addition you will need a tool to set the rivets. I purchased the following from Amazon (see the pictures above):
CRAFTMEmore Grommet Tool Eyelet Punch Setter Anvil and Hole Punch Cutter for Applying 0.08" (2 mm) & 0.12" (3 mm) Tiny Grommets
I made a jig to keep the panel I was working on level while I set the eyelet (see above). I have included the cut file for the jig which was made with 1/8 inch plywood and some scrap lumber for the risers. Cut two squares the same size, one with the hole included and one without, and glue them together. Add the risers to be level with the top of the anvil when it is seated in the hole.
To set a rivet push it through a hole from the front of the panel to the back. Place the small hole of a solder lug over the protruding rivet. Set the head of the rivet onto the center of the anvil (the panel back should be facing up). Insert the shaft of the rivet setter (called a hammer) into the rivet hole and when everything is lined up tap the rivet hammer sharply a few times with a small mallot. The solder lug should now be firmly attached to the panel and the rivet hole should be unobstructed. Repeat for all 16 locations that require a solder lug.
Additionally there are 4 small 4 x 4 matrices that need rivets but no solder lugs. For each group of 4 the rivets just have to be connected to each other. In this case I "wrapped" the rivets with bare 22 AWG copper wire then set them in place with the anvil and hammer. For a 4 x 4 matrix this works pretty well.
Pictured above is the back of the Main Panel with all of it's rivets and lugs installed. Before soldering to the lugs its a good idea to carefully bend them up from the rivet away from the plastic underneath.
Step 4: Prepare the Main Panel Bottom
If you have printed the Main Panel Bottom in two pieces as I have, you will have to join them using the Main Panel Bottom Support. I used a gel based super glue to attach the inside edges together and the support to the bottom of the panel (as in photo 2 above).
The next step is to populate the top face of this panel with the magnetic reed switches. There will be 33 in all with 8 columns of 4 switches forming the logic elements of the device and another in the lower right that will be used by the "CLOCK".
The magnetic reed switches that I sourced have both normally open and normally closed leads on one side. For the 32 logic switches determine which leads are the normally open ones with a multi meter and carefully remove them (these parts are very delicate). We will only be using these switches in normally closed mode.
I have created a jig to help with the soldering. Place 4 of the prepared normally closed reed switches into the jig (photo 3). You might have to trim the "inside" leads a little so that they only overlap about 10 mm or so. Leave the two leads sticking out the ends at their full length. Solder the 4 reed switches together (photo 4) into a line. Repeat 7 more times.
Place these reed switch "logic rods" into the 8 troughs on the top of the panel. The spots where the reed switches go are a little wider to make the alignment easier. Insert the Reed Switch Holder pieces into the troughs at the ends and in the middle with a little glue to secure the reed switches in place. Photo 5 shows the layout with all the Reed Switch Holders in place.
Take the final reed switch and remove the normally closed lead. We will be using this one in normally open mode. Carefully bend the leads (use needle nose pliers to protect the delicate glass tubes) and insert the switch into the L shaped trough at the bottom right of the panel (last photo). Secure in place. I used a 3D printing pen and some filament but hot glue should work too.
With a short length of bare wire connect all of the "logic rod" leads together along the bottom of the panel plus one lead from the "CLOCK" switch. Trim the excess wire from the leads just soldered (last photo).
Step 5: Prepare the Main Panel
Use 4 M3 by 8 mm bolts with nuts to attach the Main Panel Top to the Main Panel Bottom. Solder a short length of wire between the top end of each "logic rod" and it's corresponding rivet soldering lug (photo 1).
Mount the 8 solenoids to the panel with M3 x 4 mm bolts pushing the wires down through the adjacent holes.
Glue the Solenoid Cover Labels to the tops of the solenoids as pictured above.
On the back of the panel attach some "rough" Velcro pads to the corners and top/bottom middle edges corresponding to the opposite pads on the frame.
Step 6: Wiring It Up
First Some Final Assembly
- Load the attached sketch onto the Arduino Uno. The Arduino for this project simply manages the transition from one program state to another within a single clock cycle. It does not participate in the logic of the machine. Think of it as the Digi-Comp I Redux's "microcode".
- Attach the Arduino Uno to the Arduino Uno Mounting Plate with 4 3M x 4 mm bolts. I glued this to the bottom of the Main Panel, but 2 sided tape would work just as well.
- Bolt the 8 channel relay module to the Eight Channel Relay Holder with 4 M3 x 6 mm bolts and nuts. Mount this between the struts of the Main Panel Bottom Support. Mine friction fit well enough that I didn't have to use any glue.
- Glue that battery holder to the bottom of the Main Panel, or if you are using a power adapter, mount the power jack on the Power Jack Bracket and glue the holder to the Main Panel bottom (I installed both).
The second picture above show the position of these components.
Hooking Everything Together
It looks like a lot of wires, but hooking up a Digi-Comp I Redux is actually pretty straight forward. The diagram and picture above cover most of what you need to know. Connect the Arduino Uno to the 8 channel relay module together using the wiring diagram and with the aid of the corresponding photo above make the following connections:
- Normally open magnetic CLOCK reed switch to Arduino pin 2
- The ground channel created earlier for the logic rods and CLOCK switch to Arduino ground
- Reset A eyelet to Arduino pin 12
- Reset B eyelet to Arduino pin 13
- Reset C eyelet to Arduino pin 14 (A0)
- Reset D eyelet to Arduino pin 15 (A1)
- Set A eyelet to Arduino pin 16 (A2)
- Set B eyelet to Arduino pin 17 (A3)
- Set C eyelet to Arduino pin 18 (A4)
- Set D eyelet to Arduino pin 19 (A5)
- Set A red solenoid lead to Relay K1 NO
- Set B red solenoid lead to Relay K2 NO
- Set C red solenoid lead to Relay K3 NO
- Set D red solenoid lead to Relay K4 NO
- Reset A red solenoid lead to Relay K5 NO
- Reset B red solenoid lead to Relay K6 NO
- Reset C red solenoid lead to Relay K7 NO
- Reset D red solenoid lead to Relay K8 NO
There are a few additional points to clarify. The Arduino and the solenoids operate on two different power supplies, with the 8 Channel DC 5V Relay Module itself being powered by the Arduino. In the diagram above the +6V connection is for the independent solenoid power supply. The positive leads from each solenoid (red) are attached to a normally open relay which, if enabled by the Arduino, passes this +6V to the solenoid. All of the solenoid ground leads (black) are connected to the ground from this supply.
I am driving the Arduino with a separate 1.5A supply to ensure that multiple relays in the module can be activated at the same time.
When everything is wired up you can optionally print the Wire Clips and Covers to clean things up a bit.
Step 7: Attach the Flip Flops and Display
If you install the main panel onto the frame, the next steps will be easier. The Velcro should be strong enough to hold it firmly in place.
Starting with the D row, drop the flip flop into the trough covering the magnetic reed switches for that row. The flip flop should slide easily from side to side. Make sure that the long edges are flat and don't suffer from first layer "elephant feet". Sand the edge flat if there is any sticking. My flip flops were slightly bowed up in the middle which is actually a good thing as it reduces the moving friction, but if they are overly bowed might cause the magnetic programming pegs to be too far from the reed switches to react.
Use M3 x 10 mm bolts and nuts to secure the flip flop to the solenoids as in picture 2 above. Again make sure that the flip flop moves easily from side to side. Repeat this process for the other 3 flips flops.
Line up the Display Cover Labels with the Display Cover and use 2 M3 x 12 mm bolts and nuts to secure it to the Main Panel. See the first picture above.
Step 8: Make the Patch Cables and Finish the Clock Handle
You connect the logic elements of Digi-Comp I Redux to the appropriate solenoids by plugging wires into the rivet points. To create these wire connectors you will need the following parts:
Also required is a crimping tool for the connectors. I purchased the following:
Titan 11477 Ratcheting Wire Terminal Crimper from Amazon
I created patch cables in 2 lengths, 8 and 16 inches. I used 2 different colors yellow and red to make identification easier. I made 10 each of the 8 (yellow) and 16 (red) inch lengths. You may need more for some of the more advanced experiments. Use the butt end connectors and attach a taper pin to the ends of each wire using the crimping tool. The larger diameter end of the taper pin gets inserted into the connector. See the picture above.
I found that I got a more solid connection with the rivets if I only inserted the taper pin about 1/2 way into the butt connector before crimping (exposing a slightly larger diameter part of the taper). This didn't seem to affect the quality of the crimp.
Finally install two of the 6 mm x 3 mm round magnets into the holes in the bottom of the Clock Handle with a little glue.
Step 9: Make the Programming Pegs
For each of the Programming Pegs printed you have to attach one of the 6 mm x 3 mm round magnets. To ensure that they are aligned properly when attached, for each:
- I placed a magnet into one of the Flip Flop holes (in my case from an old unused print),
- applied a small amount of glue to the magnet,
- then slid a Programming Peg onto the slot until it connected with the magnet.
Obviously you have to be careful when doing this not to glue the peg to the flip flop.
Step 10: How the Digi-Comp I Works
Before we can talk about how the Redux version works we need to understand how the original Digi-Comp I worked.
There are 6 control rods on both the front and back of the unit made from stiff piano wire. They are labeled from 1 to 6 left to right when facing the front. The rods on the front are called "logic rods" and on the back "clock rods". Each logic rod is "associated" with the clock rod that is directly behind it. Clock rods in the odd positions (1,3,5) can perform a reset operation moving a flip flop from the 1 to the 0 position. Even numbered clock rods can perform set operations moving a flip flop from the 0 to the 1 position.
You program the Digi-Comp I by pushing short "logic" tubes onto tabs in the front of the unit, and longer tubes onto "clock" tabs on the back. The first two pictures above show an original Digi-Comp I "programmed" to count from zero to seven.
The clocking mechanism for the original Digi-Comp I is ingenious. When you cycle the clock by pushing the lever on the right in towards the machine and then pulling it out, any logic rod that is not blocked by a logic tube will cause it's corresponding clock rod to swing to the right for odd numbers rods (reset) or to the left for even numbered rods (set). The swinging action will cause flip flops to move provided that a clock tube has been positioned beside the clock rod. For any logic rod that is blocked by a logic tube, the corresponding clock rod will be inactive for that cycle.
As the flip flops shift back and forth for each clock cycle, and the pattern of logic tubes changes, different clock rods become active for the next cycle. Each cycle is thus one step of the "program" being executed. Pretty cool.
Step 11: How the Digi-Comp I Redux Works
Digi-Comp I Redux works much like the original. There are still "logic rods", but in this case they are made up of magnetic reed switches. Instead of programming "tubes" we have programming "pegs" with magnets, but there are still identical T and F positions (holes) on the flip flops to place them. "Clock rods" have been replaced with solenoids, but still perform sets and resets based on the position of the programming pegs. The "programming model" is the same but the implementation is different. And of course we have an extra flip flop and two extra logic columns to play with. Like the original example from the previous step, the picture above shows a Redux "programmed" to count from zero to fifteen.
Here is how "clocking" works on the Redux version. When you cycle the clock by pushing the clock handle to the left and then back to the right, a logic rod that is not "covered" by any logic pegs will cause it's corresponding set or reset solenoid to trigger. You map logic rods to specific solenoids by adding a "jumper" cable from a logic rod eyelet (1-8) to a SET or RESET eyelet (A-D). For any logic rod that is "blocked" by a logic peg, or if the column has not been mapped to a solenoid with a jumper, nothing happens. All of the triggered set and reset operations are completed before the next clock cycle can be initiated.
Under the covers here's what's happening. One end of each magnetic reed switch "logic rod" and the CLOCK switch are connected to the Arduino ground. The other CLOCK lead and all of the SET/RESET rivets are wired to Arduino inputs that are pulled HIGH internally. Remember that the reed switches are in series and normally closed. When you connect a logic rod to a SET or RESET rivet with a jumper, say 1 to SET A, the input connected SET A will be pulled LOW. If however there is a programming peg above that logic rod in the 1 column then the circuit will be interrupted (a reed switch will go open) and the input will read HIGH because of the internal pull-up. Any logic rods that are not connected to a SET or REST point will also read HIGH.
So the Arduino can determine the state of each SET or RESET point. LOW means that the position is both connected to a logic rod and that there are no programming pegs currently in that column. HIGH means that the position is either not connected or is blocked by a programming peg.
A CLOCK cycle is initiated by reading the CLOCK's reed switch looking for a LOW signal. During a CLOCK cycle the Arduino will read all the SET and RESET inputs and activate the input's corresponding solenoid if the input is LOW.
Step 12: Programming the Digi-Comp I Redux
The Instruction Manual that came with the original Digi-Comp I used "coding sheets" to specify "programs", like the one above to count down from seven to zero. You can use these coding sheets to program the Redux version by following these simple rules:
- Ignore the 7th and 8th logic columns and the D flip flop.
- The Ls in the coding sheet map directly to the positions to add a programming "pegs" to the flip flops.
- For the original, Cs showed where to put the clock tubes. On the Redux version you would install a jumper for each C. If the C is in an odd column (1,3,5) connect the jumper from the column indicated to the appropriate RESET solenoid. For even columns (2,4,6) connect the jumper from the column indicated to the SET solenoid. So for the example above there would be 6 jumpers:
- 1 to RESET A
- 2 to SET A
- 3 to RESET B
- 4 to SET B
- 5 to RESET C
- 6 to SET C
- On some coding sheets a column will be marked (OUT). This just means that it is not connected to any solenoids.
- The original Digi-Comp had a special plastic part that allowed you to associate two logic rods to a single clock rod (as an OR operation). For the Redux version you can use the square "connection blocks" to accomplish the same thing. Attach jumpers from both the logic columns to the square, then run a jumper from the square to the appropriate SET or RESET solenoid.
Step 13: Final Thoughts
Christmas of 1965 the 12 year old version of me received a Digi-Comp I "mechanical computer". For a kid that was already interested in "computers" it was a pretty cool gift. They sold for about $5.00 at a time when "real" computers filled rooms. Dig-Comp I taught me Boolean logic, binary arithmetic, and rudimentary programming (in a manner of speaking). Now I'm not saying that owning a Digi-Comp I was the only reason that I enjoyed a long and rewarding career in software development, but it was sure one of them.
Flash forward 50 plus years. By chance I discovered the Friends-of-Digi-Comp Yahoo group, comprised mostly of other Digi-Comp I enthusiasts, where I learned that there was a Digi-Comp I V2.0 that I could actually purchase. Of course I had to have one so I bought a kit as a Christmas present for my let's just say "somewhat older" self. Unlike the original this version was laser die-cut from 80-point binders board but worked really well. I loved it.
A couple of years later I found Mark Ziemer's excellent 3D printable Digi-Comp I replica on Thingiverse. Now I'm not saying that this was the only reason that I purchased a 3D printer, but it was sure one of them. So after I printed a frog and a whistle I printed and made his Digi-Comp I. Wow! Not only did this replica look like the original, but if felt and sounded and worked just like the one my childhood self assembled that Christmas morning. What memories.
So inspired by Mark's Digi-Comp I replica I have made and shared a few of my own:
I don't recall being aware of any of these products back when I was growing up, but I'm absolutely certain I would have loved them.
With the Digi-Comp I Redux I wanted to create something new. Not completely new since the Redux version would never have been conceived without the original, but a new take on a brilliant idea. I'm really happy with the result. I think it meets my original goal of having a 50's or 60's aesthetic. Certainly from the outside Digi-Comp I Redux looks like it could have been from that era. But what about the Arduino!
I originally thought that I might be able to drive the solenoids directly from the "logic rods". After some experimentation I discovered that the system was way to chaotic for this to work. By this point I was "pot committed" to the project so I added the Arduino to manage the "clock cycle". It should be noted that the Arduino does not participate in any way with the program logic. The Arduino simply moves the system from one state to the next in a controlled way. In fact I believe the Arduino could be replaced with discrete components if one were so inclined.
So I'm going to call it a win. I had a lot of fun working through the design and building this project. Digi-Comp I Redux will go proudly on display with my other vintage replicas.