Introduction: 3D Printed Force Sensor for the Classroom

About: Hi I'm Michael! I love all things Science, Engineering, & 3D Printing. If you've enjoyed my work then I've love to hear from you!

3D printers are becoming more prevalent in schools these days, but what kinds of education relevant things can they be used for? Why not an introductory lesson in physics?!!

In this instructable I'm going to show you how to build a functioning 3D printed load cell model capable of measuring force in tension & compression up to 11 lbs (in .012 lb increments), and I've provided some lessons explaining the science behind it.

This hands-on project is safe for kids and the result is durable and can be used for future educational experiments!

Table of Contents:

Steps 1-3: Building the Device

Steps 4-8: Core Concepts for the Classroom, including:

*How it Works (Hooke's Law)

*Comparison to Real Load cell.

*Calibration: Is your lb is the same as my lb?

*Bit Resolution & Proportional Scaling.

Step 1: Printable Part Files and Bill of Materials

3D Printing:

The 3D printable files are attached to this step. I created them myself and have provided for free, you may use them any way you want! Parts can be printed in any material. I do recommend printing with supports on the inner parts no supports needed. I recommend at least 2 outer perimeters on all sides and a minimum infill of 15%.


(1) Spring (Spring-rate = 5.1 lb/in):

(1) Alternate Spring (Rate = 3.77 lb/in):

(1) Alternate Spring (Rate = 10 lb/in):

(1) Sliding Potentiometer (2.36 inch travel):

(1) 1/4"-20 nut

(1) 1/4"-20 hex bolt, 4" long, partially threaded (fully threaded reduces the smoothness of lead cell)

Data Acquisition:

(1) Arduino Uno (The program is attached to this step)

(1) Screen Interface (this is optional because you can just use the Arduino serial monitor on the computer to read measurements. The buttons are overkill for this project but they are nice to have for other things.)

Step 2: Assemble the Plastic Parts

The parts are designed to snap fit together without the need for screws. Some of the connections need to slide or fit in a certain way so be sure to clean off all traces of 3d printed scaffolding and brim.

*The bolt is pressed into the hook and the nut is pressed into the slider part. The press fit should be adequate but you can guarantee long term durability by adding glue to these parts.

Step 3: Wire It Up and Play!

The linear potentiometer is being used as a voltage divider here. The Arduino can output 5vdc across the entire device, then the voltage between the middle leg and ground will change based on the position of the slider.

*The program is written so that when you reset the Arduino it sets the current force to zero! This is so you can 'zero out' unwanted weights such as a tray that holds what you really want to weigh.

*The load cell can do tension and compression. To switch between the two you do NOT need to take the whole thing apart. Simply unscrew the hook from one side and screw it into the other.

Step 4: Core Concept: How It Works (Hooke's Law)

Over 350 years ago English scientist Robert Hooke made an extremely useful discovery: That the displacement of a squished spring is proportional to the force used to squish it.

Forever known afterward as Hooke's Law, today scientists know that the force of a springs can be predicted with a simple equation: Force equals spring rate times distance, or F = k * X

Of course you have to know the spring's spring-rate for this equation to be useful. In the first step I included links for 3 different springs that all work in this load cell. It would be a great exercise for a student class to be given an unknown spring and to experimentally determine its spring rate with known weights!

It would also be interesting to compare that result against a mathematical prediction. You can predict the spring rate of any spring based on the diameter of its wire, the coil outer diameter, its uncompressed length, and its average diameter.

Here is an awesome interactive online tool that you can use to see how varying each of those variables can change the properties of the spring. It works for the four most common types of springs, that is, constant diameter compression, extension, torsion, and clock springs. (Tool Direct Link:

In the 3D Printed load cell, the spring rate is listed on the package when you buy the spring, but the X part of Hooke's Law Equation (the distance you squish the spring) is measured by the linear potentiometer.

Think about this: What would happen if I used a longer or shorter linear potentiometer? What if the spring was even stronger? (answers in step 7)

Step 5: Core Concept: Comparison to Real Load Cell

The humble load cell is an essential tool used by scientists. Imagine that you've just invented a new type of plastic and you want to know how strong it is. What you can do is build a small dog-bone shaped specimen out of your material and pull it apart!

You can learn a lot about the properties of raw materials by running a tensile test and measuring the force and displacement of the specimen as it stretches and breaks. Once you have the data you can graph it and learn things by looking at the curve.

I used this technique to learn more about the properties of 3D printed materials. Take a look at the graph I created using an Aduino, a store bought load cell, Microsoft excel, and a lot of patience!


The load cell I used to create that graph is a high precision instrument, but it functions in the exact same way as the 3D printed load cell!!

Since we are trying to measure very high loads, a real load cell needs a stiffer spring. Specifically, it uses a block of steel cut in such as way that it will deflect predictably but not break under large loads. And of course the linear potentiometer we used is not sensitive enough to detect the small movement of a hunk of steel, so instead we use a strain gage.

A stain gage is essentially a flat resistor which mounts directly to the metal surface. It changes resistance when the metal deflects under load. As you can imagine, the electrical change in resistance is very very small so it has to be amplified before it can be directly measured by an Arduino. In a load cell the standard technique for doing this to wire 4 strain gages together in what is called a wheatstone bridge configuration, which converts minute changes in resistance to measurable but still very small changes in voltage. This voltage is then amplified using an op amp.

Step 6: Core Concept: Calibration & How Is a Lb. Defined?

How can I trust that my bathroom scale will agree with your bathroom scale on how huge I am? Think about it, but not too hard or your head will explode! ....


The answer might sound crazy but there is literally a chunk of metal stored in a French vault that is the world standard weight measurement. The kilogram (kg) is the base unit of mass in the Metric system and is defined as being equal to the mass of that chunk.

And even more crazy is that every product in the world that has standardized calibrated traceable load testing done to it is in fact being testing with a load cell that has been indirectly calibrated by comparing its output against the weight of that single chunk! (of course the accuracy of a calibration decreases every time you transfer it to a new device. The copy of a copy is always less reliable than a copy of the original!)

(Further Reading: As it turns out, keeping that standardized chunk of metal from changing mass over time is harder than it sounds.


Anyway for practical classroom purposes you can just use some lab weights to compare to. The photos provided show the process I used to calibrate my store bought load cell.

The idea is that you have to have something of a 'known' weight so that you can compare it to the output of your load cell. They will likely not match perfectly and may have an offset (for instance your output always reads high by 1 lb) but you can make adjustments in your Arduino program to correct the load cell output to match.

I attached my calibration calculator to this step for your reference. It also mathematically calculates the uncertainty of your measurements! (This is how far off a each measurement is from the average of the range. It is useful because some load cells can lose linearity at the beginning and end of their ranges.)

Step 7: Core Concept: Bit Resolution & Proportional Scaling

What would happen if I used a longer or shorter linear potentiometer? (Hint, think about how accurate a tiny strain gage is.)

The answer is that a longer potentiometer will give you a larger measurable range but at the cost of a lower measurement resolution.

The Arduino can read analog voltage data between 0 and 5vdc, but the Arduino hardware is limited to a 10 bit resolution. This means that it uses an internal binary numbering system that divides the measurable 5 volts into 10 bits worth of signal. In binary, 10 bits = 2^10 pieces, or 1024 different parts.

So the Arduino can measure changes in voltage down to 5v/1024 = 0.0049 volts! Similarly, since we are using a sliding potentiometer that has a 2.36 inch travel, this means we can measure changes in distance of 2.36/1024 = .0023 inches! If the potentiometer travel increases then the smallest measurable distance increases too.

What if we chose a weaker spring?

Since the known spring rate is 5.1 lb/in, the smallest measurable force is the spring rate times the smallest measurable distance, 5.1 lb/in * .0023 in = .012 lb. The lower the spring rate (weaker the spring) the better the force resolution (can measure smaller forces).

The number we needed to know to program the Arduino is the load cell scale factor in lb/v. This is found by dividing the maximum measurable force (11.5 lb on the spring data sheet) by the 5v range measured by the Arduino, 11.5/5 = 2.3 lb/volt.

Step 8: Further Reading & Final Notes

Attached is the excel document used to do the calculations for the 3D printed load cell.

*If you liked this instructable and are looking for a related higher level class project then be sure to check out "TestrBot: The $300 Universal Test Machine"

**To the critics who may wonder 'How is this better than just buying a fish scale?', the answer is digital data! Having the data displayed through Arduino allows you to record it, calibrate it, graph it, etc all in real time!

***For the highly motivated among you, Richard Nakka's website explains in greater detail how to build the professional load cell shown in step 5.

****Thanks for reading, hope this helps create some interesting conversations in class! Don't forget to vote for this project in the Instructables 3D Printing Contest and the Sensors Contest!

Sensors Contest 2016

Second Prize in the
Sensors Contest 2016

3D Printing Contest 2016

Participated in the
3D Printing Contest 2016