Como hacer una bascula con arduino conectado a un plc Siemens

Soy profesor y querria hacer un bascula conectado a un plc Siemens para mis alumnos. El codigo que he realizado es el que he pegado al final, pero me da error lo ultimo del void loop y mas exactamente esto de a continuacion:
// Comprobar que el peso ha sido alcanzado
if (peso <= 240)
digitalWrite(rele,1);
else
digitalWrite(rele,0);

Alguien me puede ayudar, pues soy novato en este mundillo
Un saludo

Codigo completo

//Incluye las librerías
#include "HX711.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <EEPROM.h>

//Define las variables globales
byte DT=3;
byte CLK=2;

byte calibracion = 7;
byte rele=9;
byte tara = 5;
int peso_conocido = 500;
long escala;

//Crear el objeto lcd dirección 0x3F y 16 columnas x 2 filas
LiquidCrystal_I2C lcd(0x27,16,2);

//Crear el objeto balanza
HX711 balanza;

//Función de Anti-debounce (Evitar el rebote del pulsador)
void anti_debounce(byte boton){
delay(100);
while(digitalRead(boton)); //Anti-Rebote
delay(100);
}

//Función de calibración y ajuste
void calibration(){

//int i = 0,cal=1;
long adc_lecture;

// Escribimos el Mensaje en el LCD
lcd.setCursor(2, 0);
lcd.print("Calibracion de");
lcd.setCursor(4, 1);
lcd.print("Balanza");
delay(1500);
balanza.read();
balanza.set_scale(); //La escala por defecto es 1
balanza.tare(20); //El peso actual es considerado Tara.

lcd.clear();

//Inicia el proceso de calibración

lcd.setCursor(1, 0);
lcd.print("Peso Conocido:");
lcd.setCursor(1, 1);
lcd.print(peso_conocido);
lcd.print(" g        ");

  //Lee el valor del HX711
  adc_lecture = balanza.get_value(100);

  //Calcula la escala con el valor leido dividido el peso conocido
  escala = adc_lecture / peso_conocido;

  //Guarda la escala en la EEPROM
  EEPROM.put( 0, escala );
  delay(100);
 
  lcd.clear();
}
void setup() {

//Configura la balanza
balanza.begin(DT, CLK);

//Configura los botones
pinMode(calibracion, INPUT);
pinMode(tara, OUTPUT);
pinMode(rele, OUTPUT);

// Inicializar el LCD
lcd.init();

//Encender la luz de fondo.
lcd.backlight();

//Lee el valor de la escala en la EEPROM
EEPROM.get( 0, escala );

//Pregunta si se desea entrar en calibración
if(digitalRead(calibracion))
calibration();

//Mensaje inicial en el LCD
lcd.setCursor(1, 0);
lcd.print("Retire el Peso");
lcd.setCursor(1, 1);
lcd.print("y Espere");
delay(2000);
balanza.set_scale(escala); // Establecemos la escala
balanza.tare(20); //El peso actual es considerado Tara.

lcd.clear();
lcd.setCursor(1, 0);
lcd.print("Listo....");
delay(1000);
lcd.clear();
}

void loop() {
float peso;

//Mide el peso de la balanza
peso = balanza.get_units(10);

//Muestra el resultado
lcd.setCursor(1, 0);
lcd.print("Peso: ");
lcd.print(peso,0);
lcd.println(" g ");
delay(5);

//programa para tarar

if(digitalRead(tara)){  
  anti_debounce(tara);
  balanza.tare(10);  //El peso actual es considerado Tara.
}

}

//Comprobar que la tara ha sido completada con exito
if (balanza.getTareStatus() == true) {
digitalWrite(tare,1);
Serial.println("Tara completada");
lcd.setCursor(0,1);
lcd.print("tara completada");
delay(1500);
}
else
digitalWrite(tare,0);

// Comprobar que el peso ha sido alcanzado
if (peso <= 240)
digitalWrite(rele,1);

else
digitalWrite(rele,0);

Su publicacion se MUEVE a su ubicacion actual ya que es mas adecuada.

He formateado su código y lo he copiado entre las "etiquetas de código" para que sea más fácil de leer y seguir procesando :wink:

//Incluye las librerías
#include "HX711.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <EEPROM.h>

//Define las variables globales
byte DT = 3;
byte CLK = 2;

byte calibracion = 7;
byte rele = 9;
byte tara = 5;
int peso_conocido = 500;
long escala;

//Crear el objeto lcd dirección 0x3F y 16 columnas x 2 filas
LiquidCrystal_I2C lcd(0x27, 16, 2);

//Crear el objeto balanza
HX711 balanza;

//Función de Anti-debounce (Evitar el rebote del pulsador)
void anti_debounce(byte boton) {
  delay(100);
  while (digitalRead(boton)); //Anti-Rebote
  delay(100);
}

//Función de calibración y ajuste
void calibration() {

  //int i = 0,cal=1;
  long adc_lecture;

  // Escribimos el Mensaje en el LCD
  lcd.setCursor(2, 0);
  lcd.print("Calibracion de");
  lcd.setCursor(4, 1);
  lcd.print("Balanza");
  delay(1500);
  balanza.read();
  balanza.set_scale(); //La escala por defecto es 1
  balanza.tare(20); //El peso actual es considerado Tara.

  lcd.clear();

  //Inicia el proceso de calibración

  lcd.setCursor(1, 0);
  lcd.print("Peso Conocido:");
  lcd.setCursor(1, 1);
  lcd.print(peso_conocido);
  lcd.print(" g        ");

  //Lee el valor del HX711
  adc_lecture = balanza.get_value(100);

  //Calcula la escala con el valor leido dividido el peso conocido
  escala = adc_lecture / peso_conocido;

  //Guarda la escala en la EEPROM
  EEPROM.put( 0, escala );
  delay(100);

  lcd.clear();
}
void setup() {
  //Configura la balanza
  balanza.begin(DT, CLK);

  //Configura los botones
  pinMode(calibracion, INPUT);
  pinMode(tara, OUTPUT);
  pinMode(rele, OUTPUT);

  // Inicializar el LCD
  lcd.init();

  //Encender la luz de fondo.
  lcd.backlight();

  //Lee el valor de la escala en la EEPROM
  EEPROM.get( 0, escala );

  //Pregunta si se desea entrar en calibración
  if (digitalRead(calibracion))
    calibration();

  //Mensaje inicial en el LCD
  lcd.setCursor(1, 0);
  lcd.print("Retire el Peso");
  lcd.setCursor(1, 1);
  lcd.print("y Espere");
  delay(2000);
  balanza.set_scale(escala); // Establecemos la escala
  balanza.tare(20); //El peso actual es considerado Tara.

  lcd.clear();
  lcd.setCursor(1, 0);
  lcd.print("Listo....");
  delay(1000);
  lcd.clear();
}

void loop() {
  float peso;

  //Mide el peso de la balanza
  peso = balanza.get_units(10);

  //Muestra el resultado
  lcd.setCursor(1, 0);
  lcd.print("Peso: ");
  lcd.print(peso, 0);
  lcd.println(" g ");
  delay(5);

  //programa para tarar

  if (digitalRead(tara)) {
    anti_debounce(tara);
    balanza.tare(10);  //El peso actual es considerado Tara.
  }
}

//Comprobar que la tara ha sido completada con exito
if (balanza.getTareStatus() == true) {
  digitalWrite(tare, 1);
  Serial.println("Tara completada");
  lcd.setCursor(0, 1);
  lcd.print("tara completada");
  delay(1500);
}
else
  digitalWrite(tare, 0);

// Comprobar que el peso ha sido alcanzado
if (peso <= 240)
  digitalWrite(rele, 1);

else
  digitalWrite(rele, 0);

Estas etiquetas de código se pueden encontrar en la barra de menú del editor ...

(Uso el traductor de Google y espero que el texto sea comprensible. Mi español es un poco limitado...)

Esta parte viene después del último paréntesis de loop().

//Comprobar que la tara ha sido completada con exito
if (balanza.getTareStatus() == true) {
  digitalWrite(tare, 1);
  Serial.println("Tara completada");
  lcd.setCursor(0, 1);
  lcd.print("tara completada");
  delay(1500);
}
else
  digitalWrite(tare, 0);

// Comprobar que el peso ha sido alcanzado
if (peso <= 240)
  digitalWrite(rele, 1);

else
  digitalWrite(rele, 0);

Además hay algunos errores:

balanza.getTareStatus()
sketch.ino:128:13: error: 'class HX711' has no member named 'getTareStatus'
if (balanza.getTareStatus() == true)

(Aquí todavía tengo que mirar la biblioteca HX711 ...)

digitalWrite(tare, 1);
digitalWrite(tare, 0);

¿Se supone que eso es "tara" en lugar de "tare"?

EDIT: Depende de la biblioteca utilizada si la función getTareStatus() es compatible o no...

thank you very much UKHeliBob My inglish is very bad
All the best

Prueba así

//Incluye las librerías
#include "HX711.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <EEPROM.h>

//Define las variables globales
byte DT = 3;
byte CLK = 2;

byte calibracion = 7;
byte rele = 9;
byte tara = 5;
int peso_conocido = 500;
long escala;

//Crear el objeto lcd dirección 0x3F y 16 columnas x 2 filas
LiquidCrystal_I2C lcd(0x27, 16, 2);

//Crear el objeto balanza
HX711 balanza;

//Función de Anti-debounce (Evitar el rebote del pulsador)
void anti_debounce(byte boton) {
  delay(100);
  while (digitalRead(boton)); //Anti-Rebote
  delay(100);
}

//Función de calibración y ajuste
void calibration() {

  //int i = 0,cal=1;
  long adc_lecture;

  // Escribimos el Mensaje en el LCD
  lcd.setCursor(2, 0);
  lcd.print("Calibracion de");
  lcd.setCursor(4, 1);
  lcd.print("Balanza");
  delay(1500);
  balanza.read();
  balanza.set_scale(); //La escala por defecto es 1
  balanza.tare(20); //El peso actual es considerado Tara.

  lcd.clear();

  //Inicia el proceso de calibración

  lcd.setCursor(1, 0);
  lcd.print("Peso Conocido:");
  lcd.setCursor(1, 1);
  lcd.print(peso_conocido);
  lcd.print(" g        ");

  //Lee el valor del HX711
  adc_lecture = balanza.get_value(100);

  //Calcula la escala con el valor leido dividido el peso conocido
  escala = adc_lecture / peso_conocido;

  //Guarda la escala en la EEPROM
  EEPROM.put( 0, escala );
  delay(100);

  lcd.clear();
}

void setup() {
  //Configura la balanza
  balanza.begin(DT, CLK);

  //Configura los botones
  pinMode(calibracion, INPUT);
  pinMode(tara, OUTPUT);
  pinMode(rele, OUTPUT);

  // Inicializar el LCD
  lcd.init();

  //Encender la luz de fondo.
  lcd.backlight();

  //Lee el valor de la escala en la EEPROM
  EEPROM.get( 0, escala );

  //Pregunta si se desea entrar en calibración
  if (digitalRead(calibracion))
    calibration();

  //Mensaje inicial en el LCD
  lcd.setCursor(1, 0);
  lcd.print("Retire el Peso");
  lcd.setCursor(1, 1);
  lcd.print("y Espere");
  delay(2000);
  balanza.set_scale(escala); // Establecemos la escala
  balanza.tare(20); //El peso actual es considerado Tara.

  lcd.clear();
  lcd.setCursor(1, 0);
  lcd.print("Listo....");
  delay(1000);
  lcd.clear();
}

void loop() {
  float peso;

  //Mide el peso de la balanza
  peso = balanza.get_units(10);

  //Muestra el resultado
  lcd.setCursor(1, 0);
  lcd.print("Peso: ");
  lcd.print(peso, 0);
  lcd.println(" g ");
  delay(5);

  //programa para tarar

  if (digitalRead(tara)) {
    anti_debounce(tara);
    balanza.tare(10);  //El peso actual es considerado Tara.
  }
// } esta llave no va aquí

//Comprobar que la tara ha sido completada con exito
  if (balanza.getTareStatus() == true) {
    digitalWrite(tara, 1);  // tare es incorrecta
    Serial.println("Tara completada");
    lcd.setCursor(0, 1);
    lcd.print("tara completada");
    delay(1500);
  }
  else
    digitalWrite(tara, 0);  // tare es incorrecta

// Comprobar que el peso ha sido alcanzado
  if (peso <= 240)
    digitalWrite(rele, 1);
  else
    digitalWrite(rele, 0);

}  // el final de loop() es aquí

Además la variable que refiere al pin 5 se llama tara, no tare.

No lo compilé, no se si hay algún otro error.

Saludos

PD: En el foro Español escribimos en español. Por favor lea las reglas del foro. Gracias

Muchas gracias por las aclaraciones, el error anterior ya no aparece, pero ahora sale el error que ya comentabais.

'class HX711' has no member named 'getTareStatus'

Esta parte del codigo es para dar una señal a un rele y al automata, de que se ha puesto la balanza a cero. Entonces ¿Que instruccion puedo utilizar, para dar una señal a un rele y al automata? o buscar el HX711 que sea compatible con la instruccion 'getTareStatus' ¿Como se mira el programador del HX711 que sea compatible?, ¿Si es probando comentarmelo?
Un saludo

Sigues respondiendo y no editas tu post inicial. Para ser profesor no haces lo que predicas. Cuando se te marca un error, hay que editarlo como lo indican las normas.
Te envié un privado pero repetiré el pedido por esta via.

Moderador:
Por favor, lee las Normas del foro y edita tu código/error delpost inicial usando etiquetas de código.
Ve a edición, luego selecciona todo el código que has publicado, lo cortas y click en </>


Los errores o códigos aunque sean de 1 sola línea deben ir con etiquetas para su mejor visualización.
Observa como te edité el post#6 justamente donde marcas el error.

El error dice que no existe la función getTareStatus() en la librería.
Es un tema de software no de hardware, nada tiene que ver con cambiar el HX711.
Seguramente se debe a que no está usando la librería correcta.

Saludos

Como dice @anon90500195, tomaste un código de una página web y bajaste otra librería. Hay que prestar la debida atención.
Mira los ejemplos de tu librería, y corre alguno y verás que funciona correctamente.

Muchas gracias por las aclaraciones.
Un saludo
PD: Perdon por no editar los codigos o errores.

Mira tu casilla privada a la derecha arriba, tienes dos mensajes privados además del post#7.
Por favor hazlo o tendré que sancionarte, con un dia si poder ingresar al foro.
No lo digo mas y evita las disculpas, simplemente hazlo.

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