Jedoch brauch ich aber laufend eine Abfrage des Gewichts, weshalb mir das gefundene Skript nicht wirklich was bringt.
Wägezellen:
https://de.aliexpress.com/item/1kg-5kg- ... a69079e8-0
Angeschlossen wurden sie, so wie laut Anleitung https://tutorials-raspberrypi.de/raspbe ... sor-hx711/
Es wurden aber andere Pins benutzt, wurden unten auch im Skript geändert.
Jedoch +5V und 0V hole ich nicht vom Pi, sondern von einer Externen Spannungsquelle. Alle 0V Anschlüsse der Netzteile wurden verbunden.
Kommen wir nun zum Skript. Hier fangen die Probleme, bzw das Halbwissen an.
Ich habe einige durchprobiert, und hab es leider nur mit einem geschafft, eine korrekte Messung zu machen, jedoch wird dieser Skript über das Raspberry Pi 3B+ Terminal ausgeführt, und ich muss jedes mal Enter drücken, um eine Kalibrierung zu machen.
Da ich das ja über Pimatic (automatisch) ausführen lassen möchte, klappt es nicht, wenn ich dauernd Enter drücken muss, da ich eine 24/7 Überwachung brauche.
In den Codes wurde nur eine Wägezelle eingetragen, um damit mal etwas experimentieren zu können.
Code: Alles auswählen
#!/usr/bin/env python3
import RPi.GPIO as GPIO # import GPIO
from hx711 import HX711 # import the class HX711
try:
GPIO.setmode(GPIO.BCM) # set GPIO pin mode to BCM numbering
# Create an object hx which represents your real hx711 chip
# Required input parameters are only 'dout_pin' and 'pd_sck_pin'
hx = HX711(dout_pin=14, pd_sck_pin=15)
# measure tare and save the value as offset for current channel
# and gain selected. That means channel A and gain 128
err = hx.zero()
# check if successful
if err:
raise ValueError('Tare is unsuccessful.')
reading = hx.get_raw_data_mean()
if reading: # always check if you get correct value or only False
# now the value is close to 0
print('Data subtracted by offset but still not converted to units:',
reading)
else:
print('invalid data', reading)
# In order to calculate the conversion ratio to some units, in my case I want grams,
# you must have known weight.
input('Put known weight on the scale and then press Enter')
reading = hx.get_data_mean()
if reading:
print('Mean value from HX711 subtracted by offset:', reading)
known_weight_grams = input(
'Write how many grams it was and press Enter: ')
try:
value = float(known_weight_grams)
print(value, 'grams')
except ValueError:
print('Expected integer or float and I have got:',
known_weight_grams)
# set scale ratio for particular channel and gain which is
# used to calculate the conversion to units. Required argument is only
# scale ratio. Without arguments 'channel' and 'gain_A' it sets
# the ratio for current channel and gain.
ratio = reading / value # calculate the ratio for channel A and gain 128
hx.set_scale_ratio(ratio) # set ratio for current channel
print('Ratio is set.')
else:
raise ValueError('Cannot calculate mean value. Try debug mode. Variable reading:', reading)
# Read data several times and return mean value
# subtracted by offset and converted by scale ratio to
# desired units. In my case in grams.
print("Now, I will read data in infinite loop. To exit press 'CTRL + C'")
input('Press Enter to begin reading')
print('Current weight on the scale in grams is: ')
while True:
print(hx.get_weight_mean(20), 'g')
except (KeyboardInterrupt, SystemExit):
print('Bye :)')
finally:
GPIO.cleanup()
Mit diesem Skript hier wird mir ein Wert im Pimatic angezeigt, jedoch wird der Wert nicht als die Gewichtseinheit g ausgegeben:
Code: Alles auswählen
#!/usr/bin/env python3
import RPi.GPIO as GPIO # import GPIO
from hx711 import HX711 # import the class HX711
GPIO.setmode(GPIO.BCM) # set GPIO pin mode to BCM numbering
hx = HX711(dout_pin=14, pd_sck_pin=15) # create an object
print(hx.get_raw_data_mean()) # get raw data reading from hx711
GPIO.cleanup()
Kennt zufällig jemand einen Skript, das für mein vorhaben passen würde, bzw würde sich jemand die Zeit nehmen, um mir da etwas unter die Arme zu greifen?
Danke für eure Hilfe im vorraus