Descriptions des tâches pour la régulation de chauffage ------------------------------------------------------- Réflexion par J-P ----------------- Comment appréhender les plages horaires? Une façon serait de travailler en minutes sachant que dans 24 heures, il y a 24 X 60 = 1440 minutes. Si la plage horaire commence par exemple à 07h00, donc 7 X 60 = 420 minutes et se termine à 08h00, donc 8 X 60 = 480 minutes. Donc le chauffage commencera lorsque le compteur des minutes atteindra 420 et se terminera lorsque ce même compteur atteindra 480. Le compteur est remis à zéro à minuit. Le même procédé se répète pour toutes les plages horaires du jour. Pour le jour de la semaine, il suffit de calculer le jour de la semaine avec l'algorythme qui nous donne 0= Dim,1= Lun,2= Mar,3= Mer,4= Jeu,5= Ven,6= Sam. Avec cela, nous pouvons copier les plages pour les jours ouvrés et des autres plages horaires pour les 2 jours restant (W-E). On pourrait aussi envisager un deuxième choix de plages horaires pour les jours ouvrés pour les personnes qui travaillent en poste. Ex.: 06h - 14h et 14h - 22h. Liste des tâches ---------------- Initialiser le micro-contrôleur Initialiser le LCD Initialiser le DS3221 (RTC) Initialiser les DS18B20-PAR (1Wire) Créer et initialiser les variables (mettre des valeurs par défaut lors du premier démarrage du µ-Contrôleur, ensuite celles-ci seront sauvegardées dans l'EEprom et pourront être changées via la routine MENU) Début de la boucle infinie Aller à la routine LectureBouton Aller à la routine LireHeure Aller à la routine LireTemp Aller à la routine PlageHoraire Aller à la routine Consommation Aller à la routine ModeActuel Aller à la routine Communication Aller à la routine Affichage Aller à la routine AffiLCD Fin de la boucle infinie ------------------------------------------------------------------------------ Routine LectureBouton (Encodeur rotatif avec poussoir) Si Bouton uniquement en rotation Défilement en boucle des Modes sur LCD: Nuit, Jour, Horloge Si Appui Bouton ' Encodeur rotatif avec poussoir Allumage du rétro-éclairage du LCD Sélection du Mode présent lors de l'appui sur le Bouton Si Mode = Jour ou Nuit Affichge sur Ligne1 3 secondes Abandon et retour à l'affichage normal Finsi Si Appuis sur bouton Nouvelle valeur TT.T°C sauvegardée retour affichage normal Finsi Si Mode Horloge Affichge sur Ligne1 3 secondes Abandon et aller à la routine Affichage Finsi Si Appuis sur bouton Nouvelle valeur TT.T°C sauvegardée TEMPORAIREMENT jusqu'au prochain changement de plage horaire Aller à la routine Affichage Finsi Finsi Si Bouton poussé pour une durée inférieure à 0,5 seconde Inverse DerogaBit ' DerogaBit vaut 1 ou 0 Mode = 5 ' Mode Dérogation Si Bouton poussé brièvement suivi d'une rotation Aller à la routine ChgtMode Si Bouton poussé pour une durée supérieure à 1 seconde Aller à la routine Menu Finsi Fin de LectureBouton --------------------------------------- Routine LireHeure Utilise le protocole I2C pour lire l'heure et la date dans DS3221 Aller à la routine Affichage Fin de LireHeure --------------------------------------- Routine LireTemp Lire la sonde T°eau ' Température eau du chauffage Lire la sonde T°i ' Température intérieure Lire la sonde T°ECS ' Température de l'eau sanitaire Si Minute = 0 ou 5 Lire la sonde T°ext ' La température extérieure ne varie pas ' rapidement, donc on lit toutes les 5 minutes) Finsi Aller à la routine CourbeDeChauffe Fin de LireTemp --------------------------------------- Routine PlageHoraire Déterminer si on est dans une plage horaire de chauffe. Si oui, ChauffActif = 1 Si Non ChauffActif = 0 Finsi Fin de PlageHoraire --------------------------------------- Routine Consommation '( consommation en % du temps sur 24 heures) ConsoJour = ((minutes de fonctionnement brûleur depuis 00h00 - minutes de production ECS depuis 00h00) / minutes écoulées depuis 00h00)*100 = xx% Si minutes écoulées > 1439 ' 1440 minutes = 24 heures Ecrire dans l'EEprom dd/mm/aa, la T°ext. moyenne et la consoJour en % Finsi DureePompeCha = Minutes de fonctionnement journalier de la pompe chauffage Fin de Consommation --------------------------------------- Routine ModeActuel ' Détermine suivant la plage horaire ou la ' dérogation la température de consigne. Si Mode = 1 ' Mise du chauffage en SECURITE LedA = ' Led jaune allumée T°Cons = 5 ' Protection antigel de l'immeuble If T°ext < 1,5 Aller à la routine CourbeDeChauffe Pompe = pour 10 minutes toutes les 6 heures If T°Ext < -5 Pompe = ' Relais pompe enclenché Finsi Si Mode = 2 ' Mode = Nuit T°Cons = T°ConsNuit LedB = ' Led rouge allumée Si Mode = 3 ' Mode = Jour T°Cons = T°ConsJour LedC = ' Led verte allumée Si Mode = 4 ' Mode = Horloge Si PlageHoraire = ' Egale à jour T°Cons = T°ConsJour LedD = ' Led bleue allumée LedC = ' Led verte allumée Finsi Si PlageHoraire = ' Egale à nuit T°Cons = T°ConsNuit LedD = ' Led bleue allumée LedB = ' Led rouge allumée Finsi Si Mode = 5 ' Mode = Derogation Si DerogaBit = 1 T°Cons = T°ConsJour TEMPORAIREMENT jusqu'au prochain changement de plage horaire LedD = ' Led bleue allumée LedC = ' Led verte clignote 5mS toutes les 2 secondes Finsi Si DerogaBit = 0 T°Cons = T°ConsNuit TEMPORAIREMENT jusqu'au prochain changement de plage horaire LedD = ' Led bleue allumée LedB = ' Led rouge clignote 5mS toutes les 2 secondes Finsi Finsi Aller à la routine CourbeDeChauffe Mettre à jour l'état des relais et des leds de sorties Fin de ModeActuel --------------------------------------- Routine CourbeDeChauffe T°eau = Pente X T°ext = Pivot '(y = ax + b) Si T°Moy > T°Cons ' Diminution de la Pente Pivot = Pivot Pente = (T°eau1-(T°moy-T°Cons)-Pivot)/T°ext1 Si T°Moy < T°Cons ' Déplacement du point Pivot vers le haut Pente = Pente Pivot = Pivot + (T°Cons-T°moy) T°eau = Pente X T°ext1 + Pivot If T°eau => T°eau1 Pente = (T°eau1 - Pivot) / T°ext1 Finsi Finsi Si T°ECS < T°ECS - HysteresisECS ' Eau chaude sanitaire est PRIORITAIRE PompeCha = ' on force l'arrêt de la pompe du chauffage PompeECS = ' on enclenche la pompe du ballon ECS Si T°ECS > T°ECS + HysteresisECS PompeECS = ' on arrête la pompe du ballon ECS Si T°i < T°Cons ' Si la temp. int. est < la temp. de consigne PompeCha = ' on enclenche la pompe du chauffage si DureePompeCha = 0 ' Si la pompe n'a pas fonctionner en 24 heures PompeCha = 10 min. ' on enclenche la pompe pour 10 minutes si T°eau = T°i ' Si la temp. d'eau = la temp. intérieur PompeCha = ' on arrête la pompe du chauffage si T°eau < T°eau - HysteresisCha si commande du Brûleur Brûleur = si commande d'une Vanne à 3 voies Vanne = si commande d'une Vanne Analogique Vanne Ana = Finsi Si T°eau > T°eau + HysteresisCha si commande du Brûleur Brûleur = si commande d'une Vanne à 3 voies Vanne = si commande d'une Vanne Analogique Vanne Ana = Finsi Finsi Finsi Fin de CourbeDeChauffe --------------------------------------- Routine Communication Test si Port RS232 connecté Si "demande info" venant du PC Envoi des données sur le port série Finsi Test si réception d'une commande Si Traitement de la commande Finsi Fin de Communication --------------------------------------- Routine Affichage Afficher le jour (JJJ), la date (DD/MM), La température de la pièce (i) le pourcentage d'utilisation ConsoJour(00%), l'heure (hh:mm), la température extérieure (e) Fin de Affichage --------------------------------------- Routine Menu 1a- Date & Heure 2a- Date 3a- Année (de 0 à 99) 3b- Mois (de 1 à 12) 3c- Jour (de 1 à 28, 29,30 ou 31) 3d- Sortie 2b- Heure 3e- Heure (de 0 à 23) 3f- Minute (de 0 à 59) 3g- Sortie et mise à zéro des secondes 2c- Sortie 1b- Plage horaire 2d- Jours ouvrés - Poste1 3h - Plage1 - début - Fin ( par pas de 15 minutes ) 3i - Plage2 - début - Fin ( par pas de 15 minutes ) 3j - Plage3 - début - Fin ( par pas de 15 minutes ) 2e- Jours ouvrés - Poste2 3k - Plage4 - début - Fin ( par pas de 15 minutes ) 3l - Plage5 - début - Fin ( par pas de 15 minutes ) 3m - Plage6 - début - Fin ( par pas de 15 minutes ) 2f- Jours congés 3n - Plage7 - début - Fin ( par pas de 15 minutes ) 3o - Plage8 - début - Fin ( par pas de 15 minutes ) 1C- Paramètres 2g- Températures 3p- Jour (de 15,0°C à 25,5°C au demi-degré) 3q- Nuit (de 10,0°C à 20,5°C au demi-degré) 3r- Eau chaude sanitaire (de 30°C à 85°C par 5 degrés) 3s- Sortie 2h- Hystérésis 3t- Température ambiante (de 0,1 à 1°C au dixième de degré) 3u- Température radiateurs (de 0,5°C à 5,0°C au demi-degré) 3v- Température eau chaude sanitaire (de 0,5°C à 5,0°C au demi-degré) 3w- Sortie 2i- Paramètres 3x- Cycle de chaudière 3y- Température minimum extérieure 3z- Température maximum de chaudière 3aa- Type de régulation 4a- Chaudière 4b- Vanne à trois voies 5a- Ouvrir/Fermer 5b- Analogique 5c- Sortie 4c- Sortie 3bb- Sortie 2j- Sortie 1d- Sortie Fin de Menu --------------------------------------- Routine ChgtHeure Clignotement de l'année Affichage du curseur sous le troisième chiffre (L1/P15) Boucle d'attente de "Appuis Bouton" Lecture boutons Si Rotation sens horloger = Incrémenter en boucle la valeur 0 à 9 Si Rotation sens anti-horloger = Décrémenter en boucle la valeur 9 à 0 Afficher le nouveau chiffre recalculer la nouvelle valeur de l'année Finsi Fin de la boucle d'attente de "Appuis Bouton" Affichage du curseur sous le quatrième chiffre (L1/P16) Boucle d'attente de "Appuis Bouton" Lecture boutons Si Rotation sens horloger = Incrémenter en boucle la valeur 0 à 9 Si Rotation sens anti-horloger = Décrémenter en boucle la valeur 9 à 0 Afficher le nouveau chiffre recalculer la nouvelle valeur de l'année Finsi Fin de la boucle d'attente de "Appuis Bouton" Fin du clignotement de l'année Clignotement du mois Affichage du curseur sous la première lettre (L1/P9) Boucle d'attente de "Appuis Bouton" Lecture boutons Si Rotation sens horloger = Incrémenter en boucle la valeur 1 à 12 Si Rotation sens anti-horloger = Décrémenter en boucle la valeur 12 à 1 En faisant correspondre les nombres 1 à 12 aux affichages Jan, Fev, Mar, Avr, Mai, Jun Jul, Aou, Sep, Oct, Nov & Dec Finsi Fin de la boucle d'attente de "Appuis Bouton" Fin du clignotement du mois Clignotement du jour du mois Calculer le nombre de jour max du mois Calcul sur l'année pour déterminer si il s'agit d'une année bissextile Si l'année est bissextile et que le mois sélectionné est février, on ajoute 1 à la valeur 28 pour faire 29 jours Affichage du curseur sous le premier chiffre (L1/P6) Boucle d'attente de "Appuis Bouton" Lecture boutons Si Rotation sens horloger = Incrémenter en boucle la valeur 1 à 3 ou 1 à 2 si le mois est février Si Rotation sens anti-horloger = Décrémenter en boucle la valeur 3 à 1 ou 2 à 1 si le mois est février Afficher le nouveau chiffre recalculer la nouvelle valeur des jours Finsi Fin de la boucle d'attente de "Appuis Bouton" Affichage du curseur sous le deuxième chiffre (L1/P7) Boucle d'attente de "Appuis Bouton" Lecture boutons Si Rotation sens horloger = Incrémenter en boucle la valeur 0 à 9 ou 0 à 8 si le mois est février et l'année n'est pas bissextile Si Rotation sens anti-horloger = Décrémenter en boucle la valeur 9 à 0 ou 0 à 8 si le mois est février et l'année n'est pas bissextile Afficher le nouveau chiffre recalculer la nouvelle valeur des jours Finsi Fin de la boucle d'attente de "Appuis Bouton" Si la valeur de jours est < 1 ou > que la valeur max Ré-afficher et remettre l'ancienne valeur Finsi Fin du clignotement du jour du mois Clignotement de l'heure Affichage du curseur sous le premier chiffre (L2/P1) Boucle d'attente de "Appuis Bouton" Lecture boutons Si Rotation sens horloger = Incrémenter en boucle la valeur 1 à 2 Si Rotation sens anti-horloger = Décrémenter en boucle la valeur 2 à 1 Afficher le nouveau chiffre recalculer la nouvelle valeur des heures Finsi Fin de la boucle d'attente de "Appuis Bouton" Affichage du curseur sous le deuxième chiffre (L2/P2) Boucle d'attente de "Appuis Bouton" Lecture boutons Si Rotation sens horloger = Incrémenter en boucle la valeur 0 à 9 Si Rotation sens anti-horloger = Décrémenter en boucle la valeur 9 à 0 Afficher le nouveau chiffre recalculer la nouvelle valeur des heures Finsi Fin de la boucle d'attente de "Appuis Bouton" Si cette nouvelle valeur est > 23 Ré-afficher et remettre l'ancienne valeur Finsi Fin du clignotement de l'heure Clignotement des minutes Affichage du curseur sous le premier chiffre (L2/P4) Boucle d'attente de "Appuis Bouton" Lecture boutons Si Rotation sens horloger = Incrémenter en boucle la valeur 0 à 5 Si Rotation sens anti-horloger = Décrémenter en boucle la valeur 5 à 0 Afficher le nouveau chiffre recalculer la nouvelle valeur des minutes Finsi Fin de la boucle d'attente de "Appuis Bouton" Affichage du curseur sous le deuxième chiffre (L2/P5) Boucle d'attente de "Appuis Bouton" Lecture boutons Si Rotation sens horloger = Incrémenter en boucle la valeur 0 à 9 Si Rotation sens anti-horloger = Décrémenter en boucle la valeur 9 à 0 Afficher le nouveau chiffre recalculer la nouvelle valeur de minutes Finsi Fin de la boucle d'attente de "Appuis Bouton" Si cette nouvelle valeur est > 59 Ré-afficher et remettre l'ancienne valeur Finsi Fin du clignotement des minutes Remise à zéro des secondes Affichage des secondes "00" en (L2/P7) Calcul du jour de la semaine selon l'algorithme suivant : JS = {[(23m)/9]+j+4+a+[z/4]-[z/100]+[z/400]-y}mod7 où: JS = Jour de semaine (J = 0 à 6; 0=Dim., 1=Lun., ... , 6=Sam.) [n] signifie le nombre entier résultant de la division, le reste étant ignoré m = Mois (m = 1 à 12; 1=Jan., 2=Fév., 3=Mars, ... , 12=Déc.) j = Jour (j = 1 à 31) a = année z = a-1 si m<3 et z = a si m>=3 y = 0 si m<3 et y=2 si m>=3 mod 7 = reste de la division par 7 Fin de ChgtHeure ------------------------------------------------------------------------------