Skip to content

Instantly share code, notes, and snippets.

@jmtexla68
Created August 21, 2023 18:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jmtexla68/3282e19b91d3d287f2e4a3203e887a42 to your computer and use it in GitHub Desktop.
Save jmtexla68/3282e19b91d3d287f2e4a3203e887a42 to your computer and use it in GitHub Desktop.
Se trata de un dispensador para líquidos espesos, concretamente miel.
/*
***********************************************
Tutorial Arduino Bascula Dosificadora
https://conbotassucias.wordpress.com/
***********************************************
EXPLICACIÓN
El sistema se compone básicamente de una caja donde va alojada
una báscula hasta 5kg, un teclado y un display lcd,
un controlador Arduino UNO.
*/
#include <Keypad.h>
#include "HX711.h"
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
// Declara Puertos de entrada y salida
int ch1 = 10; // Declara el ch1 en el Pin 10
int ch2 = 11; // Declara el ch2 en el Pin 11
int ch3 = 12; // Declara el ch3 en el Pin 12
int ch4 = 13; // Declara el ch4 en el Pin 13
const int DOUT=A1;
const int CLK=A0;
int peso; //Peso de la bascula
int pesoEstablecido; //cantidad a dosificar
const int zero=14; //Pin 14 es inexistente
int pulsadorF3=A3; //Pulsador para iniciar el llenado
int state_zero = 0;
int last_state_zero = 0;
int valor100; //Valor al 100%
int valor80; //Valor al 80%
int valor60; //Valor al 60%
//Declara variables para keypad (kp)
const byte Filas = 4; //KeyPad de 4 filas_kp
const byte Columnas = 4; //y 4 columnas_kp
byte Pines_Filas[] = {2, 3, 4, 5 }; //pines de filas_kp
byte Pines_Columnas[] = {6, 7, 8, 9 }; //pines de columnas_kp
char pulsacion; //_kp
String PIN_Tecleado = ""; // teclas digitadas_kp
char cadena[17]; //para poder hacer la conversion a número_kp
char Teclas [Filas][Columnas] = { //disposición de la matriz del teclado_kp
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
Keypad Teclado1 = Keypad(makeKeymap(Teclas), Pines_Filas, Pines_Columnas, Filas, Columnas);//_kp
HX711 balanza;
LiquidCrystal_I2C lcd(0x27,16,2);
//unsigned long tiempo1 = 10000;
//unsigned long diferenciaTiempo = 0;
void setup() {
pinMode(zero, INPUT); //declaramos el pin2 como entrada del pulsador
pinMode(ch1, OUTPUT); //inicia los ch como una salida.
pinMode(ch2, OUTPUT);
pinMode(ch3, OUTPUT);
pinMode(ch4, OUTPUT);
lcd.init(); // inicia el lcd
lcd.backlight(); //Encender la luz de fondo.
balanza.begin(DOUT, CLK);
// Escribimos el Mensaje inicial en el LCD.
lcd.println("Calibrando ");
lcd.println(balanza.read());
lcd.setCursor(0, 1);
lcd.println("No poner peso ");
balanza.set_scale(411.03); // Establecemos la escala
balanza.tare(10); //El peso actual es considerado Tara.
lcd.println("Listo para pesar");
lcd.clear(); // Limpiamos pantalla
}
void loop() {
switch (pulsacion) { //_kp
case '0' ... '9': // o dígitos, //_kp
delay(100); //_kp
PIN_Tecleado += pulsacion; // los agregamos a la cadena_kp
// break;
//case '#': // Lo tomaremos como enter para guardar el dato//_kp
//delay(100); //_kp
PIN_Tecleado.toCharArray( cadena,17); //_kp ToCharArray – Pasa de String a string
pesoEstablecido = atol (cadena); //_kp atof ( str )– convertir str en float
break;
case 'D':
delay(100);
PIN_Tecleado = ("\r") ;
pesoEstablecido = 0 ;
lcd.println("");
lcd.clear(); // Limpiamos pantalla
break;
case 'A':
delay(100);
lcd.println("");
lcd.clear(); // Limpiamos pantalla
pesoEstablecido = 1000 ;
break;
case 'B':
delay(100);
lcd.println("");
lcd.clear(); // Limpiamos pantalla
pesoEstablecido = 2000 ;
break;
case 'C':
delay(100);
lcd.println("");
lcd.clear(); // Limpiamos pantalla
pesoEstablecido = 3000 ;
break;
}
pulsacion = Teclado1.getKey(); //_kp
valor100=pesoEstablecido;
valor80=pesoEstablecido*0.8;
valor60=pesoEstablecido*0.6;
//comparaciónes
peso = (balanza.get_units(5));
if (peso <= valor100 && peso <= pesoEstablecido && digitalRead(pulsadorF3)==HIGH) {
digitalWrite(ch1, LOW);
}
if (peso >= valor100)
{digitalWrite(ch1, HIGH);
}
if (peso <= valor80 && peso <= pesoEstablecido && digitalRead(pulsadorF3)==HIGH) {
digitalWrite(ch2, LOW);
}
if (peso >= valor80)
{digitalWrite(ch2, HIGH);
}
if (peso <= valor60 && peso <= pesoEstablecido && digitalRead(pulsadorF3)==HIGH) {
digitalWrite(ch3, LOW);
}
if (peso >= valor60)
{digitalWrite(ch3, HIGH);
}
lcd.setCursor(0, 0);
lcd.print("Envase: ");
lcd.print(pesoEstablecido,1); //envase
lcd.setCursor(0, 1);
lcd.print("Peso: ");
//tiempo1 = millis();
lcd.print(balanza.get_units(5),0); //ANTES (balanza.get_units(1),1)
lcd.println(" gr ");
//Botón de zero, esto sirve para restar el peso de un recipiente
if ( state_zero || pulsacion == '*' != last_state_zero) {
if (state_zero == LOW){
balanza.tare(10); //El peso actual es considerado Tara.
}
}
last_state_zero = state_zero;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment