mesure température par arduino sans capteur ajouté
Posté : lun. 30 janv. 2017 16:41
Bonjour,
Comme je voulais mesurer la température locale (projet BZZ), au meilleur prix (=0), Joseph (merci à lui!) a écrit le programme suivant (qui donne la T à +/-0.8°C). C'est la T du microproc : si on le sort d'un état de sommeil, la précision est bonne. Si il est en surchauffe, faut voir...ça peut peut être servir à d'autres projets.
bernard
byte temperatureArduino(void) {
float wADC;float GAIN=1.22;float OFFSET=320;byte temperature;//on ajustebGain et Offset pour chaque Arduino en particulier
ADCSRA |= (1 << ADEN);//enable the ADC
ADMUX |= (1 << REFS1) | (1 << REFS0); //set reference to the internal 1.1V
ADMUX |= (1 << MUX3);//select the channel
ADMUX &= ~((1 << MUX2) | (1 << MUX1) | (1 << MUX0));
delay(10);//let the voltages stabilize
ADCSRA |= (1 << ADSC); //start the conversion
while ((ADCSRA & (1 << ADSC))); //wait until the conversion is in progress
wADC = ADCW; //get the ADC output
temperature = ((wADC - OFFSET)+30)*2.5 / GAIN;//calcule température en f(gain, offset) puis ajuste à un octet(0 à 255) de -30°C à +70°C, avec un coef de 2.5 pour conserver un peu de précision (0.8°) pour transmission sur LoRa par ex. Sinon, on prend un float et on fait temperature=(wADC-OFFSET)/GAIN
return (temperature);
}
Comme je voulais mesurer la température locale (projet BZZ), au meilleur prix (=0), Joseph (merci à lui!) a écrit le programme suivant (qui donne la T à +/-0.8°C). C'est la T du microproc : si on le sort d'un état de sommeil, la précision est bonne. Si il est en surchauffe, faut voir...ça peut peut être servir à d'autres projets.
bernard
byte temperatureArduino(void) {
float wADC;float GAIN=1.22;float OFFSET=320;byte temperature;//on ajustebGain et Offset pour chaque Arduino en particulier
ADCSRA |= (1 << ADEN);//enable the ADC
ADMUX |= (1 << REFS1) | (1 << REFS0); //set reference to the internal 1.1V
ADMUX |= (1 << MUX3);//select the channel
ADMUX &= ~((1 << MUX2) | (1 << MUX1) | (1 << MUX0));
delay(10);//let the voltages stabilize
ADCSRA |= (1 << ADSC); //start the conversion
while ((ADCSRA & (1 << ADSC))); //wait until the conversion is in progress
wADC = ADCW; //get the ADC output
temperature = ((wADC - OFFSET)+30)*2.5 / GAIN;//calcule température en f(gain, offset) puis ajuste à un octet(0 à 255) de -30°C à +70°C, avec un coef de 2.5 pour conserver un peu de précision (0.8°) pour transmission sur LoRa par ex. Sinon, on prend un float et on fait temperature=(wADC-OFFSET)/GAIN
return (temperature);
}