#include <HX711.h> //Libreria de la galga
#include <Stepper.h> //Libreria del motor paso a paso
#include <LiquidCrystal_I2C_Hangul.h> //Libreria del LCD I2C
//Aca definimos los pines básicos
#define LlavePin 13
#define LedPin 5
//Definimos los pines del stepper
#define Bm 25
#define Bp 26
#define Am 14
#define Ap 12
//Definimos el HX711
#define SckPin 16
#define DtPin 17
//Definimos los pines de la parte de medición
#define BocinaPin 15
#define DisparoPin 33
#define EchoPin 32
//Asiganmos la direccion I2C del display que esta en formato hexadecimal
#define dirDisplay 0x27
//Definimos los parámetros del LCD
const int LCDColumnas=20;
const int LCDFilas=4;
int a=0;//para que una sola vez te pida poner el plato del michi
int p;//Porcentaje
const int PasosPorRev=100; //El stepper es
const int CantidadComida=100; //definimos los 100grs.
const int RV=40;
const int Vacio=RV-1; //Por cuestiones de sensibilidad
float d; //distancia
float t; //tiempo
volatile bool estadollave =LOW;
//aca creamos o definimos nuestros objetos
HX711 Balanza;
Stepper MiMotor(PasosPorRev, Bm, Bp, Ap, Am);
LiquidCrystal_I2C_Hangul lcd (dirDisplay, LCDColumnas, LCDFilas);
void setup()
{
Serial.begin(115200);
//Aca seteamos la parte de encendido/apagado
pinMode(LlavePin,INPUT_PULLDOWN);
pinMode(LedPin, OUTPUT);
digitalWrite(LedPin,estadollave);
//Aca seteamos la parte de Stteper/HX711
pinMode(Ap, OUTPUT);
pinMode(Am,OUTPUT);
pinMode(Bp, OUTPUT);
pinMode(Bm, OUTPUT);
MiMotor.setSpeed(60);
//Aca seteamos la parte de medición
lcd.init(); //inicio la pantallita
lcd.backlight(); //prende la pantallita con esta línea
pinMode(BocinaPin, OUTPUT);
pinMode(DisparoPin, OUTPUT);
pinMode(EchoPin, INPUT);
digitalWrite(DisparoPin,LOW);
noTone(BocinaPin); //BOCINA NO HAGAS RUIDOO!!!
Mensaje1();
}
void loop()
{
estadollave=digitalRead(LlavePin);
digitalWrite(LedPin,estadollave);
if (estadollave==LOW)
{
a=0;
lcd.noBacklight();
}
if (estadollave==HIGH)
{
lcd.init();
lcd.backlight();
Serial.println("Funciona");
if (a == 0)
{
MichiStart();
}
ControlFood();
Medicion();
}
delay(100);
}
void MichiStart ()
{
Mensaje2();
Mensaje3();
Balanza.begin(DtPin,SckPin);
Balanza.set_scale(419.8);//Este valor es sacado de calibrar la galga
Balanza.tare();//aca es para no tener en cuenta nada del peso fuera de la comida
a=a+1;
}
void ControlFood()
{
Serial.println("aca vamos a leer el peso en el sensor");
lcd.setCursor(0,0);
lcd.print("Plato lleno?");
float MedidaBalanza=1000*Balanza.get_units(20);
Serial.println(MedidaBalanza);
if (MedidaBalanza < 100)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Alimentando");
delay(100);
MiMotor.step(PasosPorRev);
}
lcd.clear();
}
void Medicion()
{
digitalWrite(DisparoPin, HIGH);
delayMicroseconds(10);
digitalWrite(DisparoPin, LOW);
t=pulseIn(EchoPin, HIGH); //Aca obtenemos el ancho del pulso
d=t/59; //aca lo pasamos a cm
p=100-((d*100)/RV);
//AHORA VAMOS A JUGAR UN RATO CON LA BOCINA
if (d<Vacio)
{
noTone(BocinaPin);
lcd.setCursor(0,0);
lcd.print("Contenedor Lleno");
lcd.setCursor(0,1);
lcd.print(p);
lcd.print(" %");
}
else if (d>Vacio)
{
tone(BocinaPin,1000,10);
lcd.setCursor(0,0);
lcd.print("Estoy vacio");
lcd.setCursor(0,1);
lcd.print("0%");
}
delay(5000);//aca le vamos a dar un tiempo lógico 15min idk
lcd.clear();
}
void Mensaje1()
{
lcd.setCursor (0,0);
lcd.print("Hola, gracias por");
lcd.setCursor (0,1);
lcd.print("Comprar tu FoodNow");
lcd.setCursor (0,2);
lcd.print("Modelo UTN-01 ");
lcd.setCursor (0,3);
lcd.print(":D :D");
delay(5000);
lcd.clear();
lcd.setCursor (0,0);
lcd.print("Tu michi");
lcd.setCursor (0,1);
lcd.print("Estara muy");
lcd.setCursor (0,2);
lcd.print("Contento!!!");
delay(5000);
lcd.clear();
lcd.setCursor (0,0);
lcd.print("PD:");
lcd.setCursor (0,1);
lcd.print("No soy a prueba");
lcd.setCursor (0,2);
lcd.print("De rasgunos");
lcd.setCursor (0,3);
lcd.print("Jijiji");
delay(5000);
lcd.clear();
lcd.setCursor (0,0);
lcd.print("Por favor");
lcd.setCursor (0,1);
lcd.print("Leer el manual");
lcd.setCursor (0,2);
lcd.print("De instrucciones");
lcd.setCursor (0,3);
lcd.print("Antes de encenderme");
delay(5000);
lcd.clear();
}
void Mensaje2()
{
lcd.setCursor(0,0);
lcd.print("Paso 1, dame");
lcd.setCursor(0,1);
lcd.print("Comida humano...");
lcd.setCursor(5,2);
lcd.print(">:( >:(");
lcd.setCursor(0,3);
lcd.print("Rapidooooo");
delay (3000);//aca ponemos un tiempo logicco 10min
lcd.clear();
}
void Mensaje3()
{
lcd.setCursor(0,0);
lcd.print("Paso 2");
lcd.setCursor(0,1);
lcd.print("Apoya el tarro");
lcd.setCursor(0,2);
lcd.print("De tu michi en");
lcd.setCursor(0,3);
lcd.print("La marca...");
delay(3000);//aca ponemos un tiempo logico 5min
lcd.clear();
}