Cocción CHEVECHA
coso del dean funesunknown
c_cpp
2 years ago
5.9 kB
1
Indexable
Never
#include <Wire.h> #include <RTClib.h> #include <LiquidCrystal_i2C.h> #include <OneWire.h> #include <DallasTemperature.h> //--------------------------CONFIG--------------------------------- int pin_sensorTemperatura = 5; int tiempo_Lupulo_1 = 50; int tiempo_Lupulo_2 = 60; int tiempo_Lupulo_3 = 80; int tiempo_Fin = 100; //pines int servo1=0; int servo2=0; int servo3=0; int servo4=0; //pin valvula de gas int valvula=0; //La válvula de gas se mantendrá abierta mientras se encuentre en el rango entre estas dos temperaturas //-----------Temperatura mínima excluida, temperatura máxima incluída--------------------------------- int temperatura_Minima=75; int temperatura_Maxima=85; //----------------------------------------------------------------------------------------------------- //-------------------------CÓDIGO----------------------------------- //----Variable del RTC (reloj)---- RTC_DS3231 rtc; //-------------------------------- //--Variable del LCD: 'TyT' de "Tiempo y Temperatura" (texto que se pondrá dentro de él)--- LiquidCrystal_i2 TyT(0x3F, 16,2); //----------------------------------------------------------------------------------------- //---------Variable que refiere al sensor de temperatura---------- DallasTemperature sensor(&oneWireBus); //---------------------------------------------------------------- //------Pin en el que irá el sensor de temperatura (DEFINIDO EN LA CONFIG)--------- const int pinT = pin_sensorTemperatura; OneWire oneWireBus(pinT); //---------------------------------------------------------------------------------- //----Tiempos de cocción para lúpulos combinados en una matriz (DEFINIDO EN LA CONFIG)----------- int tiempos[]={ tiempo_Lupulo_1, tiempo_Lupulo_2, tiempo_Lupulo_3, tiempo_Fin}; //----------------------------------------------------------------------------------------------- //Variable que activo cuando termina el proceso. int fin=false; //---------------------------------------------- void setup () { //Comandos de inicialización de componentes Serial.begin(9600); sensor.begin; TyT.init(); //------------------------------------------ //----Condicional que detecta el módulo RTC----------- if (! rtc.begin()) { Serial.println("No se encontró un módulo RTC conectado ."); while (1); } //----------------------------------------------------- //Variable que guarda el momento en el que se inició el proceso de cocción DateTime startTime = rtc.now(); //----------------------------------------------------------------------- } void loop () { //comando necesario para posteriormente utilizar las temperaturas del sensor sensor.requestTemperatures(); //-------------------------------------------------------------------------- //Variable que guarda el tiempo todo el rato (tiempo en presente) DateTime now = rtc.now(); //-------------------------------------------------------------- //----Variable que detecta cuanto tiempo pasó desde el inicio de la cocción TimeSpan tiempo = now-startTime //------------------------------------------------------------------------- //Bloque encargado del abre y cierre de la válvula de gas----- //Detecta si el proceso todavia no terminó if (fin==false) { //Detecta si se supera la temperatura máxima (DEFINIDO EN LA CONFIG) if (sensor.getTempCByIndex(0)>=temperatura_Maxima){ //Cierra válvula digitalWrite(valvula,LOW); //Si no, detecta si se supera la temperatura mínima(TAMBIÉN DEFINIDO EN CONFIG) } else { if (sensor.getTempCByIndex(0)>temperatura_Minima) { //Si esto pasa, la temperatura es mayor a la minima y menor a la maxima al mismo tiempo, por lo que la válvula se abre digitalWrite(valvula,HIGH); } } } //------------------------------------------------------------- //Checkea los 4 tiempos y opera servos y valvulas (DEFINIDO ANTES DEL SETUP. ELEMENTOS DE LA MATRIZ DEFINIDOS EN CONFIG) //A medida que el tiempo que pasa es mayor al tiempo de inicio, se van abriendo las válvulas consecutivamente if ((tiempo.totalseconds()/60)>= tiempos[0]) { if ((tiempo.totalseconds()/60)>= tiempos[1]) { if ((tiempo.totalseconds()/60)>= tiempos[2]) { if ((tiempo.totalseconds()/60)>= tiempos[3]) { //Cierra la válvula y acaba el proceso en el cuarto tiempo. digitalWrite(valvula,LOW); fin=true; } //Se abre en tiempo[2] digitalWrite(servo3,HIGH); } //Se abre en tiempo[1] digitalWrite(servo2,HIGH); } //Se abre en tiempo[0] digitalWrite(servo1,HIGH); } //Este proceso, incluso una vez terminado, se sigue ejecutando indefinidamente, Aún así, no altera al proceso ya que cada componente se mantiene en el mismo estado. //------------------------------------------------------------------------------------------------------------- //Bloque que imprime los datos de temperatura y tiempo (TyT) por un LCD: //tiempo TyT.setCursor(0,0); TyT.print(now.hour()); TyT.setCursor(2,0); TyT.print(":"); TyT.setCursor(3,0); TyT.print(now.minute()); TyT.setCursor(5,0); TyT.print(":"); TyT.setCursor(6,0); TyT.print(now.second()); //temperatura TyT.setCursor(0,1); TyT.print(sensor.getTempCByIndex(0)); TyT.setCursor(3,1); TyT.print("C°"); delay(10); //-------Resultado esperado: 'HH:MM:SS' 'ttC°' (HH=hora, MM=minuto, SS=segundo, tt=Temperatura)----------- //---------------------------------------------------------------------- }