Pesaje: de células de carga analógicas a Scada, via Tablet

Para recuperar la señal analógica de una célula de carga, transformarla en digital y transferir los datos a una tablet y luego a una SCADA con un totalizador de peso y registro de datos (como un data logger), necesitas un sistema que combine hardware y software de manera eficiente. A continuación, te explico los pasos clave:

1. Adquisición de señal analógica desde la célula de carga

Las células de carga típicamente entregan una señal analógica muy débil en milivoltios (mV) por voltio de excitación (usualmente entre 0-30 mV).

Para capturar esta señal necesitas un amplificador y un convertidor analógico-digital (ADC) de alta precisión para garantizar una buena resolución.


Opciones recomendadas:

HX711 – Es un módulo ADC de 24 bits diseñado específicamente para señales de células de carga.

INA125 – Amplificador de instrumentación que también se puede utilizar para señales analógicas de baja amplitud.



---

2. Conversión y procesamiento de la señal

1. Conecta la célula de carga al módulo HX711 o al amplificador/ADC.


2. Usa una microcontroladora (como un Arduino, ESP32 o Raspberry Pi) para leer los datos del módulo.


3. Realiza el calibrado en el software para convertir los valores de voltaje en unidades de peso (kg o lb).


4. Aplica un filtro digital (como un filtro promedio o Kalman) para estabilizar la lectura y reducir el ruido.




---

3. Comunicación con la tablet

Para enviar los datos a la tablet, puedes usar varios protocolos de comunicación según la compatibilidad de la microcontroladora y la tablet:

Bluetooth – Si usas un ESP32 o un módulo Bluetooth en Arduino.

Wi-Fi – Utiliza un ESP32 o Raspberry Pi para transmitir los datos mediante MQTT o HTTP.

USB – Si la tablet permite conexión OTG, puedes comunicarte directamente por puerto serie.


Aplicación en la tablet:

Usa una app como Serial Monitor o crea una aplicación personalizada en MIT App Inventor o Flutter para mostrar los datos en tiempo real y permitir interacción.

Implementa un totalizador directamente en la app mediante una simple suma acumulativa de las lecturas de peso.



---

4. Comunicación con el SCADA

Usa protocolos de comunicación estándar para SCADA:

Modbus TCP/IP – Si la microcontroladora soporta Wi-Fi o Ethernet.

Modbus RTU – Si tienes conexión serial disponible.

MQTT – Para comunicación directa basada en red.


Si usas un ESP32 o Raspberry Pi, puedes programarlo para actuar como un esclavo Modbus o un cliente MQTT.



---

5. Registro de datos (Data Logger)

Guarda las lecturas de peso y el totalizador en un archivo local (CSV o JSON) en la tablet o en una tarjeta SD conectada al microcontrolador.

Usa un software de sincronización (como Dropbox o Google Drive) para subir automáticamente los registros a la nube o a un servidor SCADA.

Si usas Raspberry Pi, puedes implementar un script en Python para guardar los datos periódicamente en un archivo.



---

6. Interfaz de usuario (opcional)

Diseña una interfaz sencilla para mostrar:

Peso en tiempo real

Peso totalizado

Histórico de datos (gráfico)

Botón de reset o ajuste de tara


Usa frameworks como Flask o Node-RED si usas Raspberry Pi o ESP32 para crear una interfaz web accesible desde la tablet.



---

✅ Resumen de componentes necesarios:

✔️ Célula de carga
✔️ HX711 o amplificador + ADC
✔️ Microcontrolador (Arduino, ESP32 o Raspberry Pi)
✔️ Comunicación Bluetooth/Wi-Fi/USB
✔️ Software SCADA (compatible con Modbus o MQTT)
✔️ Aplicación personalizada o lista para recibir datos

Para ello necesitamos un script de Arduino para leer una célula de carga usando el módulo HX711, transmitir los datos mediante MQTT y también configurar una interfaz de Modbus TCP/IP para que el SCADA pueda leer los valores. Utilizaremos un ESP32 porque permite comunicación Wi-Fi y procesamiento rápido.


---

📌 Materiales Necesarios

Célula de carga (Ejemplo: 5 kg o 10 kg)

Módulo HX711

ESP32

Resistencia de precisión (si es necesario para la calibración)

Red Wi-Fi disponible



---

1. Instalación de librerías necesarias

Desde el Administrador de Librerías en Arduino IDE, instala lo siguiente:

✅ HX711 de Bogdan Necula
✅ PubSubClient para MQTT
✅ ArduinoModbus para Modbus TCP/IP


---

2. Script Arduino (ESP32 + HX711 + MQTT + Modbus)

Este código hace lo siguiente:
✅ Lee los datos de la célula de carga mediante el módulo HX711
✅ Filtra y convierte los datos a unidades de peso
✅ Publica los datos por MQTT
✅ Expone los datos mediante Modbus TCP/IP para que el SCADA pueda leerlos

🔹 Código Arduino

#include "HX711.h"
#include <WiFi.h>
#include <PubSubClient.h>
#include <ArduinoModbus.h>

// Pines HX711
#define LOADCELL_DOUT_PIN 32
#define LOADCELL_SCK_PIN 33

// Configuración Wi-Fi
const char* ssid = "NOMBRE_DE_TU_WIFI";
const char* password = "CONTRASEÑA_DE_TU_WIFI";

// Configuración MQTT
const char* mqtt_server = "BROKER_MQTT_IP";
const int mqtt_port = 1883;
const char* mqtt_topic = "peso/lectura";

// Modbus
WiFiServer modbusServer(502);
ModbusTCPServer modbus;

HX711 scale;
WiFiClient espClient;
PubSubClient client(espClient);

float peso = 0;
float factorCalibracion = -7050; // Ajustar este valor después de calibración
float totalizador = 0;

unsigned long previousMillis = 0;
const long interval = 1000; // Intervalo de 1 segundo

void setup() {
  Serial.begin(115200);

  // Inicializar HX711
  scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
  scale.set_scale(factorCalibracion);
  scale.tare(); // Ajustar la tara

  // Conexión Wi-Fi
  connectWiFi();

  // Configurar MQTT
  client.setServer(mqtt_server, mqtt_port);

  // Iniciar servidor Modbus
  modbusServer.begin();
  modbus.begin(modbusServer);

  // Definir registros Modbus
  modbus.configureHoldingRegisters(0x00, 2);
}

void loop() {
  if (!client.connected()) {
    reconnectMQTT();
  }
  client.loop();

  // Leer el peso y actualizar datos
  if (scale.is_ready()) {
    peso = scale.get_units(10);
    if (peso > 0) {
      totalizador += peso;
    }
  }

  // Enviar datos por MQTT cada 1 segundo
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;
    sendMQTT();
    updateModbus();
  }
}

void connectWiFi() {
  Serial.print("Conectando a WiFi");
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\nWiFi conectado.");
}

void reconnectMQTT() {
  while (!client.connected()) {
    Serial.print("Conectando a MQTT...");
    if (client.connect("ESP32Client")) {
      Serial.println("conectado");
    } else {
      Serial.print("falló con estado: ");
      Serial.print(client.state());
      delay(2000);
    }
  }
}

void sendMQTT() {
  char msg[50];
  snprintf(msg, 50, "Peso: %.2f kg, Totalizado: %.2f kg", peso, totalizador);
  client.publish(mqtt_topic, msg);
  Serial.println(msg);
}

void updateModbus() {
  // Registrar datos en Modbus Holding Register
  modbus.holdingRegisterWrite(0, (int)(peso * 100)); // Peso (en centésimas de kg)
  modbus.holdingRegisterWrite(1, (int)(totalizador * 100)); // Totalizador (en centésimas de kg)
}


---

3. 🔧 Configuración y Calibración de la Célula de Carga

1. Usa un objeto de peso conocido para calibrar la célula de carga.


2. Ajusta el valor de factorCalibracion hasta que el valor mostrado sea correcto:



scale.set_scale(-7050); // Ajusta este valor mediante prueba y error


---

4. Configuración MQTT

Usa un broker MQTT como Mosquitto en la misma red o en un servidor local.

Puedes verificar la transmisión MQTT con el comando en consola:


mosquitto_sub -h BROKER_MQTT_IP -t "peso/lectura"


---

5. Configuración SCADA con Modbus TCP/IP

Asegúrate de que el SCADA esté configurado para leer registros Modbus en:

Dirección 0 → Peso

Dirección 1 → Totalizador


El valor está en centésimas de kg (para evitar problemas con decimales).

Si usas Node-RED, puedes integrar el bloque de Modbus con la siguiente configuración:

Dirección IP: IP de ESP32

Puerto: 502

Tipo de Registro: Holding Register




---

6. Resultado Final

✅ Peso en tiempo real disponible por MQTT y Modbus
✅ Totalizador acumulando valores automáticamente
✅ Interfaz de SCADA leyendo datos en tiempo real
✅ Datos disponibles para registro como Data Logger


---

🚀 Consejos adicionales:

Si necesitas mayor estabilidad en la lectura, usa un filtro Kalman o un promedio móvil.

Si el SCADA tiene problemas de lectura, verifica que el puerto TCP/Modbus esté abierto en el router.

Si la red Wi-Fi es inestable, prueba con un módulo Ethernet o un repetidor Wi-Fi.


Comments

Popular posts from this blog

BIOMEDICAL ENGINEERING AND MAINTENANCE

European Intelligence: Theoretical Foundations and Strategic Challenges

EDA, CIRCULAR ECONOMY, STANDARDIZATION & DEFENSE CHALLENGES EN