Balanza digital de tienda con arduino

Publicado el: 25 de mayo de 2020
Principiante
Acerca de este proyecto
Balanza o báscula de hasta 200Kg para uso en tiendas. Obtiene y muestra el peso y precio del producto pesado.
balanza bascula hx711
Publicidad
DETALLES

Este tipo de balanzas o básculas son muy utilizadas en las tiendas o mini supermercados para calcular el precio correcto de cualquier producto que se coloque en el peso, basado en su precio x kilo. Al colocar el producto, por ejemplo, lenteja en la balanza, se introduce a través del teclado en precio en kilo de la lenteja, por ejemplo: $2.400 el kilo, y si el producto pesa 750 gramos (0,75 kilos), se muestra en el display el precio de $1.800 (producto de 0,75 kilos x $2.400).

LISTA DE MATERIALES

  • Arduino Uno/Leonardo/Nano/Micro.
  • (4) celdas de carga de 50KG o báscula digital comercial pesa personas (recomendado).
  • Módulo Hx711.
  • LCD 20X4 I2C.
  • Teclado de membrana 4x4 (16 teclas).
  • Cables de conexión.

Se recomienda comprar una báscula como las que se muestra en la imagen, son realmente muy económicas y más barato que comprar las 4 celdas de carga por aparte. También evitamos construir las estructura o soporte para las cedas de carga. Dichas balanzas ya vienen con las 4 celdas incluidas. Hay que eliminar la parte electrónica que viene incluida para solo quedarnos con las 4 celdas.

Bascula pesa personas

Báscula/balanza comercial pesa personas


Celdas de carga de 50Kg

Celdas de carga de 50Kg


Hx711

HX711


LCD-I2C

LCD I2c


DIAGRAMA ESQUEMÁTICO


Diagrama esquematico balanza tienda


El pin SDA del módulo I2c del LCD se conecta al pin A4 del arduino.

El pin SCL del módulo I2c del LCD se conecta al pin A5 del arduino.


El pin Dout del HX711 se conecta al pin 3 del arduino.

El pin CLK del HX711 se conecta al pin 2 del arduino.


Los cables blancos de las 2 celdas superiores se conectan entre si.

Los cables blancos de las 2 celdas inferiores se conectan entre si.

Los cables negros de las celdas de la izquierda van unidos, de igual manera se unen los cables negros de las 2 celdas de la derecha.


Cable rojo celda superior derecha ->    A -

Cable rojo celda superior izquierda  -> E -

Cable rojo celda inferior izquierda   ->  A +

Cable rojo celda inferior derecha     -> E +


IMPORTANTE: Es necesario obtener el factor de calibración de la balanza antes de subir el código de la balanza de tienda. En el siguiente video se muestra como realizar el proceso de calibración.


Haga clic aca para visualizar el artículo que contiene el código de calibración.


VIDEO DE DETALLES DE LA BALANZA DE  TIENDA

Ver video en youtube





CODIFICACIÓN
Código balanza- tienda-

/* Arduino pin 
 2 -> HX711 CLK
 3 -> DOUT
 5V -> VCC
 GND -> GND */
 
#include "HX711.h"
#include <Keypad.h>
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>


#define DOUT  3
#define CLK  2

HX711 scale(DOUT, CLK);

byte cuenta = 0;

float calibration_factor = 10710  ; //-7050 worked for my 440lb max scale setup

float peso_gramos = 0.00;
float peso_libras = 0.00;
float peso_kilos=0.00;

float precio_libras = 0.00;
float precio;
float precio_total=0.00;

char precio_producto[5]; //
String precio_productoS = String(); //Almacena las 4 cifras del jugador

String v1 = String();  //primera cifra del número jugador
String v2 = String(); //segunda cifra del número jugador
String v3 = String(); //tercera cifra del número jugador
String v4 = String(); //cuarta cifra del número jugador
String v5 = String(); //cuarta cifra del número jugador

char tecla;

const byte ROWS=4;
const byte COLS=4;
char keys[ROWS][COLS] = {
 {'1','2','3','A'},
 {'4','5','6','B'},
 {'7','8','9','C'},
 {'*','0','#','D'}
};

byte rowPins[ROWS] = {4,5,6,7}; //Filas(pines del 4 al 7)
byte colPins[COLS] = {8,9,10,11}; //Columnas (pines del 8 al 11)
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

//Crear el objeto lcd  dirección  0x27 y 20 columnas x 4 filas
LiquidCrystal_I2C lcd(0x27,20,4);  //

void setup() {

  // Inicializar el LCD 
  lcd.init();
  
  //Encender la luz de fondo.
  lcd.backlight();

  scale.set_scale(calibration_factor);  //  El obtenido en la calibracion

  scale.tare(); //Reset the scale to 0

}


void loop() {

  tecla = keypad.getKey();

   v1=String(precio_producto[0]);
   v2=String(precio_producto[1]);
   v3=String(precio_producto[2]);
   v4=String(precio_producto[3]);
   v5=String(precio_producto[4]);

   peso_libras= abs(((int) (scale.get_units()*100))/100.0);
   peso_kilos= abs(peso_libras/2);
   peso_gramos = abs(peso_libras*500);
   
   precio_productoS = v1+v2+v3+v4+v5;
   
   precio = precio_productoS.toFloat();

    //  Visualiza en peso en gramos
    lcd.setCursor(0, 0);
    lcd.print("Peso gramos:");
    lcd.print(peso_gramos,1);   

    //  Visualiza en peso en libras y kilos
    lcd.setCursor(0, 1);
    lcd.print("Lbs:");
    lcd.print(peso_libras,2);     

    lcd.setCursor(12, 1);
    lcd.print("Kls:");
    lcd.print(peso_kilos,2);     

    precio_total = peso_kilos*precio;
    
    lcd.setCursor(0, 3);
    lcd.print("Precio ttl: $");
    lcd.print(precio_total,1);  

    if(tecla=='A'){
        scale.tare(); //Reset the scale to 0
    }
   
    
    if(tecla=='C')  {
    lcd.clear();
    precio_producto[0] = ' ';
    precio_producto[1] = ' ';
    precio_producto[2] = ' ';
    precio_producto[3] = ' ';
    precio_producto[4] = ' ';    
    precio = 0.00;
    precio_productoS = '0'; 
    cuenta=0;  
    precio_total = 0.00;     
    lcd.setCursor(0, 2);
    lcd.print("Precio kilo: $ ");     
    lcd.setCursor(14+cuenta,2); 
    lcd.print(precio_producto[cuenta]);
    
  }

     if(tecla){
            
     if(tecla!='A' && tecla!='B' && tecla!='C' && tecla!='D')
     {
      precio_producto[cuenta] = tecla;
      //  Visualiza el precio del producto            
      lcd.setCursor(14+cuenta,2); 
      lcd.print(precio_producto[cuenta]);
      cuenta++;       

     }

   delay(100);
        
    }     
  
}

Autor: sistemasymicros
30 proyectos 6 seguidores 0 siguiendo

Ingeniero en electrónica. Maker, apasionado por la programación. Sigueme en sistemasymicros.

COMENTARIOS
Para publicar un comentario debes