Báscula Inteligente

Autores: David García Cava, David Julián Largo y Santiago Linares Oliveira.

Información

Nuestro proyecto consiste en el diseño e implementación de una báscula que cuenta con una pantalla LCD para poder mostrar el peso de los objetos y un interruptor para encender o apagarla.

Materiales

  • Pantalla LCD I2C
  • Interruptor
  • Cables (Equipo Docente)
  • Celda de carga de 5kg
  • Módulo HX711
  • Protoboard (Equipo Docente)
  • Placa Arduino (Equipo Docente)
  • Caja

Cronología del Trabajo

  1. Lluvia de ideas
  2. Selección final del proyecto
  3. Planificación de tareas
  4. Lista con los materiales a necesitar y posterior compra de los mismos
  5. Inicio del código y conexiones mediante pruebas y correcciones
  6. Solución a problemas encontrados
  7. Diseño final del proyecto
  8. Realización de vídeo de demostración
  9. Redacción de la memoria

Implementación

El software utilizado para la realización de la práctica ha sido Arduino. Hemos utilizado diferentes librerías:

  • Wire.h: Biblioteca necesaria para la comunicación I2C, utilizada por la pantalla LCD.
  • LiquidCrystal_I2C.h: Biblioteca que facilita el control de pantallas LCD que se conectan a través del protocolo I2C.
  • HX711.h: Biblioteca para interactuar con el módulo HX711, utilizado para medir el peso.

Problemas y Soluciones

  • Mal funcionamiento de la celda de peso. Estando posada sobre una superficie planta, daba problemas, por tanto decidimos elevar la celda y corregir su posición.
  • Mala soldadura. Se ha solucionado optando por no soldar y en su lugar incluir más cables en la protoboard.
  • Rotura del módulo HX711. Se ha sustituido por un módulo nuevo.
  • LCD proporcionada por el profesorado no funcionaba correctamente. Se ha sustituido por una nueva pantalla LCD I2C.
  • Difícil integración de los componentes en la caja que teníamos prevista usar. Se trataba de una caja de metal, mucho más rígida que la del proyecto final, pero que nos dificultaba ajustar el diseño a nuestras necesidades. Por tanto, cambiamos a una caja algo menos rígida.

Mejoras Futuras

Inicialmente teníamos la idea de añadir una estructura a la báscula para además hacerla capaz de medir la altura de los objetos que se pesaran. Dicha idea consistía en usar un poste que estuviera sujeto al piso de la báscula y colocar un sensor en la punta del poste. Este sensor iría bajando con la ayuda de un servomotor y se detendría al detectar la presencia de un objeto. Luego se calcularía la altura del mismo y se presentaría como información complementaria al peso del objeto.

Otra mejora que nos habría gustado incluir es un botón de tara para poder reiniciar el valor de la báscula.

También pensamos en usar una celda que soportase un peso máximo mayor para que pudieran pesarse un mayor rango de objetos, sin embargo, esto implicaba usar una caja más resistente como por ejemplo la de metal mencionada anteriormente.

Vídeo explicativo

Vídeo explicativo del código y de la funcionalidad de la báscula.

Código en Arduino

Calibrado de la báscula
#include "HX711.h"

const int DOUT=2;
const int CLK=3;

HX711 balanza;

void setup() {
  Serial.begin(9600);
  balanza.begin(DOUT, CLK);
  Serial.print("Lectura del valor del ADC:t");
  Serial.println(balanza.read());
  Serial.println("No ponga ningún objeto sobre la balanza");
  Serial.println("Destarando...");
  balanza.set_scale(); //La escala por defecto es 1
  balanza.tare(25);  //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);
  delay(100);
}
Funcionamiento regular de la báscula
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "HX711.h"

LiquidCrystal_I2C lcd(0x27, 16, 2); // Dirección I2C de la pantalla LCD

const int buttonPin = 4;
const int DOUT=2;
const int CLK=3;

int buttonState = 0;

HX711 balanza;

void setup() {
  pinMode(buttonPin, INPUT);
  lcd.begin(16, 2); // Inicializar la pantalla LCD con 16 columnas y 2 filas
  lcd.backlight(); // Encender retroiluminación
  
  balanza.begin(DOUT, CLK);
  lcd.setCursor(0, 1);
  lcd.print("Inicializando");
  lcd.setCursor(0,2);
  lcd.print("el sistema");
  delay(2000);
  lcd.clear();
  
  lcd.setCursor(0, 0);
  lcd.print("No ponga ningun");
  lcd.setCursor(0, 1);
  lcd.print("objeto sobre la");
  lcd.setCursor(0, 2);
  lcd.print("bascula");
  delay(2000);
  lcd.clear();
  
  lcd.setCursor(0, 0);
  lcd.print("Destarando...");
  delay(2000);
  lcd.clear();
  
  balanza.set_scale(-210.4); // Establecemos la escala
  balanza.tare(25);  //El peso actual es considerado Tara.
  
  lcd.setCursor(0, 0);
  lcd.print("Listo para pesar");
  delay(1000);
  lcd.clear();
}

void loop() {
  buttonState = digitalRead(buttonPin);
  if (buttonState == HIGH) {
    lcd.backlight(); // Encender la retroiluminación
    if(balanza.get_units(20) <= 5){
      lcd.clear();
      lcd.setCursor(0, 1);
      lcd.print("Peso: ");
      lcd.print(0,3);
      lcd.print(" g");
    }
    else{
      lcd.setCursor(0, 1);
      lcd.print("Peso: ");
      lcd.print(balanza.get_units(20), 3);
      lcd.print(" g");
    }
  }
  else{
    lcd.clear();
    lcd.noBacklight(); // Apagar la retroiluminación
  }
  delay(500);
}

También te podría gustar...

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *