Je n'ai pas encore reçu mon AOP LM358 pour le LM35DZ donc je n'ai pas encore pu tester l'amplification et son impact sur mes mesures faites avec le LM35DZ.
Par contre, j'ai un autre soucis cette fois avec le SMT160-30. Je m'explique.
- Avec un montage de base et une mesure unitaire, j'obtient bien une temperature proche de la réalité.
Montage page 7 de la datasheet (http://www.smartec.nl/pdf/DSSMT16030.PDF)
Ci-dessous le code de ma librairie SMT16030 que j'ai écrite
/*
SMT16030.cpp - Library for using SMT16030 temperature sensor
Created by B. Didry, March 14, 2013.
14/03/2013 - BDI - rendre paramétrable le timeout du pulseIn ?
*/
#include "Arduino.h"
#include "SMT16030.h"
SMT16030::SMT16030(int sensorPin) {
_sensorPin = sensorPin;
pinMode(_sensorPin, INPUT);
}
float SMT16030::getTemperature() {
return getTemperature(1);
}
float SMT16030::getTemperature(int numberOfPeriods) {
unsigned long highTime;
unsigned long lowTime;
unsigned long onePeriodHighTime;
unsigned long onePeriodLowTime;
float dutyCycle;
highTime = 0;
lowTime = 0;
for(int i=0;i<numberOfPeriods;i++) {
onePeriodHighTime = pulseIn(_sensorPin, HIGH, 500);
onePeriodLowTime = pulseIn(_sensorPin, LOW, 500);
if(onePeriodHighTime != 0 && onePeriodLowTime != 0) {
highTime = highTime + onePeriodHighTime;
lowTime = lowTime + onePeriodLowTime;
}
}
dutyCycle = float(highTime) / float(highTime + lowTime);
return (dutyCycle - 0.320) / 0.00470;
}
pour mesurer une température, je fais donc appel à ma méthode getTemperature().
La précision de ma mesure, dépend donc de la qualité de la mesure du duty cycle via la méthode pulseIn().
Comme indiqué dans la documentation de smartec concernant la mesure de ce duty cycle (http://www.smartec-sensors.com/assets/files/pdf/application_notes/APPSMT1603003.PDF), la fréquence d'échantillonnage a un impact important sur cette dernière.
Il recommande donc pour gommer ce problème de calculer le duty cycle sur plusieurs périodes.
J'ai donc implémenté la méthode getTemperature(int numberOfPeriods) qui calcule la température sur plusieurs périodes (numberOfPeriods).
Mais lorsque je fais des mesures avec différents nombre de périodes, j'ai fait la constatation suivante :
serie de mesures avec 1 période => amplitude de températures d'environ 1°C
serie de mesures avec 10 périodes => amplitude de températures d'environ 1,5°C
serie de mesures avec 20 périodes => amplitude de températures d'environ 3°C
Globalement, plus j'utilise de périodes pour faire ma mesure, plus ma mesure semble aléatoire !
J'ai beau retourner le problème dans tous les sens, je ne comprend pas ce qui cloche donc si quelqu'un a déjà rencontré le problème et l'a solutionné ou si vous voyez d'ou vient le problèmer, je vous remercie d'avance pour votre aide.