Publicado el 1 comentario

iPro Cooler – bebida fresca en momentos

Cristian S. participa en el concurso «Arduino in Love 2019» con este fantástico enfriador de bebidas con Peltier.

iProcooler trata de un sistema de mantenimiento térmico mediante una célula peltier capaz de bajar la temperatura a 2 grados centígrados. El sistema es totalmente automático, gracias a la ayuda de un Arduino uno que controla la conexión y desconexión de la célula dependiendo de las condiciones. Tiene 3 fases:

1- ENFRIAMIENTO El sensor “CNY70” detecta que se ha colocado una taza, vaso, bote, etc… en ese momento el sensor “lm35” nos detecta la temperatura que tenemos en la célula y de ello dependerá la iluminación del anillo led que ayudara al usuario visualmente a saber cuando la célula ha llegado a su temperatura de funcionamiento encendiéndose esta de color azul.


2-BEBEMOS Cuando levantemos la taza, vaso, bote, etc.. para beber el “CNY70” no detectará y empezará un temporizador de 30 segundos el anillo en este momento cambia de color a amarillo, si lo dejamos de nuevo el anillo volverá a pasar a verde.


3- RETIRAMOS Cuando terminamos y retiramos la taza, vaso, bote, etc… el “CNY70” deja de detectar y empezará un temporizador de 30 segundos, cuando pase ese tiempo el anillo cambiará a color rojo y la célula se desconectará.

A continuación, el código para Arduino:

/ CONCURSO ------>  ARDUINO IN LOVE                 
//Nombre del proyecto--> iProCooler
//Proyecto I+D+i--> Christian Soriano 
//Codigo--> Iván Sanchis
//Rev.1
//CONCURSO------>  ARDUINO IN LOVE
#include "FastLED.h"

const char pausa = 100;
const char seg_off = 30;
const char tiempoLED = 50;
const boolean bote = HIGH;
const boolean encender = HIGH;
const boolean apagar = LOW;
const float tempBoteON = 30;
float serieGrados[50];

const char NUM_LEDS = 24;
#define LED_TYPE WS2812B
#define COLOR_ORDER GRB
const char BRIGHTNESS = 128;
CRGB leds[NUM_LEDS];

const char detectorBOTE = 8;
const char pinLM35 = A1;
const char celula = 0;
const char ventilador = 3;
const char DATA_PIN = 6;

float tempC;
float mediaGrados = 0;
int i,j,k;
void setup()
{
  Serial.begin(9600);
  analogReference(INTERNAL);
  pinMode(detectorBOTE, INPUT);
  pinMode(pinLM35, INPUT);
  FastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS);
  FastLED.setBrightness( BRIGHTNESS );
  for (i = 0; i < 50; i++)
  {
    mediaGrados = 0;
    for (j = 0; j < 50; j++)
    {
      tempC = analogRead(pinLM35);
      tempC = (1.1 * tempC * 100.0) / 1023.0;
      mediaGrados = mediaGrados + tempC;
    }
    mediaGrados = mediaGrados / 50.0;
    serieGrados[i] = mediaGrados;
  }
}

int haybote = 0;
float temperatura = 0.0;
unsigned long inicio;
boolean temporizador = LOW;
char pos = 0;
void loop()
{
  haybote = digitalRead(detectorBOTE );  //lectura digital de pin
  mediaGrados = 0;
  for (i = 0; i < 50; i++)
  {
    tempC = analogRead(pinLM35);
    tempC = (1.1 * tempC * 100.0) / 1023.0;
    mediaGrados = mediaGrados + tempC;
  }
  mediaGrados = mediaGrados / 50.0;
  serieGrados[pos] = mediaGrados;
  if (pos < 50)
  {
    pos++;
  }
  else
  {
    pos = 0;
  }
  temperatura = 0.0;
  for (k = 0; k < 50; k++)
  {
    temperatura = temperatura + serieGrados[k];
  }
  temperatura = temperatura / 50.0;
  if (haybote == bote)
  {
    temporizador = LOW;
    if (temperatura < tempBoteON)
    {
      digitalWrite(celula, encender);
      digitalWrite(ventilador, encender);
      for (j = 0; j < NUM_LEDS; j++)
      {
        leds[j] = CRGB::Green;
        FastLED.show();
        delay(tiempoLED);
      }
    }
    else
    {
      digitalWrite(celula, encender);
      digitalWrite(ventilador, encender);
      for (j = 0; j < NUM_LEDS; j++)
      {
        leds[j] = CRGB::Blue;
        FastLED.show();
        delay(tiempoLED);
      }
    }
  }
  else
  {
    if (temporizador == LOW)
    {
      inicio = millis();
      temporizador = HIGH;
    }
    if ( millis() - inicio < seg_off * 1000)
    {
      digitalWrite(celula, encender);
      digitalWrite(ventilador, encender);
      for (j = 0; j < NUM_LEDS; j++)
      {
        leds[j] = CRGB::Yellow;
        FastLED.show();
        delay(tiempoLED);
      }
    }
    else
    {
      digitalWrite(celula, apagar);
      digitalWrite(ventilador, apagar);
      for (j = 0; j < NUM_LEDS; j++)
      {
        leds[j] = CRGB::Red;
        FastLED.show();
        delay(tiempoLED);
      }
    }
  }
  delay(pausa);
}

¿Te lo quieres montar en casa? Estos son los componentes que necesitas:

Bebiendo
Desconexión