Gestion Chaufferie


#1

Bonjour,
Je suis en train de créer un montage pour gérer mon installation de chauffage qui comprend 1 cuisinière bouilleur, un ballon tampon, un ballon solaire ainsi que 3 circulateurs et plein de tuyau dans tous les sens .
Je me suis orienter vers un arduino avec des sonde température i2c etanche ds18b20.
Mon programme à l’aire de marcher.
Je voudrait réaliser maintenant la carte pour accueillir un arduino nano, 5 ou 6 relais, un circuit watchdog, des connecteurs peut être un afficheur et quelque boutons.
Quelle logiciel de cao utilise-t-on à l’acolab pour faire les schéma et les typons, au lycée j’utilisais orcad mais c’était il y a 20 ans (sniff je viens de prendre un coup de vieux)?
merci d’avance pour votre aide
Gael


#2

Celui que je connais le mieux (parce que c’est le seul que je connaisse), c’est KiCAD. Sinon il y a Eagle mais je ne connais pas du tout.


#3

Perso je ne serais pas contre une petite formation à kicad. Je m’y suis cassé les dents sur les port hdmi, je n’ai pas pu/su trouver le footprint correspondant à la pièce que j’avais.


#4

Bonjour
voici un lien (parmi tant d’autres) pour ce que tu cherches.

Perso j’utilise Protéus 8 il allie simulations, vérifs et schéma

http://www.elektronique.fr/logiciels/

Le lun. 15 oct. 2018 à 08:47, olivier noreply-forum@acolab.fr a écrit :


#5

Tu peux même ajouter ou créer des composants

Le lun. 15 oct. 2018 à 13:13, Nir Drag dr4gnir@gmail.com a écrit :


#6

merci pour ta réponse mais proteus est hors de prix


#7

merci je vais tester KiCAD qui est gratuit.
Attention il fait 1Go à télécharger (ça ne me pose pas de problème j’ai la fibre au fin fond de ma montagne)


#8

Kicad n’est pas compliqué à utiliser… c’est juste la prise en main qui est fastidieux


#9

La prise en main me semble facile je viens de réaliser 50% de mon schéma en 2h30 (je doit encore choisir quelque composant).
La base de donnée est bien fournie.

Quelle que composants de base (LED, uln2003) n’ont pas d empreinte layaout.

Faut que je regarde comment réaliser des layaout .


#10

Bonsoir ,
En prévision de la réalisation de ma carte, quelle est la technique de réalisation des circuits imprimés au sein de notre association ?
Je connaissais insolation aux uv, révélateurs, gravure chimique.
Ça date d il y a 20ans, j ai encore mon matos mais pas les produits.


#11

De ce que j’en ai vu:
Impression sur papier transfert (en mode miroir), transfert papier sur le cuivre.
Gravure chimique dans un bain à bulle verticale.
Une video qui devrait aider


#12

Voici un petit schéma simplifié de mon installation .


J’utilise des 3 sondes de température DS18B20 étanches, un thermostat de cheminé (bientot une PT1000), un arduino nano, un afficheur 4x20 I2C,
Les rond avec un triangle ce sont des circulateurs (230V).
Voici une ébauche de mon programme :
//Programme d’essai d’algorithme de gestion du chauffage
// Vers 0.6
//Par Gael HEMET

//Montage avec carte 8 relais
//Montage avec afficheur 20x4 I2C
//
//Programme d’essai d’algorithme de gestion du chauffage avec lecture i2C

/* Adresses des capteurs de température /
/

SENSOR_ADDRESS_1[] = { 0x28, 0xFF, 0x24, 0x5E, 0x3D, 0x04, 0x00, 0x97};
SENSOR_ADDRESS_2[] = { 0x28, 0xC7, 0x19, 0x77, 0x1A, 0x13, 0x01, 0x62};
SENSOR_ADDRESS_3[] = { 0x28, 0x5B, 0xF4, 0x5A, 0x1A, 0x13, 0x01, 0x75};
SENSOR_ADDRESS_4[] = { 0x28, 0x92, 0xF7, 0x55, 0x1A, 0x13, 0x01, 0xA8};
SENSOR_ADDRESS_5[] = { 0x28, 0xD3, 0x56, 0x4C, 0x1A, 0x13, 0x01, 0xBF};
SENSOR_ADDRESS_6[] = { 0x28, 0xFF, 0x8F, 0x5C, 0x1A, 0x13, 0x01, 0xE1};
*/

/* Dépendance pour le bus 1-Wire */
#include <OneWire.h>
/Dépendence pour afficheur LDC I2C/
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,20,4); // paramètre de l’affiche i2c (adresse,nb colonnes, nb de lignes)

/Féfinition des variables/
float TempPoele=0; //variable de temperature du Poele traduite . On l’initialise à 0.
float TempBallon=0; //variable de temperature du Ballon Tempon . On l’initialise à 0.
float TempSolaire=0; //variable de temperature du Ballon Solaire . On l’initialise à 0.
boolean TempCheminee = false;//variable donnant l’état de la temperature de la cheminée (capteur tout ou rien réglable)
boolean EtatHeuresCreuse = false;//variable indiquant si on est en heure creuse(contact sec depuis le compteur EDF) non utilisé encore
int AffPoele=0; //variable pour afficher la temperature du poele.On l’initialise à 0.
int AffBallon=0; //variable pour afficher la temperature du ballon. On l’initialise à 0.
int AffSolaire=0; //variable pour afficher la temperature du ballon solaire. On l’initialise à 0.

/* definition des broches*/

const int Cheminee= 5; // numero broche où est connecté le contacteur de temperature de la cheminé
const int HeuresCreuse= 4; // numero broche où est connecté le contacteur heure creuse
const int CircPoele = 13; // numero broche où est connecté le Circulateur du Poele et c’est la LED bleu
const int CircRadiateur = 12; // numero broche où est connecté le Circulateur des Radiateurs et c’est la LED verte
const int CircSolaire = 11; // numero broche où est connecté le Circulateur du Ballon Solaire et c’est la LED jaune

/* Broche du bus 1-Wire */
const byte BROCHE_i2C = 2;

/* Adresses des capteurs de température /
const byte Poele[] = { 0x28, 0xFF, 0x24, 0x5E, 0x3D, 0x04, 0x00, 0x97};
const byte Ballon[] = { 0x28, 0xC7, 0x19, 0x77, 0x1A, 0x13, 0x01, 0x62};
const byte Solaire[] = { 0x28, 0x5B, 0xF4, 0x5A, 0x1A, 0x13, 0x01, 0x75};
/
calibrage sonde*/
const float CalPoele = -1.02;
const float CalBallon = -1.41;
const float CalSolaire = -.95;

/* définition des valeurs de seuils*/

const int seuilpoele = 40;
const int seuilpoelehysteresis = 10;
const int seuilPoelesecu = 75;
const int seuilsolaire = 40;
const int seuilsolairehysteresis = 5;
const int seuilchauffage = 35;
const int seuilchauffagehysteresis = 10;

/* Création de l’objet OneWire pour manipuler le bus 1-Wire */
OneWire ds(BROCHE_i2C);

/* Fonction de lecture de la température via un capteur DS18B20 */

float getTemperature(const byte addr[]) {
byte data[9];
// data[] : Données lues depuis le scratchpad
// addr[] : Adresse du module 1-Wire détecté

/* Reset le bus 1-Wire et sélectionne le capteur */
ds.reset();
ds.select(addr);

/* Lance une prise de mesure de température et attend la fin de la mesure */
ds.write(0x44, 1);
delay(800);

/* Reset le bus 1-Wire, sélectionne le capteur et envoie une demande de lecture du scratchpad */
ds.reset();
ds.select(addr);
ds.write(0xBE);

/* Lecture du scratchpad */
for (byte i = 0; i < 9; i++) {
data[i] = ds.read();
}

/* Calcul de la température en degré Celsius */
return (int16_t) ((data[1] << 8) | data[0]) * 0.0625;
}

void setup()
{
//lcd.begin(16,2); //Initialisation de l’afficheur
lcd.init(); // Initialisation de l’afficheur i2C
lcd.backlight();// alumage retro éclairage
lcd.setCursor(3,0);
lcd.print(“Initialisation”);
Serial.begin(9600); //Initialisation de la communication avec la console
pinMode(CircPoele, OUTPUT); //CircPoele est une broche de sortie
pinMode(CircRadiateur, OUTPUT); //CircRadiateur est une broche de sortie
pinMode(CircSolaire, OUTPUT); //CircSolaire est une broche de sortie
pinMode(Cheminee, INPUT); //CircSolaire est une broche d’entrée
digitalWrite( Cheminee, HIGH);// active la résistance de tirage interne
pinMode(HeuresCreuse, INPUT); //HeuresCreuse est une broche d’entrée
digitalWrite( HeuresCreuse, HIGH);// active la résistance de tirage interne
delay(500);
lcd.setCursor(8,2);
lcd.print(“Ok!”);
delay(1000);
lcd.clear();
lcd.print(“Poele Ballon Solaire”);
lcd.setCursor(0,3);
lcd.print(“Cheminee froide”);

}

void loop() {

TempCheminee=digitalRead(Cheminee);
EtatHeuresCreuse=digitalRead(HeuresCreuse);

/* Lit les températures des trois capteurs /
TempPoele = getTemperature(Poele)+ CalPoele;
TempBallon = getTemperature(Ballon)+CalBallon;
TempSolaire = getTemperature(Solaire)+CalSolaire;
/
mise en forme des données pour affichage*/
AffPoele = TempPoele;
AffBallon = TempBallon;
AffSolaire = TempSolaire;
/* Affichage des temperature*/
lcd.setCursor(1,1);
lcd.print(AffPoele);
lcd.setCursor(8,1);
lcd.print(AffBallon);
lcd.setCursor(16,1);
lcd.print(AffSolaire);
/Affichage des valeurs sur moniteur Serie/
Serial.print(" Temp Poele : “);
Serial.print(TempPoele);
Serial.print(” Temp Ballon : “);
Serial.print(TempBallon);
Serial.print(” Temp Solaire : ");
Serial.print(TempSolaire);
Serial.print("cheminee “);
Serial.println(TempCheminee);
// Serial.print(” Etat Heures Creuse : ");
// Serial.println(EtatHeuresCreuse);

/algo gestion circulateur ballon tempon/

if (TempCheminee == 0)
{ lcd.setCursor(9,3);
lcd.print(“chaude”);

if (TempPoele > seuilpoele)
  {
    digitalWrite(CircPoele, LOW); //met en marche le circulateur du poele 
  }

else
  {
     if (TempPoele < seuilpoele-seuilpoelehysteresis) 
    {
      digitalWrite(CircPoele, HIGH); // arrete le circulateur du poele
    }
  }
}
else {
  digitalWrite(CircPoele, HIGH);// arrete le circulateur du poele

lcd.setCursor(9,3);
lcd.print("froide");
}

if (TempPoele >seuilPoelesecu)
{ digitalWrite(CircPoele, LOW); //met en marche le circulateur du poele
}

/* algo gestion circulateur chauffage*/
if (TempBallon > seuilchauffage)
{
digitalWrite(CircRadiateur, LOW); //met en marche le circulateur des radiateurs
}

else
  {
     if (TempBallon < seuilchauffage-seuilchauffagehysteresis) 
    {
      digitalWrite(CircRadiateur, HIGH); // arrete le circulateur des radiateurs
    }
  }

/* algo gestion circulateur ballon solaire*/

if (TempSolaire < TempBallon)
{
if (TempBallon > seuilsolaire)
{
digitalWrite(CircSolaire, LOW); //met en marche le circulateur du ballon solaire
}
else
{
if (TempBallon < seuilsolaire - seuilsolairehysteresis)
{
digitalWrite(CircSolaire, HIGH); // arrete le circulateur du ballon solaire
}
}
}

else
{
if (TempSolaire > TempBallon+seuilsolairehysteresis)
{
digitalWrite(CircSolaire, HIGH); // arrete le circulateur du ballon solaire
}
}

}


#13

En pratique j’ai quelque bug d’affichage lorsque les circulateurs sont commandés et des problèmes de faux contacts avec mes rallonges de câble de sondes DS18B20 (les câble d’origine ne font que 1 m).
Si quelqu’un peut m’explique une partie du programme que j’ai récupère sur le net pour les sonde DS18b20:
/* Lance une prise de mesure de température et attend la fin de la mesure */
ds.write(0x44, 1);
delay(800);

/* Reset le bus 1-Wire, sélectionne le capteur et envoie une demande de lecture du scratchpad /
ds.reset();
ds.select(addr);
ds.write(0xBE);
/
Lecture du scratchpad */
for (byte i = 0; i < 9; i++) {
data[i] = ds.read();
}

/* Calcul de la température en degré Celsius */
return (int16_t) ((data[1] << 8) | data[0]) * 0.0625;
}
merci d’avance.


#14

J’imagine que tu as récupéré ça là : https://www.carnetdumaker.net/articles/mesurer-une-temperature-avec-un-capteur-1-wire-ds18b20-et-une-carte-arduino-genuino/

Ils montrent dans l’image ‘Structure du scratchpad’ pourquoi tu dois lire 9 octets et ne t’occuper que de l’octet 0 (octet de poids faible) et du 1 (octet de poids fort).

(data[1] << 8) | data[0] transforme tes deux octets en un nombre de 2*8 = 16 bits (voir figure Structure du registre de température)
(int16_t) transforme ce nombre en un entier signé pour gérer les négatifs

0.0625 est le coefficient en degré par bit :
d’après https://datasheets.maximintegrated.com/en/ds/DS18B20.pdf :
The core functionality of the DS18B20 is its direct-todigital
temperature sensor. The resolution of the temperature
sensor is user-configurable to 9, 10, 11, or 12 bits,
corresponding to increments of 0.5°C, 0.25°C, 0.125°C,
and 0.0625°C, respectively. The default resolution at
power-up is 12-bit.

J’espère que ça aide.


#15

Merci pour ces renseignements.
Je comprend la conversion.
Ce que je ne comprend pas c’est pourquoi est-ce qu il ne faut pas le faire à pour chaque capteurs ?
Sinon mon montage est installé et fonctionne

.(j’avoue j’ai fait le ménage).
Maintenant il me reste à rajouter la sonde de température de la cheminé (PT1000 + Max31865 RTD).
.
Je cherche maintenant un expert en hydro-thermie (si ça existe ) pour m’aider à fixer mes seuils de déclenchement.
J’ai remarqué qu’au démarrage de la cuisinière la température du ballon solaire chute pour s’équilibrer avec celle du ballon tampon. Hors tous les circulateurs sont coupé à ce moment et j’ai un clapet anti-thermosiphon en sortie du circulateur de mon ballon solaire.
Petite subtilité l’eau chaude sanitaire reste bien chaude à 55°C au robinet (peut être pas les 200L).


#16

La vache !!! ça fait du tuyau :thinking:


#17

Un truc m’interpelle …:thinking:
Sur ton schéma de principe au début du post :
Es-tu sûr que la boucle “capteurs solaires - ballon solaire”, qui tourne semble-t-il en “autonome”, soit toujours efficace ?
Je m’explique : si tu as une source de chaleur délivrée par ton poêle (ou d’ailleurs toute autre source non représentée comme ton bouilleur de cuisinière), en même temps qu’un apport par les capteurs solaires en cas de fort ensoleillement (même l’hiver !), tu auras certainement une “mise en retrait” de cette boucle (capteurs solaires) du fait de sa “non priorité” dans le système. Sa boucle de régulation va d’elle-même se mettre en retrait car elle est perturbée par l’eau chaude apporté par ta boucle rouge (poêle/ballon tampon). Un double échangeur fonctionne dans les 2 sens !
Si on prend le cas où le circuit radiateur est plus chaud que le circuit “solaire”, tu va fermer le circuit “solaire” et perdre les calories “solaires”. Et si tu donne en consigne une température très haute pour demander à circuler “tout le temps” … c’est l’inverse qui va se produire : tu vas réchauffer ton circuit “solaire” et … les hirondelles :grin:
Il faudrait pouvoir gérer cet apport “solaire” en toute première priorité et pouvoir déjà absorber les calories “solaires”.
En fait, je pense qu’il faudrait que tu intègres une donnée supplémentaire : le différentiel de T° entre la sortie de ton capteur solaire et la boucle rouge…
Ensuite, c’est pas simple, il faut récupérer d’abord en “basse T°” les calories solaires, et les injecter dans le circuit “froid”, mais à mon avis, le gros du problème vient de la “double boucle” d’échange dans le même ballon “solaire”, il faudrait un autre échangeur pour faire un 1er étage d’échange…
Ton truc, à base d’échange de fluides … pas simple mon gaillard !!! C’est pas comme de l’injection de courant en Elec … là s’arrête l’analogie tant utilisée en cours :wink:
C’est mon avis :roll_eyes:


#18

Le circuit solaire est entièrement autonome c’est la mon grand problème.
Par contre la gestion solaire coupe le circulateur solaire si les panneaux ne sont pas à haute température (60°C je croit).Je ne chauffe donc pas les corbeaux (mon cat à boufé toute les hirondelles) .

La régulation solaire ne mesure pas la température de l’eau chaude sanitaire

L’installation à était conçue par un bureau d’étude (celui du fabriquant du ballon solaire) et installé par un plombier spécialiste.Il s’agit d’un schéma classique en cas de bouilleur à bois qui ne peut pas géré la source de chaleur.

J’ai dû faire rajouter un clapet thermo-siphon mais sans grande efficacité.

Effectivement mes radiateurs siphonnent les calories mon ballon solaire si le circulateur de celui-ci ne tourne pas.

Il y a aussi un truc qui s’appelle la loi d’eau ???

Si je veut gagner en efficacité il faudrait rajouter des électrovannes avec gestion des sécurités pour ne pas faire griller les circulateurs (mais vue le prix et la complexités à installer)
Je souhaite aussi faire évoluer l’installation avec une gestion du surplus des calories solaire en les réinjectant dans le ballon tampon.

Pour priorisé le solaire je peux récupérer l’info que le solaire fonctionne (sois par le circulateur soi par le voyant sur le ballon solaire).

J’ai oublier aussi il y a une résistance électrique d’appoint entièrement autonome dans le ballon solaire.

J’ai peur que mon système devienne comme nos voitures diesel (lol): une usine à gaz.

J’ai aussi un petit problème la température du ballon solaire chute dès que la cuisinière chauffe la je comprend pas. Le circuit froid du ballon solaire se réchauffe et part dans le circuit froid bouilleur à bois.
Peut être quand raccordant le circuit froid bouilleur au ballon tampon et non aux tuyau “froid” ça marchera mieux.

merci pour tes renseignements
a+

Ps: je vais peut être me rapprocher de ratman mais il me demande un schéma normalisé .


#19

Monsieur Ratman est bien difficile !!!


#20

Première panne les sorties de l arduino commandant la carte 8 relais ont grillée :
Relais non commandés bouilleur qui monte en temperature et sécurité thermique(vanne commandée par la pression injecte de l eau froide et évacue l eau chaude a l égout) du bouilleur mise en marche.
Je vais revoir la commande de la carte 8 relais avec un buffer ainsi que la position repos des relais (circulateur en marche en cas défaillance).
Je vais rajouter une surveillance des circulateurs avec un 2 eme arduino.
J ai aussi la sonde du bouilleur qui m annonce 37500°puis -2700 elle a rendu l âme ou un problème de transmission (pourtant je suis en câble cat 6e).
Je vais aussi rajouter un forçage des circulateurs avec des inter en 230v
Je vais aussi déporter l affichage de la température dans la maison.