My ball wall project
Johan Halmén

In another thread that closed too soon[1], I mentioned this idea, that I've been working on.

Short description. I have a round plate covering three piezo elements. Throwing a ball on the plate will cause an impulse in each piezo element. Comparing the size of the impulse will give information of where the ball hit.

This is a rough description of the thing. On a stiff plywood board I have three piezo elements. Over them I lay a thin sheet of plastic foam. On top of it the circular plate of MDF or similar. The MDF plate should distribute the force pulse evenly to the three piezos. The plastic foam should dampen any vibrations and perhaps also prevent too high voltage peaks.


If the piezos manage to deliver measureable peaks and my electronics manage to measure them more or less precise, and if the MDF plate can distribute the impact force in a way that the peak is smaller the farther away from the piezo the impact happens, I should be able to determin exactly where the hit happened and with what force the ball hit.

Roughly: I have three measured values, which give a three dimensional vector. What I want is the location (2 dimensions) and the force (the third dimension).

If the pulses from A and B are equal, the hit must have happened along the straight line through the center and C. In that case, if the pulse from C is bigger than the pulse from A or B, the hit happened to the right.

But could it be that two hits of differing forces and differing locations still could give identical pulses on A, B and C? Something tells me that it couldn't. Of course, the circular plate is not infinite, something might happen with the shock near the edges. It might reflect or something. With an infinite size plate, I might find a function of the peak size depending on the distance and the force. Say peak = force / distance². But I probably have to just test and calibrate the thing. Like using impacts of 4 different sizes on some 100 points on the plate. Then build a lookup table, if the tests don't show an obvious mathematical relationship that easily converts into a formula or two.

From that, I hope to be able to find out the location and force of any arbitrary hit (I) on the plate.


  1. We should have a discussion about threads that close too soon.

Can your sensors measure the delay difference between pulses? That'd remove the issue of the force. Otherwise, just add a forth sensor, it'll be enough disambiguate.

Johan Halmén

Probably not. I use a microcontroller and I don't think it's fast enough. I'd have to use an external timer chip or something, that would turn the delays into digital data.
The delays would be in microseconds. I already skipped the idea of just polling the three analog inputs and reading the max values, becaude of timing problems. Instead I have peak detector circuits that hold the max values until the microcontroller has time to read them.


Speed of vibration in wood is some 3500 m/s. That's 3.5 m/ms and 3.5 mm/µs. I'd hope to have some 20 mm of accuracy. A time based system would be nice, because the position could be calculated only based on the times. After that, the force could be easily calculated, when the position would be known and the puls sizes from each piezo. With my approach based only on the size of rhe pulses. it's more complex.


Ok, I just tested the speed of the microcontroller. A simple loop that reads an analog port and does two other lines is performed 10000 times per second. That's 10 times per millisecond. During one loop the sound or vibration travels 35 cm in the wood. Though it probably travels slower in the MDF board than in plywood.

Thread #616887. Printed from