Introduction: TestrBot: the $300 Universal Test Machine

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!


Are you looking for a mechanical testing service that doesn't cost a fortune. OR do you need a capable little UTM you can own & operate under your own roof? If so you'll be interested to hear about the "TestrBot Pro", lets get in touch!

UPDATE July 2019: New infill options have become available since I completed this device and performed this testing. TLDR: I now recommend "Gyroid" infill over rectilinear when strength is desired.

UPDATE 9-2-15: I released a batch of test results that show my rationale for while infill design is the best!

*What is TestrBot?

TestrBot is a $300 Universal Test Machine (UTM) and can be used to perform any type of static or dynamic testing in tension or compression up to 200 lbs. It was designed to allow me to run an array of physical tests on 3D printed specimens.

3D printing is still new enough that there are many questions that do not yet have definitive answers. While the basic physical properties of raw ABS & PLA have been well established, there are still many esoteric material properties that cannot be determined without doing actual mechanical testing.

TestrBot is going to help me help the 3D printing community by figuring out these properties.

*Is $300 a good price for a universal test machine?

Absolutely, particularly considering that 50% of its total cost went to the load cell alone… Low end professional UTM’s cost of thousands of dollars and the sky is the limit on good ones.

*What else makes it special?

TestrBot is explicitly designed to be replicable. Whenever possible I used 3d printed parts, parts available from the hardware store, and failing that from Amazon or Sparkfun.

*So what can be done with data collected from TestrBot anyway?

TestrBot only directly measures two things, force and displacement, but we can learn a lot with just those two pieces of information. The graph in attached photos section was generated using the data collected from the test shown in the video in the last step.

I estimated that the specimen would yield at 58 lbs (3300 psi) but hitting those exact numbers wasn’t the goal of this test. At this point all I have proven is that I am either good at math or lucky at guessing numbers. (Honestly, I was shocked how accurately I predicted that.) The really interesting stuff is yet to come when I print out a lot more specimens that are slightly different from the first so I can isolate the effect of individual variables. At that point having a graph will make the effects of minor design changes very clear.

*How accurate is the data collected?

The displacement measurement resolution is insane. TestrBot can measure distance increments of .00014” or about 1/28th the thickness of a sheet of paper.

The force readings are a bit more limited due to the 10bit Arduino; the smallest force it can measure is .195 lbs. Still though, that was small enough to produce that sexy smooth graph above.

*How do I know the measurements are correct?

Oh boy, that simple sounding question opens the door to a very deep pit of other questions involving trace-ability, calibrations, and what exactly determines how much a pound weights. It will have to suffice for now to say that all the data readings from TestrBot are repeatable. TestrBot’s force readings are consistent no matter what it thinks a pound is exactly. That said, TestrBot’s load cell is at least in agreement with the weights at my gym.

Being precise is important because it means that even without official trace-ability the data produced can still be used for comparative testing (direct apples to apples testing), which is all I need it for.


*To any non-American readers, I’m sorry but TestrBot is designed in 100% US customary units.

STL File Note: The "TestrBot Assembly As Part" file in this step is included so you can get a 3d view of the assembly. It is not for printing directly.

Step 1: Tooling, Equipment, & Bill of Materials:

Special Required Tools- (aside from basic hand tools and a work area.)

3D printer (or a supplier of 3D printed parts)

Miter Saw (or equivalent tool for cutting straight edges.)

Drill Press (or equivalent tool for drilling straight holes.)

Electronics Soldering Equipment

Purple PVC Primer & ABS Transition Cement.

A digital level is really helpful for aligning the cross heads.


TestrBot Bill of Materials-

TestrBot consists of four main sub-assemblies:


Test Fixture



There are about 50 parts in total. Too many to effectively communicate the bill here without making a mess, so I created an excel version that shows the contents of each sub-assembly. Each part has a detailed description, a recommended vendor, and estimated price.

The attached excel file has four tabs and the BOM is the first. The other tabs will be discussed in other steps.

(Side note: I don't mind if anyone reading this wants to steal my format for their own bills of materials.)

Step 2: Frame

Let’s start with the easiest sub-assembly and work our way to the harder ones.

The frame is all wood (one 2x4) and steel, all of which can be gotten in one trip to the hardware store. Make sure to use large washers for anything contacting the wood to keep the clamping forces distributed over a large area.

Its really important that all the holes are drilled squarely. Assemble the base on top of a flat surface to keep it square. The finished frame will be adjustable but if you build it too crookedly you will never be able to adjust that out. See the attached drawings as a guide for making the wood parts. Check out the notes on the photos for more details.


Before making the wood frame I experimented with designing the frame as 3D printed in an attempt to mimic a RepRap. It sounds silly when you can just use wood but using printed parts here would make it possible to create this machine using nothing but a 3D printer and a wrench. It would also ensure that the frame has perfect dimensions and alignment, a huge benefit to the overall quality of the machine.

I built a prototype printed frame that you can see at this link (I didn't attach photos to avoid confusion:

The main innovation used in the prototype frame is a beam design technique called sandwiching. The idea is to glue two thin steel sheets onto either side of a lightweight printed core to create a structure that is significantly lighter than a solid steel beam while still retaining the majority of that beam’s strength and stiffness. This method is often used in things like aircraft wings and boats, only with composite skins and balsawood cores.

The lesson learned was that cutting out the steel sheet was really labor intensive, so I probably should have used something else as the skin. Also I wasn't able to effectively glue the steel to the plastic, which kind of ruined the whole thing. Sandwiching was a fun experiment but in the end I think using a wood two by four is definitely the best option.

Step 3: Test Fixture: 4 Point Bend

I intend to run most of my tests using a 4 point bend compression setup, a self explanatory test method (see photos). The four point bend is actually a great method for testing non-homogenous materials, such as a 3d prints. I’m using it here for these specific reasons:

*It is a ‘realistic’ loading method. If I were to ask you to break a random small object, such as an iPhone 6, your natural inclination is to apply a four point bend.

*It requires a simple specimen and test fixture design that really can’t go wrong.

*This type of test is sensitive to surface condition because the largest stress occurs at the extreme fibers of the specimen, the outer surface. For this reason I expect that certain surface treatments will have a significant effect on the measured material strength.

*The 4 point bend loading causes complex stress distributions over a large volume of the specimen, so any flaws or defects will be easily exposed.


As for building this thing, its pretty much a matter of assembling the parts as described in the BOM in the way shown in the photos. No tricks here.

Step 4: Linear Actuator

You can buy linear actuators off the shelf, but none that allow for acurate displacement measurement that can do this high load for this price. I've looked around and I couldn't find anyone else who had printed a high load linear actuator, so I made this thing from scratch over the last couple months. Printing this enabled me to get exactly what I needed.

I picked a stroke of 5.375”, but the actuator can have any stroke you want. I have provided the equations below for determining the actuator component lengths for a given stroke, in case someone wants to use this design for something else.

Stroke = You pick!

Small PVC pipe length = stroke + 3.125”

Large PVC pipe length = stroke + 1.625”

Anti-Rotation Rod length = stroke + 2.625”

Threaded Rod length = stroke + 4”


As with many of my personal projects, I was not content to simply guess what size components I needed to handle these loads. On the second tab of the TestrBot Excel file (from step 1) is an actuator screw design calculator devoted to this purpose for your reference.

Step 5: Controls:

Now we arrive at what I see as the most difficult part of this project. Printing the case is easy, the stl files are attached. It's spending the time to solder up the protoboard without cross-wiring something, and understanding exactly what you are doing that is hard. I did make a set of circuit diagrams in the attached photos that show exactly how this thing is wired up.

-Program: Also attached is the Arduino program that contains what I intended to be enough comments to make it a stand alone document. I'm a mechanical engineer but I'd like to think my programming ability isn't terrible. Go take a look, I'll wait.

One interesting quirk I learned about Arduino programming from this project is that calling 'serial print' is a time expensive function. That's why TestrBot runs faster in 'manual mode' than it does in 'Auto Test mode', because the stepper literally requires every single step to be called individually, and you can't call the steps as fast when you are using your limited processing power to print serial data.


Displacement: If it wasn't clear, TestrBot measures displacement by counting individual stepper steps. There's nothing wrong with doing this as long as you don't overload your stepper to the point of missing steps. Due to the gearing of the threaded rod and the plastic gears, the nema 23 stepper (200 steps per rev) makes 6960 steps to travel one vertical inch. It has a huge mechanical advantage. I thought it would go faster but I can't call the run function fast enough so in practice it only moves at about .25 in/min max.


LoadCells & Signal Amplification: I also attempted to give a brief explanation of how the load cell works in the pictures, but really there is enough information on that subject to justify entire an Instructable (be on the look out!).

For now here is enough info in layman's terms to be dangerous:

The load cell has 4 strain gages inside wired in a Wheatstone bridge configuration. The strain gages are attached to the metal of the load cell and they change resistance when the load cell is deformed by loads. This change in resistance is much too small to measure directly with a multimeter. Thats why it uses a Wheatstone bridge circuit, which can sence very small changes in resistance by measuring the change in voltage instead.

The amplifier is like a very sensitive volt-meter/ohm-meter that scales up the signal it reads. It can be used for any wheatstone bridge Bridge, RTD, or Thermocouple. In this case the amplifier converts that small voltage (~3mv) measurement into a larger voltage scaled between 0-5VDC that can be read by data acquisition equipment (The Arduino). The exact amount it scales up the signal (Gain) can be adjusted. In this case you make adjustments with a multiturn trim potentiometer because that's how Texas Instruments designed this chip.

Your gain should be set so that the maximum measurable force is equal to (but not greater than) your desired load capacity. If your gain is too low you will reach the physical capacity of your load cell before you utilize the entire readable 5v signal, resulting in a loss of resolution. Since I have a 200 lb load cell, I set the gain so that forces from 0 to 200 lbs are proportionally scaled from 0 to 5 VDC.

You can never get more than 200 lbs out of a 200 lb loadcell, however, you can 'cheat up your signal' by turning the gain higher than normal to reduce your maximum measurable force in return for a greater measurement resolution. (You can only divide the signal into a set finite number of bits (1024 bits here), so reducing the measurement range also reduces the smallest individual measurement you can make.

The loadcell is wired to function only in tension OR in compression. You could send the loadcell 2.5V and the reading returned would be from 0-2.5 if in tension and from 2.5-5 if in compression, but you would lose half of your measurement resolution. As it is, if you cant switch between tension & compression using the DPDT switch in the diagram.

By the way, the smallest force TestrBot can measure on a 10 bit Arduino is .195 lbs. (that's 200 lbs divided by 2^10 discrete measurements)

Step 6: Using the TestrBot

While the cute little screen displays the current load, displacement, and status of the actuator, it is mostly for a visual reference. When the TestrBot is in use I connect it to the computer and read data from the serial monitor. When the test is over I copy and paste the data into excel to make pretty graphs like the one seen in the introduction.

There is no direct way to control the bot from the computer, the directional pad on the control panel does all that.

-Getting down to business. I made this thing for a reason, I want to do some awesome 3D printing science experiments! The first picture in this step shows the tentative plan for upcoming tests, although I do tend to get distracted so they could be in a different order.

The second picture is a reference from a whitepaper on testing aluminum honeycomb sheets, which are reasonable similar. It is just to get an idea of anticipated failure modes, but to be honest I'm not sure exactly what kind of failure modes will occur.

The third picture is a list of data to be collected for every specimen run. I've opted for a kind of 'dumb numbering system' that starts at 1001 and goes up.


TestrBot can be used for testing anything, not just 3d printed stuff. I'd also like to run some tests on the strength of different wire splices. What kind of other tests would you do? Let me know!

You can read more about the project and the test results as they come in on my blog here: EngineerDog 3D Printing Materials Testing Series Part 1.

Coded Creations

Participated in the
Coded Creations

3D Printing Contest

Participated in the
3D Printing Contest

Automation Contest

Participated in the
Automation Contest