nommer une sonde de temperature

Bonjour à tous,

je débute avec Arduino, et je me suis mis un défi que j’ai du mal à relever car je bute sur un problème.
Mon projet est l’instrumentation d’un moteur diesel VOLVO PENTA qui comprends

  • une sonde de température de réfrigérant,
  • une sonde de température d’huile,
  • une sonde de température turbo,
  • une sonde de température eau de mer,
  • un capteur de pression d’huile

Je compte équiper chaque moteur avec un arduino UNO propre à la surveillance et à la récupération des infos au plus prés du moteur, et enfin, créer une liaison entre les deux moteurs et une ARDUINO MEGA qui se chargera de fournir les information aux jauges numériques qui me permettent de surveiller les paramètres de fonctionnement et de me rapporter les alarmes de pression et de température.

Et là, début des soucis.
Si je pense avoir bien compris le fonctionnement des capteurs DS18B20 en OneWire, je n’arrive pas à leur assigner un nom…
Je me retrouve à chaque fois avec un code en HEXA qui n’est absolument pas parlant…
du coup, ma gestion d’alarme ne me satifait pas du tout !
je voudrais qu’au lieu de m’afficher le code HEXA du capteur en alarme, il m’affiche le nom du capteur… exemple : REFRIGERANT…

je vous mets mon code, si quelqu’un peut m’aider dans ce projet…
merci d’avance !

/-----( Importation des librairies )-----/
// Librairie OneWire
#include <OneWire.h>

//Librairie DallasTemperature
#include <DallasTemperature.h>

/-----( Declaration des Constantes et des Pin Numbers )-----/
#define ONE_WIRE_BUS_PIN 3

/-----( Declare objects )-----/
// Lance une instance OneWire pour communiquer avec des sondes OneWire
OneWire oneWire(ONE_WIRE_BUS_PIN);

// Change la référence de oneWire a Dallas Temperature.
DallasTemperature sensors(&oneWire);

/-----( Declare Variables )-----/
// Assigne les adresses de chaque sondes OneWire

DeviceAddress ThermometreEau = { 0x28, 0xE5, 0x6A, 0xFB, 0x05, 0x00, 0x00, 0xA0 };
DeviceAddress ThermometreHuile = { 0x28, 0x89, 0x85, 0xFB, 0x05, 0x00, 0x00, 0xAB };
DeviceAddress ThermometreTurbo = { 0x28, 0x2F, 0x29, 0xFB, 0x05, 0x00, 0x00, 0x57 };
////DeviceAddress Probe04 = { 0x28, 0x9A, 0x80, 0x40, 0x04, 0x00, 0x00, 0xD5 };
////DeviceAddress Probe05 = { 0x28, 0xE1, 0xC7, 0x40, 0x04, 0x00, 0x00, 0x0D };

// fonction appele quand une condition d’alarme existe durant DallasTemperatures::processAlarms();
void newAlarmHandler(uint8_t* deviceAddress)
{
Serial.println(" “);
Serial.println(”…DEBUT REPPORT ALARME…");
printAlarmInfo(deviceAddress);

printTemp(deviceAddress);
Serial.println();
Serial.println("…FIN REPPORT ALARME…");
Serial.println(" ");
}
//Affiche l’adresse de la sonde de temperature
void printCurrentTemp(DeviceAddress deviceAddress)
{
printAddress(deviceAddress);
printTemp(deviceAddress);
Serial.println();
}

//sequence alarm info
void printAlarmInfo(DeviceAddress deviceAddress)
{
char temp;
printAddress(deviceAddress);
temp = sensors.getHighAlarmTemp(deviceAddress);
Serial.print("----SEUIL ALARME HAUTE: “);
Serial.print(temp, HEX);
Serial.print(” C");
Serial.print("----SEUIL ALARME BASSE: “);
temp = sensors.getLowAlarmTemp(deviceAddress);
Serial.print(temp, HEX);
Serial.print(” C");
Serial.print(" ");
}

//Teste la continuité de la sonde
void printTemp(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
if (tempC != DEVICE_DISCONNECTED)
{
//affichage de la temperature du capteur
Serial.print("TEMPERATURE : “);
Serial.print(tempC);
}
else Serial.print(“SONDE DECONNECTEE”);
Serial.print(” ");
}

//affichage de l’adresse du capteur dans le cadre de la surveillance normale
void printAddress(DeviceAddress deviceAddress)
{
Serial.print("Address: ");
for (uint8_t i = 0; i < 8; i++)
{
if (deviceAddress < 16) Serial.print(“0”);
Serial.print(deviceAddress*, HEX);*
}
Serial.print(" ");
}
void setup() /****** SETUP: RUNS ONCE ******/
{
* // Lance le port serie*
* Serial.begin(9600);*
* Serial.print("Initialisation de la librairie de controle de temperature ");*
* Serial.println(DALLASTEMPLIBVERSION);*

* // Initialise la librairie pour la mesure de temperature*
* sensors.begin();*

* // détermine la resolution de la sonde (Can be 9 to 12 bits … lower is faster)*
* sensors.setResolution(ThermometreEau, 10);*
* sensors.setResolution(ThermometreHuile, 10);*
* sensors.setResolution(ThermometreTurbo, 10);*
* ////sensors.setResolution(Probe04, 10);*
* ////sensors.setResolution(Probe05, 10);*

Serial.print("TEMPERATURE EAU ");
printAlarmInfo(ThermometreEau);
Serial.println();
Serial.print("TEMPERATURE HUILE ");
printAlarmInfo(ThermometreHuile);
Serial.println();
Serial.print("TEMPERATURE TURBO ");
printAlarmInfo(ThermometreTurbo);
Serial.println();
Serial.print("\n\r\n\r");// place deux lignes d’espace avant le prochain affichage
// configuration des alarmes de temperatures
Serial.println(“CONFIGURATION ALARMES”);
Serial.print("\n\r\n\r");// place deux lignes d’espace avant le prochain affichage
sensors.setHighAlarmTemp(ThermometreEau, 25);
sensors.setLowAlarmTemp(ThermometreEau, 22);
sensors.setHighAlarmTemp(ThermometreHuile, 26);
sensors.setLowAlarmTemp(ThermometreHuile, 21);
sensors.setHighAlarmTemp(ThermometreTurbo, 27);
sensors.setLowAlarmTemp(ThermometreTurbo, 22);
Serial.print("ALARME TEMPERATURE EAU ");
printAlarmInfo(ThermometreEau);
Serial.println();
Serial.print("ALARME TEMPERATURE HUILE ");
printAlarmInfo(ThermometreHuile);
Serial.println();
Serial.print("ALARME TEMPERATURE TURBO ");
printAlarmInfo(ThermometreTurbo);
Serial.println();
Serial.print("\n\r\n\r");// place deux lignes d’espace avant le prochain affichage
// attach alarm handler
sensors.setAlarmHandler(&newAlarmHandler);

* Serial.println();*
* Serial.print("Nombre de sonde presente sur le bus = "); *
* Serial.println(sensors.getDeviceCount()); *
* Serial.println("######################################");*
* Serial.println("####…ACQUISITION TEMPERATURE…#####");*
* Serial.println("######################################");*
* Serial.print("\r"); *

}//–(end setup )—
void loop() /****** LOOP: RUNS CONSTANTLY ******/
{
* delay(200);*

* // envoie une requete de lecture des temperatures *

* sensors.requestTemperatures(); *

if (sensors.hasAlarm())
{

* Serial.println("######################################");*
* Serial.println("#######…ALARME TEMPERATURE…#######");*
* Serial.println("######################################");*
* Serial.print(“n\r”);*
}
// appelle la fonction definisssant l’alarme du capteur concerne
// rapportera l’alarme sur tous les capteur concernes
sensors.processAlarms();
if (!sensors.hasAlarm())

* Serial.print("TEMPERATURE ECHANGEUR: ");*
* printTemperature(ThermometreEau);*
* Serial.println();*
* Serial.print("TEMPERATURE HUILE : ");*
* printTemperature(ThermometreHuile);*
* Serial.println();*

* Serial.print("TEMPERATURE TURBO : ");*
* printTemperature(ThermometreTurbo);*
* Serial.println();*

* ////Serial.print("Probe 04 temperature is: ");*
* ////printTemperature(Probe04);*
* ////Serial.println();*

* ////Serial.print("Probe 05 temperature is: ");*
* ////printTemperature(Probe05);*
* ////Serial.println();*

}//–(end main loop )—
/-----( Declare User-written Functions )-----/
void printTemperature(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
* if (tempC == -127.00)*
* {*
* Serial.print("Erreure d’acquisition ");*
* }*
* else*
* {*
* Serial.print("----- ");*
* Serial.print(tempC);*
* Serial.write(176); // caractère °*
* Serial.write(‘C’);*
* }*
}// End printTemperature
//( THE END )**

Au lieu d'avoir une variable pour chacun des capteurs, utilises un tableau ou une structure. L'un des éléments contient l'ID des senseurs, l'autre contient un nom explicite sous forme d'une chaîne de caractères. Ainsi tu peux passer de l'un à l'autre facilement.

Bonjour fdufnews,

Merci pour ta response, mais comment faire ? Pourrais-tu m'aiguiller un peu plus sur ce tableau stp ou puis-je trouver un exemple?,,
Merci.