Proyecto Electronico .com

Diseños con leds, alarmas, compuertas lógicas, antenas y proyectos de electrónica en general


Hacer balanza o báscula electrónica con arduino

HX710B con Arduino (o HX710A)

El HX710 es un circuito integrado diseñado para balanzas o básculas electrónicas utilizando celda de carga (sensor bridge).

Estas celdas de carga son las más utilizadas en los sistemas de pesaje domésticos, comercios, así como los industriales.

En este proyecto utilizo la celda de carga de una báscula china similar a esta:

balanza electronica

En algunas ocasiones comprar celdas de carga es incómodo o caro y he comprado una báscula solo para utilizar la celda de carga, aunque hay gran variedad por internet.

La que más he utilizado es de maximo 30 Kg. para llenadoras automáticas de bolsas, para 2Kg. o 5Kg. que diseño con Arduinos.

celda de carga en puente

El HX710B la primera vez que lo vi fue en una báscula china y lo que me sorprendió fue la resolución (24 bits), desde ese momento decidí que debía aprender a utilizarlo, ya que me pareció el más adecuado para mis trabajos con báscula electrónicas.

Las primeras pruebas las realizé con una Raspberry pi, pude utilizarla pero algunas lecturas eran erroneas, creo que por la velocidad de lecturas en los GPios, entonces lo resolví con Arduino y en miles de lecturas no me ha presentado errores.

Las conexiones del HX710B son muy simples:

Raspberry Pi Modelo B


Las resistencias de 100 ohmios entre la celda de carga y el HX710 junto con un capacitor cerámico de 0,1uF (104) forman un filtro para limitar algunas interferencias, he visto de 47 ohmios en básculas comerciales y el fabricante muestra como ejemplo 200 ohmios.

El HX710A tanto como el HX710B pueden trabajar de 2.6V a 5.5V, la entrada de voltaje análoga AVDD no debe superar al voltaje digital DVDD

El voltaje de referencia VREF debe de ser superior a 1.8V y no superar el voltaje AVDD

Las patillas que van hacia el Arduino llevan una resistencia de 470 ohmios cada una, en los diagramas de ejemplo del fabricante no se muestran ya que no son indispensables, aunque yo las utilizo porque todas las básculas comerciales las tienen (HX710 a PIC), y como no estorban me parece que pueden proteger las entradas.

Para este proyecto utilizo un Arduino Pro mini a 8Mhz, 3.3V.
Yo regulo el voltaje aparte ya que no quiero dañar el regulador propio del Arduino en caso de un accidente con los cables. El mejor regulador es el L4931-33 ya que puede dar los 3.3 voltios a partir de 3.9 voltios, otros como el L78L33 necesitan muy cerca de 5 voltios para dar 3.3V de manera estable y soporta menos mA.

Programa en el Arduino

Configuramos un pin como salida para que haga de reloj(PD_SCK)
y uno como entrada para leer los datos del HX710 (DOUT)

Yo escogí los pines Digitales 2 y 3 pero puede ser cualquiera que pueda utilizarse como digital.

Estando el reloj en negativo(LOW) hay que esperar que el chip esté listo, que es cuando la salida se pone a negativo también, en ese momento se hace la secuencia de 25 bits (24 de datos, 1 de control)

Debemos hacer que los pulsos de reloj no sean más rápidos que 0,2µseg. y cuando está en positivo no exceda los 50 µseg. (con 60 µseg. el HX710 entra en estado apagado).

Como el primer bit es el más significativo, los bits se van escribiendo desde el bit 23 al bit 0 con bitSet() en una variable tipo unsigned long.


#include "Arduino.h"
#define DOUT 2
#define PD_SCK 3
#define factor 0.00959 //40Kg china

unsigned long value;
long weight;
  
long get_weight()
{
   digitalWrite(PD_SCK, LOW);
   delayMicroseconds(1);
   // wait for the chip to become ready:
   while (digitalRead(DOUT) == HIGH);
   value = 0;
  for (int i = 23; i > -1; i--){ //bitWrite23 =bit24 
   digitalWrite(PD_SCK, HIGH);
   delayMicroseconds(1);
   digitalWrite(PD_SCK, LOW);
   if (digitalRead(DOUT) == HIGH){bitSet(value, i);}
   }  
    // para que siga leyendo muestras a 10Hz: 
    digitalWrite(PD_SCK, HIGH);
    delayMicroseconds(1);
    digitalWrite(PD_SCK, LOW);
    delayMicroseconds(1);
 
 return value; // todos 1 = 1677215
}

void setup() {
   Serial.begin(9600);
   pinMode(DOUT, INPUT);
   pinMode(PD_SCK, OUTPUT);
}

void loop() {
  weight = get_weight();
  float redondeado;
  redondeado = round(weight*factor);
  Serial.println(redondeado,0);
  
}



El valor llamado factor es el factor de multiplicación de cada bit, en este caso convierte el valor devuelto por el chip a gramos con la celda de carga empleada en mi última prueba.

En este caso el valor es devuelto por el puerto serial para ser "monitoreado"

Ya desplegarlo en una pantalla o display es otro tema.

Estos datos son reales y probados, mi último proyecto que utiliza este código fue una llenadora para bolsas de 2 Kilos con opción para 1 Kgr y 5 Kgr.

Le muestro el panel de control del proyecto:

Bascula con arduino, panel de control

Panel de bascula llenadora con arduino


TAG: Hacer una báscula electrónica con Arduino, balanza o romana

TI2-CAW

.Arriba.


.Menú: Proyectos de electronica.

proyectos electrónicos