Module src.main.python.scale

Expand source code
from hx711 import HX711
from sensor import Sensor


class Scale(Sensor):

    """Scale, measures a weight """

    offset = 0

    def __init__(self, pin_sck, pin_out_dt, range_min=0, range_max=1000000, average_converging_speed=1 / 2,
                 val_to_g_conversion=1220):

        """ constructor.
        :param pin_sck: number pin Serial Clock Input. it has to be output, es pin32 on ESP32
        :param pin_out_dt: number pin that will read data value, is has to be GPIO
        :param range_min: min value of sensor (empty), used for percentage
        :param range_max: max value of sensor (full), used for percentage
        :param average_converging_speed: speed the average goes towards the last measure (range 0-1)
        :param val_to_g_conversion: to convert signal to grams (signal/val = g)"""
        super().__init__(range_min, range_max, average_converging_speed)
        # machine.freq(160000000) is this really necessary? it cause some problem
        self.driver = HX711(d_out=pin_out_dt, pd_sck=pin_sck)
        # channel can be set with: self.driver.channel = HX711.CHANNEL_A_64
        self.val_to_g_conversion = val_to_g_conversion

    def __str__(self):
        """prints the object."""
        return "Scale: average: {}, last measure {}, percentage: {}, weight: {}".format(self.get_average(),
                                                                                        self.get_last_measure(),
                                                                                        self.get_percentage(),
                                                                                        self.weight())

    def raw_value(self):
        """Measures sensor, returns raw value, not tared."""
        return self.driver.read()

    def tare(self):
        """tares sensor at empty scale."""
        self.offset = self.driver.read()

    def raw_measure(self):
        """returns sensor raw measure with tare (raw value - offset)."""
        return self.driver.read() - self.offset

    def weight(self):
        """actual weight in grams."""
        self.measure()
        return self.get_last_measure() / self.val_to_g_conversion

    def weight_kg(self):
        """actual weight in kilograms."""
        return self.weight() / 1000

Classes

class Scale (pin_sck, pin_out_dt, range_min=0, range_max=1000000, average_converging_speed=0.5, val_to_g_conversion=1220)

Scale, measures a weight

constructor. :param pin_sck: number pin Serial Clock Input. it has to be output, es pin32 on ESP32 :param pin_out_dt: number pin that will read data value, is has to be GPIO :param range_min: min value of sensor (empty), used for percentage :param range_max: max value of sensor (full), used for percentage :param average_converging_speed: speed the average goes towards the last measure (range 0-1) :param val_to_g_conversion: to convert signal to grams (signal/val = g)

Expand source code
class Scale(Sensor):

    """Scale, measures a weight """

    offset = 0

    def __init__(self, pin_sck, pin_out_dt, range_min=0, range_max=1000000, average_converging_speed=1 / 2,
                 val_to_g_conversion=1220):

        """ constructor.
        :param pin_sck: number pin Serial Clock Input. it has to be output, es pin32 on ESP32
        :param pin_out_dt: number pin that will read data value, is has to be GPIO
        :param range_min: min value of sensor (empty), used for percentage
        :param range_max: max value of sensor (full), used for percentage
        :param average_converging_speed: speed the average goes towards the last measure (range 0-1)
        :param val_to_g_conversion: to convert signal to grams (signal/val = g)"""
        super().__init__(range_min, range_max, average_converging_speed)
        # machine.freq(160000000) is this really necessary? it cause some problem
        self.driver = HX711(d_out=pin_out_dt, pd_sck=pin_sck)
        # channel can be set with: self.driver.channel = HX711.CHANNEL_A_64
        self.val_to_g_conversion = val_to_g_conversion

    def __str__(self):
        """prints the object."""
        return "Scale: average: {}, last measure {}, percentage: {}, weight: {}".format(self.get_average(),
                                                                                        self.get_last_measure(),
                                                                                        self.get_percentage(),
                                                                                        self.weight())

    def raw_value(self):
        """Measures sensor, returns raw value, not tared."""
        return self.driver.read()

    def tare(self):
        """tares sensor at empty scale."""
        self.offset = self.driver.read()

    def raw_measure(self):
        """returns sensor raw measure with tare (raw value - offset)."""
        return self.driver.read() - self.offset

    def weight(self):
        """actual weight in grams."""
        self.measure()
        return self.get_last_measure() / self.val_to_g_conversion

    def weight_kg(self):
        """actual weight in kilograms."""
        return self.weight() / 1000

Ancestors

  • sensor.Sensor

Class variables

var offset

Methods

def raw_measure(self)

returns sensor raw measure with tare (raw value - offset).

Expand source code
def raw_measure(self):
    """returns sensor raw measure with tare (raw value - offset)."""
    return self.driver.read() - self.offset
def raw_value(self)

Measures sensor, returns raw value, not tared.

Expand source code
def raw_value(self):
    """Measures sensor, returns raw value, not tared."""
    return self.driver.read()
def tare(self)

tares sensor at empty scale.

Expand source code
def tare(self):
    """tares sensor at empty scale."""
    self.offset = self.driver.read()
def weight(self)

actual weight in grams.

Expand source code
def weight(self):
    """actual weight in grams."""
    self.measure()
    return self.get_last_measure() / self.val_to_g_conversion
def weight_kg(self)

actual weight in kilograms.

Expand source code
def weight_kg(self):
    """actual weight in kilograms."""
    return self.weight() / 1000