[PYTHON] Instrument de pesage utilisant Raspberry Pi et Hx711 (affichage GUI dans Tkinter)

J'avais également besoin d'une mesure du poids et d'un affichage des résultats en fonction du poids au travail, j'ai donc réalisé un prototype. IMG_20200418_151503.jpg

1. Configuration de l'écran tactile

Pour l'affichage uniquement, un écran connecté HDMI ou une CLI inorganique peut être utilisé, mais la cible n'est pas un programmeur mais un amateur comme moi. Par conséquent, nous organiserons un écran tactile afin que vous puissiez facilement l'utiliser à l'aide de l'écran GUI et du panneau tactile. 81BVrYzOaqL.AC_SL1500.jpg https://www.amazon.co.jp/dp/B075K56C12/ Cela n'occupe pas le GPIO, c'est donc idéal pour la connexion de la cellule de charge!

La méthode d'installation est introduite par les ancêtres d'une manière facile à comprendre, je vais donc publier un lien.

Note de montage neuronal: j'ai reçu un petit écran tactile que GPIO de Raspberry Pi peut retirer, j'ai donc essayé de l'utiliser pour le travail électronique https://neuralassembly.blogspot.com/2017/12/raspberry-pigpio.html

2. Amplificateur de pesée de pesée

Il semble qu'il soit facile et courant d'utiliser le hx711 du convertisseur A / N comme amplificateur de cellule de charge pour mesurer le poids avec raspberrypi. (Comme il y a beaucoup de bruit, il y a des endroits où il est dit que nous ne recommandons pas de spécifications si vous pouvez vous le permettre ...)

Cette fois, je voulais aussi une cellule de pesée, j'ai donc acheté un kit avec un ensemble de tableaux de mesure de poids en plus de la cellule de pesée MAX 5 kg hx711 suivante. 61qE+6hhiBL.AC_SL1000.jpg

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

2.1. Connexion entre hx711 et raspbberry pi

Connectez-vous au Raspberry Pi avec le câble plat inclus dans le kit hx711.

hx711 raspberypi
GND GND(6pin)
DT GPIO5(29pin)
SCK GPIN6(31pin)
VCC 5V(4pin)

2.2 Configuration de hx711

Obtenez la bibliothèque hx711 pour python depuis 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.

Je vais vraiment l'exécuter.

$ python hx711/example.py
Tare done! Add weight now...
490
458
445
451
459
483
467
486
511
412
^CCleaning... ←ctrl+Terminer par c
Bye!

S'il est correctement connecté, les chiffres devraient apparaître comme ceci. Maintenant, ce nombre affiche simplement la sortie de la cellule de pesée, vous devez donc l'étalonner au nombre qui correspond au poids.

Par exemple, lorsqu'un poids avec un poids clair (ou un poids dont le poids est connu sur une balance de cuisine, etc. est utilisé comme poids) est placé sur la cellule de pesée.

Tare done! Add weight now...
458
445
451 ← Placez le poids ici
4475
13929
212399
212419
212441
212402
212399
212460
212422
212385
212456
212424
212463
212451
212455
212379
212438
212457
212451
212390
^CCleaning...
Bye!

Supposons que vous obteniez un résultat comme celui-ci: Dans ce cas, la valeur de correction est la valeur obtenue en divisant la valeur moyenne de 212399 à 212390, qui a des valeurs stables, par le poids réel. En supposant que le poids du poids est de 200g, 212417 (valeur moyenne) / 200g (poids réel) = 1062 est la valeur de correction. La valeur de correction est affectée à «referenceUnit» dans «exemple.py».

example.py


…
#referenceUnit = 1
referenceUnit = 1062
…

n'est-ce pas. Vous pouvez maintenant obtenir le poids réel (à l'exception des perturbations telles que le bruit et la température).

3. Affichage GUI avec Tkinter

Si vous êtes satisfait de vous-même, un écran CLI inorganique suffit, mais si vous voulez dire «Wow!» À un amateur, vous avez besoin d'un écran GUI (rires) Cependant, en fait, rien qu'en affichant l'interface graphique, l'exhaustivité du programme semble différente et l'humour des patrons et des collègues devrait changer.

Cette fois, j'ai décidé d'afficher l'interface graphique avec Tkinter en me référant au site suivant.

Passionnés d'équipement: surveillance GUI de la température avec Raspeye et 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

Le code complet est ci-dessous. Par souci de clarté, l'affichage est basé sur le poids et le nombre de balles de 100 yens. Bien que ce soit redondant, je laisserai la partie commentée telle quelle pour ceux qui ajoutent ou modifient à partir de ʻexample.py`.

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"Échelle de poids")

sbtn = tk.Button(root, text='Fin',font = ('', 50), command=cleanAndExit)
sbtn.pack(side = 'bottom')

zbtn = tk.Button(root, text='Remise à zéro',font = ('', 30), command=zero)
zbtn.pack(side = 'bottom')

title = tk.Label(text='poids[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 boule de 100 yens',font = ('', 70))
    elif val >= 8.1 and val <= 11.0:
        txit = tk.Label(text='Deux balles de 100 yens',font = ('', 70))
    elif  val >= 12.6 and val <= 16.1:
        txit = tk.Label(text='3 boules de 100 yens',font = ('', 70))
    elif  val >= 17.2 and val <= 21.2:
        txit = tk.Label(text='4 boules de 100 yens',font = ('', 70))
    elif  val >= 21.7 and val <= 26.2:
        txit = tk.Label(text='5 boules de 100 yens',font = ('', 70))

    txit.pack()
    
    weight.update()
    txit.update()
    weight.forget()
    txit.forget()
    hx.power_down()
    hx.power_up()
    time.sleep(0.5)

root.mainloop()

Le bouton de remise à zéro est utilisé pour réinitialiser 0g, et le bouton de fin est utilisé pour terminer le programme. Le résultat de l'opération réelle est le suivant.

weight_choose.py.gif https://youtu.be/YzPybzAu_xk

Après cela, si vous le démarrez automatiquement avec le démarrage automatique, il ressemble plus à un véritable instrument de mesure et c'est cool! Je vous remercie pour votre travail acharné.

Recommended Posts

Instrument de pesage utilisant Raspberry Pi et Hx711 (affichage GUI dans Tkinter)
MQTT sur Raspberry Pi et Mac
Essayez d'utiliser ArUco avec Raspberry Pi
Utilisez le frame buffer (/ dev / fb0) avec Raspeye pour entrer et sortir directement les images d'affichage
Détectez la "luminosité" en utilisant python sur Raspberry Pi 3!
Exécutez un servomoteur en utilisant python sur Raspberry Pi 3
Détectez la température à l'aide de python sur Raspberry Pi 3!
Paramètres initiaux pour l'utilisation du kit de démarrage et de la caméra Grove Pi + avec Raspberry Pi
Détectez les interrupteurs à glissière à l'aide de python sur Raspberry Pi 3!
Essayez d'utiliser le code QR avec Raspberry Pi
Détectez les commutateurs magnétiques à l'aide de python sur Raspberry Pi 3!
Sonnez le buzzer en utilisant python sur Raspberry Pi 3!
Afficher la température du processeur toutes les 5 secondes sur Raspberry Pi 4
J'ai essayé d'exécuter Flask sur Raspberry Pi 3 Model B + en utilisant Nginx et uWSGI
Enregistrez la température et l'humidité avec systemd sur Raspberry Pi
Créer un environnement OpenCV4 sur Raspberry Pi à l'aide de Poetry
Créez un capteur de couleur à l'aide d'une tarte à la râpe et d'une caméra
pigpio sur Raspberry pi
Essayez d'utiliser le capteur de température (LM75B) avec Raspeye.
Installez PyCall sur Raspberry PI et essayez d'utiliser la bibliothèque GPIO pour Python de Ruby
Ubuntu 20.04 sur raspberry pi 4 avec OpenCV et utilisation avec python
Installation de Docker sur Raspberry Pi et L Chika
Installez pyenv sur Raspberry Pi pour gérer Python
Sortie sur "LED 7 segments" en utilisant python avec Raspberry Pi 3!
Cython sur Raspberry Pi
Résoudre les problèmes liés à l'installation d'OpenCV sur Raspberry Pi et à la capture
Compilation croisée pour Raspberry Pi Zero sur Debian-Try en utilisant une bibliothèque partagée
Utilisez python sur Raspberry Pi 3 pour détecter la "température (en utilisant un convertisseur A / N)"!
[Python GUI] Réglage du contraste DICOM et conversion BMP à l'aide de Tkinter
Obtenez la météo en utilisant l'API et laissez Raspberry Pi parler!
Surveillance intérieure à l'aide de Raspberry Pi
Afficher les messages GUI sur Ubuntu
Introduction de pyenv sur Raspberry Pi
Utilisez NeoPixel avec la tarte aux framboises
Installez OpenCV4 sur Raspberry Pi 3
Installez TensorFlow 1.15.0 sur Raspberry Pi
Contrôlez le moteur avec un pilote de moteur en utilisant python sur Raspberry Pi 3!
Fabriquez un incubateur à CO2 simple à l'aide de Raspberry PI et d'un capteur de CO2 (MH-Z14A)
Faire une boussole d'affichage kanji avec Raspberry Pi et Sense Hat
Affichage graphique de la consommation électrique des ménages avec 3GPI et Raspeye
Créez votre propre plateforme IoT en utilisant raspberrypi et ESP32 (partie 1)
[Ruby on Rails] Affichage et épinglage de GoolgeMAP à l'aide de l'API Google
Test de la communication UART avec Raspberry Pi
USB sur Ethernet avec Raspberry pi
raspberry pi 4 centos7 installer sur docker
Créer une interface graphique python à l'aide de tkinter
Installez ghoto2 sur Raspberry Pi (Remarque)
Remarques sur l'utilisation de la post-réception et de la post-fusion
Procédure d'installation d'OpenCV sur Raspberry Pi
Allumer / éteindre le Raspberry pi avec Arduino
Détecter l'état du commutateur avec Raspberry Pi 3
Installez OpenMedia Vault 5 sur Raspberry Pi 4
Utiliser une webcam avec Raspberry Pi
L Chika avec Raspberry Pi C #
Construisez wxPython sur Ubuntu 20.04 sur Raspberry Pi 4
Création d'interface graphique en python avec tkinter 2
Détectez les signaux analogiques avec un convertisseur A / N en utilisant python sur Raspberry Pi 3!