En el post de hoy vamos a trabajar con una celda de carga de 20Kg, un transmisor de celda de carga HX711 y un display LCD 1602, frecuentemente utilizado a lo largo de todo mis publicaciones. También utilizaré 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. Esto es necesario para establecer la comunicación con nuestro Arduino y así podamos interpretar las señales eléctricas recibidas para mostrarlas a través del LCD 1602 el peso real de los elementos que nos interesen.
Celdas de carga
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 (o voltaje). 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.
Los puentes de Wheastone 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.
En este post utilizaremos una celda de carga de 20Kg que es el valor máximo que podrá pesar nuestra balanza digital.
Comunicación con Arduino
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 ADC 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.
-
- 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.
Programación en Arduino
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.
Básicamente esto consiste 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.
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. Cuando 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 16×2 LCD 1602
- Estructura de la balanza digital:
- Tablas de DM:
- 1 de 150x200mm, 1 de 60x75mm y 1 de 60x60mm
- Tirafondos de cabeza plana:
- 4 de 3x20mm, 2 de 3x25mm y 2 de 3x35mm
- Adhesivo de contacto de secado rápido
- Tablas de DM:
- Protoboard
- Cables de conexión
Código del programa
Balanza_digital_calibrado
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
/* TITULO: Balanza digital de hasta 20Kg con celda de carga y transmisor HX711 - Balanza_digital_calibrado AUTOR: MARIANO DEL CAMPO GARCÍA (@2016) --> INGENIERO TÉCNICO INDUSTRIAL ESPECIALIDAD ELECTRÓNICA - FACEBOOK: https://www.facebook.com/mariano.delcampogarcia - TWITTER: https://twitter.com/MarianoCampoGa - CORREO: [email protected] DESCRIPCIÓN DEL PROGRAMA Con este programa simplemente vamos a obtener un valor a través del monitor serie para poder calcular la ESCALA necesaria para calibrar la balanza digital, es decir, convertir un valor sin sentido alguno en un peso en Kg. Dicho valor de ESCALA le debemos de introducir en el programa "Balanza_digital_final", justo en la línea de código "balanza.set_scale(ESCALA)". ESQUEMA DE CONEXION +-----+ +----[PWR]-------------------| USB |--+ | +-----+ | | GND/RST2 [ ][ ] | | MOSI2/SCK2 [ ][ ] A5/SCL[ ] | | 5V/MISO2 [ ][ ] A4/SDA[ ] | | AREF[ ] | | GND[ ] | | [ ]N/C SCK/13[ ] | | [ ]IOREF MISO/12[ ] | | [ ]RST MOSI/11[ ]~| | [ ]3V3 +---+ 10[ ]~| | [ ]5v -| A |- 9[ ]~| | [ ]GND -| R |- 8[ ] | | [ ]GND -| D |- | | [ ]Vin -| U |- 7[ ] | | -| I |- 6[ ]~| SCK | [ ]A0 -| N |- 5[ ]~| DT | [ ]A1 -| O |- 4[ ] | | [ ]A2 +---+ INT1/3[ ]~| | [ ]A3 INT0/2[ ] | | [ ]A4/SDA RST SCK MISO TX>1[ ] | | [ ]A5/SCL [ ] [ ] [ ] RX<0[ ] | | [ ] [ ] [ ] | | UNO_R3 GND MOSI 5V ____________/ \_______________________/ NOTAS: - Conexiones del transmisor de celda de carga HX711: - ALIMENTACIÓN: - Pin VCC del HX711 --> +5V de Arduino. - Pin GND del HX711 --> GND de Arduino. - ENTRADAS: - Pin E+ del HX711 --> Cable Rojo de la celda de carga de 20Kg. - Pin E- del HX711 --> Cable Negro de la celda de carga de 20Kg. - Pin A- del HX711 --> Cable Blanco de la celda de carga de 20Kg. - Pin A+ del HX711 --> Cable Verde de la celda de carga de 20Kg. - SALIDAS: - Pin SCK del HX711 --> Pin analógico A0 de Arduino. - Pin DT del HX711 --> Pin Analógico A1 de Arduino. */ // Librería para utilizar el transmisor de celda de carga HX711 #include "HX711.h" #define DT A1 // Pin analógico A1 para el pin DT del transmisor de celda de carga HX711 #define SCK A0 // Pin analógico A0 para el pin SCK del transmisor de celda de carga HX711 // Creación del objeto para el transmisor de celda de carga HX711 HX711 balanza(DT, SCK); void setup() { Serial.begin(9600); // Comienzo de la comunicación con el monitor serie Serial.print("Lectura del valor del ADC:t"); Serial.println(balanza.read()); // Comienzo de la lectura de la balanza digital Serial.println("No ponga ningun objeto sobre la balanza"); Serial.println("Destarando..."); balanza.set_scale(); // La escala por defecto es 1 balanza.tare(20); // El peso actual es considerado Tara. Serial.println("Coloque un peso conocido:"); } void loop() { Serial.print("Valor de lectura: t"); Serial.println(balanza.get_value(10),0); // Se obtiene el valor necesario para calcular la ESCALA delay(100); } |
Balanza_digital_final
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
/* TITULO: Balanza digital de hasta 20Kg con celda de carga y transmisor HX711 - Balanza_digital_final AUTOR: MARIANO DEL CAMPO GARCÍA (@2016) --> INGENIERO TÉCNICO INDUSTRIAL ESPECIALIDAD ELECTRÓNICA - FACEBOOK: https://www.facebook.com/mariano.delcampogarcia - TWITTER: https://twitter.com/MarianoCampoGa - CORREO: [email protected] DESCRIPCIÓN DEL PROGRAMA Con este programa, al modificar la línea de código "balanza.set_scale(ESCALA)", por el valor de ESCALA calculado anteriormente, podremos pesar elementos de hasta 20Kg con nuestra balanza digital y los visualizaremos a través del LCD 1602 que tenemos conectado a nuestro Arduino. ESQUEMA DE CONEXION +-----+ +----[PWR]-------------------| USB |--+ | +-----+ | | GND/RST2 [ ][ ] | | MOSI2/SCK2 [ ][ ] A5/SCL[ ] | SCL del módulo I2C conectado al LCD 1602 | 5V/MISO2 [ ][ ] A4/SDA[ ] | SDA del módulo I2C conectado al LCD 1602 | AREF[ ] | | GND[ ] | | [ ]N/C SCK/13[ ] | | [ ]IOREF MISO/12[ ] | | [ ]RST MOSI/11[ ]~| | [ ]3V3 +---+ 10[ ]~| | [ ]5v -| A |- 9[ ]~| | [ ]GND -| R |- 8[ ] | | [ ]GND -| D |- | | [ ]Vin -| U |- 7[ ] | | -| I |- 6[ ]~| SCK | [ ]A0 -| N |- 5[ ]~| DT | [ ]A1 -| O |- 4[ ] | | [ ]A2 +---+ INT1/3[ ]~| | [ ]A3 INT0/2[ ] | | [ ]A4/SDA RST SCK MISO TX>1[ ] | | [ ]A5/SCL [ ] [ ] [ ] RX<0[ ] | | [ ] [ ] [ ] | | UNO_R3 GND MOSI 5V ____________/ \_______________________/ NOTAS: - La alimentación y la masa del módulo LCM 1602 I2C V1 van directamente conectadas a VCC (+5V) y GND respectivamente. - Conexiones del transmisor de celda de carga HX711: - ALIMENTACIÓN: - Pin VCC del HX711 --> +5V de Arduino. - Pin GND del HX711 --> GND de Arduino. - ENTRADAS: - Pin E+ del HX711 --> Cable Rojo de la celda de carga de 20Kg. - Pin E- del HX711 --> Cable Negro de la celda de carga de 20Kg. - Pin A- del HX711 --> Cable Blanco de la celda de carga de 20Kg. - Pin A+ del HX711 --> Cable Verde de la celda de carga de 20Kg. - SALIDAS: - Pin SCK del HX711 --> Pin analógico A0 de Arduino. - Pin DT del HX711 --> Pin Analógico A1 de Arduino. */ // Librerías necesarias para el LCD 1602 con comunicación I2C #include <Wire.h> #include <LiquidCrystal_I2C.h> // Librería para utilizar el transmisor de celda de carga HX711 #include "HX711.h" #define DT A1 // Pin analógico A1 para el pin DT del transmisor de celda de carga HX711 #define SCK A0 // Pin analógico A0 para el pin SCK del transmisor de celda de carga HX711 // Creación del objeto para el LCD con comunicación I2C LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Creación del objeto para el transmisor de celda de carga HX711 HX711 balanza(DT, SCK); void setup() { Serial.begin(9600); // Comienzo de la comunicación con el monitor serie lcd.begin(16,2); // Comienzo de la comunicación con el LCD 1602 con comunicación I2C Serial.print("Lectura del valor del ADC:t"); Serial.println(balanza.read()); // Comienzo de la lectura de la balanza digital Serial.println("No ponga ningun objeto sobre la balanza"); Serial.println("Destarando..."); Serial.println("..."); balanza.set_scale(107250); // Establecemos la ESCALA calculada anteriormente balanza.tare(20); // El peso actual es considerado Tara. lcd.setCursor(0,0); lcd.print("BALANZA DIGITAL"); lcd.setCursor(0,1); lcd.print("Listo para pesar"); delay(5000); // Esperamos 5 segundos para comenzar a pesar } void loop() { lcd.setCursor(0,0); lcd.print("BALANZA DIGITAL"); lcd.setCursor(0,1); lcd.print("Peso: "); lcd.print(balanza.get_units(20),3); // Se obtiene el valor real del peso en Kg del elemento lcd.print(" kg "); } |