Trouver la meilleur température sur deux sondes

Bonjour,
Je cherche à faire un petit projet sur un arduino Nano avec deux sondes de température ds18b20
J’ai aussi un afficheur lcd gjd 1602. Voilà l’idée :
J’ai un insert à bois que j’ai modifié en hydro (en gros il me chauffe un ballon de 50 litres d’eau). J’ai aussi des panneaux thermiques en toiture (qui me chauffent aussi de l’eau).
Je me sers de ces deux sources pour chauffer un ballon ECS (eau chaude sanitaire) de 300 litres et un ballon tampon de 300 litres pour un plancher chauffant à eau.
L’hivers je chauffe que avec l’insert car peu de soleil et l’été ce sont mes panneaux thermiques qui chauffent mon ballon ECS. Mais entre les deux saisons j’aimerais avoir un projet qui cherche la température des deux sources de chaleur la plus importante.

Donc j’aimerais savoir si cela intéresse qqun de me faire un code (car je n’ai aucune connaissance la dessus) : Une sonde que on appelletait s1 pour les panneaux thermiques et une autre s2 pour mon insert ; L’ensemble piloterait un relais pour basculer d’une source à l’autre.

Merci d’avance et à dispo pour donner plus d’infos si besoin.

Christophe

Salut @cseizes, et bienvenue sur le forum !
Ici, nous sommes peu à faire le travail à la place des demandeurs. Au lieu de cela, nous les aidons pas à pas avancer en comprenant ce qu'ils font, pour qu'ils puissent réussir leurs projets... Si tu tiens vraiment à ce que quelqu'un te fasse ton code, alors tu peux aller dans Jobs and Paid Consultancy et poster ta demande (en anglais). Mais ton projet est relativement simple, donc tu devrais trouver de l'aide très facilement ici.


Pour commencer, fais une recherche google sur "code DS18B20 arduino". Tu trouveras nombre de tutoriels pour utiliser tes sondes, par exemple :
https://arduino-france.site/ds18b20-arduino/

Fais quelques essais pour prendre en main les bibliothèques et leurs codes, puis renseigne toi sur les relais. C'est un composant très simple, et quand il est livré en module il n'est même pas nécessaire de lui ajouter quoi que ce soit. Pour utiliser un relais, tu as besoin de trois fils : l'un allant au 5V, l'autre à la masse (GND), et enfin un troisième pour le commander.
https://arduino-france.site/module-relais/

Un relais se pilote en tout ou rien (TOR), c'est à dire que tu peux utiliser digitalWrite() pour lui dire de s'ouvrir ou de se fermer. C'est pas compliqué :wink:


Avec ces deux tutoriels, tu peux créer un code simple pour ton projet. Une fois fini tu pourras même ajouter des fonctions, comme un écran, ou un serveur web pour afficher les valeurs sur une page web. Mais bon, commence par faire fonctionner celui-ci :slight_smile:

Cordialement
Pandaroux007

j'avais fait un truc très simple de démo que vous pouvez voir dans le simulateur et qui correspond grosso modo à ce que vous dites

une fois le simulateur lancé vous pouvez cliquer sur un des deux capteurs pour modifier sa t° et voir l'écran se mettre à jour et le relai se déclencher ou s'éteindre.

c'est très basique, il n'y a pas d'hystérésis mais ça peut vous mettre sur la voie.

détails
/* ============================================
  code is placed under the MIT license
  Copyright (c) 2023 J-M-L
  For the Arduino Forum : https://forum.arduino.cc/u/j-m-l

  Permission is hereby granted, free of charge, to any person obtaining a copy
  of this software and associated documentation files (the "Software"), to deal
  in the Software without restriction, including without limitation the rights
  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  copies of the Software, and to permit persons to whom the Software is
  furnished to do so, subject to the following conditions:

  The above copyright notice and this permission notice shall be included in
  all copies or substantial portions of the Software.

  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  THE SOFTWARE.
  ===============================================
*/

#include <Wire.h>
#include <hd44780.h>                        // main hd44780 header
#include <hd44780ioClass/hd44780_I2Cexp.h>  // i2c expander i/o class header
#include "Sonde.h"

// LE LCD
const uint8_t nbColonnes = 16;
const uint8_t nbLignes = 2;
hd44780_I2Cexp lcd;
byte barre[] = {0b00100, 0b00100, 0b00100, 0b00100, 0b00100, 0b00100, 0b00100, 0b00100};

// Les sondes
Sonde sondes[] = {
  { 7, "S1"},
  { 6, "S2"},
};
constexpr size_t nombreDeSondes = sizeof sondes / sizeof * sondes;

// le relai
enum {INITIALISATION, S0_PLUS_GRANDE, S1_PLUS_GRANDE} etatSonde = INITIALISATION;

const byte pinRelai = 11;
constexpr byte relaiOn  = HIGH; // mettre HIGH ou LOW en fonction du type de relai
constexpr byte relaiOff = (relaiOn == LOW) ? HIGH : LOW; // calculé automatiquement pour être l'autre état

const byte tailleMaxTxt = 12;
char affichageTemperature[nombreDeSondes][tailleMaxTxt];

void gestionTemperatures() {
  // on met à jour les températures
  char tmpTxt[tailleMaxTxt];
  float tempSonde[nombreDeSondes];
  for (byte i = 0; i < nombreDeSondes; i++) {
    tempSonde[i] = sondes[i].temperature();
    if (! isnan(tempSonde[i])) {
      dtostrf(tempSonde[i], 1, 1, tmpTxt); // conversion en chaîne de caractères
      if (strcmp(tmpTxt, affichageTemperature[i]) != 0) {
        // le texte a changé on effectue le nouvel affichage
        lcd.setCursor(0, i);
        for (byte i = 0; i < 10; i++) lcd.write(' '); // on efface ce qui était là avant
        lcd.setCursor(0, i);
        lcd.print(sondes[i].nom);
        lcd.print(":");
        lcd.print(tmpTxt);
        lcd.write(0xDF); // symbole °
        strcpy(affichageTemperature[i], tmpTxt); // on mémorise ce qui est affiché
      }
    }
  }

  // on gère le relai

  if (nombreDeSondes >= 2) { // si on a plus de deux sondes
    // on utilise alors les sondes 0 et 1 pour décider de l'état du relai
    switch (etatSonde) {
      case INITIALISATION:
        if (tempSonde[0] > tempSonde[1]) {
          etatSonde = S0_PLUS_GRANDE;
          lcd.setCursor(12, 0); lcd.print("+++");
          digitalWrite(pinRelai, relaiOn);
        } else {
          etatSonde = S1_PLUS_GRANDE;
          digitalWrite(pinRelai, relaiOff);
          lcd.setCursor(12, 1); lcd.print("+++");
          digitalWrite(pinRelai, relaiOff);
        }
        break;
      case S0_PLUS_GRANDE:
        if (tempSonde[1] > tempSonde[0]) {
          etatSonde = S1_PLUS_GRANDE;
          digitalWrite(pinRelai, relaiOff);
          lcd.setCursor(12, 0); lcd.print("   ");
          lcd.setCursor(12, 1); lcd.print("+++");
        }
        break;

      case S1_PLUS_GRANDE:
        if (tempSonde[0] > tempSonde[1]) {
          etatSonde = S0_PLUS_GRANDE;
          digitalWrite(pinRelai, relaiOn);
          lcd.setCursor(12, 0); lcd.print("+++");
          lcd.setCursor(12, 1); lcd.print("   ");
        }
        break;
    }


  }
}

void setup() {
  pinMode(pinRelai, OUTPUT);
  digitalWrite(pinRelai, relaiOff);
  for (Sonde& s : sondes) s.begin();
  Serial.begin(115200);
  int result = lcd.begin(nbColonnes, nbLignes);
  if (result) {
    Serial.print("problème LCD: ");
    Serial.println(result);
    hd44780::fatalError(result);
  }
  lcd.createChar(0, barre);
  // on dessine la barre de séparation
  for (byte i = 0; i < nbLignes; i++) {
    lcd.setCursor(10, i);
    lcd.write(0);
  }
}

void loop() {
  gestionTemperatures();
}

Salut et merci de vos retour vraiment
L idée c est que j ai 50 ans et que je ne connais absolument pas le codage c est clairement du Chinoi pour moi et de plus je dois bien dire que je me sens totalement incapable d apprendre ça a mon age
J ai déjà mis en route 3 projets Arduino mais j ai trouvé les codes sur internet
J ai réussi à les rentrer et à les faire fonctionner mais de là à en créer un oups
De plus je ne parle pas anglais …
Je comprend parfaitement que vous êtes pas là pour créer mon code bien entendu mais si jamais ça intéresse qqun je suis preneur

vous avez un code post 3

J ai bien cru comprendre ça j y regarde ce soir
Merci à vous pour cela vraiment

faire un dessin sommaire de ton installation, où seront placées les sondes : temperature tuyau eau aller vers chaque ballon de 300 litres ? gamme de temperature ?

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.