jueves, 2 de junio de 2016

Balanza digital de hasta 20Kg con celda de carga y transmisor HX711


En el POST de hoy vamos a trabajar con una celda de carga de 20Kg,  un transmisor de celda de carga HX711, un display LCD 1602, frecuentemente utilizado a lo largo de todo el BLOG y por último una estructura que fabricaremos en “DM”, que no es más que un tipo de aglomerado de madera muy resistente, para crear una precisa y práctica balanza digital capaz de pesar elementos de hasta 20Kg. Para comenzar este proyecto es muy interesante conocer que es y para que se utiliza la celda de carga,  además de ver por qué es necesario utilizar un transmisor de celda de carga HX711 para comunicar la celda de carga con nuestro Arduino y que mediante el mismo podamos interpretar las señales eléctricas recibidas para mostrar a través del LCD 1602 el peso real de los elementos que nos interesen.
Una celda de carga es un transductor utilizado para convertir una fuerza en una señal eléctrica. Esta conversión empieza a partir de un dispositivo mecánico, es decir, la fuerza que se desea medir, deforma la galga extensiométrica y por medio de medidores de deformación, que son pequeños patrones de resistencias utilizados como indicadores de tensión, obtenemos una señal eléctrica con la cual podemos obtener el valor de la fuerza. Los medidores están unidos a la viga que se deforma cuando se aplica peso, a su vez, deformando el indicador de tensión. Cuando se deforma el medidor de deformación la resistencia eléctrica cambia en proporción a la carga. Esto se logra por medio de un puente de Wheastone, el cual se utiliza para medir  resistencias desconocidas mediante el equilibrio de “brazos” del puente. Estos están construidos por cuatro resistencias que forman un circuito cerrado. En el caso de las celdas de carga las resistencias son los medidores de deformación. La celda de carga es ideal para poder medir variaciones sobre presión en una superficie o como simple transductor para medir un peso de algún elemento en contacto con el dispositivo, como es en nuestro caso. En este POST utilizaremos una celda de carga de 20Kg que es el valor máximo que podrá pesar nuestra balanza digital.

Celda de carga de 20Kg

El transmisor de celda de carga HX711 es una interface entre la celda de carga y nuestro Arduino, permitiendo poder leer el peso de manera sencilla. Internamente se encarga de la lectura del puente de Wheastone formado por los medidores de deformación de la celda de carga, convirtiendo la lectura analógica en digital con su conversor A/D interno de 24 bits. La comunicación con nuestro Arduino se realiza a través de los pines SCK (Reloj) y DT (Datos) que el transmisor de celda de carga HX711 tiene como SALIDAS. 

Transmisor de celda de carga HX711


Por otra parte las ENTRADAS del transmisor de celda de carga HX711 van cableadas a la celda de carga de la siguiente manera:


       -          Pin E+ del transmisor HX711 à Cable Rojo de la celda de carga de 20Kg.
-          Pin E- del transmisor HX711 à Cable Negro de la celda de carga de 20Kg.
-          Pin A- del transmisor HX711 à Cable Blanco de la celda de carga de 20Kg.
-          Pin A+ del transmisor HX711 à Cable Verde de la celda de carga de 20Kg.


Como se ha mencionado con anterioridad, toda la estructura de la balanza digital está fabricada en “DM”, que es un aglomerado elaborado con fibras de madera aglutinadas con resinas sintéticas mediante fuerte presión y calor, en seco, hasta alcanzar una densidad media, ideal para resistir grandes esfuerzos con un espesor reducido. Cabe decir que las uniones realizadas entre las tablas de DM o entre la celda de carga y las tablas de DM se realizan mediante tirafondos de 3mm de diámetro en diferentes longitudes y cabeza plana, además de aplicar adhesivo de contacto de secado rápido en todas las superficies a unir. Como se puede observar en la siguiente imagen, la celda de carga está dotada de una parte hueca (parte central de la celda de carga), que tiene que quedar en suspensión para su correcto funcionamiento, además hay que tener en cuenta que el sentido de la flecha indica la dirección de la fuerza o peso a aplicar a la hora de instalar la celda de carga dentro de la estructura de DM.

Despiece y montaje de la estructura de la balanza digital


Para programar correctamente nuestro Arduino y poder visualizar el peso real de los elementos que nos interesen a través del LCD 1602, lo primero que tenemos que hacer es cargar el programa llamado “Balanza_digital_calibrado.ino” para calibrar la balanza digital, que consiste básicamente en hallar el valor de la escala que se usará, es decir, hallar el factor de conversión para convertir el valor de lectura en un valor con unidades de peso. La escala es diferente para cada celda y cambia de acuerdo a la forma de instalar, al peso máximo o modelo de celda de carga, incluso así se trate del mismo modelo de celdas no necesariamente tienen el mismo valor de escala. Primero necesitamos conseguir un objeto con un peso conocido, en otras palabras, debemos saber el peso real del objeto que vamos a poner sobre la balanza digital. Se recomienda que el peso conocido sea cercano al valor máximo del rango de trabajo de la celda de carga. En nuestro caso usaremos un peso de 8Kg pues nuestra celda es de 20Kg, y por mi casa no he encontrado un peso conocido mayor.


Después de poner el peso en la balanza, a través del monitor serial se mostraran las lecturas del peso, son lecturas sin escalar, por lo que les deben aparecer números grandes. Muy importante es que el programa comience a funcionar sin el peso colocado en la balanza digital, pues al inicio de programa se calcula la tara. Posteriormente tendremos que abrir el monitor serie del IDE de Arduino, esperaremos a que el programa reste la tara, para finalmente poner el objeto de 8Kg (o el peso conocido más cercano a 20Kg que encontremos por casa) y así obtener una serie de valores a través del monitor serie.
  
Monitor serie

Con uno o el promedio de estos valores, que en mi caso he utilizado el valor 858000 para redondear, calculamos el valor de la escala que utilizaremos con la siguiente formula:


Fórmula para el cálculo de la ESCALA

Con este dato ya obtenido pasamos a programar el sketch que vamos a utilizar para pesar llamado “Balanza_digital_final.ino”, únicamente tendremos que sustituir la cantidad entre paréntesis de la línea de código  balanza.set_scale(107250) por el valor que hayamos obtenido nosotros, para que la balanza digital nos pese correctamente. Una vez modificado el valor, validaremos y cargaremos el programa en nuestro Arduino. Una vez que se esté ejecutando el programa en nuestro Arduino debemos de esperar unos instantes hasta que se quite la tara, para que posteriormente aparezca a través del LCD 1602 el peso de cualquier elemento que pongamos sobre la balanza digital, siempre y cuando este no exceda de los 20Kg.
Para realizar los dos programas anteriormente mencionados nos ayudaremos de las funciones ya programadas y definidas para trabajar con el transmisor de celda de carga HX711, que vienen incluidas dentro de la librería #include”HX711.h” que os podréis descargar desde uno de los primeros POST de este BLOG. A continuación os muestro una descripción de las principales funciones con las que se trabaja:
·         HX711(byte PinData, byte PinClock): Es el constructor del objeto HX711, se puede trabajar con cualquiera de los pines.
·         void tare(byte n): Establece el peso actual como el peso de tara, n indica el número de lecturas que se realizan para obtener la tara, por defecto n=10;
·         void set_scale(float scale): Establece el valor de la escala, que es el factor de conversión para convertir valor de lectura en un valor con unidades de peso. Por defecto es scale = 1;
·         long read(): Espera hasta que el dispositivo esté listo y devuelve la lectura del ADC del HX711.
·         long read_average(byte n): Realiza n veces la lectura del ADC y devuelve el promedio.
·         double get_value(byte n): Devuelve el valor actual restando el peso de tara. Equivalente a (read_average() - OFFSET) . Si se especifica un valor de n, devuelve el promedio de n lecturas.
·         float get_units(byte n): Devuelve el valor actual restado del peso de tara y dividido por la escala. Es equivalente a (get_value()/SCALE). Si se especifica un valor de n, devuelve el promedio de n lecturas.



Lista de Materiales:


·         Arduino UNO Rev.3.

·         Cable USB tipo A-B.

·         Celda de carga de 20Kg.

·         Transmisor de celda de carga HX711.

·         Módulo LCM 1602 I2C V1.

·         Display 16x2 LCD 1602.

·         Estructura de la balanza digital:
o   Tablas de DM:
§  1 de 150x200mm, 1 de 60x75mm y 1 de 60x60mm.
o   Tirafondos de cabeza plana:
§  4 de 3x20mm, 2 de 3x25mm y 2 de 3x35mm.
o   Adhesivo de contacto de secado rápido.

·         Protoboard.

·         Cables de conexión.



Código del programa:

·         Balanza_digital_calibrado:




·         Balanza_digital_final:




Video:

51 comentarios:

  1. hola buenas tardes, estoy armando su proyecto pero tengo una duda, porque dice que sirve hasta 20Kgs que tiene que ver si utilizo una celda de mayor capacidad? agradezco su colaboracion.

    ResponderEliminar
    Respuestas
    1. Claramente porque yo utilizo una celda de carga de 20kg. Si utilizas una mayor podrás pesar mayores cantidades

      Eliminar
  2. ok, muchas gracias por la aclaracion pense que era algun tipo de restriccion, ahora que he intentado replicar su proyecto me encuentro que no tengo la misma libreria y no me reconoce balanza.set_Scale me puede colaborar con cual libreria trabaaj ud y si no es mucha molestia una aclaracion si necesitara conectar dos celdas de carga al mismo arduino como podria hacerlo, le agradezco toda su colaboracion

    ResponderEliminar
    Respuestas
    1. Si quieres conectar dos celdas de carga en un mismo Arduino te hacen falta dos HX711 y en la programación tienes que crear dos objetos de ese tipo con las salidas DT y SCK conectadas en diferentes entradas analogicas, por ejemplo para la primera celda A0 y A1, y para la segunda A2 y A3. Las librerías se encuentran dentro de uni de los primeros POST del BLOG (Diciembre de 2015). Saludos

      Eliminar
    2. disculpa tendras el link de la libreria que utilisaste?

      Eliminar
  3. Hola e seguido tu post y trato de implementar el peso de la celda en un pequeño proyecto de auromatizacion pero al tratar de encontrar el valor de encontrar la escala el valor de tara me da 0 o negativo estoy asiendo todo al pie de la letra que ago mal??

    ResponderEliminar
    Respuestas
    1. No lo se. Revisa las conexiones y la alimentación de la celda de carga y del conversor AD

      Eliminar
  4. Hola que tal, me podrías proporcionar los diagramas de conexiones?

    ResponderEliminar
    Respuestas
    1. iano del Campo García dijo...
      Están dentro del programa que tienes en descarga directa. Se encuentran justo debajo de la cabecera del código. Saludos

      Eliminar
  5. hola como esta, he seguido el codigo pero necesito calibrar una celda de carga de 1kg como hago?

    ResponderEliminar
  6. Hola tengo una duda, este codigo puede ser utilizado con arduino ,mega??

    ResponderEliminar
  7. Yo tengo ese mismo codigo con una celda de 200kg y la calibro y funciona bien. La pregunta es la siguiente. ¿Porque luego de un tiempo encendida la celda ya empieza a pesar con un faltante (patron de 20 kg y pesa 19.7 o 19.8) o si la enciendo otro dia la calibracion realizada dias anteriores no sirve. Que debo hcer para que la calibracion sirva de forma definitiva?

    ResponderEliminar
  8. Sólo quiero ver esquema de modo gráfico ya que así por medio de esas líneas no puedo armar este proyecto, osea si teienes el esquema en el programa Fritzing u algo así estimado !! le agradeceré de antemano...

    ResponderEliminar
  9. Me puedes pasar el código de cómo hago que se ejecute un código cuando llegue a un peso determinado, en este caso 100g y que ese valor se pueda modificar

    ResponderEliminar
  10. Respuestas
    1. http://miarduinounotieneunblog.blogspot.com.es/2015/12/anadiendo-las-librerias.html

      Eliminar
  11. hola me podrías explicar como conecto la lcd

    ResponderEliminar
  12. Tu LCD 1602 tiene que tener soldado un modulo conversor I2C a sus pines de datos y control. Se hace de manera directa puesto que ya vienen preparados para tal función. Una vez añadido el I2C simplemente tienes que unir los pines SDA y SCL del módulo a los pines I2C de Arduino y alimentar correctamente el LCD. Te recomiendo que visites el POST donde lo explico con más detalle (Diciembre 2015) debtro del BLOG.

    ResponderEliminar
  13. Hola implemente tu programación pero me sale el siguiente error y no se que hacer 'Clase Q2HX711' no tiene ningún miembro llamado 'set_scale'

    ResponderEliminar
  14. Carga las librerías del siguiente enlace: http://miarduinounotieneunblog.blogspot.com.es/2015/12/anadiendo-las-librerias.html

    ResponderEliminar
  15. Hello.as I can not find you the LiquidCrystal_I2C library.h,without it is not working sketch.please give a direct link.

    ResponderEliminar
    Respuestas
    1. http://miarduinounotieneunblog.blogspot.com.es/2015/12/anadiendo-las-librerias.html?m=1

      Eliminar
  16. ya cargue las librerías y me aparece el mismo error me podrías ayudar es urgente exit status 1
    'class Q2HX711' has no member named 'scale'

    ResponderEliminar
  17. I do not understand how where to download the library at this link

    ResponderEliminar
  18. yo como no entiendo de donde descargar la biblioteca en este enlace

    ResponderEliminar
  19. Hola, me pueden ayudar estoy utilizando una celda de 500kg con el HX711, y me esta dando variaciones de 10 hasta 50 gramos con respecto al patrón de 20kg que utilizo para calibrar la bascula.

    Gracias.

    ResponderEliminar
  20. Si es de 500kg es recomendable calibrarla con un peso patron lo más cercano a 500kg y no de 20kg...

    ResponderEliminar
  21. Buen día, Mariano gracias por responder, tiene lógica tu comentario... pero ahora tengo otro inconveniente es el siguiente... cuando la bascula no tiene ningún peso encima de la celda debería quedar en cero, lo hace por unos segundos luego en pieza a variar hasta quedar en -16 gramos, me puedes guiar mil gracias.

    ResponderEliminar
    Respuestas
    1. Eso lo puedes solucionar con un if. If (peso<0) peso =0; para que nunca pueda tener una tara negativa.

      Eliminar
    2. Buenas, me podrias enviar a este correo mendozaoliva22@hotmail.com el codigo donde incluya la parte de que la tara no sea negativa. Agradecería tu Respuesta.

      Eliminar
  22. ayuda por favor,no la puedo encontrar por su referencia a la biblioteca.puede que me envía al correo electrónico evgeniy1966@yandex.ru

    ResponderEliminar
    Respuestas
    1. http://miarduinounotieneunblog.blogspot.com.es/2015/12/anadiendo-las-librerias.html?m=1

      Eliminar
  23. disculpa tengo una celda de carga de 50kg pero solo tiene 3 cables (negro.rojo.blanco) como lo conecto con el hx711 y cual seria el programa? me puedes ayudar porfabor

    ResponderEliminar
    Respuestas
    1. Envíame la referencia o modelo de la celda de carga que estás utilizando para intentar ayudarte

      Eliminar
    2. http://www.usinainfo.com.br/sensores-para-arduino/sensor-de-peso-celula-de-peso-50kg-para-arduino-2573.html

      en ese enlace esta la celda de carga que tengo
      espero y me puedas ayudar llevo 2 semanas con el proyecto y mi profesor se esta enojando

      Eliminar
  24. Respuestas
    1. no lo tengo ni en spam
      me lo podrias volver a enviar porfavor

      Eliminar
    2. Ya no lo tengo yo tampoco. Te lo envíe hace ya meses

      Eliminar
  25. Hola ¿Qué voltajes de entrada analógica maneja el HX711? Porque estoy con un proyecto que utiliza un sensor óptico que entrega de 0 a 5V.

    ResponderEliminar
    Respuestas
    1. No estoy muy seguro pero las celdas de carga (sensores de peso) normalmente se alimentan con 5v en excitación y regresan 2.3v por las señales.

      Eliminar
  26. Hola amigo una consulta porque me sale error diciendo que esta variable no esta definida "POSITIVE"

    // Creación del objeto para el LCD con comunicación I2C
    LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

    ResponderEliminar
    Respuestas
    1. Instala mis librerías. http://miarduinounotieneunblog.blogspot.com.es/2015/12/anadiendo-las-librerias.html

      Eliminar
  27. disculpa tengo un problema no me muestra nada en el lcd ni el monitor serial cuando ejecuto el programa final

    ResponderEliminar
    Respuestas
    1. Si solo me dices eso no se cual puede ser tu problema. Revisa las conexiones y lo mostrado en el POST. Saludos

      Eliminar
  28. hola, tengo una cosulta estoy haciendo una bascula con capacidad de 80kg pero, se pueden utilizar 4 galgas de 20kg?? al igual que se pueden unir para hacer la sumatoria??

    ResponderEliminar
  29. Buenas tardes, si deseo utilizar una celda de 200kg, seria el mismo programa? y otra duda se podria implementar un push button para el cambio de kg a libras? Gracias

    ResponderEliminar
    Respuestas
    1. No soy el del Blog, pero sí se puede utilizar una celda de 200kg sólo que tu resolución debe cambiar ya que si intentas pesar gramos con esta será muy inestable.

      También podrías agregar ese botón que mencionas con una simple operación sabiendo que 1kg equivale a 2.2 libras. Saludos

      Eliminar
  30. Yo tengo un programa similar, sólo que no logro como hacer para hacer el peso más estable. ¿Alguna idea?

    ResponderEliminar