(Aujourd’hui, 10:49 AM)alexandeur a écrit : DS18B20 Précision du capteur c est + ou - 0.5c degres , je sais pas si allez chercher le centieme de degres ca sert a quelquechose
on peut passer à par %.12f
Il faut effectivement revenir sur les bases des calculs de précisions, qui ne sont pas si simples , mais en tout cas on améliore pas la précision en augmentant le nombre de chiffres ( non siginificatifs) , au delà de l 'electronique dans le cas présent on a aussi la physique, la sonde ne peut pas prendre la temperature de l'eau à l interieure du ballon de façon précise puisqu elle est aussi refroidie par son environnement. Coté Numériques le DS18B20 possède un CAN de 1/16 = 0,0625 °C mais pour des raisons de vitesse d'acquisition est –55 °C à +125 °C, par défaut la conversion est "bridée" sur 9 bits, comme on enleve 3 bits la resolution passe de 0.0625 *2^3 =0.5 degré C.
ceci dit on peut reprogrammer le DSB pour repasser en 12 bits à cette vitesse la frequence d'echantillonnage est de 2 secondes ce qui est largement suffisant
Pour passer les DS18B20 flasher l ESP avec le code suivant, toutes les sondes coonectées au bus passeront en 12 bits, soit sur un esp separé avec les sondes dessus , soit en flashant le routeur avec , puis reflasher avec le code du routeur
Code :
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 4 // GPIO utilisé, à adapter
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup() {
Serial.begin(115200);
sensors.begin();
Serial.println("Configuration des capteurs en 12 bits...");
int deviceCount = sensors.getDeviceCount();
Serial.print("Nombre de capteurs detectes : ");
Serial.println(deviceCount);
DeviceAddress tempAddress;
// --- Passer tous les capteurs en 12 bits ---
for(int i=0; i<deviceCount; i++) {
if(sensors.getAddress(tempAddress, i)) {
sensors.setResolution(tempAddress, 12); // 12 bits
}
}
Serial.println("Configuration termine. Lecture des temperatures et resolutions :");
}
void loop() {
sensors.requestTemperatures(); // lance la conversion
int deviceCount = sensors.getDeviceCount();
DeviceAddress tempAddress;
for(int i=0; i<deviceCount; i++) {
if(sensors.getAddress(tempAddress, i)) {
float tempC = sensors.getTempC(tempAddress);
uint8_t res = sensors.getResolution(tempAddress);
Serial.print("Capteur ");
Serial.print(i);
Serial.print(" : Temp = ");
Serial.print(tempC);
Serial.print(" °C, Resolution = ");
Serial.print(res);
Serial.println(" bits");
}
}
Serial.println("------------------------");
delay(1000); // 1 lecture par seconde
}