Usar arduino, para control de refrigeracion

Bueno, muy buen día otra vez, vuelvo con otra locura, pero creo que es parte de todos a los que nos gusta la tecnología, y bien permitan me presentarme yo soy técnico en refrigeración, y en esta rama sufrimos con el tema de repuestos, que algunas veces son escasos y otras veces muy caras, con lo cual se me ocurrió ver si podríamos convertir un arduino en un control de temperatura.

y Bien veamos como es el funcionamiento de un control de temperatura, pues muy simple,

1.- controlar el enfriamiento (hacer generar frio hasta la temperatura que querramos, ejemplo , - 18 grados y apaga el compresor, mediante un termostato, o un sensor (el cual traen todas las refrigeradoras)
cuando detecte una diferencia de 8 o 7 grados activa el compresor para compensar el frio perdido y llegada a su teperatura de -18, lo apaga y asi sucesivamente )
2.-el sistema de descongelamiento (normalmente es cada 8 horas, puesto que en ese tiempo se llega a formar una capa de hielo en la base del evaporador, lo cual hace, que se obstruya el ducto que lleva frio a la parte baja, osea al conservador) el tiempo de descongelamiento seria de unos 20 minutos.

Pues bien se que faltan algunos detalles, pero me gustaria que se contacte algun interesado en completar este lindo proyecto, no esta tan dificil, desde ya gracias de antemano a todos y estare a la espera.

PD:PARA CONTROLAR EL COMPRESOR QUE NO LLEGA NI A MEDIO HP PODEMOS USAR LOS RELES, COMO TAMBIEN PARA LA RESISTENCIA.

PD2: Ya llegue a completar un proyecto el cual es arranque de un motor ESTRELLA-TRIANGULO, cosa que ya estoy familiarizado con arduino, de momento no traigo mis sketches, puesto que estoy esperando que me lleguen mis materiales para comenzar con este proyecto, los cuales aproximadamente me demoren 1 mes, pero quisiera que algun interesado ya se vaya comunicando para ir comentando detalles, Saludos.

Para comenzar solo esbozas tu idea pero del proyecto que nos incumbe como comunidad arduino dices poco o nada.
Te enumero:

  1. Arduino cual usarás y porque
  2. Sensor de temperatura cual vas a usar y cuantos?
  3. Relé, cual y como lo vas a controlar, hablo de transistor o usarás un módulo rele listo para usar
  4. que pasa si a tu control de temperatura se le corta la luz, como reaunudarás el ciclo, lo has considerado?
  5. ya probaste que pasa al accionar el sistema estrella triángulo? No se tilda el arduino?

muy bien gracias por la respuesta, bueno yo creo poco a poco salen las ideas, y si lo posteo acá es por que quiero usar arduino, el cual mucha gente como yo tal vez de mi rama y de otras están comenzando a circular por aquí y se podría completar mi idea y así después volverlo útil para esta comunidad, pero en fin para continuar con la linea del post, estoy pensando en usar lo siguiente.

1.- arduino UNO,por que vi en varios tutoriales que lo usan y pienso que es suficiente pero algún otro que me aconsejen, estoy a la espera.
2.- sensor DS18B20 que tiene un rango de -30 a + 60 grados, lo cual seria suficiente para un refrigerador. (y ademas tiene una versión encapsulada anti humedad).
3.- creo que es suficiente usar el modulo rele. (los que ya vienen con toda la electrónica)
4.-en este punto si me dejo pensando , espero me de mas alcances.
5.-el sistema estrella-triangulo lo probé con un motor trifasico de 1HP y acciono normal, pero estuve leyendo que a mayor potencia podría afectar, pero para salir de dudas recién lo probare cuando tenga a mi alcance un motor de mayor potencia.

PD: se me ocurrió para simplificar, necesitaría convertir el arduino en un temporizador, que cumpla con la función de activar un rele que funcione ocho horas, otro rele de 30 minutos, y asi sucesivamente, donde yo podría usar un termostato el cual me cumplirla la función del sensor, valga la aclaración, que un rele funcione ocho horas y cumplido ese tiempo entre un rele con 30 minutos de función, termina los 30 minutos, vuelve el rele de ocho horas, y bueno asi sucesivamente.

1.- en el primer rele de ocho horas en la otra linea puedo poner un termostato, el cual cumpliría la funcion del sensor.
2.- en el segundo rele de 30 minutos podria poner la resistencia y a travez de la otra linea un bimetal (el cual es un protector para la resistencia que deshiela el evaporador).
3.- si se va la luz no afectaría mucho, por que con el compresor apagado del refrigerador, se generaría un deshielo natural por decirlo asi.

PD:2 cuanto es delay maximo para poner a un arduino.

Saludos.

Bien.. ahora tiene mas color la idea.
Ya el punto 4 de mi interrogante ya lo respondiste porque al cortarse la luz el compresor deja de refrigerar y no pasa nada, se retoma el proceso.

Lo de los rele x tiempos determinados no debes preocuparte, puedes hacer lo que quieras y cuantos quieras.
Olvidate de usar delay y ve pensando como se usa millis() para esa tarea.
Lo mejor es usar una máquina de estados. Mira un ejemplo que respondí ayer al respecto que mas allá que si funciona o no, ilustra algo muy útil en tu caso.

int pulsador    = 0;
int estado      = 0;
int pulsadorAnt = 0;
int cont        = 0;
unsigned long start = 0;
bool bocina = false;
byte maquina = 0;

void setup() {
  pinMode(12, OUTPUT);     //Este led si esta fijo esta encendido y si parpadea esta contando
  pinMode(10, OUTPUT);     //Este led se pone intermitente cuando est acontando
  pinMode(8, OUTPUT);      //En este pin conectaremos la bocina
  pinMode(2, INPUT);      //Aqui el pulsador
  digitalWrite(12, HIGH); //Encendemos un led para saber ue esta operativo
  digitalWrite(10, LOW);
}


void loop() {

  pulsador = digitalRead(2);  //Condicion del pulsador

  if ( pulsador && !pulsadorAnt ){
     estado = !estado;
  }
  pulsadorAnt = pulsador;

  if (estado){
      
      switch(maquina) {
          case 0: digitalWrite(10, HIGH);
                  digitalWrite(12, LOW);    //Contador
                  maquina = 1;
                  start = millis();
                  break;
          case 1: if (millis() - start > 250) {
                       digitalWrite(10, LOW);
                       start = millis();  
                       maquina = 2;
                   }
                   break;
          case 2: if (millis() - start > 250) {
                       digitalWrite(12, HIGH);
                       start = millis();  
                       maquina = 3;
                   }
                   break;
          case 3: if (millis() - start > 250) {
                      digitalWrite(12, LOW);
                      if (++cont >= 10) {
                          bocina = true;
                          digitalWrite(8, HIGH); //activo bocina
                          cont = 0;
                          maquina = 0;              
                      }
                  }
                  break;
      }
  }
  else {     
      digitalWrite(10, LOW);
      digitalWrite(12, HIGH);
      cont = 0;
      bocina = false; // Apago bocina
  }

  if (!bocina)
      digitalWrite(8, LOW);
}

maquina es una variable que toma valores 0..1...2...etc Solo cambia de estado cuando se cumple la condición que fuere.
Puede ser como tu dices un periodo de 8 hs, puede serde 30 min o una temperatura que alcanza el valor o diferencia de 8 grados.
En cada caso, esa situación hace que vaya a otro estado y si elaboras bien el sistema (esta muy bien explicado teóricamente en Documentación) tendrás un programa de control que será rápido a pesar de esperas cosas qeu demoren 8 o mas horas.
Claro que si se corta la luz hay que fijar criterios para retomar la tarea, pero ya lo veremos.
Leer la temperatura de un Dallas esta por todos lados. Google DS18B20 Arduino y verás como se hace, que librería (la única y ejemplos).
Controlar un rele es básico y es como controlar un led. Controlar 2 es lo mismo, etc, etc.
Solo considera que esto no es electrico, y que cada accionamiento del compresor puede provocar reinicios del arduino.
Es algo que debes atender o probar desde el segundo 0 para saber con lo que te vas a enfrentar.

surbyte:
4. que pasa si a tu control de temperatura se le corta la luz, como reaunudarás el ciclo, lo has considerado?

surbyte:
Claro que si se corta la luz hay que fijar criterios para retomar la tarea, pero ya lo veremos.

Uhh uhh, tengo una idea!!! levanto la mano

A mi se me viene a la mente que lo haga de la misma manera que lo haría un temporizador mecánico: paralizarse y reanudar hasta que la corriente regrese.

En un sistema electrónico, lógicamente la parte de "paralizar el tiempo" no sería posible si no hay almacenamiento no volátil. Para que el Arduino alcance a guardar el tiempo en momento justo, se requieren de varios detalles:

En hardware: lo que yo llamo "el truco del capacitor/condensador"; y reservar el pin 2.
En software: una interrupción (ISR) que se "dispara" justo cuando se corta el flujo eléctrico.

Para lo del hardware, ahora no tengo al alcance papel y lápiz para ilustrar el diagrama; pero en palabras, sería así:

Un condensador electrolítico de 4700 uF (o incluso hasta más) entre VIN y GND del Arduino.
Un diodo entre el positivo de la fuente de poder y VIN del Arduino; con la flecha (lado blanco) apuntando hacia este último (evita que el condensador se descargue donde no debe).
Pin 2 del Arduino al positivo de la fuente de poder (con divisor resistivo en caso de que supere los 5v).

Para lo del software, la siguiente ISR (función ejecutada únicamente en una interrupción) se me ocurre:

void guardarAhora() {
  PORTB = 0;
  PORTD = 0;
  // Apaga todo lo más rápido posible. Si esta ISR se dispara solo por un apagón, puede que haya que reconsiderarlo.

  EEPROM.write(0, enDescongelacion); // enDescongelacion es boolean
  EEPROM.put(1, (unsigned long)(millis() - start));
  // Solo un par de dudas aquí:
  // 1. millis aún retiene la cuenta de antes de la interrupción?

  // 2. Era reduntante la conversión? No estoy seguro si el resultado
  // entre una función que devuelve unsigned long y una variable de este tipo, se sigue considerando como tal.
  // No vaya a ser que escriban 2 bytes y se lean 4.
}

Es solo un "posible candidato", ya que no se conecta del todo con el código de surbyte.

Para que la interrupción sea efectiva, se debe agregar la siguiente línea de código, como la última del setup:

attachInterrupt(0, guardarAhora, FALLING);

De antemano, el pin 2 debe establecerse como INPUT.

Para que te complicas Lucario?
Retoma de donde sea como si encontrara la heladera en esa condición y empieza de nuevo.
No es una incubadora, yo mismo me di cuenta que todo el ciclo no tiene precisión.

Yo lo que estaba sugiriendo era la forma de cómo guardar el momento en el ciclo, justo cuando se cortaba la energía eléctrica.

Lo que no logro comprender es por qué dices que me estoy complicando la vida :confused:

O es que lo que tratas de decirme es que no es necesario guardar el tiempo sino solo el trabajo que llevaba haciendo? (refrigerar o descongelar)
Por eso expresé:

Lucario448:
A mi se me viene a la mente que lo haga de la misma manera que lo haría un temporizador mecánico: paralizarse y reanudar hasta que la corriente regrese.

Esta idea vino de cómo se lleva a cabo el ciclo de refrigeración/descongelación de la refrigeradora que tenemos en casa. No lleva tarjeta electrónica; por lo tanto, todos los controles son mecánicos.

La pieza que lleva la cuenta del tiempo de cada ciclo, es como una cajita plástica blanca, de la cual sobresalen un tornillo y cuatro terminales.
El tornillo se mueve con el paso del tiempo, entonces con este se puede forzar al ciclo de descongelación sin tener que esperar 8 horas.
Las terminales lógicamente son para las conexiones eléctricas (alimentación del temporizador, compresor, resistencia de descongelación).

La idea de una "parálisis" se debe a que este temporizador mecánico no se mueve si no hay energía eléctrica (recuerda que acabo de mencionar que una terminal es para alimentarlo).

En resumidas cuentas: mi propuesta haría que el Arduino haga las veces de este temporizador mecánico que acabo de describir.