Created
August 21, 2023 18:08
-
-
Save jmtexla68/3282e19b91d3d287f2e4a3203e887a42 to your computer and use it in GitHub Desktop.
Se trata de un dispensador para líquidos espesos, concretamente miel.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
*********************************************** | |
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