Plancher chauffant et ECS, régulation Arduino

Par Igor Marcout    , Conflans (78)

Igor.marcout chez free

 

Contexte:

Après avoir fait un agrandissement de notre maison, prévu pour faire entrer la chaleur du soleil, et éviter les pertes en installant du triple vitrage (plus un toit débordant pour ne pas chauffer l’été), il était temps de relier le plancher solaire de cette partie (18 m2) à quelque chose… Cette pièce est ouverte sur le salon assez grand, il n’était donc pas question d’en faire le chauffage principal, mais un apport pour plus de confort. La dalle du plancher est épaisse (15cm minimum) pour profiter d’un déphasage et d’une inertie thermique importante.

Après beaucoup de calculs, de conseils sur le forum, le point faible était de ne pas pouvoir disposer une très grande surface de panneaux.

L’idée était donc de bénéficier

·         En hiver d’un apport de chauffage et d’un préchauffage d’eau chaude sanitaire

·         En été de 100% du chauffage de l’ECS

·         D’une belle expérience d’installation

Plan de l’installation:

Beaucoup de possibilité et de plans ont été imaginés, avec des vannes 3 voies, avec des échangeurs…. Et finalement j’aimais bien celui la car il était simple, et donc sans doute plus facile à piloter.

 

1.jpg

Matériel commandé:

2.jpg

Le matériel commandé chez solaire distribution a coûté environ 4000€ en tout.

A noter que je n’ai pas commandé de régulation car je voulais tester la possibilité de réguler avec un arduino (voir plus loin)

Installation:

IMG_1006.JPGIMG_1526.JPG

Régulation Arduino:

Pour la régulation, j’ai voulu tester l’arduino. Ma principale motivation était le nombre de possibilités pour un coût si modique, et en particulier la possibilité d’enregistrer les mesures pour analyser le fonctionnement.et donc j’ai fait des tests avant de commander le matériel solaire pour voir si ça avait l’air de fonctionner.

·         Réalisation de programmes simples, puis essai de mesure de température d’une sonde, puis de plusieurs sondes… ça marche.

·         Essais d’enregistrer des mesures sur une carte SD

Et donc je me suis lancé. La seule incertitude était de savoir si je pourrais controler les circulateurs avec l’arduino… la réponse est oui, ça marche du premier coup sur la sortie analogique, on peut régler la vitesse du circulateur pour maintenir une différence de 10 degrès entre les capteurs et le ballon en ajustant sa vitesse.

IMG_1008.JPG

Je vous partage le programme de l’arduino :

// pins utilisés:
// ethernet shield: digital 10 11 12 13 et le 4
// lecture des températures One wire: 9
// Circulateur capteur: 5
// Circulateur Plancher: 6
// Sonde luminosité: A0

// Bibliothèques pour lecture des températures one wire
#include <Wire.h>
#include <OneWire.h>
// Bibliothèque pour la carte SD de l'ethernet shield
#include <SD.h>
// Bibliothèque pour l'horloge
#include "RTClib.h"


/* Create an rtc object pour lecture date et heure*/
RTC_DS1307 RTC; //Classe RTC_DS1307
 
// DS18S20 Temperature chip i/o
OneWire ds(9); // on pin 10

// adresse MAC des capteurs de température
byte addr3[8] = {0x28, 0xFF, 0x24, 0xCF, 0x00, 0x16, 0x03, 0xA8}; // Sonde plancher
//byte addr1[8] = {0x28, 0xFF, 0x25, 0xD0, 0x00, 0x16, 0x03, 0xC7};
byte addr1[8] = {0x28, 0xFF, 0x20, 0x6D, 0x02, 0x16, 0x03, 0x56}; // Sonde capteur
byte addr2[8] = {0x28, 0xFF, 0x90, 0x49, 0x01, 0x16, 0x03, 0x83}; // Sonde ballon bas
byte addr4[8] = {0x28, 0xFF, 0xF0, 0x7F, 0x02, 0x16, 0x03, 0x37}; // Sonde ballon haut
int SignBit = 0;

File fichierSD;

// Variables globales
float Delta_Capteur = 0;
float Temp_Capteur = 0;
float Temp_Ballon_Bas = 0;
float Delta_Plancher = 0;
float Temp_Ballon_Haut = 0;
float Temp_Plancher = 0;
int Vitesse_Cir_Capteur = 0;
int Vitesse_Cir_Plancher = 120;
int Lumiere = 0;
boolean Pompe_Capteur = 0;
boolean Pompe_Plancher = 0;
boolean Mode_Hors_Gel = 0;
boolean Mode_Hiver = 0;

void setup()
{
  Serial.begin(9600);
 
  // demarre le shield SD
  if (!SD.begin(4)) {
    Serial.println("Carte SD: Erreur de demarrage!");
    return;
  }
  Serial.println("Carte SD prete.");
 
  //Démarrage de la librairie RTClib.h
  RTC.begin();
  //Si RTC ne fonctionne pas
  RTC.adjust(DateTime(__DATE__, __TIME__));
  if (! RTC.isrunning()) {
    Serial.println("RTC ne fonctionne pas !");
   
    //Met à l'heure à date à laquelle le sketch est compilé
    RTC.adjust(DateTime(__DATE__, __TIME__));
    //RTC.adjust(DateTime(2016, 11, 12, 22, 43, 0));
  }  
}

void loop()
{ Temp_Capteur      = tc_100(addr1);
  Temp_Ballon_Bas   = tc_100(addr2);
  Delta_Capteur     = Temp_Capteur - Temp_Ballon_Bas;
  Temp_Plancher     = tc_100(addr3);
  Temp_Ballon_Haut  = tc_100(addr4);
  Delta_Plancher     = Temp_Ballon_Haut - Temp_Plancher;
  Lumiere = analogRead(A0);
  Vitesse_Cir_Capteur = map(Delta_Capteur, 0, 25, 0, 255);  // vitesse proportionelle à delta capteur

  // le capteur fonctionne à partir d’un delta de 7°C, et s’arrête quand le delta est inférieur à 4°C

  if (Delta_Capteur >= 7) {
    analogWrite(5,Vitesse_Cir_Capteur);
    Pompe_Capteur = 1;
  }                      
  if (Delta_Capteur <= 4) {
    digitalWrite(5,LOW);
    Pompe_Capteur = 0;
  }

 

  // la circulation se met en marche si la température est en dessous de -3 °C (sécurité)
  if (Temp_Capteur <= -3) {
    Vitesse_Cir_Capteur = 120;
    analogWrite(5,Vitesse_Cir_Capteur); 
    Pompe_Capteur = 1;
    Mode_Hors_Gel = 1;
  }
  if (Mode_Hors_Gel and (Temp_Capteur >= 1)) {
    digitalWrite(5,LOW);
    Pompe_Capteur = 0;
    Mode_Hors_Gel = 0;
  }
  if (Delta_Plancher >= 5) {
    analogWrite(6,Vitesse_Cir_Plancher);
    Pompe_Plancher = 1;
  }
  if (Delta_Plancher <= 3) {
    digitalWrite(6,LOW);
    Pompe_Plancher = 0;
  }
 
  //Ouverture du fichier
  fichierSD = SD.open("arduino.txt", FILE_WRITE);
  //écriture dans le fichier
  if(fichierSD) {
   
    //Ecriture sur carte SD
    //Affichage de l'heure
  DateTime now = RTC.now();
   
    fichierSD.print(now.day(), DEC);
    fichierSD.print('/');
    fichierSD.print(now.month(), DEC);
    fichierSD.print('/');
    fichierSD.print(now.year(), DEC); 
    fichierSD.print(";");
    fichierSD.print(now.hour(), DEC);
    fichierSD.print(':');
    fichierSD.print(now.minute(), DEC);
    fichierSD.print(':');
    fichierSD.print(now.second(), DEC);
    fichierSD.print(";");
    fichierSD.print(Lumiere);
    fichierSD.print(";");
    fichierSD.print(Temp_Capteur);
    fichierSD.print(";");
    fichierSD.print(Temp_Ballon_Bas);
    fichierSD.print(";");
    fichierSD.print(Delta_Capteur);
    fichierSD.print(";");
    fichierSD.print(Pompe_Capteur);
    fichierSD.print(";");
    fichierSD.print(Vitesse_Cir_Capteur);
    fichierSD.print(";");
    fichierSD.print(Temp_Plancher);
    fichierSD.print(";");
    fichierSD.print(Temp_Ballon_Haut);
    fichierSD.print(";");
    fichierSD.print(Delta_Plancher);
    fichierSD.print(";");
    fichierSD.println(Pompe_Plancher);
    fichierSD.close();
  } else {
    // if the file didn't open, print an error:
    Serial.println("erreur ouverture fichier arduino.txt");
  }
    Serial.print("Lum ");
    Serial.print(Lumiere);
    Serial.print("Cap ");
    Serial.print(Temp_Capteur);
    Serial.print(";");
    Serial.print(Temp_Ballon_Bas);
    Serial.print(";");
    Serial.print(Delta_Capteur);
    Serial.print(";");
    Serial.print(Pompe_Capteur);
    Serial.print(";");
    Serial.print(Vitesse_Cir_Capteur);
    Serial.print("; Plancher ");
    Serial.print(Temp_Plancher);
    Serial.print(";");
    Serial.print(Temp_Ballon_Haut);
    Serial.print(";");
    Serial.print(Delta_Plancher);
    Serial.print(";");
    Serial.println(Pompe_Plancher);
    delay(16000); // attend 16s ce qui fait 20s par cycle plus tard, j’ai passé à 30 s le cycle
}

// Fonction de recherche de la température (dont on connait l'adresse)
float tc_100(byte* addr){
  int HighByte, LowByte, TReading;
  float TReadingf=0.0;
  byte data[12];
  byte i;
 
  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.
 
  ds.reset();
  ds.select(addr);
  ds.write(0xBE); // Read Scratchpad
 
  for ( i = 0; i < 9; i++) { // we need 9 bytes
    data[i] = ds.read();
  }
  data[1]=data[1] & B10000111; // met à 0 les bits de signes inutiles
  LowByte = data[0];
  HighByte = data[1];
  TReading = (HighByte << 8) + LowByte;
 
  TReadingf=float(TReading)*6.25/100;
  return (TReadingf) ; // multiply by (100 * 0.0625) or 6.25
}

Les sondes de température utilisées sont des DS18S20 d’un coût de quelques euros le lot de 5. Autre avantage : on peut en brancher plusieurs sur une même entrée de l’arduino (et donc ne tirer qu’un fil), étant donné que chacune a une adresse différente.

Un test que j’ai réalisé : la connexion avec l’ethernet shield en mode serveur pour consulter les températures sur internet quand on est pas à la maison. Pas très stable, pas facile à faire, j’ai donc abandonné l’option, l’objectif étant de ne pas compliquer les choses.

Constats et modifications sur l’installation:

Après l’installation et le fonctionnement, quelques remarques sur les choix et l’installation :

Les circuits se mettent rapidement en thermo siphon, même s’il y a peu de différence de hauteur : c’est en remarquant que le sol du plancher solaire était chaud au mois de juin que je m’en suis rendu compte. Il faut prévoir de couper le circuit pour éviter cela (ouf, j’avais mis une vanne ça tombe bien).

De même, l’hiver quand il fait froid la nuit, la circulation se fait légèrement avec les panneaux (pas besoin de sécurité antigel). La mesure des températures m’a prouvé que c’était assez faible, mais un anti retour à clapet aurait pu être ajouté.

Si c’était à refaire, incontestablement, 2 à 4 m2 de panneaux supplémentaires seraient bienvenus.

Une autre petite source d’inconfort est due à la longueur de tuyau supplémentaire en été quand le cumulus électrique n’est plus en fonctionnement : l’eau chaude met plus de temps pour arriver au robinet.

Bilan 27 décembre 2017:

Après un an de fonctionnement, voici l’exemple d’une journée d’hiver, alors que nous étions absents (le plancher est à 12°C). Ne prenez pas en compte les heures, l’horloge s’est décalée dans le temps, le soleil ne s’est pas levé à 5h !

3.jpg

On voit que le circulateur des panneaux a fonctionné pendant 5h environ, avec une température maximale de 35°C

Le plancher (3m3 de béton) est passé de 12.25 à 16°C, et les 800litres du ballon de 18 à 21°C, ce qui est normal, l’hiver, le programme privilégie le chauffage du plancher, pour que l’eau dans le ballon ne monte pas en température et que les panneaux aient un meilleur rendement.

Le bilan est correct pour 8m2 de panneaux, mais cette journée n’est pas représentative, un grand soleil toute la journée au mois de décembre est plutôt rare dans la région.

Bilan 25 juin 2017:

Voici cette fois une journée de fin du mois de juin. Journée pas 100% ensoleillée mais largement suffisante pour maintenir la température de l’eau chaude sanitaire. On voit bien l’amplitude de mesure de luminosité caractéristique du mois de juin.

4.jpg

Le circulateur des panneaux n’est pas continu, car des passages nuageux en cours de journée empêchent la chauffe complète.

Les diminutions de la courbe bleue correspondent à une douche. Ca montre la bonne stratification du ballon, car seule la température du bas du ballon diminue, le haut restant chaud. De même, quand les panneaux chauffent, le bas du ballon chauffe en premier, puis le haut.

Malgré une journée globalement belle mais pas parfaite, l’eau dans le ballon chauffe d’environ 10°C Rappelons que les deux grand panneaux étant verticaux (90 degrés), ils chauffent peu à cette saison, l’eau dans les panneaux ne dépasse pas les 75°C, ce qui est bien pour ne pas endommager l’antigel. Malgré tout, si c’était à refaire, un petit angle permettrait de chauffer à peine plus le ballon (vers 70°C), ce qui serait préférable.

Bilan 20 Avril 2017:

L’installation a été dimensionnée pour ces journées : pouvoir bénéficier d’un complément de chauffage à mi saison.

5.jpg

Les panneaux chauffent efficacement pendant plus de 7 heures, c’est une belle journée ensoleillée.

·         Le plancher passe de 20 à 27 °C ce qui est très bien. Dans tous les cas, une consigne limite la chauffe dans le plancher à 28°C. Ensuite, c’est l’eau du ballon qui monte en température.

·         L’eau chaude sanitaire dépasse les 30 degrés, et donc le cumulus électrique recoit de l’eau préchauffée à 30°C au lieu de 13°C environ..

Le résultat est que le soir à cette saison, le plancher est souvent légèrement tiède (jamais chaud), ce qui est très confortable.

Bilan de l’installation:

Après déjà trois ans de fonctionnement, il n’y a pas eu de panne ou de grosse intervention à déplorer.

L’été la pompe du plancher solaire ne fonctionne pas (logique). Au redémarrage à l’automne suivant, elle s’était grippée un peu mais est finalement repartie. Il faut prévoir un petit démarrage de temps en temps pour éviter ce désagrément.

Je savais que la quantité de panneau serait un peu juste mais je n’avais pas d’autre possibilité. Je voulais éviter la surchauffe en été, j’ai alors fait les calculs d’après le livre de l’APPER, et la réalité a alors confirmé les calculs avec une grande précision. Il n’y a pas de surchauffe en été, étant donné que les deux grands panneaux sont verticaux. Il pourrait même y avoir un peu plus de chaleur, le ballon n’ayant pas dépassé les 75°C.

A mi saison, c’est le fonctionnement optimal, c’est ce que je recherchais et c’est vraiment le mieux. Une journée ensoleillée de mars - avril est très efficace. Le soir (avec un déphasage de plusieurs heures), le sol est tiède (sachant que la température au cœur de la dalle est limité à 28°C). Le confort est intéressant.

En hiver au mois de janvier… sans commentaire… il fait rarement très beau beau en ile de France à cette saison, au mieux l’installation sert à préchauffer l’eau chaude sanitaire de 10 à 25 °C, ce qui est mieux que rien mais pas très productif.

L’installation fait que l’été, le cumulus électrique est court-circuité, et donc éteint. C’est là ou j’ai pu mesurer exactement sur ma consommation le cout de maintien du cumulus élecrtique à 60°C : 4 kW par jour en été, qui sont donc économisés entre mai et octobre (sauf s’il y a 4 jours sans soleil, dans ce cas je dois repasser en électrique, mais cela arrive très rarement).

Concernant l’arduino, je ne regrette pas le choix : la mesure des température sur une carte SD m’a permis de vérifier le fonctionnement, en particulier ce qui se passait la nuit en hiver, et quand le plancher chauffait ou pas. Ca m’a permis de faire les courbes que vous avez vu plus haut. Toujours intéressant. Par ailleurs, c’est une vraie horloge : pas une panne, pas un souci, si l’électricité se coupe il repart la seconde suivante.

Enfin, je termine par un remerciement pour vos conseils sur le forum, et pour les conseils de solaire distribution lors de l’envoi du devis, concernant le matériel qu’il convenait de ne pas oublier.










Retour sommaire En pratique