Counting Scale Made With an Arduino

Introduction: Counting Scale Made With an Arduino

This project is still somewhat of a work in progress however it's reached a point where it's useful to share the details for others to benefit from it and the idea. It is basically a scale built using the Arduino as the microcontroller, a generic load cell, the HX711 signal amplifier and a 16x2 LCD screen.

Step 1: Parts You Will Need

You will need the following parts to complete this project.

Arduino Nano (you could also use an Arduino Uno)

3KG Load cell

HX711 signal amplifier

16 x 02 LCD screen with I2c interface

DuPont cables

A breadboard

Some plywood and screws (Or you could just buy one of these kits )

You will need to assemble the load cell to float by anchoring it at the base end and place a platform on the load side that will be used to place the objects to be weighed. Alternatively, you could simply purchase a kit that includes the load cell, the HX711 with the load cell pre-assembled to perspex boards ready to use.

Step 2: Wiring Things Together

Use the diagram to connect everything up. For clarity I have written out the details below too.

Load cell To HX711

  • Red ---- E+
  • Black ---- E-
  • White ---- A-
  • Green ---- A+

The connections above depend on the load cell configuration

HX711

  • Gnd ---- Gnd
  • DT ---- A3
  • SCK --- A2
  • VCC ---- +5V

LCD

  • Gnd ---- Gnd
  • VCC ---- +5V
  • SDA ---- A4
  • SCL ---- A5

Tare button

  • Pin1 ---- +5V
  • Pin2 ---- D2 --- 10K resistor ---- Gnd

Count set button

  • Pin1 ---- +5V
  • Pin2 ---- D3 --- 10K resistor ---- Gnd

Step 3: Arduino Firmware - 1

The Arduino code uses the Q2HX711 and the LiquidCrystal_I2C libraries.

The Q2HX711 library initializes by taking the data and clock pin as a parameter

Q2HX711 hx711(hx711_data_pin, hx711_clock_pin);

The LCD library takes initialization takes the I2C address and the pins as a parameter

LiquidCrystal_I2C lcd(0x3F,16,2);

The two buttons are assigned to an interrupt in the setup so that they can perform the relevant functions

attachInterrupt(0, _doTare, CHANGE);<br>attachInterrupt(1, _doCount, CHANGE);

Step 4: Arduino Firmware - 2

The readingAverage returns the average raw reading value received from the HX711

long readingAverage(int samples=25,long t=0) {<br>	total=0;
	for (int i=0;i<samples;i++) {
		total=total+((hx711.read()/resolution)-t);
		delay(10)
	}
	return (total / samples);
}<br>

Internally the program uses the raw values when displaying, it uses the conversion value to show the weight in grams, the correction value will depend on the load cell being used and needs to be tweaked accordingly.

The complete code is hosted on this Github repository

Step 5: Using the Scale to Count

Once you power up the Arduino, it initializes by setting the TARE value to the initial reading. The scale responds to any change in weight detect and updates the LCD display.

TARE function

You may want to zero the scale with a given wight on it, for example a bowl or some other container you plan to put objects in to measure but not include the weight of the container. Simply place the empty container and press the tare button and wait a few seconds till the read out displays zero with the container on the scale.

COUNT function

You can count objects with identical weight. You first need to set a seed value and teach the scale the weight of a single item. by default the scale is programmed to weight 25 items and calculate the weight of an item by dividing this weight by 25. Once set you can add or remove objects and the scale should accurately display the count of the items placed on it.

The PC software

Optionally the scale can be paired with a PC application to communicate the weight back to the PC application and to save item weights and to set item weights back to the scale. This is still work in progress and I am not sharing the PC application, but you can see a demonstration in the video below.

Step 6: Feedback

Let me have your feedback and feel free to use / modify the firmware. I would appreciate any suggestion for improvements.

Be the First to Share

    Recommendations

    • Make it Glow Contest

      Make it Glow Contest
    • First Time Author Contest

      First Time Author Contest
    • PCB Challenge

      PCB Challenge

    5 Discussions

    0
    AntonB65
    AntonB65

    Question 11 months ago

    Do you know how to write a code for an weight scale hx711 with a color bar graph from neopixels 60 pc

    0
    raz7728
    raz7728

    Question 1 year ago on Step 4

    Hello.
    I was looking for something like this for a long time.
    I wave one problem the lcd is not displaying anything can u be so kind and help me.

    0
    usear
    usear

    Answer 1 year ago

    Your display may have a different i2C address. Look for the 12c scanner arduino sketch to help you getting the display working independently first.

    0
    raz7728
    raz7728

    Reply 1 year ago

    thank you for your time.I fix it by changing
    LiquidCrystal_I2C lcd(0x3F,16,2); to LiquidCrystal_I2C lcd(0x27,16,2);

    Now i'm trying to calibrate the load cell but without any luck.
    I am using the res value const int resolution=237.55; and no matter what value i feed i never get the right value for an object weight 83 grams

    Also i don't understand what these lines do
    average=readingAverage(25,tareWeight);
    Serial.println(average);
    LCDLine1=String(average*0.715)+"g";

    Best
    Raz

    0
    leomedallo
    leomedallo

    Question 1 year ago on Step 5

    Hello,
    the link of the code does not work, how can I download it?

    Thanks