J'ai un souci d'ajustement de paramétrage avec mes affichages de température.
Voici le matériel utilisé :
1x DHT22 (Température Serre)
1x sondes PT-100 range -50 à +300 degrés C (1x température extérieur)
1x transmetteurs de courant. Alim 24v, range -50 à +100 degrés C
1x résistance 250 ohms
Arduino mega 2560
1x Laptop pour l'acquisition/diffusion des données et la prog sur place
Lorsque je préparais mon montage à l'intérieur, l'affichage m'indiquait la température ambiante correctement malgré une erreur d'environs 1 à 1.5 degrés C.
Hier je suis allé installé mon boitier de contrôle dans la serre. Voici les températures réelles prises avec un autre instrument que ceux de mon montage (oublions les lectures du DHT22 car elles sont correctes) :
Extérieur : -19.6 C
Température affichée au moniteur série :
Extérieur : 1.2 C
Voici mes paramètres mesurés au multimètre à la sonde et au transmetteur:
1.770 volts = -19.6 Celsius = 92.4 ohms
2.647 volts = 9.2 Celsius = 103.6 ohms
J'ai essayé divers paramètres mais sans succès. Avez-vous une idée?
int LectureCapteurs (){
delay(300); // La lecture du capteur prend 250ms
h = dht.readHumidity(); //on lit l'hygrometrie
float t = dht.readTemperature(); //on lit la temperature en celsius (par defaut)
float f = dht.readTemperature(true); // pour lire en farenheit, il faut le paramère (isFahrenheit = true)
if (isnan(h) || isnan(t) || isnan(f)) { return; } //On verifie si la lecture a echoue, si oui on quitte la boucle pour recommencer.
float hif = dht.computeHeatIndex(f, h); // Calcul de l'indice de temperature en Farenheit
float hic = dht.computeHeatIndex(t, h, false); // Calcul de l'indice de temperature en Celsius
/*
* Affichages :
* Humidite: h
* Temperature: t celcius
* Temperature: f faraneith
* Indice de temperature: hic celcius
* Indice de temperature: hif faraneith
*/
sensorTemp[0] = analogRead(A8); // Lire température Extérieure
sensorTemp[1] = analogRead(A9); // Lire température poulaillier
Temp[0] = map(sensorTemp[0],102,512,-50,300);
Temp[1] = map(sensorTemp[1],102,512,-50,300);
t2 = t; // A partir du DHT22
t1 = Temp[0]; // Float conversion
t3 = Temp[1]; // Float conversion
t1 = t1/10;
t3 = t3/10;
return t1;
return t2;
return t3;
return h;
}
Un lien vers le transmetteur de courant 4-20mA ?
Quelle relation établit-t-il entre la résistance de la PT100 et le courant de sortie ou entre la température et le courant de sortie ?
4mA pour -50°C et 20mA pour +100°C ou une autre relation ?
Voici mes paramètres mesurés au multimètre à la sonde et au transmetteur:
1.770 volts = -19.6 Celsius = 92.4 ohms
2.647 volts = 9.2 Celsius = 103.6 ohms
Les valeurs de résistances sont cohérentes avec lea tables des PT100
La tension est-elle mesurée aux bornes de la résistance de 250 Ohm réalisant la conversion courant->tension ?
deux mesures permettent de trouver l'équation de la droite qui représente la relation entre température et tension aux bornes de la résistance de 250 Ohm
La mise à l’échelle n’est pas bonne pour la conversion du signal 4-20mA. La plage du transmetteur va de -50 à +100°C et dans ton code tu inscris -50 à +300°C
Mettre une résistance en de 250ohms en série sur un signal 4-20mA donne une variation de tension de 1 à 5 volts. Pourquoi mappé de 102 a 512?
Presque! En « entrée » de la fonction map faut parler en « point » puisque la résolution du convertisseur est de 1024 point et donc va de 0 à 1023 et non directement en tension. Ici 0v = 0 et 5v = 1023
Donc dans ton cas, pour commencer à 1v:
map(sensorTemp[1],204,1023,-50,100);
Par contre map(); fonctionne que sur des entiers, tu auras donc en sortie que des chiffres entiers (sans chiffre après la virgule donc).
Jambe:
Non, les cartes arduino ne savent pas mesurer autre chose qu’une tension. Mais le shunt de 250 ohms est parfait pour ça.
La fonction map ne fait qu’un simple produit en croix.
J'ai habilement contourné le problème!
Dès qu'on sais comment utiliser les paramètres, on peut les utiliser à bon escient Merci pour votre aide!
Alors j'ai mappé la sortie x10. Ce qui m'a permit ensuite de diviser en float par 10 et ainsi conserve le 0,x degré de température pour plus de précision!
Ceci dit, pour un procédé requérant plus de précision, mapper la sortie x 100 et ensuite diviser par 100 en float permettrait d'avoir encore plus de précision! .tant sur une base 0-1023 nous pourrions nous permettre un step de plus afin d'avoir 3 digits. Ce qui n'est pas rien.
--> Évidemment, cela prendrait des instruments plus précis que ce que j'ai en main
Merci de m'avoir permis de bien comprendre le mapping. Prochaine étape : je vais contrôler les paramètres de ma serre en incluant des fonctions intégrales et dérivées!!! PID!!!
Bon OK.... ne paniquez pas! Je sais qu'une serre ne requière pas un contrôle de température/humidité assez précis pour utiliser un schéma de contrôle PID mais que voulez-vous, ce défi "m'allume" !!!