Cocción de Cerveza con Arduino
cavieresuser_0086645678
c_cpp
4 years ago
5.9 kB
11
Indexable
#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)-----------
//----------------------------------------------------------------------
}Editor is loading...