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.
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. 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
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.
https://www.amazon.co.jp/dp/B07JL7NP3F/
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) |
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).
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`.
ja_JP.UTF-8 UTF-8
avec sudo raspi-config
.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.
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