Necesitamos ayuda, para un proyecto de una bascula somos novatos en esto

#include <HX711.h> //libreria de celda de carga
#include <LiquidCrystal_I2C.h> //libreria de LCD I2C
#include <LiquidCrystal.h> //libreria de LCD
#include <EEPROM.h> //libreria EEPROM

#define DOUT A1 //Entradas analogicas para la celda de carga
#define CLK A2 // Control de Apagado (Activo Alto), entrada de reloj en serie

HX711 balanza; //Declarar la variable

LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //Pines utilizados por el LCD
int tecla = A0; // Devuelve a un dato numerico
unsigned long direccion = 0; // Declara una variable como tipo long
unsigned long refLSB = -103434.00 ; // Declara una variable como tipo long
unsigned long refMSB = 0; // Declara una variable como tipo long
unsigned long med; // Declara una variable como tipo long

void setup() // Se utiliza para iniciar los modos de trabajo de los pines o el puerto serie
{
// Inicialización serial
Serial.begin(19200); // Abre el puerto serie, configurando la velocidad en 19200bps
balanza.begin (DOUT, CLK); //* Abre el puerto *

lcd.begin(16,2); // Inicialización del LCD

Reset(); // Inicialización de la celda de carga con un reset
}

void loop() // Ejecuta en forma ciclica y posibilita que el programa este respondiendo continuamente.
{

Peso(); //Lectura de Peso

lcd.setCursor(0, 1); // Funcion de los botones
int valor = analogRead(tecla); // Devuelve a un dato numerico

if (valor >635 && valor<645) //Start
{
lcd.clear(); // Limpia la LCD
Peso(); // Lectura de peso
while (balanza.get_units(10) <= refLSB) // Hasta que el valor de la balanza sea mayor o igual al valor de referencia digitado por el usuario
{
digitalWrite (3, HIGH); // Encender
lcd.setCursor (0,0); // Funcion de los botones
Peso(); // Lectura de peso
lcd.setCursor (0,1); // Funcion de los botones
lcd.print ("Peso Ref:"); // Imprime un mensaje en la LCD "Peso referido"
lcd.print (refLSB); // Imprime un mensaje en la LCD "refLSB"
delay(50); // Comando de tiempo de espera en ms

  }
  lcd.clear();                                    // Limpiar LCD 
  digitalWrite (3, LOW);                          // Apagar
  lcd.setCursor (0,1);                            // Fubcion de los botones 
  lcd.print ("LLenado completado!");              // Imprime un mensaje " Llenado completado"
  delay(50);                                      // Comando de tiempo de espera en ms 
  lcd.clear();                                    // Limpiar LCD 
  delay(50);                                      // Comando de tiempo de espera en ms 
  Peso();                                         // Lectura de peso 

}
else if (valor == 0) //Tarar
{
lcd.clear(); //Limpiar LCD
lcd.print("Tarando..."); // Imprime "Tareando..."
balanza.tare(balanza.get_units(10)); //Define el peso de tara
delay(100); // Comando de tiempo de espera en ms
lcd.clear(); //Limpiar LCD
lcd.setCursor (0,0); // Funciones de los botones
lcd.print(balanza.get_units(10)); // imprime el valor de la balanza con todo y unidades
lcd.setCursor (0,1); // Funcion de los botones

lcd.print ("Tara completada");               // Imprime Tara completada
delay(50);                                   // Comando de tiempo de espera en ms 
lcd.clear();                                 //Limpia LCD 
Peso();                                      // Lectura Peso                         

}

else if (valor >405 && valor<415) //Set
{
lcd.clear(); // Limpia LCD
lcd.setCursor(0,0); // Funcion de los botones
lcd.print("Ref:"); // Imprime "Ref"
delay(100); // Comando de tiempo de espera en ms

lcd.setCursor (0,1);                            //Inicializa la variable en 0  
lcd.print (refLSB);                             // Imprimir "refLSB" 
lcd.print ("g");                                // Imprimir "gramos"

}

else if(valor >95 && valor<105) //Boton UP
{
int med = UP(); // Devuelve a un dato numerico de up
}
else if(valor >250 && valor<260) //Boton DOWN
{
int med = DOWN(); // Devuelve a un dato numerico de down
}

// else if (valor >405 && valor<415 && refLSB != 0)
// {
// med = refLSB;
// lcd.setCursor(0,1);
// lcd.print("Peso:");
// lcd.print(med);
// }
}
void Peso() // Iniciar el proceso de lectura de peso
{
//Lectura de peso
lcd.setCursor(0,0); // Funcion de botones
lcd.print("Peso: "); // Imprime peso
lcd.print(balanza.get_units(10),0); // Imprime valor de balanza en unidades
lcd.println(" g"); // Imprime gramos
delay(100); // Comando de tiempo de espera en ms
}

void Reset() // Inicia el rpoceso de reset
{
int escala = 529.25; //depende de la escala
lcd.setCursor(0,0); // Funcion de los botones
lcd.print("ADC:"); // CONVERSOR ANALOGO DIGITAL
lcd.println(balanza.read()); //Lee el valor de la balanza
delay(100); // Comando de tiempo de espera en ms
lcd.clear(); // Limpia LCD
lcd.println("Despeje"); // Imprime " Despeje"
delay(100); // Comando de tiempo de espera en ms
lcd.clear(); // Limpia LCD
lcd.println("Espere..."); // Imprime Espere
delay(100); // Comando de tiempo de espera en ms
lcd.clear(); // Limpia pantalla
EEPROM.get(0,refLSB); // Digitar el dato de la EEPROM
refLSB = -103434.00 ; //* Bits menos significativo
EEPROM.update(0,refLSB); // Digitar el bit menos significativo en la EEPROM
lcd.println("..."); // Imprime ...
delay(100); // Comando de tiempo de espera en ms
lcd.clear(); // Limpia LCD
balanza.set_scale(escala); // Establece la escala
balanza.tare(50); //El peso actual es considerado Tara. Depende del peso de la plataforma
lcd.println(" Listo"); // Imprime Listo
delay(100); // Comando de tiempo de espera en ms
lcd.clear(); // Limpiar LCD
lcd.println(balanza.get_value(10),0); //Verifica que el valor de la balanza haya sido tarado
delay(100); // Comando de tiempo de espera en ms
}

int UP () // Se declara una variable
{
lcd.print (" "); // Imprimir un mensaje
EEPROM.get(direccion,refLSB); // Agregar un valor en la EEPROM
refLSB = refLSB + 1; // Valor de la variable aumentandole un 1
lcd.setCursor(0,1); // Funcion de botones
lcd.print (refLSB); // Imprimir el bit menos significativo
lcd.print ("g"); // Imprimir gramos
EEPROM.update(direccion ,refLSB); // Digitar el valor de la direccion para la EEPROM
delay(50); // Comando de tiempo de espera en ms
}
int DOWN() // Se declara una variable
{
refLSB = 0; // *Bits menos significativo
EEPROM.update(0,refLSB); //Digitar un valor a la EEPROM
delay(50); // Comando de tiempo de espera en ms
lcd.print (" "); // Imprime un mensaje la LCD
EEPROM.get(0,refLSB); // Digitar un valor a la EEPROM
refLSB = refLSB - 1; // Declarar un valor a la variable restandole 1
lcd.setCursor(0,1); // Funcion de botones
lcd.print (refLSB); // Imprime un valor
lcd.print ("g"); //Imprime gramos
EEPROM.update(0,refLSB); // Digitar un valor en la EEPROM
delay(50); //// Comando de tiempo de espera en ms
}

Estamos realizando una programación en la cual consiste pesar líquidos, con una bascula. Nuestro Hardware del circuito tiene los siguientes elementos: Arduino Genuino 1, LCD 16,2 KEYPAD SHIELD FOR ARDUINO, amplificador Hx711 y una celda de carga de 50 kg como prueba. Nuestro problema principal es que la celda de carga no nos genera mediciones con sentido, salen números negativos y cuenta aleatoriamente.

¿Cómo se puede solucionar? ¡AYUDA!

Moderador:
Sean bienvenidos al foro Arduino en Español.
Lamentablemente debo llamarles la atención por dos faltas.

1) Deben editar el título. No se permiten palabras como "Necesitamos ayuda para un proyecto, somos novatos en esto". Son palabras irrelevantes. Usen algo que coherente con la naturaleza de su consulta.
2) Los códigos no se pegan como si nada, deben ir con etiquetas.
Por ambas cuestiones, les pido lean las normas del foro y editen.
Si no entienden, miren otros hilos y ya verán a qué me refiero.
Gracias.

Respondiendo a su consulta y espero que no olviden lo que acabo de pedirles.
Toda librería HX711 tiene ejemplos para Calibrar y otro para mostrar lecturas.
Les recomiendo que calibren su celda de carga con un valor conocido, y testeado en otra balanza de la mejor precisión posible.
El programa de calibración les dirá, por ejemplo
Iniciar la tara de la balanza, o sea, poner a 0 la misma.
Ingrese el peso conocido.
Ahora guarde dicho valor en la EEPROM.
Entonces con esos datos, cuando inicien sin el peso, su sistema estará listo para mostrar correctamente los pesos en Kg.

Agrego a lo que les dice @Surbyte que la librería LiquidCrystal_I2C no la necesitan, quiten del código la línea

#include <LiquidCrystal_I2C.h> //libreria de LCD I2C

Saludos

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.