[PYTHON] Wiegeinstrument mit Himbeer-Pi und hx711 (GUI-Anzeige in Tkinter)

Ich hatte auch ein Bedürfnis nach Gewichtsmessung und Ergebnisanzeige nach Gewicht bei der Arbeit, also machte ich einen Prototyp. IMG_20200418_151503.jpg

1. Setup des Touchpanel-Displays

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. 81BVrYzOaqL.AC_SL1500.jpg 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

2. Wägezellenverstärker wiegen

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. 61qE+6hhiBL.AC_SL1000.jpg

https://www.amazon.co.jp/dp/B07JL7NP3F/

2.1 Verbindung zwischen hx711 und Himbeer-Pi

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)

2.2 Einrichten von hx711

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).

3. GUI-Anzeige mit Tkinter

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.

weight_choose.py.gif 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

Wiegeinstrument mit Himbeer-Pi und hx711 (GUI-Anzeige in Tkinter)
MQTT auf Raspberry Pi und Mac
Versuchen Sie es mit ArUco mit Raspberry Pi
Verwenden Sie den Bildspeicher (/ dev / fb0) mit Raspeye, um Anzeigebilder direkt einzugeben und auszugeben
Erkennen Sie "Helligkeit" mit Python auf Raspberry Pi 3!
Lassen Sie einen Servomotor mit Python auf Raspberry Pi 3 laufen
Ermitteln Sie die Temperatur mit Python auf Raspberry Pi 3!
Grundeinstellungen für die Verwendung des Grove Pi + Starterkits und der Kamera mit Raspberry Pi
Erkennen Sie Schiebeschalter mit Python auf Raspberry Pi 3!
Versuchen Sie, QR-Code mit Raspberry Pi zu verwenden
Erkennen Sie Magnetschalter mit Python auf Raspberry Pi 3!
Lassen Sie den Summer mit Python auf Raspberry Pi 3 erklingen!
Zeigen Sie die CPU-Temperatur alle 5 Sekunden auf dem Raspberry Pi 4 an
Ich habe versucht, Flask auf Raspberry Pi 3 Model B + mit Nginx und uWSGI auszuführen
Notieren Sie Temperatur und Luftfeuchtigkeit mit systemd auf Raspberry Pi
Erstellen Sie mithilfe von Poetry eine OpenCV4-Umgebung auf Raspberry Pi
Erstellen Sie einen Farbsensor mit einem Raspeltorte und einer Kamera
Pigpio auf Himbeer-Pi
Versuchen Sie es mit dem Temperatursensor (LM75B) mit Raspeye.
Installieren Sie PyCall auf Raspberry PI und versuchen Sie, die GPIO-Bibliothek für Python von Ruby zu verwenden
Ubuntu 20.04 auf Himbeer-Pi 4 mit OpenCV und mit Python verwenden
Installation von Docker auf Raspberry Pi und L Chika
Installieren Sie pyenv auf Raspberry Pi, um Python zu verwalten
Ausgabe auf "7 Segment LED" mit Python mit Raspberry Pi 3!
Cython auf Raspberry Pi
Fehlerbehebung bei der Installation von OpenCV auf Raspberry Pi und der Erfassung
Cross-Compilierung für Raspberry Pi Zero unter Debian-Try unter Verwendung einer gemeinsam genutzten Bibliothek
Verwenden Sie Python auf Raspberry Pi 3, um "Temperatur (mit A / D-Wandler)" zu erkennen!
[Python GUI] DICOM-Kontrastanpassung und BMP-Konvertierung mit Tkinter
Holen Sie sich das Wetter mit API und lassen Sie Raspberry Pi sprechen!
Innenüberwachung mit Raspberry Pi
Zeigen Sie GUI-Meldungen unter Ubuntu an
Pyenv auf Raspberry Pi eingeführt
Verwenden Sie NeoPixel mit Himbeerkuchen
Installieren Sie OpenCV4 auf Raspberry Pi 3
Installieren Sie TensorFlow 1.15.0 auf Raspberry Pi
Steuern Sie den Motor mit einem Motortreiber mit Python auf Raspberry Pi 3!
Machen Sie einen einfachen CO2-Inkubator mit Raspberry PI und CO2-Sensor (MH-Z14A)
Erstellen Sie einen Kanji-Kompass mit Raspberry Pi und Sense Hat
Grafische Darstellung des Stromverbrauchs im Haushalt mit 3GPI und Raspeye
Erstellen Sie Ihre eigene IoT-Plattform mit Himbeerpi und ESP32 (Teil 1)
[Ruby on Rails] Anzeigen und Fixieren von GoolgeMAP mithilfe der Google-API
Testen der Kommunikation mit Raspberry Pi
USB über Ethernet mit Raspberry pi
Himbeer Pi 4 Centos7 auf Docker installieren
Erstellen Sie mit tkinter eine Python-GUI
Installieren Sie ghoto2 auf Raspberry Pi (Hinweis)
Hinweise zur Verwendung von Post-Receive und Post-Merge
OpenCV-Installationsverfahren auf Raspberry Pi
Ein- / Ausschalten von Raspberry Pi mit Arduino
Erkennen Sie den Schalterstatus mit Raspberry Pi 3
Installieren Sie OpenMedia Vault 5 auf Raspberry Pi 4
Verwenden einer Webkamera mit Raspberry Pi
L Chika mit Himbeer-Pi C #
Erstellen Sie wxPython unter Ubuntu 20.04 auf Himbeer-Pi 4
GUI-Erstellung in Python mit tkinter 2
Erkennen Sie analoge Signale mit dem A / D-Wandler mithilfe von Python auf Raspberry Pi 3!