Analog Computer Bouncing Ball

Before digital computers came to dominate, analog computers were actually pretty commonly used to solve research, engineering, and business problems.  These machines sprung up in the vacuum tube era, and acutally survived into the transistor era for some time.  From time to time they pop up on ebay… the Comdyna GP-6 is probably most common.  Clearly they have fallen out of vogue with the advent of digital computation, but can we still have fun with analog computers?Of course.

You probably think of op-amps as audio components, but did you know that their original purpose was to process information in analog computers?  In this Bouncing Ball circuit, I used one TL074 op-amp chip to do all the math.  There are a few other chips involved, which are needed to set up conditions for the next bounce, and to stop the computation when the “ball” comes to a rest.

 Analog Computer Bouncing Ball Analog Computer Bouncing Ball

The circuit works by modeling two physical principles; the equations of motion for freefall under constant gravity, and the coefficient of restitution.  I actually got a “D” in college physics but I’ll try to explain how it works : ]

equations of motion:  a(t) = v’(t) = s”(t)


  • a = acceleration
  • v = velocity
  • s = position

This tells us that acceleration is the time derivative of velocity, and likewise, velocity is the time derivative of position.  Since analog electronics are subject to contamination by noise, and differentiation (taking derivatives) is a noise-amplifying process, analog computers are normally designed to use integrals instead of derivatives.  We can look at these equations in terms of integrals and get the same relationship.  Performing integrations with op-amps is straightforward; basically it involves connecting a capacitor between the op-amp’s output and inverting input.  In this way, voltages are used to represent the position, velocity, and acceleration as the equations are solved.

 coefficient of restitution:  Cr = v(i)/v(i-1)

The coefficient of restitution is simply the ratio of the ball’s velocity after it bounces to its velocity before it bounced.  Since all normal collisions lose energy as heat, Cr is less than 1 in nature.   To apply this in my circuit, I used a potentiometer to set this ratio.  To make things interesting, I gave this part of the circuit some extra gain so Cr can be set greater than 1 if desired, so the ball gains extra energy with each bounce.

Modeling a single bounce is one thing, but making the calculation repeat over and over until the ball is at rest requires testing for certain conditions and taking action based on the results.  Specifically, it requires testing for position=0 (ball is in contact with the floor), and velocity=0.  Velocity is zero when the ball is at the apex of its flight, and also when the ball has come to a rest at the end of the bounce train.  So, the circuit contains some analog comparators and logic to detect these conditions.

Summary of controls, inputs, and outputs…

  • launch button
  • reset button
  • coefficient of restitution knob
  • initial velocity knob
  • force of gravity knob
  • position output (voltage)
  • velocity output (voltage)
  • position=zero output (trigger)
  • velocity=zero output (trigger)

The major challenge in making this circuit work was filling in the “blanks” that textbooks leave when discussing how to implement analog integrators.   Almost always, they don’t mention how to set the initial conditions of the integration.  Looking back to older literature, I found some useful info in “Analog Computer Techniques” by Clarence L. Johnson (1956):

initial conditions

If you look closely at the photo of my circuit, you’ll see two 4066 quad analog switches.  I used seven of the eight switch units in place of the relays in the above diagram.  They are doing things like resetting the integrators and setting initial conditions when instructed to do so by the logic elements.

Please excuse the lack of schematics.  This page is still under construction.  I intend to put up a detailed block diagram and add hyperlinks…