SparkFun OpenScale

The SparkFun OpenScale is a simple-to-use, open source solution for measuring weight and temperature. It has the ability to read multiple types of load cells and offers a simple-to-use serial menu to configure calibration value, sample rate, time stamp and units of precision.

Simply attach a four-wire or five-wire load cell of any capacity, plug the OpenScale into a USB port, open a terminal window at 9,600bps, and you’ll immediately see mass readings. The SparkFun OpenScale will enable you to turn a load cell or four load sensors in a Wheatstone bridge configuration into the DIY weigh scale for your application.

The OpenScale was designed for projects and applications where the load was static (like the beehive in front of SparkFun HQ) or where constant readings are needed without user intervention (for example, on a conveyor belt system). A load cell with an equipped OpenScale can remain in place for months without needing user interaction!

On board the SparkFun OpenScale is the ATmega328P microcontroller, for addressing your communications needs and transferring your data to a serial terminal or to a data logger such as the OpenLog, an FT231 with mini USB, for USB to serial connection; the HX711, a 24-bit ADC for weigh scales; and the TMP102, for recording the ambient temperature of your system. The OpenScale communicates at a TTL level of 9,600bps 8-N-1 by default and possesses a baud rate configurable from 1,200bps to 1,000,000bps.

Get Started with the OpenScale Guide

  • Operating Voltage: 5V
  • Operating Ampage: 80-100mA
  • Power Cycling above 500ms
  • Selectable 10SPS or 80SPS Output Data Rate
  • Local & External Temperature Sensors
  • Fixed & Adjustable Gain

SparkFun OpenScale Product Help and Resources

OpenScale Applications and Hookup Guide

July 22, 2016

OpenScale allows you to have a permanent scale for industrial and biological applications. Learn how to use the OpenScale board to read and configure load cells.

IoT Industrial Scale

October 10, 2016

What does a baby elephant weigh? How much impact force does a jump have? Answer these questions and more by building your very own IoT industrial scale using the SparkFun OpenScale.

Core Skill: Soldering

This skill defines how difficult the soldering is on a particular product. It might be a couple simple solder joints, or require special reflow tools.

1 Soldering

Skill Level: Noob - Some basic soldering is required, but it is limited to a just a few pins, basic through-hole soldering, and couple (if any) polarized components. A basic soldering iron is all you should need.
See all skill levels


Core Skill: DIY

Whether it's for assembling a kit, hacking an enclosure, or creating your own parts; the DIY skill is all about knowing how to use tools and the techniques associated with them.

1 DIY

Skill Level: Noob - Basic assembly is required. You may need to provide your own basic tools like a screwdriver, hammer or scissors. Power tools or custom parts are not required. Instructions will be included and easy to follow. Sewing may be required, but only with included patterns.
See all skill levels


Core Skill: Programming

If a board needs code or communicates somehow, you're going to need to know how to program or interface with it. The programming skill is all about communication and code.

3 Programming

Skill Level: Competent - The toolchain for programming is a bit more complex and will examples may not be explicitly provided for you. You will be required to have a fundamental knowledge of programming and be required to provide your own code. You may need to modify existing libraries or code to work with your specific hardware. Sensor and hardware interfaces will be SPI or I2C.
See all skill levels


Core Skill: Electrical Prototyping

If it requires power, you need to know how much, what all the pins do, and how to hook it up. You may need to reference datasheets, schematics, and know the ins and outs of electronics.

3 Electrical Prototyping

Skill Level: Competent - You will be required to reference a datasheet or schematic to know how to use a component. Your knowledge of a datasheet will only require basic features like power requirements, pinouts, or communications type. Also, you may need a power supply that?s greater than 12V or more than 1A worth of current.
See all skill levels


Customer Comments

  • While helping someone else to use OpenScale I decided to build a quick prototype of a small weight scale. I create a brief article on it (including code) on the following link for anyone that finds it useful.

  • Can someone help me? I want the scale data to display on a 16 x 2 LCD Display using the Sparkfun SerLCD board using the Serial Out ports on the OpenScale board. I’ve connected the TX on the OpenScale to the RX on the SerLCD. I’ve tried the basic “Hello World” sketch using the SoftwareSerial library. I don’t know what the pin out is. I tried a few combinations, based on what I thought the the ATmega schematic said, but no luck. I’m connecting via USB to power the board. I thought that might be an issue, but connecting from a battery pack with a USB connector didn’t work either.

    I have my own custom sketch for the OpenScale, which works fine over USB serial. I just want that data to display on the LCD.

    Thanks!

  • Can anyone help me to solve this problem. I want to round three decimals with the number assigned by a graduator 2 gr ,5 gr, 10 gr, 50 gr ,100 gr. For example, if we have currentReading 1.251 kg and we want the accuracy of 5 gr the total weight must be displayed 1.250 and if we have currentReading 1.253 kg weight must be displayed 1.255 and so on.. Thanks in advance!

    • This is not formatted nor complete but should get you on the right track. You’ll also have to figure out how to set the number of decimal places along the way.

      For the example of rounding the thousandths place by 5 (your example):

      weight=1.252

      x = weight *1000 // move decimal place to use modulus function (x=1252)

      y = x % 5 // get the remainder for rounding (y=2)

      if y < 3 //rule for rounding down

      {

      roundedWeight = x - y //subtract the modulus to round down (roundedWeight =1250)

      roundedWeight = roundedWeight/1000 // again you have to figure out the decimals and types here (roundedWeight =1.250)

      //in python the print line would look like: print(“{0:.3f}”.format(roundedWeight))

      }

      if y > = 3 //rule for rounding up

      {

      roundedWeight = x + (5-y) // when rounding up the modulous needs to be subtracted from 5 then added to the original weight.

      //for example, if weight was 1.254, x= 1254, y = 4, roundedWeight = 1254+(5-4) = 1255.

      roundedWeight = roundedWeight/1000 // again, need to figure out the deicmals.

      }

      The other functions will follow a similar pattern based on the assigned graduator. If you have any more questions let me know and hope this helps.

      • Thank you for your quick reply and for solution !

        I found a solution but your solution is the right.

        this is my solution: double B = (int) (currentReading * 1000.0 ) / setting_division_value ;

        double C = (B * 1000.0 + 0.5) / 1000.0 ;

        double D = (C / 1000.0) * setting_division_value ;

        double R = (D * 1000.0 + 0.5) / 1000.0 ;

        “setting_division_value” is saved in the memory by the user.

        Regards,

  • For the kitchen scale, is there any amazon link you can share that is easy to tear open and use? The user guide doesnt provide any particular kitchen scale compatible with the the 10kG load cell.

  • Has anyone tried to re-use the Temp signal as a GPIO? Theoretically you should be able to, but I was just curious if anyone has?

  • My OpenScale SEN-13261 has been reading undisturbed since about 5:20 pm yesterday with a 100 lb load; however, I’m occasionally getting outlier readings (+/- ~2700 lbs). Refer to the plots below; Is this noise from the HX711 ADC, or a firmware bug? Plotted values are the max/avg/min of the last 50 readings from OpenScale serial port.

    load cell #1 plot:
    load_cell_1
    (on board) temperature #1 plot:
    temperature_1

    Steps I’ve taken to resolve the issue:
    * Increase the time between OpenScale readings from 100 ms to 150 ms
    * Flash the latest firmware from Github to OpenScale
    * Re-read OpenScale documentation & search google

    Any ideas on what to do about the outliers?
    Is anyone else seeing this same issue?

    Thanks in advance!

    • I have seen similar “jitter” in my readings; big jumps for brief periods of time. I’m assuming it’s a noise issue with ADC not helped by my un-shielded wiring. I also believe some the erroneous values are made worse by possible overflow/underflow in the averaging routine in the HX711 library. One thing that helped me was to modify the firmware to read (10) raw samples, scale them individually before summing/averaging, discard the lowest and highest individual readings, and then summing and averaging the remaining (8) scaled samples (see rudimentary code below):

      long i, j, min, max; long rawReading[10];

      //----------------------------------------------
      // Take 10 readings w/ scale factor
      j=0;
      for(i=0;i<10;i++)
      {
        rawReading[i] = scale.read(); // Take a single reading from the ADC
        rawReading[i] /= 8870;        // Scaling (hard-coded scale factor)
      }
      
      //----------------------------------------------
      // Find lowest and highest reading
      min=9999;
      max=0;
      for(i=0;i<10;i++)
      {
        if(rawReading[i] > max)
          max = rawReading[i];
        if(rawReading[i] < min)
          min = rawReading[i];
      }
      
      //----------------------------------------------
      // Sum and remove lowest and highest and average readings
      for(i=0;i<10;i++)
        j += rawReading[i];
      j -= min;    
      j -= max;    
      j/=8;   // Final value
      
  • At 5v input required, how does one get this to run outside on a single 3.7v cell with Sunny Buddy? Seems strange that this was (as I understand it) initially designed to measure a beehive weight in an outdoor project, but then relies on 5v and has no wifi/ESP8266 option or terminal.

  • Hi,

    I want to

    1. Battery power this from a 5v regulated source
    2. take the output from the serial out connections (i will send over BLE)

    when i try to power this using 5v it works but does not start to send data on power, it just idles unless i connect via usb to the ftdi chip.

    how do i make it start sending readings without connecting it to a usb port?

    regards,

    james.

  • Hello, Is possible to connect it to arduino? i’m using a xbee on arduino to send some data.

    • Yes, I was able to do this. I used an arduino uno and I connected the Serial out of the Openscale to the arduino. So GND <-> GND, and the TX of Openscale to RX of Arduino.

      For your code, just do the regular Serial setup for 9600 baud, and do Serial reads for the data.

  • Can you interface wit this on i2c or SPI? I’m imagining setting up a screen for weight readout, but perhaps I should go with my own arduino and the HX711 load cell amplifier if I want to create a standalone device?

  • Is there a way to read the OpenScale in Labview? I just downloaded makerhub and have been experimenting with Arduino connected into LabView. I’m playing with an example which needs more resolution then a standard Arduino, can I plug my OpenScale into the program and record a potentiometer output using it?

    • The Atmega328 on Openscale is there to handle communication. There is no I/O broken out for something like blinking an LED or reading potentiometer output. However, I think you might be able to record and process data from the load cells in Labview. Labview does give you access to I2C and SPI functionality on the MCU-the SPI pins are accessible on OpenScale through the AVR programming header and SDA and SCL can be accessed from the drains of Q1 and Q2 - This will give you the Temp data. I haven’t used OpenScale with Labview but I might try now. I don’t see how it could be a greater benefit to use Labview in this case but I don’t see why it wouldn’t be possible. If resolution is what you are looking for though the Atmel MCU used on OpenScale is the same as the chip used on an Arduino so the resolution should be the same.

  • Hi,

    opening the Eagle files available for OpenScale I see that probably they are related to a previous revision of the schematic/pcb because the combinor for individual load sensors is not present.

    Is there any chance to have the Eagle files updated to the current release of the PCB?

    Thank you for your answer.

    Regards

  • In the latest firmware the loadcell tare value is not taken from EEPROM, its hardcoded to 8647409. is it a bug?

    • You can simply comment this out in the Openscale code. Look for setting_tare_point = (long)8647409; add // to comment it out

  • What is the meaning of “A load cell with OpenScale can remain in place for months without needing user interaction”, does it mean OpenScale needs calibration after using it for some months?

    • Yes. You’ll need to re-calibrate once every season (at least) to take into account changes in temperature and humidity in the environment. Creep is the change in load cell signal occurring with time while under constant load and with all environmental conditions and other variables also remaining constant. Load cells tend to creep meaning they will change their output slightly over time when a weight is left on the scale for long (30+ minutes) periods of time. Creep is load cell specific so keep your data sheet handy and perform some tests. There’s an example calibration in the hook-up guide. If you need more info, I found this helpful: http://www.scalemanufacturers.org/pdf/loadcellapplicationtestguidelineapril2010.pdf

  • I have a bathroom scale with four load sensors, each sensor has four wires (not three). How do you suggest I connect it to the Openscale please? I can’t see any reference to four wire sensors in the hookup guide. Thank you.

  • In the Hookup Guide", the link to “the text configuration menu” is broken…

  • Dear sir, I am trying to use openscale with :

    http://www.aliexpress.com/item/2PCS-lot-100KG-150kg-electronic-platform-scale-load-cell-pressure-balanced-cantilever-load-weight-sensor/1649112894.html?spm=2114.13010608.0.56.zVLOrD

    I get : “No remote sensor found” Could it be a problem with the cells or which mistake can I make ? Yours faithfully Pierre

    • “No Remote Sensor Found” refers to an external temp sensor that is connected to the screw terminals on the board. I’ve never used that load cell before and I couldn’t help much with mounting it. I’m sure you can some documentation on mounting the load cell. Have you been in the calibration menu yet?

      • I found : the colors from the cell are not the same as the openscale ! It seems it works ! Thank for the reply !

  • The link to the hookup guide is MIA.

  • Question: The ability to capture data, coupled with sending that data, via blue - tooth module, or wifi, with a potential AWS backend?

    Thanks!

Customer Reviews

4.1 out of 5

Based on 15 ratings:

Currently viewing all customer reviews.

1 of 1 found this helpful:

works well with one fix to the firmware

Works well once you fix one bug in the firmware. It was resetting the zero value every time I power cycled the board. I had to comment out this line in the code “setting_tare_point = (long)696293;” so it did not reset the zero/tare every time the board is power cycles.

To upload new code to the board you have to use an older version of the arduino software. The most recent version would not upload software to this board but arduino version 1.6.5 worked fine.

2 of 2 found this helpful:

Practical and worth the money

I have used two of these devices in a 3D printed motor test rig (measure thrust and torque) for my quadcopter motors. Two load cells where integrated in the support beams. The UART interface with simple ascii commands for tare and measure was a no brainer, automating data collection along with current, voltage and RPM (the latter using some other IR photodiode from Sparkfun). First order low pass filtering can be added and no noise will be seen. Accuracy was as with any kitchen digital scale, or at least I did not notice any difference when calibrated against them. I would only miss advice in the supporting material whether expanding the cabling lenght from the load cells to this device has any bearing on accuracy, since I needed to separate the propeller side from the measurement devices for safety. Regards.

4 of 4 found this helpful:

Great Little device...

I do industrial automation for a living and work with most of the scales/indicators. For the price, this is a great little device. Also, the integrated AVR is wonderful.

Pros

  • Cant beat the cost.

  • Very accurate even with no hardware filtering.

Cons

  • HX711 can’t do Reference adjustments (6 wire load cells) (Used if you want to trim or lengthen a Load Cell cable)

  • Software is a very primitive. No FIFO Filtering, Tare, etc (Can I help?)

Actually, you can help! Since all of our stuff is Open Source, we encourage the community to expand upon what we start with. You can find all of our files through the product Github, and do whatever you think will benefit you, or the community at large.

Easy to set up for serial monitor

Screw down terminals for leads are a life saver. Novice programmers such as myself will have issues getting serial communication to work on Arduino.

One thing I did not like on my serial terminal menu was the inordinate amount of time required to hold down + or minus keys attempting to slew the cal factor? How hard would it be to allow typing it in on the text buffer and hitting enter.

Invaluable for working with load sensors

Have used this module and designed five custom made weigh scales, from basic bar load sensors, to quad strain gauges in a wheat stone config, this board makes it all easier. I do recommend updating the firmware. The board works amazing and can be used by a junior hobbyist or a senior engineer and highly recommend

OpenScale

An excellent product. Works with a 20t load cell. really easy to use, a great start to my new project. Proof of concept was a dream.

Seems like theres a bug

After calibration, it reads the correct value twice, then drops ½ pound (5%). I’ve calibrated several times and it does this every-time. Seems like there a bug.

Sorry you’re having problems! Please reach out to our tech support department at techsupport@sparkfun.com. They should be able to help you with this.

Bitter sweet impression

I tried the openscale. First attempt, I could get some readings from a cell I bought at the same time. I could use the menu this device offers through therminal, i could calibrate, get the zero point, but, after a couple of days of permanent use, the thing got crazy even for getting the configuration menu. I am really new working with this load cells, but maybe there is something to do with the sketch provided through git website. Temperature is a different thing, Everything is ok with temperature readings, directrly from topenscale and the same happens with remote readings form temp sensor I am going to try flashing the ATMega328P, and installing everything from scratch … I will let you know

If you’re not able to figure it out, give our technical support team a shout and they can help! :-)

Openscale

At first test with my raspberry pi and a certifiet loadcell, it was easypeasy, after addind 4 loadcells in bridge, thats when it started getting difficult. however after experimenting and with pure luck i discovered that increasing the average amount to 10 or more (default is 4) it started reading correct weight again. symptoms was huge drop in weight after Tare to zero, it never kept its 0. wish this gets informed about in future howto, it will sure remove lots of headace for users. all in all, i am satisfied with the openscal component, and it will be integrated in my productline

Amazing card

It is impressive how it works, i’m using it for an industrial scale, Im collecting data and controlling some digital i/o ( using a different card ), the best thing is i can modify the way this card is sending the data to show it in the computer…. i’m using VB.net to read the data and show it in a monitor… Great product… i take no so much time to understand the code and modify it according to my needs… Good Product….

Awesome ... and a couple hiccups

It’s a great little jump-start. Thanks to @elmer_fud for the heads-up about the over-write of the scale value at startup.
Also I found that if you want to use a gain besides x128, you need to edit the HX711 setup call to make it explicit, e.g. “HX711 scale(DAT, CLK, 32); //Setup interface to scale” (and make sure you have the write pinout for the gain you are using). There also seems to be something quirky about the averaging, but I haven’t figured it out yet. If I change the averaging from 5 to 10 to 15, there are big offsets for the resulting values … much bigger than the noise I see in the readings when using the small averaging values.

Does exactly what I was hoping it would

I needed an idiot friendly way of testing a 200 kg, S type load cell. It also needed to be inexpensive. This was both.

I do wish that the program for it allowed you to choose grams and ounces but it isn’t too big of a limitation either. The 10hz sample speed is fine but I may need something faster for a final product (again, this was purchased to see if my idea was worth pursuing, not for using in the final product).

I was able to read out from the load cell in a kitchen scale with it (which I tore into while waiting for the big load cell to arrive). Now that I have the 200 kg cell, I found that I can measure a load as light as a can of soda and as heavy as myself. That’s about all I’ve tested with it, and that’s all I needed it to do.

Great for simple applications

Good product, it does exactly what it says it does!