IoT Industrial Scale!

finalscale2-v2

 

What does a baby elephant weigh?* How much impact force does a jump have?? How can you tell if a rain barrel is full without looking inside??? Answer all these questions and more by building your very own Internet of Things (“IoT”) industrial scale using the SparkFun OpenScale board!

This project is intended for folks with a lil’ bit of background using Arduino or other microcontrollers. But, whether this is your first or 137th project, check out the links in the Suggested Reading section below (and throughout the tutorial) or leave a comment if you have any questions!

Read time: ~ 15 min.

Build time: Approx. 2 – 3 hours

*To weigh a baby elephant, you might need to be a zookeeper or otherwise have an elephant friend.. but you could always weigh Fido and/or kitty!

For all you visual learners, check out a video of the project below:

 

Materials!


To follow along and build your own scale, all the parts used are listed below.

Electronics

To make the system wireless:

All these parts can be found in the wish list here.

Scale and Casing

  • Terminal blocks (5)
  • Three (3) M3 screws per load cell (total of 12)
  • One (1) project case (to protect the electronics)
  • One (1) base board, and one (1) top board (for the scale platform)
    • My base board was ~ 16″ x 16″ and my top board was ~ 12″ x 14″.
    • Both boards should be sturdy and not flex or dent.
  • Wood slats to frame the sides of the top board to hold it in place.
  • Four (4) feet for base

 

But wait! There’s some background reading..


First of all, how do we measure weight??
Strain gauges!

Also called load sensors, strain gauges measure electrical resistance changes in response (and proportional) to, well, strain! Strain is how much an object deforms under an applied force, or pressure (force per area). Check out this super awesome tutorial for more info on how strain gauges work.

Usually what you’ll find in a bathroom scale is a load cell, which combines four strain gauges in a wheatstone bridge. This project uses four disc compression load cells rated at 200 kg.

Here’s some additional background material to learn more about the components and tools used in this project:

  1. Serial Terminal Basics
  2. OpenScale Applications and Hookup Guide
  3. Getting Started with Load Cells
  4. Photon Development Guide

As usual, don’t forget to read the Datasheet for the Load Cells and any other components you with to use in your project.

Build the Electronics! Pt. 1


industrialscale-schematicv2

Connect the Load Cells!

Load cells have four signal wires:

  • Red: Excitation+ (E+) or VCC
  • Black: Excitation- (E-) or ground
  • White: Output+ (O+), Signal+ (S+)+ or Amplifier+ (A+)
  • Green (or blue): Output- (O-), Signal- (S-), or Amplifier (A-)

They also have bare (or yellow) grounding wires to block outside (electromagnetic) noise.

Connect all five load cell wires in parallel to the OpenScale terminal blocks with the corresponding labels. You might need to switch the green and white load cell wires – check this by adding weight to the load cells. If the weight is decreasing, switch the wire orientation.

The OpenScale terminal blocks are a bit cramped with four load cells, so I used the terminal blocks pictured above. If you have a case for the electronics, remember to put the connectors INSIDE the case before connecting them to the load cells (not speaking from experience or anything..).

 

Build the Electronics! Pt. 2


Connect the OpenScale to a data logger!

In addition to printing, reading, and gathering data from the Arduino serial monitor (see “Reading Load Cells!”), we can add a Photon microcontroller to connect to WiFi and upload the measurements to the Internet!

Connect the OpenScale “Serial Out” ground (“GND”) port to the Photon GND, and the OpenScale “TX” port to the Photon “RX” port. If your data logger needs power, connect the OpenScale 5V port to the data logger Vin port. That’s it!

 

Build the Base & Case!


1. Plan out, measure, and mark location of load cells.

Load cells should be at least 1″ in from the top platform board sides and installed equidistant and on the same plane (aka same height) with each other.

Each load cell needs three M3 type screws, which requires fairly precise measurements. I opted for a quick & easy solution: make a plastic stencil that marks the load cell outline and the location of the screw holes. The plastic I used was cut from a discarded strawberry container (yay, free and upcycled!).

2. Drill holes for load cell screws and attach load cells to base board.

3. Attach feet to base.

4. Secure the scale platform.

Place platform on top of the load cells. Attach wood slats to sides of base with wood glue and/or screws to secure the platform in place laterally, but not vertically. AKA, be sure that there is no resistance to the board pushing downward.

Add brackets on opposite sides for a more secure hold.

5. Place electronics into project box container (or tupperware) and drill holes for cables.

6. Admire your handiwork!

 

Connect the OpenScale!


One of the awesome features of the OpenScale program is that it outputs data to the Arduino IDE serial monitor (9600bps). All we need to do is plug in our OpenScale via USB, select the appropriate board (Arduino Uno) and port, and you can read the load cell data directly from the Arduino Serial Monitor. More info on how to do this here.

Enter ‘x’ to bring up the OpenScale settings menu. Entering ‘x’ again leaves the menu and the OpenScale will start printing data!

arduinoserialmonitor-fullmenu2_labeled

We also need to remove the serial trigger from the OpenScale. Do this by going to the menu, inputting ’t’, and turning the serial trigger to OFF.

You can change various other settings on the OpenScale using the serial monitor, including units (lbs/kg), print rate, decimal places, etc. You can adjust, or peruse, the entire OpenScale program by downloading it from GitHub!

Note: If you are connected to another microcontroller, the OpenScale does not send data when in the menu mode.

 

Tare & Calibrate the OpenScale


Tare!

We’ll need to tare the OpenScale each time it is powered up. To tare the scale, remove all weights from the scale and open the OpenScale settings menu. Input ‘1’ in the OpenScale menu, wait for it to finish taring, then exit the menu and check that the output is close to zero (+/- 5 lbs). If the reading is still off, taring again should fix the problem – if not, check that the load cell grounding wires are properly connected to ground.

Calibrate!

We also need to calibrate the OpenScale to get accurate measurements. It’s also recommended to re-calibrate the system every few weeks (or days) to avoid creep (slow change in reading over time).

To calibrate the scale:

  1. Remove all weights (except the platform).
  2. Open the OpenScale menu and select ‘2’ to open the calibration setting.
  3. Place a (known) weight on the scale and adjust the calibration factor using ‘+’ and ‘-’ until the scale reads out the calibration weight within a reasonable margin in error.*

Also, the load cell output varies with temperature (‘cause heat causes expansion), so we need to keep the system at a constant temperature (or use different calibration factors at different temperatures.

*My experimental uncertainty was about +/- 5 lbs.

 

Program the Photon!


Write a program for the Photon that will read in the serial output data from the OpenScale and push it to the IoT platform of your choice. Or you can use/modify my code 🙂

Here’s the GitHub repository for the IoT scale.

This program reads data from the OpenScale and pushes it to ThingSpeak (also prints it to the Photon serial monitor). ThingSpeak is super easy (and free!) to set up, the only downside is that it only allows data to be posted every 15s.

What you need to do to make the program work for your setup:

programcode-whattochange_labeled

  1. Include your WiFi SSID (network name) and your WiFi password in lines 53 & 54, and lines 69 & 70.
  2. Set up a ThingSpeak channel!  thingspeak-channelsetup
    1. Name the channel and write a brief description.
    2. Include at least one field name. If you want to push more data, like temperature or a timestamp, include those corresponding fields.
    3. Save the channel!
  3. Copy the “Channel ID” number and the “Write API Key” and input them into lines 84 & 85.thingspeak-apikeys_labeled

Read through the comments in the program code for more information on how the program works.

 

Test & Refine!


Prototype complete! Have your favorite human or animal stand (or awkwardly lay..) on the scale to check that it works as expected.

Check thoroughly to see if there is anything that needs to be fixed, secured, and/or improved. During my build process I noticed that a lot of the wood I was using to test would get dented by the load cells, resulting in inaccurate readings.

 

Lessons Learned & Next Steps!


My initial goal for this IoT scale was to gather data on the forces due to jumping (specifically in parkour). Alas, the OpenScale is intended for constant loads and the fastest print rate is 505 ms, which is too slow to get accurate readings on impact force.

Fortunately, we can still use the scale to gather general data and use this design as a foundation for future versions. Some quick and well-timed preliminary testing by a professional jumper (~165 lbs) resulted in the readings plotted below:

data-jumptest3

It shows a single jump, where the landing corresponds to the highest reading (~ 230 lbs), and the point just before that (~ 135 lbs) is when his feet were in the air. (The weight decrease + little blip after the the peak is when he was stepping off the scale.)

In addition to an updated program to print data faster, I’ll need waaay more data and a consistent, controlled procedure to determine any kind of reasonable relationship between impact force, jump height, and weight. Also, the top platform was a bit dented after these tests, so I’ll need a sturdier wood, or metal, scale platform.

Overall, this was a cool proof-of-concept and an informative preliminary test! Plus, there are tons of other practical uses for this simple Internet-connected scale!

 

Education Extension & Beyond!


Beyond being a great hands-on project for computer science, engineering, and electronics courses, this is a handy experimentation tool for physics classrooms! Use it to illustrate the difference between weight and mass, demonstrate how acceleration relates to force, or use the on-board temperature sensor to estimate the mathematical relationship between thermal expansion and load cell output.

Other Applications:

  • Use the system to measure the weight of a rain barrel and notify you when it is full.
  • Make a bathroom scale that keeps track of your weight (or your animal’s weight).
  • Monitor the weight of your Halloween candy to be sure that no one is sneaking some from under your nose.

Happy Building!

How to Use (and Choose) a Multimeter!

Checking your car battery life, debugging circuits, and finding that pesky short are all super useful functions that can be performed with just one awesome tool: the multimeter!

First of all, what the heck is a multimeter??   Excellent setup question! It’s a handheld device with bunch of different electrical meters — hence, multi-meter!

Measuring voltage, current, resistance, and continuity (aka electrical connection) are the most common uses of a multimeter.  Read on to learn what this means, how to do it yourself, and how to choose your very own multimeter!

Choosing a Multimeter!


There are a few key differences between multimeters, the main one being analog versus digital:
Analog multimeters show real-time changes in voltage and current, but can be difficult to read and log data.

Digital Multimeters are easier to read, but may take some time to stabilize.

There are also auto-ranging multimeters, that automatically detect the measurement range, and manual ranging multimeters where you have to choose a range yourself (or start with the highest setting and work down).

Other than those two main differences, you’ll want a multimeter that has separate ports for current and voltage measurements (this is a safety issue, both for the meter and for yourself).

Next comes the fun part: features! Multimeters all have voltage and current meters (otherwise they’d just be called voltmeters and ammeters!), and most can also measure resistance. There are a variety of other “extra” features depending on manufacturer and cost (e.g. continuity, capacitance, frequency, etc.).

Second-to-lastly, there are a ton of different types of probe leads, including alligator clips, IC hooks, and test probes. Can’t decide? Here’s a kit that has four different types!

Lastly, always check the multimeter maximum voltage and current ratings to be sure that it can handle what you want to use it for.

Using a Multimeter!

But first! A quick overview of voltage, current and resistance!

My favorite analogy for electricity is the “water flowing through a pipe” analogy. In this analogy, voltage is similar to the water pressure, current is like the water flow (except with current you have electrons instead of water molecules!), and resistance is akin to the size of the pipe. Check out this tutorial for an awesome and thorough overview of electricity.

Keeping these analogies in mind helps us to figure out how, and what, we are measuring.

Measuring Voltage:

A voltage measurement tells us the electrical potential, or pressure, across a particular component.

Voltage is basically the “oomph” in our circuit, s so we want to avoid drawing any power from the circuit when we take a voltage measurement. This means we need to measure voltage in parallel with a particular component using infinite (or really, really high) resistance to prevent any electrical current from flowing into the meter.

Using a multimeter to measure voltage across a component (or battery!):

1. The black multimeter probe goes into the COM port, and the red probe into the port marked with a “V”.

2. Switch the dial to the “voltage” setting (choose the highest setting if you have a manual ranging multimeter).

3. Place black probe on negative side of the component, and red probe on positive side (across, or in parallel with the component). If you get a negative reading, switch the leads (or just note the magnitude of the voltage reading).

Read the meter output and you’re done! Not too bad 🙂

Measuring Current:

Taking a current measurement tells us the amount of electricity flowing through a given component or part of a circuit.

To measure current, we need to measure all of the flow in our circuit without consuming any power from the circuit and reducing the current measurement. This means we measure current in series with a component and we want our meter to have zero resistance.

Using a multimeter to measure current through a component:

1. The black multimeter probe goes into the COM port, and the red probe into the port marked with an “I” or an “A” (or “Amp”).

2. Switch dial to the current setting (choose highest setting if you have a manual ranging multimeter).

3. Connect red probe to current source, and black probe to the input of the component, so that the current flows from the source, through the meter, to the component (in series with the component).

Read the meter output! If you’re not getting a reading, switch to a lower setting.

Measuring Resistance: 

Measuring resistance is pretty straightforward, but you do have to disconnect individual components from a circuit to get their actual resistance, otherwise the rest of the components in the circuit can interfere with your measurement.

Using the multimeter to measure resistance of a component:

1. Put the black probe in COM port, and red probe in the port marked with a “Ω” or “Ohm” — it should be the same port as the voltage port.

2.  Switch dial to setting marked with a “Ω” (may have to choose approximate range for manual ranging multimeter).

3. Place probes on either side of the component (orientation doesn’t matter).

Read the meter output and you have conquered resistance!

Bonus: Measure Continuity!

The continuity measurement checks if two points in a circuit are electrically connected, otherwise known as a conductance test. Before measuring continuity, be sure that the circuit power is OFF.

Using the multimeter to measure continuity: 

1. Place black probe in COM port, and red probe in voltage port.

2. Switch dial to setting marked with an audio symbol.

3. Place probes at points you want to check — if the meter makes a beep sound, it means the two points are connected.

Le fin!

Go forth and measure all the things!

Now that we know how to use a multimeter, get crackin’ on all those at home, DIY projects! To get you started, here are a few quick, practical, & fun projects:

1. Measure the resistance of your skin! Change the distance of the probe leads and see how resistance changes. Lick your fingers (or dip them in water) to see how moisture affects resistance!

2. Measure the voltage across AA, 9V, or other batteries around the house/workplace/school to locate dead, or dying, ones.

3. Make a lemon battery and measure the voltage and current output.

4. Use the continuity setting to check if different materials conduct electricity.

 

Looking for more info on multimeters?

Check out this in-depth guide by the folks at Tools Critic!