Lecture de la sonde de température
Voici le code pour lire les données brutes :
long readTemp() { // Read temperature sensor against 1.1V reference #if defined(__AVR_ATmega32U4__) ADMUX = _BV(REFS1) | _BV(REFS0) | _BV(MUX2) | _BV(MUX1) | _BV(MUX0); ADCSRB = _BV(MUX5); // the MUX5 bit is in the ADCSRB register #elif defined (__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) ADMUX = _BV(REFS1) | _BV(MUX5) | _BV(MUX1); #elif defined (__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) ADMUX = _BV(REFS1) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1) | _BV(MUX0); #else ADMUX = _BV(REFS1) | _BV(REFS0) | _BV(MUX3); #endif delay(2); // Wait for ADMUX setting to settle ADCSRA |= _BV(ADSC); // Start conversion while (bit_is_set(ADCSRA,ADSC)); // measuring uint8_t low = ADCL; // must read ADCL first - it then locks ADCH uint8_t high = ADCH; // unlocks both long result = (high << 8) | low; // combine the two return result; }
Masser les données brutes
Une fois que vous avez les données brutes, vous pouvez le calibrer en mesurant les deux températures connues et mise à l’échelle selon qu’il conviendra. Voici une petite fonction simple pour effectuer cette normalisation :
float normalizeTemperature(long rawData) { // replace these constants with your 2 data points // these are sample values that will get you in the ballpark (in degrees C) float temp1 = 0; long data1 = 274; float temp2 = 25.0; long data2 = 304; // calculate the scale factor float scaleFactor = (temp2 - temp1) / (data2 - data1); // now calculate the temperature float temp = scaleFactor * (rawData - data1) + temp1; return temp; }
Étalonnage des
Pour obtenir les quatre constantes nécessaires, il suffit de lancer l’appel de croquis/programme le readTemp()
fonction à température ambiante. Noter la température et les données brutes point. Entrez ces valeurs pour un jeu de points de données. Ensuite, soit mettre votre Arduino dans le réfrigérateur ou le four (avec une valeur très faible) et mesurer votre deuxième deux points de données. Remplacer les quatre constantes avec vos données. Il n’importe pas que commander que vous les énumérer. Vous pouvez également entrer vos données en degrés Celsius ou Fahrenheit. Le calcul linéaire est indépendant des unités aussi longtemps que vous êtes cohérent dans lequel système que vous utilisez.
J’ai testé ce code sur le Leonardo, mais il devrait aussi fonctionner sur la Uno, ATtinyx4 & ATtinyx5 série puces et aussi bien. Si vous aimez cette astuce, il est un compagnon instructable /article sur la mesure de SCR à l’aide de la référence interne 1,1 volts qui peut-être intéresser aussi bien.