Moyennage de plusieurs valeurs de sonde sur bus I2C

Bonjour,
Je suis novice sur Arduino.
Je cherche à faire un petit programme qui me permettrais de réaliser une valeur moyenne issu de plusieurs capteurs (ici dans mon cas des DS18B20) sur un même bus.
Mon programme ci-dessous fonctionne, mais je pense qu’il y a manière à l’améliorer.

Mon problème est le suivant :
Sur la ligne “average =…” j’indique les valeurs à additionner de chaque capteurs puis je divise par le nombre de sondes trouvées.
Le fait est que si je souhaite rajouter ou supprimer une sonde je suis obliger de modifier le programme.
Est-ce-qu’il existe une autre méthode pour faire la somme des valeurs des sondes en fonction de l’index par exemple ?

Je n’ai malheureusement rien trouver à ce sujet.
Merci d’avance pour votre aide.

#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 2          // Fil de donnée connecté sur port 2 de l'arduino

OneWire oneWire(ONE_WIRE_BUS);      // Configuration d'une instance OneWire pour communiquer avec tous les pr=ériphériques OneWire

DallasTemperature sensors(&oneWire);    // Communique notre référence OneWire à DallasTemperature

DeviceAddress Thermometer;    // Variable de stockage des addresses de périphérique
int deviceCount = 0;
float tempC;
float average;

void setup(void) {
  Serial.begin(9600);   // Démarrage port série
  sensors.begin();      // Démarrage de la bibliothèque

  // Localisation des sondes sur le bus
  Serial.println("Recherche de sondes...");
  deviceCount = sensors.getDeviceCount();
  Serial.print(deviceCount, DEC);
  Serial.println(" sondes localisées.");
  Serial.println("");
  }

void loop(void)
{
  sensors.requestTemperatures();
  
  for (int i=0; i < deviceCount; i++)
  {
    Serial.print("Sonde ");
    Serial.print(i+1);
    Serial.print(" : ");
    tempC = sensors.getTempCByIndex(i);
    Serial.print(tempC,1);
    Serial.print((char)176);
    Serial.print("C");
    Serial.println(" ");
  }
    Serial.print("Valeur moyenne : ");
    average = (sensors.getTempCByIndex(1) + sensors.getTempCByIndex(0))/ deviceCount ;
    Serial.print(average,1);
    Serial.println("");
    Serial.println("");
    delay(20000);
  }

Dans la boucle for, additionner les températures dans une variable tempTotal.
Diviser par le nombre de devices.

void loop(void)
{
  float tempTotal = 0;
  sensors.requestTemperatures();
  for (int i = 0; i < deviceCount; i++)
  {
    Serial.print("Sonde ");
    Serial.print(i + 1);
    Serial.print(" : ");
    tempC = sensors.getTempCByIndex(i);
    Serial.print(tempC, 1);
    Serial.print((char)176);
    Serial.print("C");
    Serial.println(" ");
    tempTotal += tempC;
  }
  Serial.print("Valeur moyenne : ");
  average = tempTotal / deviceCount ;
  Serial.print(average, 1);
  Serial.println("");
  Serial.println("");
  delay(20000);
}

Merci hbachetti.
Le programme marche bien.
Cependant j'ai une erreur dans l'affichage des valeurs.
La valeur de la sonde 1 est à 18°C
La valeur de la sonde 2 est à 24°C
La valeur moyenne correspond à la température ambiante, ceci est correct.
En revanche les deux sondes sont placées l'une à côté de l'autre sur une platine d'essai.
Le montage est réalisé suivant le câblage classique avec une résistance de 4,7k.

D'où peut provenir cette erreur, en enlevant une sonde la température affichée par celle-ci correspond à la température ambiante ?

Très étonnant.
Le 18B20 a une précision de 0.5°.
As-tu touché le plus chaud avec les doigts ?
Est-il près d'une source de chaleur ? une résistance par exemple ?

Non rien de spécial dès que je touche les sondes, les valeurs varient normalement.

Le phénomène que je constate est le suivant :

Sonde 1 sous la température ambiante,
Sonde 2 au-dessus de la température ambiante,
Température ambiante correspond à la bonne température de la pièce.

Quand je retire une sonde de la platine, la valeur indiquée par la sonde restante est bien égale à la température ambiante réelle.

Ci-joint une photo du montage.

Impression de la page entière.pdf (218 KB)

Bonjour,

La resistance fait 4.7Mohms ? non ? au vu des couleurs.

a moins que c'est une 5 anneaux ...

@+

Bonjour,

Non c'est une 5 anneaux, elle fait bien 4,76 kOhm.