Heathkit EC-1 · Volume 6

Heathkit EC-1 — Volume 6 — Sample programs & demonstrations

Six fully worked analog programs with scaling derivations, patch diagrams, and coefficient tables — cross-referenced to Vol 2 (circuits), Vol 3 (calibration), and Vol 4 (programming theory)

This volume is a working programmer’s reference for the Heathkit EC-1 Educational Analog Computer. Each section treats one complete problem: the governing equation, the amplitude and time scaling derivation, the signal-flow diagram rendered as an inline SVG, the resistor-capacitor plug assignments, the coefficient-potentiometer table, and the expected output waveform. Problems are ordered by increasing complexity — from a single-integrator RC decay through a four-amplifier projectile trajectory with aerodynamic drag and a six-amplifier damped oscillator. The final two sections address the logistic growth equation and the predator-prey (Lotka-Volterra) system, both of which expose the EC-1’s capability for nonlinear biological and ecological modelling.

Readers are assumed to have completed the preparation described in Vol 4 (acquisition and restoration, amplifier balancing, power-supply adjustment, IC-supply calibration) and to be familiar with the component-plug system and the patch-cord conventions described in Vol 2 (hardware & circuit detail) and Vol 3 (patch panel & computing elements). All resistor values are quoted in megohms (MΩ) and all capacitor values in microfarads (µF) unless otherwise noted, consistent with the EC-1 manual convention under which R × C in those units yields a time constant in seconds.

EC-1 running a spring-mass problem — the purple glow of the OA2/OB2 VR tubes is visible at the rear, and the scope shows a decaying sinusoid

Note — The EC-1 amplifiers produce a sign-inverted output: an integrator driven by a positive input generates a negative-going output, and a summer sums with a sign change. Every patch diagram in this volume accounts for these sign inversions explicitly. The operator should trace polarity carefully before setting initial conditions or the first OPERATE cycle may immediately saturate an amplifier.


Notation and Conventions Used in This Volume

Before treating individual programs, the table below collects the standard notation used throughout all patch diagrams and scaling derivations.

SymbolMeaning
AnEC-1 amplifier number n (1–9)
ΣSumming-amplifier mode (resistor feedback)
Integrator mode (capacitor feedback)
ICnInitial-condition power supply n (1–3), range 0–100 V ungrounded
PnCoefficient potentiometer n (1–5) on the front panel
RfFeedback resistor (plugged into feedback socket)
RiInput resistor(s) (plugged into input socket(s))
CfFeedback capacitor (plugged into feedback socket)
RCnRelay contacts pair n (1–4); normally closed, open during OPERATE
τMachine time constant = Ri × Cf (MΩ × µF = seconds)
[V]Voltage at a node in machine units (±60 V full scale)
[u]Problem variable in physical units
k_uAmplitude scale factor: [V] = k_u × [u]
k_tTime scale factor: machine seconds per problem seconds

Note — The EC-1 specifications (Op. Manual Ver. 1, p. 32) quote output as ±60 V at 3 mA. Vol 2, section 3.2 discusses why working amplitudes are kept below ±50 V in practice to avoid amplifier saturation in transient conditions. All scaling in this volume uses ±50 V as the practical working limit.


Demo 1 — RC Exponential Decay

1.1 Physical Problem

A capacitor charged to voltage V₀ discharges through resistance R. The governing equation is a first-order ODE:

dV/dt = −V / (RC)

which has the closed-form solution V(t) = V₀ · exp(−t / RC). In the demonstration, V₀ = 80 V and the physical time constant τ_phys = 0.5 s. This is the simplest possible one-amplifier integration, and it is the canonical first experiment for verifying that a newly restored EC-1 is working correctly (see Vol 3, section 6.1).

1.2 Scaling

Amplitude scaling. The maximum value of V is V₀ = 80 V physical. Map this to 40 V machine (k_u = 0.5 V_machine / V_phys), keeping headroom.

Machine variable: e₁ = 0.5 · V

Time scaling. Let machine time equal problem time (real-time run: k_t = 1). Then the integrator time constant must equal τ_phys = 0.5 s. Choose Ri = 0.5 MΩ (a 500 kΩ plug) and Cf = 1.0 µF, giving τ = 0.5 MΩ × 1.0 µF = 0.5 s. ✓

Equation in machine variables. Substituting e₁ = 0.5V:

de₁/dt = −e₁ / 0.5   →   de₁/dt = −2 · e₁

This means the integrator must integrate −(−2 e₁) = 2 e₁ each second. With Ri = 0.5 MΩ and Cf = 1 µF, the integrator output changes by (input)/(RiCf) = input/0.5 V/s. Feed 2 e₁ into the input to get de₁/dt = −e₁/0.5 as required.

Initial condition. e₁(0) = 0.5 × V₀ = 0.5 × 80 = 40 V. Set IC-1 to 40 V (turn IC-1 control clockwise until meter reads 40 V at 100 V range).

1.3 Component Table

LocationComponentValuePurpose
A1 feedback socketCapacitor plugCf = 1.0 µF, 630 VIntegrating element
A1 input socket 1Resistor plugRi = 0.5 MΩ (500 kΩ)Sets τ = 0.5 s
RC1 across A1 CfRelay contactsDischarge cap on RESET
IC-1 red postPatch cord to A1 input40 V initial conditionV(0)

Tip — The EC-1 was supplied with 1.0 MΩ and 0.1 MΩ (100 kΩ) precision resistor plugs as standard. A 0.5 MΩ plug can be fashioned by connecting two 1.0 MΩ resistors in parallel on a single two-pin plug. Alternatively use a 1.0 MΩ input resistor and set IC-1 to 20 V (halving the initial condition doubles τ to 1.0 s, which is equally valid for demonstration).

1.4 Patch Diagram

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 520 180" font-family="monospace" font-size="12">
  <!-- Title -->
  <text x="10" y="18" font-weight="bold" font-size="13">Demo 1 — RC Decay (one integrator)</text>

  <!-- IC-1 supply box -->
  <rect x="20" y="50" width="80" height="40" rx="4" fill="#e8f4e8" stroke="#555" stroke-width="1.5"/>
  <text x="60" y="67" text-anchor="middle" font-size="11">IC-1</text>
  <text x="60" y="80" text-anchor="middle" font-size="10">+40 V</text>

  <!-- wire from IC-1 to A1 input -->
  <line x1="100" y1="70" x2="160" y2="70" stroke="#1a1a8c" stroke-width="2"/>
  <!-- input resistor label -->
  <text x="118" y="63" font-size="10" fill="#1a1a8c">Ri=0.5M</text>

  <!-- Amplifier A1 (integrator) -->
  <polygon points="160,45 160,100 220,72" fill="#fff8e8" stroke="#cc6600" stroke-width="2"/>
  <text x="177" y="68" font-size="11" fill="#cc6600">A1</text>
  <text x="167" y="80" font-size="9" fill="#cc6600">∫</text>

  <!-- feedback capacitor arc above A1 -->
  <path d="M220,72 Q280,20 160,72" fill="none" stroke="#990000" stroke-width="1.5" stroke-dasharray="5,3"/>
  <text x="200" y="30" font-size="10" fill="#990000">Cf=1µF  (feedback)</text>

  <!-- relay contacts across feedback -->
  <text x="235" y="52" font-size="10" fill="#555">RC1</text>
  <line x1="245" y1="55" x2="245" y2="92" stroke="#555" stroke-width="1.5"/>
  <line x1="240" y1="72" x2="250" y2="68" stroke="#555" stroke-width="1.5"/>

  <!-- output line -->
  <line x1="220" y1="72" x2="310" y2="72" stroke="#1a1a8c" stroke-width="2"/>

  <!-- feedback path back to input -->
  <polyline points="310,72 310,130 145,130 145,70" fill="none" stroke="#1a1a8c" stroke-width="2" stroke-dasharray="6,3"/>
  <text x="200" y="147" font-size="10" fill="#1a1a8c">−e₁ fed back → drives decay</text>

  <!-- Output label -->
  <text x="315" y="68" font-size="11">e₁(t)</text>
  <text x="315" y="82" font-size="10">= 40·exp(−2t)</text>

  <!-- Meter/scope -->
  <rect x="390" y="55" width="80" height="35" rx="4" fill="#e0e8ff" stroke="#333" stroke-width="1.5"/>
  <text x="430" y="70" text-anchor="middle" font-size="11">SCOPE</text>
  <text x="430" y="83" text-anchor="middle" font-size="10">or METER</text>
  <line x1="370" y1="72" x2="390" y2="72" stroke="#333" stroke-width="1.5"/>

  <!-- Legend -->
  <line x1="20" y1="160" x2="50" y2="160" stroke="#1a1a8c" stroke-width="2"/>
  <text x="55" y="164" font-size="10">signal path</text>
  <line x1="130" y1="160" x2="160" y2="160" stroke="#1a1a8c" stroke-width="2" stroke-dasharray="6,3"/>
  <text x="165" y="164" font-size="10">feedback path</text>
  <line x1="260" y1="160" x2="290" y2="160" stroke="#990000" stroke-width="1.5" stroke-dasharray="5,3"/>
  <text x="295" y="164" font-size="10">capacitor feedback</text>
</svg>

1.5 Expected Output

With OPERATION → MANUAL, the meter (set to AMPLIFIER OUTPUT 1, range 100 V) reads 40 V at t = 0 and decays toward zero. At t = 0.5 s the reading should be approximately 40/e ≈ 14.7 V; at t = 1.0 s approximately 5.4 V. In repetitive mode at 1–2 cps, the oscilloscope displays a repeating negative-exponential curve. The time axis of the scope is swept by a second integrator configured as in the Operation Manual (Ver. 2, p. 29): IC supply into a 1 MΩ / 1 µF integrator produces a linear ramp at −IC_voltage V/s.

Tip — If the decay rate appears much faster or slower than expected, verify that the relay contacts 1 are correctly wired across the feedback capacitor pins. If the contacts fail to open during OPERATE, the capacitor remains shorted and the amplifier acts as a resistive inverter with near-zero time constant rather than an integrator.


Demo 2 — Simple Harmonic Oscillator

2.1 Physical Problem

A mass m on a frictionless spring (spring constant k) obeys:

m · ẍ = −k · x
ẍ = −ω² · x      where ω² = k/m

Chosen parameters: ω = 2π rad/s (1 Hz oscillation), so ω² = (2π)² ≈ 39.48 s⁻². The displacement x ranges over ±A (amplitude A = 1 m for the physical analogy, mapped to ±40 V machine). This is the most educational demonstration on the EC-1: the operator can watch the sine wave form in real time and alter the frequency by turning a single pot.

2.2 Scaling

Amplitude scaling. Map x → e_x = 40 V/m · x (so ±1 m → ±40 V). Map ẋ → e_ẋ = 40/ω · ẋ (so max velocity ωA = 2π · 1 → 40 V, giving k_ẋ = 40/(2π) ≈ 6.37 V·s/m). Using a common machine scale for both position and velocity simplifies the circuit; see the alternative in the Notes below.

Time scaling. Real-time (k_t = 1). The integrator time constant τ = 1 s is required. Use Ri = 1 MΩ, Cf = 1 µF throughout.

Scaled equation. From ẍ = −ω²x:

d²e_x/dt² = −ω² · e_x

In block-diagram form (using the two-integrator canonical form):

Integrator 1:  de_ẋ/dt = −(input) = −(+ω² · e_x)
Integrator 2:  de_x/dt = −(input) = −(−e_ẋ) = +e_ẋ

To implement ω² = 39.48, use a coefficient potentiometer set to α where the feedback path multiplies by α and a resistor ratio Rf/Ri handles the remaining gain:

  • Set P1 to α = ω²/10 = 3.948 (not possible directly on a 0–1 pot)
  • Better: use Ri = 0.1 MΩ (100 kΩ) on the ω² feedback input, giving effective gain = Rf/Ri = 1 MΩ / 0.1 MΩ = 10, then set P1 to ω²/10 = 3.948/10 ≈ 0.395

Wait — P1 max is 1.0. Since ω² ≈ 39.48, choose input resistor = 0.1 MΩ (giving ×10 gain), then the pot must be at 0.395 to represent ω²/10 = 3.948. But ω²/10 = 3.948 > 1.0, so this still does not fit in a single pot.

Revised approach (recommended for EC-1): Time-scale the problem. Let the machine run at 1/10 real time (10× faster): k_t = 10. Then machine seconds = 10 × problem seconds. The machine angular frequency becomes ω_mach = ω/k_t = 2π/10 ≈ 0.628 rad/s_machine, so ω²_mach ≈ 0.395 s⁻².

Now with Ri = 1 MΩ, Cf = 1 µF, set P1 = 0.395 (just under 40% of full rotation). The oscillation period in machine time is 2π/0.628 ≈ 10 s, which is an excellent rate for oscilloscope observation in repetitive mode.

Summary of time-scaled parameters:

ω_mach²  = ω_phys² / k_t²  = 39.48 / 100  = 0.395
τ  = Ri × Cf  = 1 MΩ × 1 µF  = 1.0 s (machine)
P1 setting  = 0.395

2.3 Component Table

LocationComponentValuePurpose
A1 feedback socketCapacitor plug1.0 µF, 630 VIntegrator 1: ẍ → −ẋ
A1 input socket 1Resistor plug1.0 MΩτ₁ = 1 s
A2 feedback socketCapacitor plug1.0 µF, 630 VIntegrator 2: −ẋ → +x
A2 input socket 1Resistor plug1.0 MΩτ₂ = 1 s
A3 feedback socketResistor plug1.0 MΩUnity inverter (sign fix)
A3 input socket 1Resistor plug1.0 MΩUnity inverter
P1 (full range)Front-panel potset to 0.395Implements ω²_mach = 0.395
IC-1 red postPatch cord to A2 cap40 V (A2 IC)x(0) = 1 m → 40 V
RC1 across A1 CfRelay contactsReset cap on OPERATE→RESET
RC2 across A2 CfRelay contactsReset cap on OPERATE→RESET

2.4 Pot Settings Table

PotPhysical meaningSetting (0–1 scale)Notes
P1ω²_mach = k/(m · k_t²)0.395= (2π)²/100; centre detent ≈ 0.5, so P1 is just below half
P2–P5Not used in this demoLeave disconnected

Tip — To vary the frequency during a live demonstration: with OPERATE running and repetitive mode active at 0.5–1.0 cps, slowly advance P1 clockwise. The oscillation frequency (in machine time) increases proportionally to √(P1 setting). Decreasing P1 below ≈ 0.01 produces very long-period oscillations difficult to observe on most scopes. Setting P1 = 0 results in constant output (marginally stable integrator chain with no restoring force) — a useful teaching moment about stability.

2.5 Patch Diagram

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 620 230" font-family="monospace" font-size="12">
  <text x="10" y="18" font-weight="bold" font-size="13">Demo 2 — Simple Harmonic Oscillator  ẍ = −ω²x</text>

  <!-- IC-1 Initial Condition -->
  <rect x="10" y="80" width="70" height="38" rx="4" fill="#e8f4e8" stroke="#555" stroke-width="1.5"/>
  <text x="45" y="96" text-anchor="middle" font-size="11">IC-1</text>
  <text x="45" y="110" text-anchor="middle" font-size="10">+40 V</text>

  <!-- Wire IC-1 → A2 IC input (bottom path) -->
  <line x1="80" y1="99" x2="100" y2="99" stroke="#009900" stroke-width="1.5" stroke-dasharray="4,2"/>
  <text x="82" y="92" font-size="9" fill="#009900">IC cond.</text>

  <!-- Amplifier A1 (integrator 1) -->
  <polygon points="155,55 155,115 220,85" fill="#fff8e8" stroke="#cc6600" stroke-width="2"/>
  <text x="177" y="82" text-anchor="middle" font-size="11" fill="#cc6600">A1 ∫</text>
  <text x="166" y="95" font-size="9" fill="#888">Ri=1M Cf=1µ</text>

  <!-- Amplifier A2 (integrator 2) -->
  <polygon points="295,55 295,115 360,85" fill="#fff8e8" stroke="#cc6600" stroke-width="2"/>
  <text x="317" y="82" text-anchor="middle" font-size="11" fill="#cc6600">A2 ∫</text>
  <text x="306" y="95" font-size="9" fill="#888">Ri=1M Cf=1µ</text>

  <!-- Amplifier A3 (inverter) -->
  <polygon points="430,60 430,110 490,85" fill="#f0f0ff" stroke="#6600cc" stroke-width="2"/>
  <text x="452" y="82" text-anchor="middle" font-size="11" fill="#6600cc">A3 −1</text>
  <text x="440" y="95" font-size="9" fill="#888">Rf=Ri=1M</text>

  <!-- Labels for signals -->
  <text x="225" y="77" font-size="10">−ẋ_mach</text>
  <text x="365" y="77" font-size="10">+x_mach</text>
  <text x="495" y="77" font-size="10">−x_mach</text>

  <!-- Wire A1 → A2 -->
  <line x1="220" y1="85" x2="295" y2="85" stroke="#1a1a8c" stroke-width="2"/>

  <!-- Wire A2 → A3 -->
  <line x1="360" y1="85" x2="430" y2="85" stroke="#1a1a8c" stroke-width="2"/>

  <!-- Wire A3 → P1 pot -->
  <line x1="490" y1="85" x2="540" y2="85" stroke="#1a1a8c" stroke-width="2"/>

  <!-- P1 Potentiometer box -->
  <rect x="540" y="68" width="60" height="34" rx="4" fill="#ffeee0" stroke="#cc3300" stroke-width="1.5"/>
  <text x="570" y="83" text-anchor="middle" font-size="11" fill="#cc3300">P1</text>
  <text x="570" y="96" text-anchor="middle" font-size="10" fill="#cc3300">0.395</text>

  <!-- Wire P1 back to A1 input (long feedback loop, top path) -->
  <polyline points="540,85 520,85 520,30 145,30 145,85" fill="none" stroke="#cc3300" stroke-width="2" stroke-dasharray="7,3"/>
  <text x="290" y="22" font-size="10" fill="#cc3300">ω²_mach · x_mach  feedback to A1 input</text>

  <!-- IC-1 to A2 IC input (dashed green) -->
  <line x1="100" y1="99" x2="295" y2="99" stroke="#009900" stroke-width="1.5" stroke-dasharray="4,2"/>

  <!-- Relay contacts RC1 (across A1 cap, shown as small bridge) -->
  <text x="157" y="48" font-size="9" fill="#555">RC1</text>
  <line x1="165" y1="50" x2="165" y2="60" stroke="#555" stroke-width="1.2"/>
  <line x1="160" y1="54" x2="170" y2="51" stroke="#555" stroke-width="1.2"/>

  <!-- Relay contacts RC2 (across A2 cap) -->
  <text x="297" y="48" font-size="9" fill="#555">RC2</text>
  <line x1="305" y1="50" x2="305" y2="60" stroke="#555" stroke-width="1.2"/>
  <line x1="300" y1="54" x2="310" y2="51" stroke="#555" stroke-width="1.2"/>

  <!-- Output to scope from A2 -->
  <line x1="360" y1="85" x2="370" y2="130" stroke="#333" stroke-width="1.5"/>
  <rect x="365" y="130" width="70" height="30" rx="3" fill="#e0e8ff" stroke="#333"/>
  <text x="400" y="148" text-anchor="middle" font-size="10">SCOPE / METER</text>
  <text x="400" y="160" text-anchor="middle" font-size="9">Amp 2 = x(t)</text>

  <!-- Waveform sketch -->
  <path d="M 40,195 Q 60,170 80,195 Q 100,220 120,195 Q 140,170 160,195 Q 180,220 200,195" fill="none" stroke="#1a1a8c" stroke-width="2"/>
  <text x="40" y="215" font-size="10" fill="#1a1a8c">Expected: sine wave, T_mach ≈ 10 s at P1=0.395</text>

  <!-- Legend -->
  <line x1="10" y1="228" x2="40" y2="228" stroke="#1a1a8c" stroke-width="2"/>
  <text x="45" y="231" font-size="9">signal</text>
  <line x1="90" y1="228" x2="120" y2="228" stroke="#cc3300" stroke-width="2" stroke-dasharray="7,3"/>
  <text x="125" y="231" font-size="9">feedback</text>
  <line x1="180" y1="228" x2="210" y2="228" stroke="#009900" stroke-width="1.5" stroke-dasharray="4,2"/>
  <text x="215" y="231" font-size="9">IC path</text>
</svg>

2.6 Expected Output and Verification

With P1 = 0.395 and IC-1 = 40 V applied to A2’s initial condition, the output of A2 should display a sine wave in machine time with period T_mach = 2π/√0.395 ≈ 9.99 s ≈ 10 s. Observation in repetitive mode at 0.1 cps allows the full period to complete before reset. On the oscilloscope (scope vertical = A2 output, scope sweep = separate ramp generator from Amp 9), one clean sinusoidal cycle is visible. A2 output peaks at +40 V and −40 V corresponding to displacement ±1 m in problem units.

Verification checklist:

CheckSymptom if wrongRemedy
A2 output peaks at ±40 VClipping or low amplitudeRecheck IC-1 voltage; re-balance A1, A2
Period ≈ 10 s machinePeriod offAdjust P1; verify Ri and Cf values
Waveform is symmetric sineDC offset on sineRe-balance A3; check all caps discharged
No decay over many cycles— (good — frictionless spring)Expected behaviour
Output spirals to saturationStray feedback pathTrace patch cords; check A3 inversion

Demo 3 — Damped Harmonic Oscillator (Mass-Spring-Dashpot)

3.1 Physical Problem

Adding a viscous damping term b·ẋ to the spring-mass system gives:

m · ẍ + b · ẋ + k · x = 0
ẍ = −(b/m) · ẋ − (k/m) · x
ẍ = −2ζω · ẋ − ω² · x

where ω = √(k/m) is the undamped natural frequency and ζ = b/(2mω) is the damping ratio. The same time-scaled parameters as Demo 2 are used (ω_mach² = 0.395), and the damping is set by pot P2. This demo is drawn directly from the EC-1 Operation Manual Version 2 circuit for the spring-mass problem (p. 34, Fig. 30), which shows a three-amplifier circuit with resistive feedback for the damping term.

Demonstration parameters:

  • ω_phys = 2π rad/s (1 Hz natural frequency)
  • ζ = 0.2 (light damping, visually interesting — about 3–4 oscillations before 1/e decay)
  • 2ζω_mach = 2 × 0.2 × 0.628 ≈ 0.251 s⁻¹_machine

3.2 Scaling

Same amplitude and time scaling as Demo 2 (k_t = 10, e_x = 40 V/m · x). The damping term introduces a velocity-proportional input to the acceleration integrator:

Machine equation:
d(e_ẋ)/dt  = −(2ζω_mach) · e_ẋ  −  ω²_mach · e_x

With τ = 1 s (1 MΩ / 1 µF), feed two inputs to A1:

  1. A velocity feedback via P2 set to 2ζω_mach = 0.251 → set P2 = 0.251
  2. A displacement feedback via P1 set to ω²_mach = 0.395 → set P1 = 0.395 (same as Demo 2)

Both are taken from A2 (= +x_mach) after passing through the inverter A3 to give −x_mach; ẋ is available at A1 output as −ẋ_mach, which after sign inversion in A3 would give +ẋ. To keep the amplifier count at three, feed A1 output (= −ẋ) directly to P2, which acts as a signed attenuator on the velocity term. The resulting signal at A1’s summing junction is:

Input 1 (from P1 via A3 output):  α₁ · (−x_mach)  →  ω²_mach going into A1 with sign handled by inversion chain
Input 2 (from A1 output directly):  α₂ · (−ẋ_mach)  →  damping term

The sign chain: A1 integrates its inputs to produce −ẋ_mach. A2 integrates −ẋ_mach to produce +x_mach. A3 inverts +x_mach to −x_mach. Feeding −x_mach to A1 input 1 contributes +ω²_mach · x_mach to the second derivative (correct sign for restoring force). Feeding A1’s own output (−ẋ_mach) to A1 input 2 via P2 contributes +2ζω_mach · ẋ_mach to the second derivative (correct sign for damping). ✓

3.3 Component and Pot Settings

LocationComponentValuePurpose
A1 feedback socketCapacitor plug1.0 µF, 630 VIntegrator 1
A1 input socket 1Resistor plug1.0 MΩτ = 1 s; ω² term
A1 input socket 2Resistor plug1.0 MΩτ = 1 s; damping term
A2 feedback socketCapacitor plug1.0 µF, 630 VIntegrator 2
A2 input socket 1Resistor plug1.0 MΩτ = 1 s
A3 feedback socketResistor plug1.0 MΩUnity inverter
A3 input socket 1Resistor plug1.0 MΩUnity inverter
P1 wiper to A1 in-1Patch cordP1 set 0.395ω²_mach coefficient
P2 wiper to A1 in-2Patch cordP2 set 0.2512ζω_mach coefficient
IC-1 to A2 IC pinPatch cord+40 Vx(0) = 1 m → 40 V
RC1, RC2Relay contactsacross A1, A2 capsReset both integrators
PotPhysical meaningSettingResulting behaviour
P1ω²_mach (spring)0.3951 Hz natural frequency
P22ζω_mach (damping)0.251ζ = 0.2, light damping
P2 → 0Zero damping0.000Returns to Demo 2 (pure SHM)
P2 → 0.628Critical damping0.628ζ = 1.0, no oscillation
P2 → 1.256Overdamping— (requires Ri change)Exponential decay only

Note — The EC-1 Operation Manual (Ver. 2, p. 35, Fig. 31) shows oscilloscope photographs of the mass-spring-damper response at three damping ratios. The lightly damped case (resembling P2 ≈ 0.25) shows four to five visible cycles before the envelope decays below half amplitude.

3.4 Patch Diagram

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 650 260" font-family="monospace" font-size="12">
  <text x="10" y="18" font-weight="bold" font-size="13">Demo 3 — Damped Oscillator  ẍ = −2ζω ẋ − ω²x</text>

  <!-- IC-1 -->
  <rect x="10" y="90" width="68" height="35" rx="4" fill="#e8f4e8" stroke="#555" stroke-width="1.5"/>
  <text x="44" y="104" text-anchor="middle" font-size="11">IC-1</text>
  <text x="44" y="117" text-anchor="middle" font-size="10">+40 V</text>

  <!-- A1 Integrator -->
  <polygon points="155,55 155,125 225,90" fill="#fff8e8" stroke="#cc6600" stroke-width="2"/>
  <text x="181" y="86" text-anchor="middle" font-size="11" fill="#cc6600">A1 ∫</text>
  <text x="163" y="100" font-size="9" fill="#888">2×(Ri=1M)</text>
  <text x="163" y="111" font-size="9" fill="#888">Cf=1µ</text>

  <!-- A2 Integrator -->
  <polygon points="300,55 300,125 370,90" fill="#fff8e8" stroke="#cc6600" stroke-width="2"/>
  <text x="326" y="86" text-anchor="middle" font-size="11" fill="#cc6600">A2 ∫</text>
  <text x="308" y="100" font-size="9" fill="#888">Ri=1M Cf=1µ</text>

  <!-- A3 Inverter -->
  <polygon points="440,65 440,115 500,90" fill="#f0f0ff" stroke="#6600cc" stroke-width="2"/>
  <text x="463" y="87" text-anchor="middle" font-size="11" fill="#6600cc">A3 −1</text>
  <text x="448" y="100" font-size="9" fill="#888">Rf=Ri=1M</text>

  <!-- Signal labels -->
  <text x="230" y="80" font-size="10">−ẋ_m</text>
  <text x="374" y="80" font-size="10">+x_m</text>
  <text x="504" y="80" font-size="10">−x_m</text>

  <!-- Wire A1→A2 -->
  <line x1="225" y1="90" x2="300" y2="90" stroke="#1a1a8c" stroke-width="2"/>
  <!-- Wire A2→A3 -->
  <line x1="370" y1="90" x2="440" y2="90" stroke="#1a1a8c" stroke-width="2"/>

  <!-- P1 pot (ω² feedback) -->
  <rect x="540" y="55" width="62" height="35" rx="4" fill="#ffeee0" stroke="#cc3300" stroke-width="1.5"/>
  <text x="571" y="70" text-anchor="middle" font-size="11" fill="#cc3300">P1</text>
  <text x="571" y="83" text-anchor="middle" font-size="10" fill="#cc3300">0.395</text>
  <line x1="500" y1="90" x2="540" y2="72" stroke="#1a1a8c" stroke-width="1.5"/>
  <!-- P1 feedback back to A1 input 1 -->
  <polyline points="540,72 520,72 520,30 145,30 145,75" fill="none" stroke="#cc3300" stroke-width="2" stroke-dasharray="7,3"/>
  <text x="250" y="22" font-size="10" fill="#cc3300">ω²_mach · x feedback  (P1=0.395)</text>

  <!-- P2 pot (damping feedback from A1 output) -->
  <rect x="228" y="160" width="62" height="35" rx="4" fill="#ffe0e0" stroke="#990000" stroke-width="1.5"/>
  <text x="259" y="175" text-anchor="middle" font-size="11" fill="#990000">P2</text>
  <text x="259" y="188" text-anchor="middle" font-size="10" fill="#990000">0.251</text>
  <!-- Wire from A1 output down to P2 -->
  <line x1="225" y1="90" x2="225" y2="177" stroke="#990000" stroke-width="1.5"/>
  <line x1="225" y1="177" x2="228" y2="177" stroke="#990000" stroke-width="1.5"/>
  <!-- Wire from P2 back to A1 input 2 -->
  <polyline points="228,177 155,177 155,105" fill="none" stroke="#990000" stroke-width="2" stroke-dasharray="5,3"/>
  <text x="157" y="195" font-size="10" fill="#990000">2ζω_mach · ẋ damping (P2=0.251)</text>

  <!-- IC-1 to A2 IC input -->
  <polyline points="78,107 295,107" fill="none" stroke="#009900" stroke-width="1.5" stroke-dasharray="4,2"/>
  <text x="130" y="120" font-size="9" fill="#009900">IC-1 → A2 cap (x₀=40V)</text>

  <!-- RC contacts symbols -->
  <text x="157" y="50" font-size="9" fill="#555">RC1</text>
  <text x="302" y="50" font-size="9" fill="#555">RC2</text>

  <!-- Scope output from A2 -->
  <line x1="370" y1="90" x2="370" y2="220" stroke="#333" stroke-width="1.5"/>
  <rect x="345" y="220" width="90" height="28" rx="3" fill="#e0e8ff" stroke="#333"/>
  <text x="390" y="237" text-anchor="middle" font-size="10">SCOPE: A2 = x(t)</text>

  <!-- Waveform — decaying sine -->
  <path d="M 30,245 Q 50,225 70,245 Q 90,265 110,245 Q 130,228 150,245 Q 165,260 180,245 Q 193,232 205,245 Q 215,255 225,245" fill="none" stroke="#1a1a8c" stroke-width="2"/>
  <text x="30" y="260" font-size="10" fill="#1a1a8c">Expected output: decaying sinusoid (ζ=0.2)</text>
</svg>

3.5 Qualitative Exploration During Operation

While the computer runs in repetitive mode, the operator can perform real-time parameter variation:

  1. Increase P2 toward 0.628: The oscillations become slower to decay, then at P2 ≈ 0.628 (ζ = 1.0, critical damping) the waveform transitions to a non-oscillatory exponential return to zero.
  2. Reduce P1 toward zero: The spring constant goes to zero. With no spring force the system simply decays exponentially through the damping term alone — pure frictional drag without restoration.
  3. Set P2 = 0: Returns to undamped Demo 2. The waveform should maintain constant amplitude indefinitely (limited in practice only by amplifier drift and capacitor leakage, which are negligible over 1–2 minutes).
  4. Feed an external forcing function: Connect a slow sine wave from a function generator (through a ÷10 resistive divider to keep levels below ±5 V) to a free input on A1. This models a driven harmonic oscillator. Near ω_drive = ω_natural the operator observes resonance — amplitude grows until the pot is detuned.

Demo 4 — Projectile Trajectory with Aerodynamic Drag

4.1 Physical Problem

A projectile fired at angle θ from horizontal with initial speed V₀ in the presence of linear aerodynamic drag (drag force proportional to velocity). The two-axis equations of motion are:

ẍ  = −(b/m) · ẋ
ÿ  = −g − (b/m) · ẏ

where b/m = c is the drag coefficient per unit mass (s⁻¹). This problem is drawn from the EC-1 Operation Manual Version 2 (p. 27, Fig. 34) and attributed there to Prof. Harry F. Meiners of Rensselaer Polytechnic Institute. The manual notes that the initial velocity components are supplied by IC-1 and IC-2, gravity by IC-3, and drag by the m/c coefficient controls.

Demonstration parameters:

ParameterPhysical valueScaled machine value
V₀50 m/s
θ45°
g9.81 m/s²9.81/k_t²
b/m (= c)0.05 s⁻¹0.05/k_t
V₀_x = V₀cosθ35.4 m/sSee below
V₀_y = V₀sinθ35.4 m/sSee below
x_max (no drag)≈ 255 m
Time of flight≈ 7.2 s

Time scaling: k_t = 0.1 (machine runs 10× slower than real time) to keep the solution within a displayable interval. Machine time of flight ≈ 72 s at 0.1× speed — too slow for repetitive display. Better: k_t = 1/0.5 = 2 (machine 2× faster, time of flight ≈ 3.6 machine seconds). Use k_t = 2.

Amplitude scaling: Velocities up to 35 m/s; map 35 m/s → 35 V (k_v = 1 V·s/m). Positions up to 255 m; that maps to 255 V — too large. Scale positions separately: k_x = 0.2 V/m so 255 m → 51 V. Then:

Machine velocity  e_vx  = 1.0 V·s/m · ẋ
Machine velocity  e_vy  = 1.0 V·s/m · ẏ
Machine position  e_x   = 0.2 V/m · x
Machine position  e_y   = 0.2 V/m · y

With k_t = 2, integrator time constant τ = Ri × Cf = 0.5 s (use 0.5 MΩ or 1 MΩ / 1 µF with a ×2 resistor gain adjustment via a 0.5 MΩ plug). The scaled equations become:

de_vx/dt_mach  = −c_mach · e_vx          c_mach = c/k_t = 0.025
de_vy/dt_mach  = −g_mach − c_mach · e_vy  g_mach = g · k_v/(k_t² · k_x) ... 

For the oscilloscope X-Y display, connect e_x (A4 output) to scope X-axis and e_y (A8 output) to scope Y-axis. The trajectory traces out as a parabolic arc.

4.2 Circuit Architecture (Four Integrators + Two Inverters)

AmplifierModeComputesInput(s)
A1Integrator (τ = 0.5 s)−ẋ_mach from ẍ_machdrag term: P1·e_vx
A2Inverter+ẋ_machA1 output
A3Integrator (τ = 0.5 s)−x_mach from ẋ_machA2 output
A4Inverter+x_machA3 output → scope X
A5Integrator (τ = 0.5 s)−ẏ_mach from ÿ_machgravity (IC-3) + drag (P2·e_vy)
A6Inverter+ẏ_machA5 output
A7Integrator (τ = 0.5 s)−y_mach from ẏ_machA6 output
A8Inverter+y_machA7 output → scope Y

Note — Eight of the nine EC-1 amplifiers are consumed by this problem. The ninth (A9) is available for the oscilloscope time-base sweep generator if Y vs. t display is preferred over X-Y trajectory display. For the parabolic arc on X-Y mode, no sweep generator is needed.

4.3 Component and Pot Settings

LocationComponentValuePurpose
A1, A3, A5, A7 feedbackCapacitor plug1.0 µF, 630 VIntegrators τ = 0.5 s
A1, A3, A5, A7 inputResistor plug0.5 MΩτ = 0.5 MΩ × 1 µF = 0.5 s
A2, A4, A6, A8 feedbackResistor plug1.0 MΩUnity inverters
A2, A4, A6, A8 inputResistor plug1.0 MΩUnity inverters
P1X-axis drag coefficient0.025c/k_t for horizontal
P2Y-axis drag coefficient0.025c/k_t for vertical
IC-1 (red post)V₀_x = 35 V to A1 input+35 VHorizontal initial velocity
IC-2 (red post)V₀_y = 35 V to A5 input+35 VVertical initial velocity
IC-3 (red post)g_mach = 2.45 V to A5 input+2.45 VGravity term (scaled)
RC1–RC4Across all four integrator capsReset on OPERATE→RESET
PotPhysical meaningSettingEffect on trajectory
P1Horizontal drag c/k_t0.025Reduces horizontal range
P2Vertical drag c/k_t0.025Asymmetric deceleration
P1 = P2 = 0Zero drag (vacuum)0.000Perfect parabola
P1 = P2 = 0.1Heavy drag0.100Steep, shortened arc

4.4 Patch Diagram

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 700 320" font-family="monospace" font-size="11">
  <text x="10" y="16" font-weight="bold" font-size="13">Demo 4 — Projectile with Drag  ẍ=−cẋ  ÿ=−g−cẏ</text>

  <!-- ===== X AXIS (top row) ===== -->
  <text x="10" y="42" font-size="10" fill="#555">X-AXIS:</text>

  <!-- IC-1 -->
  <rect x="42" y="50" width="55" height="30" rx="3" fill="#e8f4e8" stroke="#555" stroke-width="1.2"/>
  <text x="69" y="62" text-anchor="middle" font-size="9">IC-1</text>
  <text x="69" y="73" text-anchor="middle" font-size="9">+35V Vx₀</text>

  <!-- P1 drag -->
  <rect x="42" y="95" width="55" height="25" rx="3" fill="#ffeee0" stroke="#cc3300" stroke-width="1.2"/>
  <text x="69" y="108" text-anchor="middle" font-size="9" fill="#cc3300">P1=0.025</text>
  <text x="69" y="118" text-anchor="middle" font-size="9" fill="#cc3300">x-drag</text>

  <!-- A1 integrator -->
  <polygon points="120,45 120,100 175,72" fill="#fff8e8" stroke="#cc6600" stroke-width="1.5"/>
  <text x="141" y="69" text-anchor="middle" font-size="10" fill="#cc6600">A1∫</text>
  <text x="126" y="82" font-size="8" fill="#888">Ri=0.5M</text>

  <!-- A2 inverter -->
  <polygon points="200,50 200,95 250,72" fill="#f0f0ff" stroke="#6600cc" stroke-width="1.5"/>
  <text x="220" y="69" text-anchor="middle" font-size="10" fill="#6600cc">A2−1</text>

  <!-- A3 integrator -->
  <polygon points="275,45 275,100 330,72" fill="#fff8e8" stroke="#cc6600" stroke-width="1.5"/>
  <text x="296" y="69" text-anchor="middle" font-size="10" fill="#cc6600">A3∫</text>

  <!-- A4 inverter -->
  <polygon points="355,50 355,95 405,72" fill="#f0f0ff" stroke="#6600cc" stroke-width="1.5"/>
  <text x="374" y="69" text-anchor="middle" font-size="10" fill="#6600cc">A4−1</text>

  <!-- Wires X axis -->
  <line x1="97" y1="65" x2="120" y2="65" stroke="#1a1a8c" stroke-width="1.5"/>
  <line x1="97" y1="107" x2="120" y2="80" stroke="#cc3300" stroke-width="1.5" stroke-dasharray="4,2"/>
  <line x1="175" y1="72" x2="200" y2="72" stroke="#1a1a8c" stroke-width="1.5"/>
  <line x1="250" y1="72" x2="275" y2="72" stroke="#1a1a8c" stroke-width="1.5"/>
  <line x1="330" y1="72" x2="355" y2="72" stroke="#1a1a8c" stroke-width="1.5"/>

  <!-- drag feedback (P1 from A2 output back to A1 input) -->
  <polyline points="250,72 260,72 260,130 113,130 113,72" fill="none" stroke="#cc3300" stroke-width="1.5" stroke-dasharray="5,2"/>
  <text x="155" y="143" font-size="9" fill="#cc3300">P1 drag feedback (ẋ→A1)</text>

  <!-- Scope X label -->
  <line x1="405" y1="72" x2="435" y2="72" stroke="#1a1a8c" stroke-width="1.5"/>
  <rect x="435" y="60" width="55" height="25" rx="3" fill="#e0e8ff" stroke="#333"/>
  <text x="462" y="74" text-anchor="middle" font-size="9">SCOPE X</text>
  <text x="462" y="83" text-anchor="middle" font-size="9">e_x = x(t)</text>

  <!-- X-axis signal labels -->
  <text x="178" y="62" font-size="9">−ẋ</text>
  <text x="253" y="62" font-size="9">+ẋ</text>
  <text x="333" y="62" font-size="9">−x</text>
  <text x="408" y="62" font-size="9">+x</text>

  <!-- ===== Y AXIS (bottom row) ===== -->
  <text x="10" y="182" font-size="10" fill="#555">Y-AXIS:</text>

  <!-- IC-2 (V0y) -->
  <rect x="42" y="190" width="55" height="28" rx="3" fill="#e8f4e8" stroke="#555" stroke-width="1.2"/>
  <text x="69" y="202" text-anchor="middle" font-size="9">IC-2</text>
  <text x="69" y="212" text-anchor="middle" font-size="9">+35V Vy₀</text>

  <!-- IC-3 (gravity) -->
  <rect x="42" y="228" width="55" height="25" rx="3" fill="#ffe8e8" stroke="#990000" stroke-width="1.2"/>
  <text x="69" y="240" text-anchor="middle" font-size="9" fill="#990000">IC-3</text>
  <text x="69" y="250" text-anchor="middle" font-size="9" fill="#990000">2.45V  g</text>

  <!-- P2 drag -->
  <rect x="42" y="262" width="55" height="25" rx="3" fill="#ffeee0" stroke="#cc3300" stroke-width="1.2"/>
  <text x="69" y="274" text-anchor="middle" font-size="9" fill="#cc3300">P2=0.025</text>
  <text x="69" y="284" text-anchor="middle" font-size="9" fill="#cc3300">y-drag</text>

  <!-- A5 integrator -->
  <polygon points="120,185 120,250 175,217" fill="#fff8e8" stroke="#cc6600" stroke-width="1.5"/>
  <text x="141" y="214" text-anchor="middle" font-size="10" fill="#cc6600">A5∫</text>

  <!-- A6 inverter -->
  <polygon points="200,192 200,242 250,217" fill="#f0f0ff" stroke="#6600cc" stroke-width="1.5"/>
  <text x="220" y="214" text-anchor="middle" font-size="10" fill="#6600cc">A6−1</text>

  <!-- A7 integrator -->
  <polygon points="275,185 275,250 330,217" fill="#fff8e8" stroke="#cc6600" stroke-width="1.5"/>
  <text x="296" y="214" text-anchor="middle" font-size="10" fill="#cc6600">A7∫</text>

  <!-- A8 inverter -->
  <polygon points="355,192 355,242 405,217" fill="#f0f0ff" stroke="#6600cc" stroke-width="1.5"/>
  <text x="374" y="214" text-anchor="middle" font-size="10" fill="#6600cc">A8−1</text>

  <!-- Wires Y axis -->
  <line x1="97" y1="204" x2="120" y2="204" stroke="#1a1a8c" stroke-width="1.5"/>
  <line x1="97" y1="240" x2="120" y2="228" stroke="#990000" stroke-width="1.5"/>
  <line x1="97" y1="275" x2="120" y2="232" stroke="#cc3300" stroke-width="1.5" stroke-dasharray="4,2"/>
  <line x1="175" y1="217" x2="200" y2="217" stroke="#1a1a8c" stroke-width="1.5"/>
  <line x1="250" y1="217" x2="275" y2="217" stroke="#1a1a8c" stroke-width="1.5"/>
  <line x1="330" y1="217" x2="355" y2="217" stroke="#1a1a8c" stroke-width="1.5"/>

  <!-- P2 drag feedback y -->
  <polyline points="250,217 260,217 260,300 113,300 113,226" fill="none" stroke="#cc3300" stroke-width="1.5" stroke-dasharray="5,2"/>

  <!-- Scope Y output -->
  <line x1="405" y1="217" x2="435" y2="217" stroke="#1a1a8c" stroke-width="1.5"/>
  <rect x="435" y="205" width="55" height="25" rx="3" fill="#e0e8ff" stroke="#333"/>
  <text x="462" y="219" text-anchor="middle" font-size="9">SCOPE Y</text>
  <text x="462" y="229" text-anchor="middle" font-size="9">e_y = y(t)</text>

  <!-- Y-axis signal labels -->
  <text x="178" y="206" font-size="9">−ẏ</text>
  <text x="253" y="206" font-size="9">+ẏ</text>
  <text x="333" y="206" font-size="9">−y</text>
  <text x="408" y="206" font-size="9">+y</text>

  <!-- Trajectory sketch -->
  <path d="M 510,280 Q 555,180 580,220 Q 595,245 600,280" fill="none" stroke="#1a1a8c" stroke-width="2"/>
  <path d="M 510,280 Q 565,160 610,280" fill="none" stroke="#009900" stroke-width="1.5" stroke-dasharray="6,3"/>
  <text x="505" y="295" font-size="9" fill="#1a1a8c">with drag</text>
  <text x="570" y="295" font-size="9" fill="#009900">no drag</text>
  <text x="505" y="308" font-size="9">X-Y oscilloscope</text>
</svg>

4.5 Gravity Scaling Derivation

The gravity input to A5 deserves explicit derivation because it involves two scale factors simultaneously.

Physical equation: dẏ/dt = −g = −9.81 m/s²

Machine equation (with k_t = 2, k_v = 1 V·s/m):

d(e_vy)/dt_mach  =  −g · k_v / k_t
                 =  −9.81 × 1.0 / 2
                 =  −4.905 V / s_mach

With τ = Ri × Cf = 0.5 s, the integrator gain is 1/τ = 2 V_out / (V_in · s). The required constant input is:

e_gravity  =  4.905 / 2  =  2.45 V

Set IC-3 to +2.45 V. Connect via patch cord to the gravity input of A5 (black post of IC-3 to panel ground, red post to A5 input socket via 0.5 MΩ plug). On the 10 V meter range, the IC-3 meter reading should be 2.45 V ± 0.1 V before patching.

Tip — To demonstrate the effect of different planetary gravities in a live presentation, replace IC-3 with a coefficient pot driven from IC-3. Earth: 2.45 V; Moon (1/6 g): 0.41 V; Mars (0.38 g): 0.93 V; Jupiter (2.53 g): 6.2 V. The visible elongation of the trajectory arc on the oscilloscope is immediate and dramatic.


Demo 5 — Logistic Growth (Single-Species Population Dynamics)

5.1 Physical Problem

The logistic differential equation models population growth with a carrying capacity K:

dN/dt  =  r · N · (1 − N/K)

where N is population, r is the intrinsic growth rate (s⁻¹), and K is carrying capacity. This is a first-order nonlinear ODE. The EC-1 cannot multiply two time-varying voltages directly (it has no function multiplier module), but the product N·(1 − N/K) can be implemented using a feedback technique that is exact for small N/K deviations and approximate for larger ones — or by use of a servo-multiplier add-on. The standard textbook technique for small analog computers uses the factored form:

dN/dt  =  rN  −  (r/K) · N²

The N² term requires a squaring circuit. On the EC-1, this is approximated by connecting the output of the N integrator back through a coefficient pot to simulate the saturation term. The result is an RC-type “soft saturation” that qualitatively reproduces the S-curve of logistic growth.

Approximate linear feedback implementation:

dN/dt ≈ r · N · (1 − α · N)

implemented as:

Integrator A1:  dN/dt  = −(input to A1)
Input to A1  = −rN + (r/K)·N·N  ≈  −rN  (for N << K)

For a complete demonstration, the operator begins with a small initial condition (N₀ << K) and observes the early exponential growth, then the inflection at N = K/2, and finally the asymptotic approach to N = K. This exploits the EC-1’s ability to display transient behaviour over several time constants.

Simplified two-amplifier exact implementation using factored form:

The exact logistic can be implemented with a feedback arrangement that uses a third amplifier to compute N(1 − N/K) approximately, exploiting the quasi-linear approximation valid near the inflection point. See Vol 5 for the general nonlinear-function approximation technique.

Demonstration parameters:

ParameterValueMachine scaling
r0.5 s⁻¹ (intrinsic rate)r_mach = r / k_t
K1000 individualsK_mach = k_u × 1000
N₀50 individualsN₀_mach = k_u × 50 = 2.5 V
k_u0.05 V / individualN ranges 0–1000 → 0–50 V
k_t2 (2× faster)r_mach = 0.25

5.2 Circuit Description

AmplifierModeComputes
A1Integrator (τ = 1 s)N_mach (population)
A2Inverter−N_mach (sign fix)
A3Summer with P1(r − r·N/K) · N = dN/dt term

The feedback path from A1 (via P1) to the summer input implements the saturation: as N_mach grows, the negative feedback grows quadratically, slowing the growth rate. P1 is set to r/K_mach. P2 sets the linear growth rate r_mach.

IC-1 provides N₀ = 2.5 V as the initial condition for A1’s feedback capacitor.

5.3 Component Table

LocationComponentValuePurpose
A1 feedbackCapacitor1.0 µF, 630 VIntegrates dN/dt
A1 input 1Resistor1.0 MΩτ = 1 s; growth input
A1 input 2Resistor1.0 MΩτ = 1 s; saturation input
A2 feedbackResistor1.0 MΩUnity inverter
A2 input 1Resistor1.0 MΩUnity inverter
A3 feedbackResistor1.0 MΩSummer output
A3 input 1 (P1 wiper)Patch cordP1 = 0.05r/K_mach = 0.05 (saturation)
A3 input 2 (P2 wiper)Patch cordP2 = 0.25r_mach = 0.25 (growth)
IC-1Patch cord to A1 cap2.5 VN(0) = 50 individuals
RC1Across A1 feedback capReset
PotPhysical meaningSetting
P1Saturation feedback r/K_mach0.050
P2Intrinsic growth r_mach0.250

5.4 Patch Diagram

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 580 200" font-family="monospace" font-size="12">
  <text x="10" y="18" font-weight="bold" font-size="13">Demo 5 — Logistic Growth  dN/dt = rN(1−N/K)</text>

  <!-- IC-1 initial condition -->
  <rect x="10" y="70" width="65" height="30" rx="4" fill="#e8f4e8" stroke="#555" stroke-width="1.5"/>
  <text x="42" y="83" text-anchor="middle" font-size="10">IC-1</text>
  <text x="42" y="94" text-anchor="middle" font-size="10">N₀=2.5V</text>

  <!-- P2 growth pot -->
  <rect x="10" y="115" width="65" height="30" rx="4" fill="#ffeee0" stroke="#cc3300" stroke-width="1.5"/>
  <text x="42" y="128" text-anchor="middle" font-size="10" fill="#cc3300">P2=0.25</text>
  <text x="42" y="140" text-anchor="middle" font-size="10" fill="#cc3300">growth r</text>

  <!-- A1 Integrator (population) -->
  <polygon points="145,55 145,120 210,87" fill="#fff8e8" stroke="#cc6600" stroke-width="2"/>
  <text x="171" y="84" text-anchor="middle" font-size="11" fill="#cc6600">A1 ∫</text>
  <text x="152" y="98" font-size="9" fill="#888">N_mach</text>

  <!-- A2 Inverter -->
  <polygon points="275,60 275,115 335,87" fill="#f0f0ff" stroke="#6600cc" stroke-width="2"/>
  <text x="297" y="84" text-anchor="middle" font-size="11" fill="#6600cc">A2 −1</text>

  <!-- P1 saturation feedback pot -->
  <rect x="370" y="60" width="70" height="30" rx="4" fill="#ffe0e0" stroke="#990000" stroke-width="1.5"/>
  <text x="405" y="73" text-anchor="middle" font-size="10" fill="#990000">P1=0.05</text>
  <text x="405" y="86" text-anchor="middle" font-size="10" fill="#990000">−r/K_mach</text>

  <!-- Wires -->
  <line x1="75" y1="85" x2="145" y2="85" stroke="#009900" stroke-width="1.5" stroke-dasharray="4,2"/>
  <line x1="75" y1="130" x2="145" y2="95" stroke="#cc3300" stroke-width="1.5" stroke-dasharray="4,2"/>
  <line x1="210" y1="87" x2="275" y2="87" stroke="#1a1a8c" stroke-width="2"/>
  <line x1="335" y1="87" x2="370" y2="75" stroke="#1a1a8c" stroke-width="2"/>

  <!-- P1 feedback back to A1 input (saturation) -->
  <polyline points="370,75 355,75 355,150 135,150 135,103" fill="none" stroke="#990000" stroke-width="2" stroke-dasharray="7,3"/>
  <text x="180" y="165" font-size="10" fill="#990000">saturation feedback −(r/K)·N² term</text>

  <!-- Linear growth feedback (P2 → A1 input direct from A2) -->
  <polyline points="335,87 345,87 345,168 128,168 128,97" fill="none" stroke="#cc3300" stroke-width="1.5" stroke-dasharray="5,3"/>
  <text x="170" y="178" font-size="10" fill="#cc3300">linear growth rN term</text>

  <!-- RC1 -->
  <text x="147" y="50" font-size="9" fill="#555">RC1</text>

  <!-- Output scope -->
  <line x1="210" y1="87" x2="210" y2="30" stroke="#333" stroke-width="1.5"/>
  <rect x="185" y="10" width="80" height="25" rx="3" fill="#e0e8ff" stroke="#333"/>
  <text x="225" y="24" text-anchor="middle" font-size="10">SCOPE: N(t)</text>

  <!-- S-curve sketch -->
  <path d="M 460,175 Q 475,172 490,160 Q 505,140 515,110 Q 522,85 528,70 Q 534,60 560,55" fill="none" stroke="#1a1a8c" stroke-width="2"/>
  <text x="460" y="190" font-size="10" fill="#1a1a8c">Expected: S-curve</text>
  <line x1="460" y1="55" x2="575" y2="55" stroke="#555" stroke-width="1" stroke-dasharray="3,2"/>
  <text x="548" y="51" font-size="9" fill="#555">K</text>
</svg>

5.5 Expected Output

The meter (or oscilloscope) on A1 output should show:

  • Early phase (N << K): approximately exponential growth, indistinguishable from simple Malthusian growth.
  • Inflection (N ≈ K/2 = 25 V machine): growth rate is maximum; the curve is at its steepest.
  • Saturation (N → K = 50 V machine): the curve asymptotically approaches 50 V without overshooting.

The characteristic S-shaped logistic curve is clearly visible on the oscilloscope in a single OPERATE cycle of approximately 5–8 machine seconds. In repetitive mode, the entire growth curve cycles continuously.

Note — The EC-1 implementation described here is an approximation to the exact logistic. The nonlinearity arises from feeding N back through P1 to create an approximately N² term. For rigorous reproduction of the exact logistic, a diode-function-generator circuit (as described in the Operation Manual’s discussion of the bouncing-ball problem) or an external analog multiplier module would be required. For pedagogical purposes the qualitative S-curve is reproduced with high fidelity by the feedback approximation.


Demo 6 — Predator-Prey (Lotka-Volterra System)

6.1 Physical Problem

The Lotka-Volterra equations describe the coupled population dynamics of a predator species (P) and prey species (N):

dN/dt  =  α·N  −  β·N·P        (prey: birth minus predation)
dP/dt  = −γ·P  +  δ·N·P        (predator: death plus feeding)

where α is the prey birth rate, β is the predation rate coefficient, γ is the predator death rate, and δ is the predator growth-per-prey coefficient. This system is nonlinear because of the N·P coupling terms. Like Demo 5, the EC-1 approximates the product N·P using a quasi-linear feedback technique that is equivalent to an analogue multiplication approximation. For demonstration purposes with small oscillations around the equilibrium point (N* = γ/δ, P* = α/β), the linearised system is:

dn/dt  =  −β·P* · p
dp/dt  =  +δ·N* · n

where n = N − N* and p = P − P* are small deviations. This linearised system is identical in form to the simple harmonic oscillator (Demo 2) and produces sinusoidal population cycles around equilibrium.

The EC-1 implements the linearised form directly (four amplifiers) to produce coupled oscillations. For the full nonlinear form an additional two amplifiers are used to approximate the N·P products via gain-scheduled feedback.

Linearised demonstration parameters:

ParameterValueMachine scaling
α (prey birth)0.5 yr⁻¹α_mach = 0.05
β (predation)0.01 yr⁻¹ per predatorβ_mach = 0.001
γ (predator death)0.2 yr⁻¹γ_mach = 0.02
δ (feeding rate)0.005 yr⁻¹ per preyδ_mach = 0.0005
N* = γ/δ40 individuals (prey eq.)20 V machine
P* = α/β50 individuals (pred. eq.)25 V machine
k_u0.5 V / individual100 individuals → 50 V
k_t10 (10× faster)1 year → 0.1 s machine

6.2 Circuit Architecture

AmplifierModeComputesNotes
A1Integrator (τ = 1 s)N deviation n(t)prey dynamics
A2Inverter−nsign correction
A3Integrator (τ = 1 s)P deviation p(t)predator dynamics
A4Inverter−psign correction

Coupling: A4 output (−p) feeds A1 input via P1 (= β·P_mach); A2 output (−n) feeds A3 input via P2 (= δ·N_mach). Both couplings are negative in the machine, which after sign inversion produce the correct coupled-positive equations of linearised Lotka-Volterra.

6.3 Component and Pot Settings

LocationComponentValuePurpose
A1 feedbackCapacitor1.0 µFPrey integrator
A1 input 1Resistor1.0 MΩτ = 1 s
A2 feedback & inputResistors1.0 MΩ eachInverter for n
A3 feedbackCapacitor1.0 µFPredator integrator
A3 input 1Resistor1.0 MΩτ = 1 s
A4 feedback & inputResistors1.0 MΩ eachInverter for p
P1 (wiper → A1 in)Pot0.050β·P* coupling (predation)
P2 (wiper → A3 in)Pot0.010δ·N* coupling (feeding)
IC-1 (to A1 cap)+5 Vinitial prey deviationn(0) = +5 V (10 individuals above equilibrium)
IC-2 (to A3 cap)0 Vinitial predator deviationp(0) = 0
RC1, RC3Relay contactsacross A1 and A3 capsReset
PotPhysical meaningSettingEffect
P1Predation coupling β·P*_mach0.050Prey suppression by predators
P2Feeding coupling δ·N*_mach0.010Predator growth from prey
Both toward 0Decoupled populationsN and P evolve independently
P1 >> P2Strong predationOverdamped, prey collapses

6.4 Patch Diagram

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 620 240" font-family="monospace" font-size="12">
  <text x="10" y="18" font-weight="bold" font-size="13">Demo 6 — Lotka-Volterra Predator-Prey (linearised)</text>

  <!-- IC supplies -->
  <rect x="10" y="65" width="65" height="28" rx="4" fill="#e8f4e8" stroke="#555" stroke-width="1.5"/>
  <text x="42" y="78" text-anchor="middle" font-size="10">IC-1 +5V</text>
  <text x="42" y="90" text-anchor="middle" font-size="10">prey n₀</text>

  <rect x="10" y="160" width="65" height="28" rx="4" fill="#e8e8f4" stroke="#555" stroke-width="1.5"/>
  <text x="42" y="173" text-anchor="middle" font-size="10">IC-2  0V</text>
  <text x="42" y="185" text-anchor="middle" font-size="10">pred p₀</text>

  <!-- A1 Integrator (prey N) -->
  <polygon points="120,55 120,115 185,85" fill="#e8ffe8" stroke="#006600" stroke-width="2"/>
  <text x="147" y="82" text-anchor="middle" font-size="11" fill="#006600">A1 ∫</text>
  <text x="127" y="97" font-size="9" fill="#555">Prey n(t)</text>

  <!-- A2 Inverter -->
  <polygon points="220,60 220,110 275,85" fill="#f0f0ff" stroke="#6600cc" stroke-width="2"/>
  <text x="243" y="82" text-anchor="middle" font-size="11" fill="#6600cc">A2 −1</text>

  <!-- A3 Integrator (predator P) -->
  <polygon points="120,150 120,210 185,180" fill="#e8e8ff" stroke="#000099" stroke-width="2"/>
  <text x="147" y="177" text-anchor="middle" font-size="11" fill="#000099">A3 ∫</text>
  <text x="127" y="192" font-size="9" fill="#555">Pred p(t)</text>

  <!-- A4 Inverter -->
  <polygon points="220,155 220,205 275,180" fill="#f0f0ff" stroke="#6600cc" stroke-width="2"/>
  <text x="243" y="177" text-anchor="middle" font-size="11" fill="#6600cc">A4 −1</text>

  <!-- Wires: IC to integrators -->
  <line x1="75" y1="79" x2="120" y2="79" stroke="#009900" stroke-width="1.5" stroke-dasharray="4,2"/>
  <line x1="75" y1="174" x2="120" y2="174" stroke="#0000cc" stroke-width="1.5" stroke-dasharray="4,2"/>

  <!-- Wires: A1→A2 and A3→A4 -->
  <line x1="185" y1="85" x2="220" y2="85" stroke="#1a1a8c" stroke-width="2"/>
  <line x1="185" y1="180" x2="220" y2="180" stroke="#1a1a8c" stroke-width="2"/>

  <!-- P1 pot (predation coupling from A4 back to A1) -->
  <rect x="305" y="155" width="70" height="30" rx="4" fill="#ffeee0" stroke="#cc3300" stroke-width="1.5"/>
  <text x="340" y="168" text-anchor="middle" font-size="10" fill="#cc3300">P1=0.050</text>
  <text x="340" y="181" text-anchor="middle" font-size="10" fill="#cc3300">predation</text>

  <!-- P2 pot (feeding coupling from A2 back to A3) -->
  <rect x="305" y="60" width="70" height="30" rx="4" fill="#e0f0ff" stroke="#003399" stroke-width="1.5"/>
  <text x="340" y="73" text-anchor="middle" font-size="10" fill="#003399">P2=0.010</text>
  <text x="340" y="86" text-anchor="middle" font-size="10" fill="#003399">feeding</text>

  <!-- Wire A4→P1 -->
  <line x1="275" y1="180" x2="305" y2="170" stroke="#cc3300" stroke-width="1.5"/>
  <!-- P1 coupling back to A1 input (cross-coupling predator→prey) -->
  <polyline points="305,168 295,168 295,230 110,230 110,100" fill="none" stroke="#cc3300" stroke-width="2" stroke-dasharray="7,3"/>
  <text x="165" y="223" font-size="9" fill="#cc3300">predator suppresses prey (P1)</text>

  <!-- Wire A2→P2 -->
  <line x1="275" y1="85" x2="305" y2="75" stroke="#003399" stroke-width="1.5"/>
  <!-- P2 coupling back to A3 input (cross-coupling prey→predator) -->
  <polyline points="305,73 290,73 290,30 110,30 110,165" fill="none" stroke="#003399" stroke-width="2" stroke-dasharray="7,3"/>
  <text x="165" y="23" font-size="9" fill="#003399">prey feeds predator (P2)</text>

  <!-- Outputs to scope (X-Y Lissajous) -->
  <line x1="185" y1="85" x2="185" y2="85" stroke="#333" stroke-width="1"/>
  <line x1="275" y1="85" x2="450" y2="85" stroke="#009900" stroke-width="1.5"/>
  <line x1="275" y1="180" x2="450" y2="180" stroke="#0000cc" stroke-width="1.5"/>

  <rect x="450" y="65" width="85" height="130" rx="4" fill="#f5f5ff" stroke="#333" stroke-width="1.5"/>
  <text x="492" y="85" text-anchor="middle" font-size="10">SCOPE</text>
  <text x="492" y="98" text-anchor="middle" font-size="10">X-Y mode</text>
  <text x="492" y="112" text-anchor="middle" font-size="9" fill="#006600">X = Prey N</text>
  <text x="492" y="125" text-anchor="middle" font-size="9" fill="#000099">Y = Pred P</text>
  <!-- Oval Lissajous sketch -->
  <ellipse cx="492" cy="162" rx="28" ry="18" fill="none" stroke="#1a1a8c" stroke-width="1.5"/>
  <text x="492" y="196" text-anchor="middle" font-size="9">closed orbit</text>

  <!-- RC contact markers -->
  <text x="122" y="50" font-size="9" fill="#555">RC1</text>
  <text x="122" y="145" font-size="9" fill="#555">RC3</text>
</svg>

6.5 Expected Output

In X-Y mode on the oscilloscope (prey N on X-axis, predator P on Y-axis), the linearised system traces a closed elliptical orbit — confirming the conservative nature of the Lotka-Volterra system near equilibrium. The orbit period in machine time is:

T_mach  =  2π / √(β·P*·δ·N*) _mach
         =  2π / √(0.05 × 0.01)
         =  2π / √(0.0005)
         ≈  2π / 0.0224
         ≈  280 s_mach

This is too long for oscilloscope display without an extremely slow repetitive rate. For classroom use, increase P1 to 0.5 and P2 to 0.1 (effectively scaling up the coupling), which reduces the period to ≈ 28 s. The orbit remains elliptical but at a machine frequency easily observed on a slow-sweep oscilloscope. As P1 and P2 are adjusted relative to each other, the orbit changes eccentricity — a vivid demonstration of how predator-prey balance is affected by relative birth and death rates.

Tip — To display the time histories of N and P separately (rather than the X-Y phase portrait), switch the oscilloscope to normal Y vs. t mode with A9 configured as a ramp sweep generator (IC-n → 1 MΩ / 1 µF integrator). Connect A1 output to scope CH1 and A3 output to CH2 on a dual-trace scope. The two sinusoidal time traces will be approximately 90° out of phase — exactly as predicted by the linearised theory.


Cross-Program Reference: Amplifier Allocation Summary

The following table summarises which amplifiers are used in each demo. It is useful when planning a session that transitions from one problem to another without fully re-patching.

AmpDemo 1Demo 2Demo 3Demo 4Demo 5Demo 6
A1∫ (RC decay)∫ (ẍ→−ẋ)∫ (ẍ→−ẋ)∫ X-ẍ→−ẋ∫ dN/dt∫ prey n
A2∫ (−ẋ→+x)∫ (−ẋ→+x)−1 X−1 N−1 −n
A3−1 (x fix)−1 (x fix)∫ X-ẋ→−xΣ dN/dt∫ pred p
A4−1 X-pos−1 −p
A5∫ Y-ÿ→−ẏ
A6−1 Y-vel
A7∫ Y-ẏ→−y
A8−1 Y-pos
A9sweep gensweep gensweep gensweep gensweep gen

Note — Demo 4 (projectile) is the only demonstration that fully occupies all nine amplifiers (one remaining for the sweep generator). When transitioning from Demo 4 to Demo 5 or 6, all patch cords and plug-in components for A5–A8 must be removed.


Coefficient Potentiometer Quick-Reference

The five front-panel coefficient pots (P1–P5) are used differently in each demonstration. The following table provides a session operator with a single-page setup reference.

DemoPotPhysical parameterSettingWiper connects to
D1 RC DecayP1Not used
D2 SHMP1ω²_mach = 0.3950.395A1 input 1 (from A3 out)
D3 DampedP1ω²_mach = 0.3950.395A1 input 1 (ω² feedback)
D3 DampedP22ζω_mach = 0.2510.251A1 input 2 (damping feedback)
D4 ProjectileP1c_mach X-drag = 0.0250.025A1 input (from A2 out)
D4 ProjectileP2c_mach Y-drag = 0.0250.025A5 input (from A6 out)
D5 LogisticP1r/K_mach = 0.0500.050A1 input 2 (saturation)
D5 LogisticP2r_mach = 0.2500.250A1 input 1 (growth)
D6 Lotka-VP1β·P*_mach = 0.0500.050A1 input (from A4 out)
D6 Lotka-VP2δ·N*_mach = 0.0100.010A3 input (from A2 out)

Tip — The EC-1 potentiometers are unmarked (only “0” CCW and “1” CW are engraved). When setting a pot to a value such as 0.395, use a calibrated voltmeter across the pot terminals: apply a known 10 V reference from IC-1 and measure the wiper voltage; 0.395 × 10 V = 3.95 V. This provides accuracy better than the ±5% eyeball estimate. See Vol 3, section 4.4 for the detailed pot calibration procedure.


The front panel of the EC-1 shows the nine amplifier binding posts, five coefficient pots (bottom row), the IC supply controls, and the meter — all in active use during a spring-mass demonstration

A second view of the front panel, with patch cords installed for a two-integrator problem; the coefficient pot knobs and mode switches are visible

Plug-in component assemblies: resistor and capacitor values mounted on two-pin clear plastic plugs for insertion into the 27 patching sockets


Scaling Methodology Summary

The following table consolidates the amplitude and time scaling applied across all six demonstrations. This serves as a design template for the reader’s own problems.

Demok_t (machine / real)k_u (V / phys. unit)Max machine voltτ (integrator s)Notes
1 RC Decay1.0 (real time)0.5 V/V40 V0.5 sSingle integrator
2 SHM0.1× (10× slower)40 V/m40 V1.0 sω²_mach = 0.395
3 Damped0.1×40 V/m40 V1.0 sP2 sets ζ
4 Projectile0.5× (2× faster)1 V·s/m vel; 0.2 V/m pos40 V0.5 s8 amplifiers
5 Logistic0.5×0.05 V/individual50 V1.0 sApprox. N²
6 Lotka-V0.1×0.5 V/individual30 V1.0 sLinearised N·P

Note — The choice of k_t involves a trade-off. A faster machine run (large k_t) means shorter solution times, reduced amplifier drift, and better scope display in repetitive mode — but it also means higher effective ω values, which may challenge the EC-1’s −1 dB bandwidth of 600 Hz (see Vol 2, section 3.2 for bandwidth considerations). For all six demos here, the highest machine frequency is well below 1 Hz, keeping frequency-response errors below 0.01%.


Pre-Run Checklist

Before executing any demonstration in this volume, the operator should complete the following steps in order. This integrates the procedures from Vol 3 (calibration) and Vol 4 (pre-run setup).

StepActionReference
1Turn FILAMENT on; wait 30 minutes for tube warm-upVol 4, §4
2Set OPERATION switch to RESETVol 4, §4
3Turn HIGH VOLTAGE on; set B+ to +300 V using VC trimmerVol 4, §4
4Balance all nine amplifiers (100 V → 10 V → 1 V meter ranges)Vol 4, §4
5Verify IC supplies: measure each with meter at METER INPUTVol 4, §4
6Install plug-in components per this volume’s component tableThis vol
7Install patch cords per this volume’s patch diagramThis vol
8Set coefficient pots per this volume’s pot settings tableThis vol
9Set METER FUNCTION to AMPLIFIER OUTPUT n (desired amp)Vol 5, §6
10Set METER RANGE to 100 V initiallyVol 5, §6
11Turn OPERATION to MANUAL; observe first responseThis vol
12Verify amplitude is within ±50 V; adjust IC or scale if neededVol 5, §3
13Switch to REPETITIVE at low rate (0.1 cps); connect scopeVol 5, §6

Danger — The EC-1 internal supplies reach +300 V DC on the chassis bus bars. Never reach inside the chassis with FILAMENT or HIGH VOLTAGE switches on. All connections described in this volume are made exclusively to the front-panel banana jacks, which are safe to handle. See Vol 4 for full safety protocol.

Note — Amplifier balancing (Step 4) must be repeated if the ambient temperature has changed significantly since the last session, if new tubes have been installed, or if more than 30 minutes have elapsed without a warm-up run. The 6U8 triode sections exhibit measurable drift in the first 20–30 minutes of operation. All demonstrations in this volume assume balanced amplifiers producing < 0.1 V residual output with no input.


Troubleshooting by Symptom

SymptomMost likely causeCorrective action
Output saturates immediately at ±60 VIntegrator cap not discharged; relay contacts not connectedConnect RC1/RC2 across feedback caps; verify RESET position before OPERATE
Output frozen at zeroRelay contacts connected but not opening on OPERATECheck relay wiring; switch to MANUAL and re-test
Oscillation diverges (amplitude grows)Wrong sign in feedback pathTrace polarity chain; check inverter A3 in Demos 2–3
Oscillation too fast / too slowWrong Ri or Cf values in plugsVerify plug values with DMM before insertion
DC offset on oscillationAmplifier out of balanceRe-balance affected amplifier; check 6U8 tube
Pot setting has no effectPatch cord to wiper terminal missingCheck patch cord from pot wiper (black post) to amp input
IC supply reads zeroIC control fully CCW, or black post not groundedRotate IC control CW; connect IC black post to panel ground
Scope shows 60 Hz hum on outputInsufficient isolation in IC supplySee Vol 3, §6.2 on IC supply isolation transformer fix
Exponential that doesn’t decayWrong resistor in plug socketSwap Ri plug; verify 1 MΩ vs 0.1 MΩ with DMM
Waveform amplitude low (< 10 V)IC supply set too lowIncrease IC control; use 10 V meter range to set accurately

Notes on the Bouncing Ball Problem

The EC-1 Operation Manual’s bouncing ball problem (Ver. 2, pp. 29–30, Fig. 38) is the most complex demonstration documented by Heathkit and employs all nine amplifiers along with diode-function-generator circuits, an external 6.3 V filament transformer, and a phase-shifter to produce the Lissajous ball image on the oscilloscope. The additional components required (listed in the manual as 20 kΩ, 200 kΩ, 500 kΩ, 2 MΩ, and multiple 10 MΩ resistors, plus 25 kΩ and 100 kΩ pots and two silicon diodes) are documented in the research guide (section 7.2, Bouncing Ball Simulation Parts List). This problem is not reproduced as a full worked example in this volume because it requires the specialised resistor plug values. It is documented in detail in the Nuts & Volts Magazine restoration article (May 2016) and in the Heathkit EC-1 Operation Manual Version 2 (full schematic, Fig. 38, p. 30). The reader who has successfully completed Demos 2–4 possesses all the analytical tools needed to understand the bouncing ball circuit.

The key additional element is the diode clamp: two silicon diodes (1N4006, one forward and one reverse) are inserted at the output node that represents height y. When y reaches zero (floor), the diodes conduct and reverse the velocity term — implementing the discontinuous velocity reversal at each bounce. The energy loss per bounce (coefficient of restitution) is set by a coefficient pot. This is the EC-1’s introduction to nonlinear analogue computation and is historically significant as a demonstration that continuous analogue machines can handle the discontinuous boundary conditions that were thought to require digital computation.


Further Problems for Independent Study

The following list gives governing equations suitable for direct implementation on the EC-1 using the techniques developed in Demos 1–6. Scaling details are left as exercises for the reader (see Vol 4, section 6 for the systematic scaling procedure).

ProblemEquationAmps neededKey pots
Radioactive decay chain A→B→CdA/dt = −λ_A·A; dB/dt = λ_A·A − λ_B·B42 (decay constants)
RC ladder (2-section)Two coupled RC equations32 (tau values)
Van der Pol oscillatorẍ − μ(1−x²)ẋ + x = 04 + diode2 (μ, ω)
Beam vibration (cantilever)Coupled 4th-order PDE reduced to ODE6–84
Atmospheric re-entry heatingρ·v²·C_D with exponential atmosphere63
Charged particle in E fieldẍ = qE/m42 (field, charge)
Pendulum (small angle)θ̈ = −(g/L)·θ31 (g/L)
Chemical kinetics (2nd order)dA/dt = −k·A·B, dB/dt = −k·A·B4 + mult. approx.2

About This Volume

This volume presents six fully worked programs for the Heathkit EC-1 Educational Analog Computer. Governing equations are drawn from the EC-1 Operation Manual Version 1 (1959) and Version 2, supplemented by standard analog-computer programming technique as described in Korn & Korn (1956) and Johnson (1956), which are the references cited by the EC-1 manual itself. All scaling derivations are original to this volume. Patch diagrams are drawn as inline SVG for accurate rendering in HTML or PDF output. Each demo has been designed to use only components available in the EC-1 standard kit (1.0 MΩ and 0.1 MΩ precision resistor plugs, 1.0 µF capacitor plugs, silicon diodes) plus optional 0.5 MΩ parallel-paired plugs.

Cross-references to other volumes in this series:

  • Vol 2 (Hardware & Theory of Operation): op-amp gain, sign convention, bandwidth, integrator drift
  • Vol 3 (Patch Panel & Computing Elements): amplifier balancing, IC supply adjustment, pre-run checklist
  • Vol 4 (Acquisition & Restoration): restoration procedures, component replacement
  • Vol 5 (Programming): systematic scaling, block diagrams, time and amplitude scale factors
  • Vol 7 (Modern Extensions & Interfacing): oscilloscope connection, sweep generator circuits, X-Y display, data-logging