Skip to main content

serial_weighing_scale

Project description

Serial Weighing Scale

Arduino-based cheap precision weighing scale for readout via serial communication.


Precision weighing scales that include serial port communication usually come at considerable cost. This project showcases an affordable alternative. Using readily available electronics parts, the scale's measurements can be read via serial communication by a simple Python class.

Note: The design could easily be extended with an Arduino display to show the measurements.

Bill of Materials

  • Arduino Uno (including USB-A to USB-B cable)
  • Load cell amplifier HX711 (Sparkfun), e.g. from mouser.co.uk: 474-SEN-13879
  • Load cell (100g and 500g cells used), e.g. from mouser.co.uk: 474-SEN-14727 or 474-SEN-14728
  • Jumper wires, pin headers, nylon spacers for electronics
  • Acrylic or other material of choice for case and load cell mount
  • HX711 arduino library from olkal/HX711_ADC

Build

  1. Load .ino onto Arduino (via Arduino IDE or commandline like arduino --board arduino:avr:uno --port /dev/ttyACM0 --upload serial_scale.ino)
  2. Assemble electronics, e.g. as described in this HX711 wiring tutorial
  3. Print 3D components from drawings (Drawings named model are only for design, no need to print these)
  4. Move electronics into case
  5. Calibrate scale via Arduino IDE serial monitor commands. See below for communication protocol for calibration.

Usage

  1. Connect scale via USB to machine that is going to read the measurements from the scale
  2. Interact via python SerialScale object:
Open connection with SerialWeighingScale object & perform standard operations on it
import numpy as np
import time

from serial_weighing_scale import SerialWeighingScale

serial_port = "/dev/ttyACM0"  # for Unix systems. "COM1" on Windows systems
scale = SerialWeighingScale(port=serial_port)

while not scale.scale_is_ready():
    time.sleep(.1)

# Perform standard operations
scale.tare_scale()  # Tare scale
scale.read_weight()  # Take single measurement
scale.read_weight_repeated(n_readings=5)  # Get n readings
scale.read_weight_reliable(n_readings=5, measure=np.mean)  # Get statistic of n readings
Open connection by testing specific serial ports sequentially
import time

from serial_weighing_scale import connect_serial_scale

scale = connect_serial_scale(test_ports=["/dev/ttyACM0", "/dev/ttyACM1"])
while not scale.scale_is_ready():
    time.sleep(.1)
Not yet implemented: Calibrate scale via python
import time

from serial_weighing_scale import connect_serial_scale

scale = connect_serial_scale(test_ports=["/dev/ttyACM0", "/dev/ttyACM1"])
while not scale.scale_is_ready():
    time.sleep(.1)

known_mass = 45.05  # weight [gram] of object used for claibration
scale.calibrate(known_mass=known_mass)

Communication protocol for messages between python and Arduino

  • Tare scale: send "t" -> Tare scale & Arduino confirms with "t"
  • Read scale: send "w" -> Arduino returns latest reading
  • Calibrate scale: send "c" + weight of known mass
    • Arduino confirms by sending known mass value back
    • Send "a" once known mass was placed on scale -> Arduino performs calibration & returns new calibration factor that needs to be added to serial_scale.ino

TODO

  • Add calibration routine to .ino & .py
  • Add test curve to .py

Contributors

Code & electronics by Lars Rollik. Scale 3D printing drawings by Simon Townsend (Advanced Manufacturing FabLabs, Sainsbury Wellcome Centre). Thanks to Benjamin Hahl for useful input on the design.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

serial_weighing_scale-1.0.0.tar.gz (5.7 MB view details)

Uploaded Source

Built Distribution

serial_weighing_scale-1.0.0-py3-none-any.whl (8.4 kB view details)

Uploaded Python 3

File details

Details for the file serial_weighing_scale-1.0.0.tar.gz.

File metadata

  • Download URL: serial_weighing_scale-1.0.0.tar.gz
  • Upload date:
  • Size: 5.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for serial_weighing_scale-1.0.0.tar.gz
Algorithm Hash digest
SHA256 a1e833352278ef56cce55e998dd007ee94fcd2cb5aebc170741946845e29a69c
MD5 ce98d259678332cba06cbd307be9cfb1
BLAKE2b-256 8e641bb429129887c109267835e5663b9593d3d6b609367b6d3c85e890716105

See more details on using hashes here.

File details

Details for the file serial_weighing_scale-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for serial_weighing_scale-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 15d2cea86b437d09e3529c66727c762421aee8ce0e31fa7ff193df79838ff498
MD5 a5d7d3e6d93827af4633cf267922eb2c
BLAKE2b-256 f6436ea4e28db4eab0bc69388131515e447bd493f7f37babcea7f97af524331e

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page