Pages: 1 2 [3]   Go Down
Author Topic: Proyecto control de calefacción inteligente  (Read 9159 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

con ese código me sale por serial:

Temperatura Sensor 0: 0.00
Temperatura Sensor 1: 0.00
Temperatura Sensor 2: 0.00
La temperatura media es: 0.00
La temperatura minima registrada es: 0.00
La temperatura maxima registrada es: 0.00

  y lo tengo conectado al pin 2

"Con ese código" entiendo a que te refieres al del link que te he pasado ¿no?
Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 208
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

si claro! perdon se me habia pasado!
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

si claro! perdon se me habia pasado!

En el link, http://arduino.cc/forum/index.php?topic=39655.0

hablan de capturar las lecturas usando arrays y luego un poco más abajo dicen como convertir esa lectura de la matriz a grados
Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 208
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

si claro! perdon se me habia pasado!

En el link, http://arduino.cc/forum/index.php?topic=39655.0

hablan de capturar las lecturas usando arrays y luego un poco más abajo dicen como convertir esa lectura de la matriz a grados

No te entiendo
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

si claro! perdon se me habia pasado!

En el link, http://arduino.cc/forum/index.php?topic=39655.0

hablan de capturar las lecturas usando arrays y luego un poco más abajo dicen como convertir esa lectura de la matriz a grados

No te entiendo

El sensor que tienes en vez de facilitar una tensión en el pin de salida, te facilita un código binario. Si le echas un vistazo a su hoja de características, http://datasheets.maximintegrated.com/en/ds/DS18B20.pdf , verás por ejemplo que para indicar:

+125 grados centrigrados    ------ la salida del DS18B20, es decir, la entrada a tu pin de Arduino será,   ----->  0000 0111 1101 0000
0 grados centrigrados         ------ la salida del DS18B20, es decir, la entrada a tu pin de Arduino será,   ----->  0000 0000 0000 0000
-55 grados centigrados       ------ la salida del DS18B20, es decir, la entrada a tu pin de Arduino será,   ----->  1111 1100 1001 0000
... y todas las que quieras intermedias.

Lo que tienes que hacer es con esas lecturas, convertirlo a grados. Para ello usan la librería OneWire.h, que tendrás que descargar de algún sitio si aún no la tienes. En el ejemplo lo tienen conectado al pin 10.

Code:
#include <OneWire.h>

/* DS18S20 Temperature chip i/o
 
 */

OneWire  ds(10);  // on pin 10

void setup(void) {
  // initialize inputs/outputs
  // start serial port
  Serial.begin(9600);
}



void loop(void) {
  byte i;
  byte present = 0;
  byte data[12];
  byte addr[8];
  int Temp;
  if ( !ds.search(addr)) {
      //Serial.print("No more addresses.\n");
      ds.reset_search();
      return;
  }
  
  Serial.print("R=");  //R=28 Not sure what this is
  for( i = 0; i < 8; i++) {
    Serial.print(addr[i], HEX);
    Serial.print(" ");
  }

  if ( OneWire::crc8( addr, 7) != addr[7]) {
      Serial.print("CRC is not valid!\n");
      return;
  }
  
  if ( addr[0] != 0x28) {
      Serial.print("Device is not a DS18S20 family device.\n");
      return;
  }

  ds.reset();
  ds.select(addr);
  ds.write(0x44,1);         // start conversion, with parasite power on at the end
  
  delay(1000);     // maybe 750ms is enough, maybe not
  // we might do a ds.depower() here, but the reset will take care of it.
  
  present = ds.reset();
  ds.select(addr);    
  ds.write(0xBE);         // Read Scratchpad

  Serial.print("P=");  
  Serial.print(present,HEX);
  Serial.print(" ");
  for ( i = 0; i < 9; i++) {           // we need 9 bytes
    data[i] = ds.read();
    Serial.print(data[i], HEX);
    Serial.print("  ");
  }
  Temp=(data[1]<<8)+data[0];//take the two bytes from the response relating to temperature

  Temp=Temp>>4;//divide by 16 to get pure celcius readout

  //next line is Fahrenheit conversion
  Temp=Temp*1.8+32; // comment this line out to get celcius
  
  Serial.print("T=");//output the temperature to serial port
  Serial.print(Temp);
    Serial.print("  ");


  Serial.print(" CRC=");
  Serial.print( OneWire::crc8( data, 8), HEX);
  Serial.println();
}


« Last Edit: February 26, 2013, 02:18:43 pm by ponchingote » Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 208
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Si el problema es que entra en la parte de
 if ( !ds.search(addr)) {
      //Serial.print("No more addresses.\n");
      ds.reset_search();
      return;
  }
Logged


Offline Offline
God Member
*****
Karma: 6
Posts: 632
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ahora voy a programar el ciclo de histéresis para que la calefacción no arranque y para cada vez que hay una ligera variación sobre la temperatura. Supongo que lo voy a hacer por porcentajes de en torno al +/- 7%. Si veo que es mucho o poco, lo ajustaré mas adelante.

Si por ejemplo tenemos una temperatura ambiente de 15 grados y fijamos 20 grados como temperatura deseada, la calefacción arrancará:

*** 20 grados + 7% de 20 grados = 21,6 grados    ----> la calefacción se detiene.
*** 20 grados - 7% de 20 grados = 18,4 grados    ----> la calefacción arranca de nuevo hasta volver a alcanzar los 21,6 grados.

De ese modo, conseguimos evitar múltiples arranques y paradas y la oscilación de temperatura entre el punto mas alto y el mas bajo es de solo 3,2 grados.
El concepto está bien pero creo que 3,2 grados es una variación de temperatura muy alta. Los termostastos digitales sencillos lo hacen en un intervalo de +-0,5 grados. Yo no lo pondría mayor que eso.
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ahora voy a programar el ciclo de histéresis para que la calefacción no arranque y para cada vez que hay una ligera variación sobre la temperatura. Supongo que lo voy a hacer por porcentajes de en torno al +/- 7%. Si veo que es mucho o poco, lo ajustaré mas adelante.

Si por ejemplo tenemos una temperatura ambiente de 15 grados y fijamos 20 grados como temperatura deseada, la calefacción arrancará:

*** 20 grados + 7% de 20 grados = 21,6 grados    ----> la calefacción se detiene.
*** 20 grados - 7% de 20 grados = 18,4 grados    ----> la calefacción arranca de nuevo hasta volver a alcanzar los 21,6 grados.

De ese modo, conseguimos evitar múltiples arranques y paradas y la oscilación de temperatura entre el punto mas alto y el mas bajo es de solo 3,2 grados.
El concepto está bien pero creo que 3,2 grados es una variación de temperatura muy alta. Los termostastos digitales sencillos lo hacen en un intervalo de +-0,5 grados. Yo no lo pondría mayor que eso.

Ok!!, le bajaré mis ajustes para evitar tanta variación.

De todos modos, voy a observar mi termostato actual a ver que rango tiene.

Edito:

Ya le he configurado el ciclo de histéresis con un +/- 5 %. Al Arduino le doy el % que deseo y él calcula para cada temperatura de referencia su máx. y su mín. He estado realizando pruebas con:

Temperatura de Referencia, 20 ºC
Temp. Mínima, 19 ºC     (20 - 20*0.05)
Temp. Máxima, 21 ºC    (20 + 20*0.05)

Aplicando calor con un secador de pelo poco a poco, obtengo la siguiente respuesta:



En general estoy satisfecho. El sistema funciona correctamente y las inercias térmicas no son muy grandes teniendo en cuenta que lo calentaba acercando un secador y lo enfriaba acercando un ventilador.

« Last Edit: February 26, 2013, 07:06:04 pm by ponchingote » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Los avances de hoy han ido encaminados por la parte de la radiofrecuencia.

Con un kit de relé receptor de RF y un emisor de RF voy a arrancar y parar la caldera. Lo más sencillo es usar un kit de mando para puertas de garaje:

El relé receptor:



La fuente de alimentación para alimentar ese relé:



El montaje:



El emisor:



El emisor desmontado por una y otra cara:





Con un polimetro he identificado que los pulsadores tienen los contactos normalmente abiertos. Cuando se pulsa, cierran el circuito.

Pensando un poco en la cercana soldadura, con ayuda de un polimetro he identificado los puntos mas sencillos para soldar:






Esta semana me he propuesto realizar las soldaduras y encapsular el receptor en una cajita de plástico. Espero poneros avances muy pronto.
« Last Edit: February 27, 2013, 06:30:29 pm by ponchingote » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 27
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Como va el proyecto?.
Va teniendo muy buena pinta :-D

y la idea de usar el mando para el garaje esta muy bien, cual es el precio? y realmente necesita una fuente de alimentacion de 12v a 2A?

Tambien me a parecido muy interesante el DS18B20 Creo que seria facil pasar 2 cables por dentro de las paredes.
Tambien creo que deberías usar la temperatuda de la calle, porque si la temperatura en la calle son 19 o 20º en la calle y dentro esta a 18º para que se va a encender la calefaccion.

Espero leer noticias pronto

 
Logged

Pages: 1 2 [3]   Go Up
Jump to: