Ich hatte auch ein Bedürfnis nach Gewichtsmessung und Ergebnisanzeige nach Gewicht bei der Arbeit, also machte ich einen Prototyp.
Nur für die Anzeige kann ein mit HDMI verbundenes Display oder eine anorganische CLI verwendet werden, aber das Ziel ist kein Programmierer, sondern ein Amateur wie ich. Aus diesem Grund werden wir ein Touchpanel-Display einrichten, damit Sie es problemlos über das GUI-Display und das Touchpanel bedienen können. https://www.amazon.co.jp/dp/B075K56C12/ Dies belegt kein GPIO und ist daher ideal für die Wägezellenverbindung!
Die Setup-Methode wird von den Vorfahren auf leicht verständliche Weise eingeführt, daher werde ich einen Link veröffentlichen.
Hinweis zur neuronalen Assemblierung: Ich habe einen kleinen Touchscreen erhalten, den GPIO von Raspberry Pi herausziehen kann, und habe versucht, ihn für elektronische Arbeiten zu verwenden https://neuralassembly.blogspot.com/2017/12/raspberry-pigpio.html
Es scheint einfach und üblich zu sein, den hx711 des A / D-Wandlers als Wägezellenverstärker zu verwenden, um das Gewicht mit Himbeerpi zu messen. (Da es viel Lärm gibt, gibt es Stellen, an denen es heißt, dass wir keine Spezifikationen empfehlen, wenn Sie es sich leisten können ...)
Dieses Mal wollte ich auch eine Wägezelle, also kaufte ich zusätzlich zu der folgenden MAX 5 kg Wägezelle hx711 ein Kit mit einem Satz Gewichtsmessungstabellen.
https://www.amazon.co.jp/dp/B07JL7NP3F/
Mit dem im hx711-Kit enthaltenen Flachkabel an Himbeer-Pi anschließen.
hx711 | raspberypi |
---|---|
GND | GND(6pin) |
DT | GPIO5(29pin) |
SCK | GPIN6(31pin) |
VCC | 5V(4pin) |
Holen Sie sich die hx711-Bibliothek für Python von Github.
$ git clone https://github.com/tatobari/hx711py
Cloning into 'hx711py'...
remote: Counting objects: 77, done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 77 (delta 3), reused 5 (delta 2), pack-reused 68
Unpacking objects: 100% (77/77), done.
Ich werde es tatsächlich ausführen.
$ python hx711/example.py
Tare done! Add weight now...
490
458
445
451
459
483
467
486
511
412
^CCleaning... ←ctrl+Beenden Sie mit c
Bye!
Wenn es richtig angeschlossen ist, sollten die Nummern so herauskommen. Diese Zahl zeigt nur die Ausgabe der Wägezelle an, sodass Sie sie auf die Zahl kalibrieren müssen, die dem Gewicht entspricht.
Zum Beispiel, wenn ein Gewicht mit einem klaren Gewicht (oder ein Gewicht, dessen Gewicht auf einer Küchenwaage usw. bekannt ist, als Gewicht verwendet wird) auf die Wägezelle gelegt wird.
Tare done! Add weight now...
458
445
451 ← Platzieren Sie das Gewicht hier
4475
13929
212399
212419
212441
212402
212399
212460
212422
212385
212456
212424
212463
212451
212455
212379
212438
212457
212451
212390
^CCleaning...
Bye!
Angenommen, Sie erhalten ein Ergebnis wie das folgende: In diesem Fall ist der Korrekturwert der Wert, der durch Teilen des Durchschnittswerts von 212399 bis 212390, der stabile Werte aufweist, durch das tatsächliche Gewicht erhalten wird. Unter der Annahme, dass das Gewicht des Gewichts 200 g beträgt, ist 212417 (Durchschnittswert) / 200 g (tatsächliches Gewicht) = 1062 der Korrekturwert. Der Korrekturwert wird in "example.py" "referenceUnit" zugewiesen.
example.py
…
#referenceUnit = 1
referenceUnit = 1062
…
nicht wahr. Jetzt können Sie das tatsächliche Gewicht ermitteln (abgesehen von Störungen wie Lärm und Temperatur).
Anorganische CLI-Anzeige ist genug für die Selbstzufriedenheit, aber wenn Sie "Wow!" Sagen möchten, benötigen Sie für einen Amateur eine GUI-Anzeige (lachen) Tatsächlich sieht die Vollständigkeit des Programms jedoch nur durch die Anzeige der grafischen Benutzeroberfläche anders aus, und der Humor von Vorgesetzten und Kollegen sollte sich ändern.
Dieses Mal habe ich beschlossen, die GUI mit Tkinter unter Bezugnahme auf die folgende Site anzuzeigen.
Geräte-Enthusiasten: GUI-Überwachung der Temperatur mit Raspeye und Tkinter http://setsubi.no-mania.com/raspberry%20pi/%E3%83%A9%E3%82%BA%E3%83%91%E3%82%A4%E3%81%A8tkinter%E3%81%A7%E6%B8%A9%E5%BA%A6%E3%81%AEgui%E7%9B%A3%E8%A6%96
Der vollständige Code ist unten.
Der Übersichtlichkeit halber basiert die Anzeige auf dem Gewicht und der Anzahl der 100-Yen-Bälle.
Obwohl es redundant ist, werde ich den auskommentierten Teil so lassen, wie er für diejenigen ist, die example.py
hinzufügen / ändern.
weight_choose.py
#! /usr/bin/python3
# -*- coding: utf-8 -*-
import time
import sys
import math
import tkinter as tk
EMULATE_HX711=False
#referenceUnit = 1
referenceUnit = 1062
if not EMULATE_HX711:
import RPi.GPIO as GPIO
from hx711 import HX711
else:
from emulated_hx711 import HX711
def cleanAndExit():
print("Cleaning...")
if not EMULATE_HX711:
GPIO.cleanup()
print("Bye!")
root.destroy()
root.quit()
sys.exit()
hx = HX711(5, 6)
# I've found out that, for some reason, the order of the bytes is not always the same between versions of python, numpy and the hx711 itself.
# Still need to figure out why does it change.
# If you're experiencing super random values, change these values to MSB or LSB until to get more stable values.
# There is some code below to debug and log the order of the bits and the bytes.
# The first parameter is the order in which the bytes are used to build the "long" value.
# The second paramter is the order of the bits inside each byte.
# According to the HX711 Datasheet, the second parameter is MSB so you shouldn't need to modify it.
hx.set_reading_format("MSB", "MSB")
# HOW TO CALCULATE THE REFFERENCE UNIT
# To set the reference unit to 1. Put 1kg on your sensor or anything you have and know exactly how much it weights.
# In this case, 92 is 1 gram because, with 1 as a reference unit I got numbers near 0 without any weight
# and I got numbers around 184000 when I added 2kg. So, according to the rule of thirds:
# If 2000 grams is 184000 then 1000 grams is 184000 / 2000 = 92.
#hx.set_reference_unit(113)
hx.set_reference_unit(referenceUnit)
hx.reset()
hx.tare()
print("Tare done! Add weight now...")
# to use both channels, you'll need to tare them both
#hx.tare_A()
#hx.tare_B()
#while True:
# try:
# These three lines are usefull to debug wether to use MSB or LSB in the reading formats
# for the first parameter of "hx.set_reading_format("LSB", "MSB")".
# Comment the two lines "val = hx.get_weight(5)" and "print val" and uncomment these three lines to see what it prints.
# np_arr8_string = hx.get_np_arr8_string()
# binary_string = hx.get_binary_string()
# print binary_string + " " + np_arr8_string
# Prints the weight. Comment if you're debbuging the MSB and LSB issue
# val = hx.get_weight(5)
# print(val)
# To get weight from both channels (if you have load cells hooked up
# to both channel A and B), do something like this
#val_A = hx.get_weight_A(5)
#val_B = hx.get_weight_B(5)
#print "A: %s B: %s" % ( val_A, val_B )
# hx.power_down()
# hx.power_up()
# time.sleep(0.1)
# except (KeyboardInterrupt, SystemExit):
# cleanAndExit()
def zero():
hx.reset()
hx.tare()
root = tk.Tk()
root.geometry("800x500")
root.title(u"Gewichtsskala")
sbtn = tk.Button(root, text='Ende',font = ('', 50), command=cleanAndExit)
sbtn.pack(side = 'bottom')
zbtn = tk.Button(root, text='Null-Reset',font = ('', 30), command=zero)
zbtn.pack(side = 'bottom')
title = tk.Label(text='Gewicht[g]',font = ('', 70))
title.pack()
while True:
val = hx.get_weight(5)
print(val)
weight = tk.Label(text='{:.1f}'.format(val),font = ('', 70))
weight.pack()
txit = tk.Label(text='',font = ('', 70))
if val >= 3.8 and val <= 5.8:
txit = tk.Label(text='1 100 Yen Ball',font = ('', 70))
elif val >= 8.1 and val <= 11.0:
txit = tk.Label(text='Zwei 100-Yen-Bälle',font = ('', 70))
elif val >= 12.6 and val <= 16.1:
txit = tk.Label(text='3 100 Yen Bälle',font = ('', 70))
elif val >= 17.2 and val <= 21.2:
txit = tk.Label(text='4 100 Yen Bälle',font = ('', 70))
elif val >= 21.7 and val <= 26.2:
txit = tk.Label(text='5 100 Yen Bälle',font = ('', 70))
txit.pack()
weight.update()
txit.update()
weight.forget()
txit.forget()
hx.power_down()
hx.power_up()
time.sleep(0.5)
root.mainloop()
Die Null-Reset-Taste dient zum Zurücksetzen von 0g und die End-Taste zum Beenden des Programms. Das Ergebnis der tatsächlichen Operation ist wie folgt.
https://youtu.be/YzPybzAu_xk
Wenn Sie es danach automatisch mit dem Autostart starten, sieht es eher wie ein echtes Messinstrument aus und ist cool! Danke für deine harte Arbeit.
Recommended Posts