Cómo hacer una foto cuando se detecta un valor de la célula de carga

Aplicaciones Raspberry PLC industrial y Node-RED
4 de mayo de 2021 por
Cómo hacer una foto cuando se detecta un valor de la célula de carga
Boot & Work Corp. S.L., Fernandez Queralt Martinez

Introducción

Los sensores portátiles son un mercado emergente que está ganando rápidamente reconocimiento en el mercado mundial, especialmente en el sector industrial.

La familia de PLCs basados en Raspberry Pi ofrece un amplio abanico de posibilidades para controlar y supervisar esta innovadora tecnología.

En este blog, aprenderás a tomar una foto usando una cámara USB cuando una célula de carga detecta un valor específico, controlado por un PLC industrial Raspberry Pi y monitorizándolo usando Node-RED.

Cómo hacer una foto cuando se detecta un valor de la célula de carga

Enlaces relacionados


Cómo encontrar tu
PLC industrial perfecto


Ver >>


Familia de productos
de Touchberry Pi


Ver >>

Cómo programar las entradas de interrupción de
un PLC Raspberry Pi con Python


Ver >>


Familia de productos
de Touchberry Pi


Ver >>


Cómo conectar
un Raspberry PLC a Wi-Fi


Ver >>

Conceptos básicos sobre las salidas
analógicas de un Raspberry Pi PLC


Ver >>

Requisitos

  • 1x Sensor de peso
  • 1x Módulo transmisor de células de carga HX711
  • 4x cables
  • 1x cámara USB
  • 1x PLC industrial Raspberry Pi   See the product >>

Conctando el hardware

Conecta el hardware como se muestra a continuación para proceder con el software:

Conectar el hardware
Tabla de valor de ponderación - Conectando hardware

Configuración del sensor de peso

1.  En primer lugar, vamos a clonar un proyecto que contiene un archivo de ejemplo que muestra una función de la librería. Para ello, abre una ventana de terminal en tu controlador PLC Raspberry Pi y escribe lo siguiente:

git clone https://github.com/tatobari/hx711py

 

2. Una vez clonado el repositorio, aparecerá un directorio llamado hx711py con el archivo llamado example.py. Por lo tanto, ve a ese archivo para ajustar algunos cambios:

cd hx711py
sudo nano example.py


3. Dentro del archivo, modifiquemos algunas líneas, para que el código tenga el siguiente aspecto:

#! /usr/bin/python2
 
import time
import sys

EMULATE_HX711=False

referenceUnit = -1

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!")
    sys.exit()

hx = HX711(25, 2)
hx.set_reference_unit(referenceUnit)
hx.reset()

hx.tare()

print("Tare done! Add weight now...")

def func(): while True: try:                         val = hx.get_weight(5)
                        yield val
                        hx.power_down() hx.power_up() time.sleep(0.1) except (KeyboardInterrupt, SystemExit): cleanAndExit() function = func() for i in function: print(i)


4. Una vez modificado el código, salga con Ctrl + X, escriba 'Y' para guardar el archivo con el mismo nombre y Enter. 

Probar la báscula Raspberry

1. Para tener una correcta calibración y poder obtener el peso correcto, necesitas un objeto de comparación cuyo peso conozcas. Te recomendamos elegir un valor medio del máximo que puede obtener la célula de carga. Por ejemplo, si tu báscula puede obtener hasta 20 kgs, entonces te aconsejamos elegir un objeto con un peso de 10 kgs.


2. En primer lugar, hay que comentar la siguiente línea de la siguiente manera:

#hx.set_reference_unit(referenceUnit)


3. A continuación, coloca el objeto en la balanza y ejecútalo con el siguiente comando:

sudo python example.py


4. Verás que los valores mostrados serán tanto positivos como negativos. En este caso, se muestran en 24500 valores alrededor de -22200. Así que referenciamos los valores como:

−22200 ÷ 24500 = -0.9

5. Después de obtener ese valor, vuelve a la línea que comentamos antes, y descoméntala eliminando el hashtag, y escribiendo el valor que has obtenido como unidad de referencia como:

hx.set_reference_unit(referenceUnit)
referenceUnit = -1


Si has conseguido una calibración correcta, verás que el valor de la balanza de peso estará en torno a 0. Si no, puedes modificar la variable referenceUnit para conseguir la calibración correcta.

Obtener los valores con Node-RED

1.  Por defecto, las imágenes del PLC Raspberry tienen Node-RED ya instalado. Si no tienes Node-RED instalado en tu dispositivo, primero ve a la siguiente URL para proceder a la instalación: https://nodered.org/docs/getting-started/raspberrypi

2. Una vez que Node-RED esté listo, desde tu ordenador ve a tu navegador y escribe: http://10.10.10.20:1880/ si estás conectado a través de Ethernet, o http://wlan0-pi-address:1880/ si quieres conectarte a través del WiFi.

3. Después de abrir una nueva ventana de Node-RED, ve al menú de la derecha, haz clic en Administrar paleta > Instalar > Tipo: node-red-contrib-ui-media e instálalo.

4. Después de eso, haz clic en Importar, pega el siguiente flows.json y haz clic en el botón Desplegar:

 [{"id":"2826c4af.400f9c","type":"tab","label":"Flow 1","disabled":false,"info":""},{"id":"9b234a13.0256e8","type":"exec","z":"2826c4af.400f9c","command":"","addpay":"payload","append":"","useSpawn":"false","timer":"","oldrc":false,"name":"","x":510,"y":260,"wires":[[],[],["3f27e8b4.d02378"]]},{"id":"ec5481a.4fbf28","type":"exec","z":"2826c4af.400f9c","command":"","addpay":"payload","append":"","useSpawn":"true","timer":"","oldrc":false,"name":"","x":870,"y":60,"wires":[["36307784.3144e8","372e8f7b.f9752","d4e34cd5.f423e"],[],[]]},{"id":"36307784.3144e8","type":"switch","z":"2826c4af.400f9c","name":"if value is between 50 and 100","property":"payload","propertyType":"msg","rules":[{"t":"btwn","v":"50","vt":"num","v2":"100","v2t":"num"}],"checkall":"true","repair":false,"outputs":1,"x":990,"y":160,"wires":[["fb666c7f.c2ff9"]]},{"id":"3f27e8b4.d02378","type":"switch","z":"2826c4af.400f9c","name":"if picture was taken","property":"payload.code","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"num"}],"checkall":"true","repair":false,"outputs":1,"x":1030,"y":260,"wires":[["7646b60e.83a318"]]},{"id":"7646b60e.83a318","type":"function","z":"2826c4af.400f9c","name":"set path","func":"let count = flow.get('count');\nmsg.payload = \"/image\" + count + \".jpg\";\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":140,"y":360,"wires":[["a4078c82.e803a"]]},{"id":"a4078c82.e803a","type":"change","z":"2826c4af.400f9c","name":"move payload to src","rules":[{"t":"move","p":"payload","pt":"msg","to":"src","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":560,"y":360,"wires":[["3385b59c.06c81a"]]},{"id":"8771f8be.e44f68","type":"ui_button","z":"2826c4af.400f9c","name":"","group":"c4c1bcc1.49c24","order":5,"width":7,"height":2,"passthru":false,"label":"STOP LOAD CELL","tooltip":"","color":"","bgcolor":"","icon":"","payload":"0","payloadType":"num","topic":"","topicType":"str","x":170,"y":160,"wires":[["e053ecae.bca31","d4e34cd5.f423e"]]},{"id":"d4e34cd5.f423e","type":"ui_gauge","z":"2826c4af.400f9c","name":"","group":"c4c1bcc1.49c24","order":13,"width":6,"height":4,"gtype":"gage","title":"Weight","label":"g","format":"{{value}}","min":"-2000","max":"2000","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","x":1070,"y":100,"wires":[]},{"id":"372e8f7b.f9752","type":"ui_chart","z":"2826c4af.400f9c","name":"","group":"c4c1bcc1.49c24","order":11,"width":6,"height":4,"label":"","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"","ymax":"","removeOlder":1,"removeOlderPoints":"","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"useUTC":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"outputs":1,"useDifferentColor":false,"x":1070,"y":60,"wires":[[]]},{"id":"99be7e29.78696","type":"ui_button","z":"2826c4af.400f9c","name":"","group":"c4c1bcc1.49c24","order":3,"width":7,"height":2,"passthru":false,"label":"START LOAD CELL","tooltip":"","color":"","bgcolor":"","icon":"","payload":"","payloadType":"str","topic":"","topicType":"str","x":180,"y":60,"wires":[["615b1ef6.53963"]]},{"id":"615b1ef6.53963","type":"function","z":"2826c4af.400f9c","name":"start flow.count and send python cmd","func":"var count = flow.get('count')||0;\nflow.set('count', count);\n\nvar newMsg = {payload: \"sudo python -u /home/pi/hx711py/example.py\"};\nreturn newMsg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":610,"y":60,"wires":[["ec5481a.4fbf28"]]},{"id":"3385b59c.06c81a","type":"ui_media","z":"2826c4af.400f9c","group":"c4c1bcc1.49c24","name":"","width":6,"height":4,"order":15,"category":"","file":"","layout":"expand","showcontrols":true,"loop":true,"onstart":false,"scope":"local","tooltip":"","x":1070,"y":360,"wires":[[]]},{"id":"16de31a2.e4a6de","type":"status","z":"2826c4af.400f9c","name":"get the exec node status","scope":["ec5481a.4fbf28"],"x":190,"y":600,"wires":[["9bb820b3.87fbe"]]},{"id":"9bb820b3.87fbe","type":"change","z":"2826c4af.400f9c","name":"set flow.pid","rules":[{"t":"set","p":"pid","pt":"flow","to":"$number($split(status.text, ':')[1])","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":410,"y":600,"wires":[["b99c988c.86bf98"]]},{"id":"b99c988c.86bf98","type":"function","z":"2826c4af.400f9c","name":"set kill cmd","func":"let pid = flow.get('pid');\nvar kill = \"kill -9 \" + pid;\nflow.set('kill', kill);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":590,"y":600,"wires":[[]]},{"id":"e053ecae.bca31","type":"function","z":"2826c4af.400f9c","name":"killall python","func":"msg.payload = \"sudo killall python\";\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":530,"y":160,"wires":[["ec5481a.4fbf28"]]},{"id":"fb666c7f.c2ff9","type":"function","z":"2826c4af.400f9c","name":"start flow.get and send fswebcam cmd","func":"var count = flow.get('count');\ncount++;\n\nmsg.payload = \"fswebcam -r 1280x720 --no-banner /home/pi/images/image\" + count + \".jpg\";\n\nflow.set('count', count);\n\nreturn msg;\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":230,"y":260,"wires":[["9b234a13.0256e8"]]},{"id":"5771d86a.220b58","type":"comment","z":"2826c4af.400f9c","name":"In case you want to kill the flow pid and not the python processes, replace the \"killall python\" function node, for the \"killall pid\" function node -->","info":"","x":550,"y":540,"wires":[]},{"id":"b88b67eb.03f068","type":"function","z":"2826c4af.400f9c","name":"killall pid","func":"msg.payload = flow.get('kill');\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1100,"y":540,"wires":[[]]},{"id":"c4c1bcc1.49c24","type":"ui_group","name":"","tab":"cbda5f28.c75ad","order":1,"disp":true,"width":"20","collapse":false},{"id":"cbda5f28.c75ad","type":"ui_tab","name":"Home","icon":"dashboard","disabled":false,"hidden":false}]

5. Ve a tu terminal Raspberry de nuevo, y escribe:

cd
mkdir images
sudo nano /home/pi/.node-red/settings.js

cd: Lleva al directorio /home/pi.

mkdir images : Este comando crea un nuevo directorio llamado 'images' en el directorio actual. Este directorio almacenará todas las imágenes tomadas por la cámara.
Por último, vamos a modificar una línea para poder obtener las imágenes de una fuente.

6. Busca la línea con el parámetro httpStatic y haz lo siguiente:

//httpStatic: '/home/nol/node-red-static/', ------------> Replace this
httpStatic: '/home/pi/images',              ------------> For this

7. Reinicia tu PLC de código abierto Raspberry Pi.

8. Después de reiniciar, ve de nuevo a tu navegador y escribe http://10.10.10.20:1880/ui  

9. Si todo ha ido bien, puedes probar y disfrutar de tu aplicación. :)


¿Quieres resolver cuestiones técnicas?

Sigue nuestro blog para resolver dudas o aprender nuevas funcionalidades.

Buscar en nuestro blog

Cómo hacer una foto cuando se detecta un valor de la célula de carga
Boot & Work Corp. S.L., Fernandez Queralt Martinez 4 de mayo de 2021
Compartir

¿Estás buscando tu Controlador Lógico Programable ideal?

Echa un vistazo a esta comparativa de producto de varios controladores industriales basados en Arduino.

Comparamos entradas, salidas, comunicaciones y otras especificaciones con las de los equipos de otras marcas destacadas.


Industrial PLC comparison >>>