usar-el-sensor-de-temperatura-interno-de-arduino

Usar el sensor de temperatura interno de Arduino

Un hecho no muy conocido de Arduino es que la mayoría de modelos disponen de un sensor de temperatura interno en el procesador, que podemos hacer para realizar mediciones sin necesidad de sensores externos.

Los procesadores que incorporan este sensor son el ATmega 168A, 168P, 328 y 32P (Arduino Uno y Nano), y el Atmega32U4 (Arduino Leonardo). Por contra, este sensor no está disponible en ATMega2560 (Arduino Mega).

La precisión de este sensor es limitada, dado que se encuentra dentro del integrado del procesado y le afecta el calor del mismo. Este incremento de temperatura será mayor cuanto mayor sea la carga del procesador y la corriente que circula por las salidas.

Con algo de calibración, el sensor interno de Arduino puede proporcionar una medición aproximada de la temperatura ambiente con una precisión de 2ºC, siempre que el procesador haya estado apagado durante al menos 10 minutos.

Pese a sus limitaciones, el sensor de temperatura resulta interesante porque permite realizar mediciones sin emplear dispositivos exteriores. Por ejemplo, es útil para determinar el estado del procesador, en pruebas rápidas en una placa, o incluso en proyectos de mediciones de temperatura que requieran poca precisión, y con periodo entre mediciones largo.

El código que necesitamos para realizar la medición es el siguiente:

void setup()
{
  Serial.begin(9600);

  Serial.println(F("Internal Temperature Sensor"));
}

void loop()
{
  Serial.println(GetTemp(),1);
  delay(1000);
}

double GetTemp(void)
{
  unsigned int wADC;
  double t;

  ADMUX = (_BV(REFS1) | _BV(REFS0) | _BV(MUX3));
  ADCSRA |= _BV(ADEN);
  delay(20);
  ADCSRA |= _BV(ADSC);
  while (bit_is_set(ADCSRA,ADSC));
  wADC = ADCW;

  // Esto es la función a calibrar.
  t = (wADC - 324.31 ) / 1.22;
  return (t);
}

Si queréis calibrar el sensor, tenéis que tomar varias mediciones, dejando 30 minutos el sensor apagado, cotejar las mediciones con las de un sensor calibrado, y ajustar los valores 324.31 y 1.22 de la expresión (pero no os esperéis maravillas, como hemos dicho la precisión siempre va a ser limitada).

Descarga el código

Todo el código de esta entrada está disponible para su descarga en Github. github-full