In my previous post, I simulated some mechanical logic gates using a novel 3-bar linkage.
The dimensions of the linkage are critical to achieving correct operation;

Inputs $$\{ false\ false \}$$, $$\{ false\ true \}$$, $$\{ true\ false \}$$ must all produce the same output position.

For the simulations, an empirical approach was used. (fiddle with the values until it looks right)

This time, I’m going to attempt to find the exact values to use for a given stroke, separation distance and output position.

Here, you can see the linkage layout for $$\{ false\ false \}$$ and $$\{ true\ false \}$$

# Mathematics

Ahead lurks tough mathematics (which may be unsuitable for liberal-arts majors)
If it’s hard to read, then sorry! It was hard to write!

## Parameters

• $$2 sep$$ Separation between inputs
• $$2 str$$ Stroke length $$false \to true$$
• $$d_i$$ Input link length
• $$d_o$$ Output link length

## Geometry

• $$A(x_a, y_a) = A(0, sep)$$ is the input position when $$A_{state}=false$$
• $$A'(x_a’, y_a’) = A'(2*str, sep)$$ is the input position when $$A_{state}=true$$
• $$B(x_b, y_b) = B(0,-sep)$$ is the input position (The system is symmetric, $$B’$$ does not need to be tested.)
• $$M(x_m, y_m)$$ is the middle position when $$A_{state}=false$$
• $$M'(x_m’, y_m’)$$ is the middle position when $$A_{state}=true$$
• $$O(x_o, y_o)$$ is the output position. ($$O \equiv O’$$ for the gate to function correctly.

## Solving

### Finding $$M$$:

$$M(x_m, y_m) = M( \sqrt{d_i^2 – sep^2}, 0)\\$$

### Finding $$O$$:

\begin{align} O(x_o, y_o) &= O( x_m + d_o, 0 )\\ & = O( \sqrt{d_i^2 – sep^2} + d_o, 0) \end{align}

### Finding $$M’$$:

• $$C'(x_c’, y_c’)$$ is the midpoint of $$BA’$$
• $$b$$ is the length of the line $$BC’$$
• $$h$$ is the length of the line $$C’M’$$
\begin{align} x_c’ &= (x_a’ + x_b)/2 \\ &= str\\ y_c’ &= (y_a’ + y_b)/2 \\ &= 0\\ b &= \sqrt{ sep^2 + str^2 }\\ h &= \sqrt{ d_i^2 – b^2 } && Because BC’ \bot C’M’\\ &= \sqrt{ d_i^2 – sep^2 – str^2 }\\ \end{align}\\

Using this, we can calculate M’:
\begin{align} \frac{h}{b} &= \frac{\sqrt{ d_i^2 – sep^2 – str^2 }}{\sqrt{ sep^2 + str^2 }} \\ &= \sqrt{\frac{ d_i^2 – sep^2 – str^2 }{ sep^2 + str^2 }} \\ &= \sqrt{\frac{d_i^2}{sep^2 + str^2} – 1}\\ \\ x_m’ &= x_c’\ – ( y_c’ – y_b)\frac{h}{b}\\ &= str – \sqrt{\frac{d_i^2}{sep^2 + str^2} – 1} \\ y_m’ &= y_c’ + ( x_c’ – x_b)\frac{h}{b}\\ &= str \sqrt{\frac{d_i^2}{sep^2 + str^2} – 1} \end{align}\\

### Finding $$O’$$:

\begin{align} x_o’ &= x_m’ + \sqrt{ d_o^2 – y_m’^2 }\\ &= ( str – \sqrt{\frac{ d_i^2 }{sep^2 + str^2} – 1}) + \sqrt{ d_o^2 – ( str \sqrt{\frac{d_i^2}{sep^2 + str^2} – 1} )^2 }\\ &= str – \sqrt{\frac{ d_i^2 }{sep^2 + str^2} – 1} + \sqrt{ d_o^2 – str^2 (\frac{d_i^2}{sep^2 + str^2} – 1) }\\ y_o’ &= 0 \end{align} \\

## And then:

Now that $$O$$ and $$O’$$ are found, and we know $$O \equiv O’$$…

### Finding the $$x_o’$$ equation in terms of $$d_o^2$$:

\begin{align} x_o’ &= x_m’ + \sqrt{ d_o^2 – y_m’^2 }\\ d_o^2 – y_m’^2 &= (x_o’ – x_m’)^2 \\ d_o^2 – str^2 (\frac{d_i^2}{sep^2 + str^2} – 1) &= (x_o’ – str + \sqrt{\frac{d_i^2}{sep^2 + str^2} – 1})^2 \\ d_o^2 &= \left( x_o’ – str + \sqrt{\frac{d_i^2}{sep^2 + str^2} – 1} \right)^2 + str^2 (\frac{d_i^2}{sep^2 + str^2} – 1) \\ \end{align}

### Substituting back into the $$x_o$$ equation:

\begin{align} x_o &= \sqrt{d_i^2 – sep^2} + d_o \\ x_o – \sqrt{d_i^2 – sep^2} &= d_o \\ ( x_o – \sqrt{d_i^2 – sep^2} )^2 &= d_o^2 \\ ( x_o – \sqrt{d_i^2 – sep^2} )^2 &= \left( x_o’ – str + \sqrt{\frac{d_i^2}{sep^2 + str^2} – 1} \right)^2 + str^2 (\frac{d_i^2}{sep^2 + str^2} – 1) \end{align}
Ugly, but workable?

# Example:

• $$sep = 50$$ Separation between inputs $$100 mm$$
• $$str = 20$$ Stroke length $$false \to true: 40 mm$$
• $$d_i = ?$$ Input link length
• $$d_o = ?$$ Output link length
• $$x_o = x_o’ = 70$$ Desired output position

\begin{align} ( x_o – \sqrt{d_i^2 – sep^2} )^2 &= \left( x_o’ – str + \sqrt{\frac{d_i^2}{sep^2 + str^2} – 1} \right)^2 + str^2 (\frac{d_i^2}{sep^2 + str^2} – 1) \\ ( 70 – \sqrt{d_i^2 – 50^2} )^2 &= \left( 70 – 20 + \sqrt{\frac{d_i^2}{50^2 + 20^2} – 1} \right)^2 + 20^2 (\frac{d_i^2}{50^2 + 20^2} – 1) \\ \end{align} \\
Pushed through Wolfram Alpha…
\begin{align} \\ d_i &= \sqrt{2900} \\ &= 53.852\\ \text{and}\\ d_o &= x_o – \sqrt{d_i^2 – sep^2} \\ &= 70 – \sqrt{ 2900 – 2500 } \\ &= 50 \end{align}

# Summary:

Phew!

Thusly, one can calculate the input and output linkage lengths for any logic gate.
These dimensions will work for an OR gate too, as the linkages are just reversed.

It’s irksome that I couldn’t work out a symbolic solution for the last equations, especially since $$d_i$$ in the example came out to such a neat value.

I might revisit this further in the future, and it’ll definitely come in handy when building something with these gates.

# Springless Reversible Mechanical Logic

Logic gates! The building blocks of computing as we know it. What if we ditch the electrons?

I want some mechanical logic for an upcoming project, so I did some research…

# Research

There are several examples of mechanical logic out there on the internet:

Keshav Saharia’s Lego LogicPush-pull, needs a spring return.
Randomwraith’s Lego LogicPush-pull with internal rotating elements, reversible.
Mechalogic’s Logic ElementsPush-pull, AND & NOT reversible, OR needs a spring return.
Xiaoji Chen’s Linkage ComputerRotating logic, reversible, some mechanical issues with parallelogram weakness.
Spillerrec’s Lego Logic GatesPush-pull, very compact, needs a spring return.
He identifies the problem with needing springs, but doesn’t have a fix. Mentions how AND/OR gates can be reversed to become OR/AND gates.
Zeroumus’s AND GatePush-pull, needs a spring return.
KNEX XOR GatePush-pull, needs a spring return.
Carolin Liebl and Lisa Hopf’s NAND GatePush-pull, reversible, complex.

There are many more ideas out there, even water pipe logic, and of course the early mechanical computers Digi-Comp I and Digi-Comp II.

For my project, I have the following requirements;

• Push-pull logic
• Output movement range must equal input movement range
• No springs/elastic bands, and no forces for inputs to overcome
• No gears!
• Easily chain-able, and simple enough to implement a score of them.

This disqualifies most of the designs I found, particularly the ‘no springs’ requirement.

# AND Gate

Mechalogic’s AND gate design uses an elastic band, but doesn’t appear to need it, so it serves as a good starting point:

It’s time consuming to tweak parameters in the physical world, so I wrote a small simulation: (click to see in action)

Success! Meets all the requirements, and only needs three parts.

The geometry is important – the ratio will determine the output’s position when only one of the inputs is asserted, according to;

• distance between the inputs (red),
• length of the input links (green),
• length of the output link (teal)
• input displacement

Now, can an OR gate be designed with the same success?

# OR Gate

Most OR gates look like this; the output (on the left of this picture) has a flat plate, and either input will push the flat forward. Unfortunately the design needs that elastic band to return the output to zero.

Inspired by some earlier attempts to couple an AND and a backwards OR gate together, I tried flipping the AND gate around; (click to see in action)

Success! Oddly enough, an OR gate is just an AND gate connected up backwards.
Even the linkage lengths are the same!
Best of all, the OR gate is reversible like the AND gate – no springs and no force required.

# AND Then?

As the graphs show, output displacement equals input displacement, so these designs should be chainable. Let’s have a look; (click to see in action)

Success!

Now I just have to build something complex with them…

All the simulations are viewable here.
The code they’re written with is available on GitHub;
https://github.com/MrTrick/logic_gates