How to Make a DIY Force Plate

9,357

23

11

Force plates can be very useful in bio-mechanics. As part of a workshop in conjunction with RPI, we taught high school students how to build and use their own force plates from very inexpensive materials. These custom force plates were used to test their own hypotheses about bio-mechanics. It is our hope that this built their understanding of biology, math, physics, and making.

To make this force plate you're going to need the following components:

Teacher Notes

Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.

Step 1: Prepare Strain Gauge

Take the strain gauge and wrap the wire around some stripped insulated wire and solder them together. In addition to wrapping the wires (as one normally does with soldered contacts) wrap both wires together, and then tape them to the plate to relieve strain. Keep in mind that the contacts on the strain gauge are fragile and not meant to flex.

The strain gauges come in some thin plastic sheet which is excellent for this application. So you can double it over into an ellipsoid. This will be out sensor mount. When the plastic is compressed, it will bend and the strain gauge taped to it will stretch with it generating a signal.

Step 2: Setup the Circuit

The signal created by the strain gauge is about a change in resistance. The simple way to measure the change is to create a voltage divider. By putting another equal resistance in series with this one, and measuring the voltage between the two, as the resistance changes, so too will the voltage. So start by putting a 350 ohm resistor in parallel. you may quickly find that the signal is very small, we'll need a better setup to measure it.

In particular, the signal changes from about 2.500 to 2.503. If only we could measure the change and get rid of those pesky 2.5... to do this let's setup a parallel circuit and use that to to compare with. Put two 350ohm resistors in series and measure the voltage between the two. Now it's only a change between 0 and 0.003.... well, now the change is obvious, but it's still very small, let's make it bigger.

Run the two signals through voltage followers so that the signal, which is very small, won't be impacted by the amplification. Now let's subtract and amplify the signal. Run the voltage followers into the subtractor, and amplify it by 1000x. To do this connect one voltage follower to the positive via a small resistor, and then to the ground by a resistor 1000x larger, and the other to the negative by a resistor, and that one to the output by 1000x greater resistor.

Snap for arduino is a great way to graph the output of the sensor, and a good place to start if you've never programmed before. Alternately, you can use just the arduino IDE for very high speed / high accuracy output.

Step 3: Build the Plate

Now that we have a circuit and displacement sensor, let's take the final step and make the force plate. There are a ton of ways to do this, but we want something cheap so you can go to any hardware store and get some pipe insulation which is very springy. Using this as a spring we should be able to use hooks law F=kX, to determine the force on the plate.

Take your insulation and cut it up. Typically it will have a slit down the side, and cut it into similarly sized cylinders. Depending on the strength of the force you want to apply, you may want different areas. For example, if you're learning about boxing and force, you may want a smaller spring area, but if you're making a platform to measure jumping you'd want a larger one. Make sure that your springs are about as tall as your displacement sensor. Alternately, if you only care about forces > than a certain size, you can make it slightly smaller.

When you have your springs, place your sensor between them, and place a box or stiff piece of plastic over the top. If you're going to be punching it, make sure to put a bit of padding on the top just in case.

Recommendations

• Internet of Things Class

22,729 Enrolled

11 Discussions

Thanks for sharing this. I have a bit of a more complicated project and I 'd love to have your advice as I am relatively new to this.

I
would like to make multiple (vertical axis) force plates with four
loadcells for each one (one at each corner) and to collect data from
them simultanously. So I need to connect multiple
loadcells and get them with a high sampling rate (>500Hz). It looks
that the ADS1115 will give me enough sampling rate, and good resolution
(16bit) but also looking for better alternatives if you can propose any. Also I am thinking
about Teensy 3.6 as it is looks quite powerfull, but also i am open to something else.

questions i need to mention that I need just to read the sum of each
group of 4 loadcells (i.e. per plate). I dont know how to do it yet (perhaps a Load Sensor combinator from Sparkfun ?), but
I am just trying to find a component for that too, which will reduce my
signals.

My questions are:

1. For multiple loadcells is the ADS1115 approprite (remember I need >500sps for all data) ?
2. What would be the maximum number of loadcells per ADS1115 with a 500sps
3. The ADS1256 seems to be a better alternative than ADS1115. Would it work ? Any experience ?
4. What would be the maximum number of loadcells that the Teensy could cope for 500sps
5. Do you suggest any other components for this project instead of Teensy + ADS1115
6. Would I need any other other components to buy ?
7. What exactly should l look in terms of specs of the loadcells in order to be compatible with my electronics.

If you only need a sum, use an op amp set up as a mixer. Instructions are available online.

If you want individual values or you need 16 bits you can use the ADS1115.

You may be limited by the read speed of the arduino. I've not used a teensy with the relevant library.

The question is how accurate does your system need to be, and how good are your load cells. 24-bits is on the order of 10 ppb. IE if you're reading 0-10lbs, and have perfectly setup your range, that's 0.000001lbs resolution, can your load cells provide that level of accuracy? Can your setup? How accurate do you need to be? Without knowing the application, I can't answer that for you.

If you do a mixing op amp, it can take any number of load cells. If you can have multiple ADS1115s in a row, still any number. If you can have only 1 ADS1115 it's limited to 4.

Microprocessors are application specific. Does it need to be low power? Collect other data? Be reconfigured etc.

The Teensy needs header pins and a breadboard. If you're getting the ADS1115, I recommend getting it on the adafruit breakout board, it's just easier and about the same price. If this is your first electronic build, I strongly recommend making a circuit diagram and ensuring you have all the components first. I am not sure what load cells you're using, but they may ore may not require resistors, amps, etc.

That's.... a long question. It gets into the depths of sensor design. If you have time, read Practical Electronics for Inventors. If not, read: https://learn.sparkfun.com/tutorials/getting-started-with-load-cells

Hi, how many directions can this force plate measure (i.e. Fx, Fy, Fz, Mx, My, Mz) ?

Hello! Im froma Argentina and Im new on this too. I would like to ask you. if you could give a little more details about the components. Im trying to start the construction of the plate and I have to buy the components. And as Im not an electronics expert (just an sports science student) Im having some troubles choicing the resistor, for example: I can see there 22kohm resistors of 0.25w or 3. Same problem with de op amps (which specs are the most important to have in mind when you are buying).

Im sorry for all this cuestions. I apologize, because Im have almost no knowledge of electronics, but I have a big Illusion of building this plate.

All the helpness you can give is going to be a bless for me.

Thanks a lot.

Daniel.

None of the components should experience high current, so 0.25w will be more than enough for any of the resistors. The opamps are similarly open ended with few requirements by design (we wanted it to be easy for the students to get into).

The only consideration is that, if you intend to amplify something by this amount, you must be relatively certain of the voltage divider resistance. So good tolerance (1%) and little change with temperature is ideal for the 330 ohm resistor.

I am really new to all of this but would there be a way to measure the time that a force is applied? the amount of force is irrelevant for what i want to do. I just need to know if the time that the force is applied is < or > a certain time. many thanks

3 replies

Certainly, this is the sort of thing I do with students, and which is a simple introduction as it requires only the smallest amount of code to write a program to return that. Add globals:

const int threshold = 255;
int startContactTime = -1;

if( startContactTime== -1 && analogRead(0)>threshold) //check to see if pressure has been applied for the first time

startContactTime=Millis(); // if it is, capture the time (millis will return the time in milliseconds

else if (startContactTime!= -1 ) //if the plate was contacted, but isn't anymore

{
Serial.println(Millis() - startContactTime); //display the time at release

startContactTime= -1; // clear the time for contact

}

When I run classrooms, I prefer instruments that are versatile enough so that students can branch off and make different things. However, when running a workshop with this project, I found that there wasn't enough time to properly teach the students the analog components in this lesson. If you know that no force data is required, I suggest using another sensor like:

https://www.sparkfun.com/products/8685

to cut back on the number of analog components the students need to understand. It makes it faster and easier, and there is plenty of room to branch out.

Thanks this is really helpful ! I think I will add a red and green LED to correspond with if the time condition is met. Would this be simple enough ?

int redLED= 1;
int greenLED= 1;

And to the loop add after the rest:
else
{
digitalWrite(redLED, HIGH);
digitalWrite(redLED, LOW);

}

Then into the two prior conditionals add:

digitalWrite(redLED, LOW);
digitalWrite(redLED, HIGH);

Great idea! This could be useful for measuring many things.