Conversión de los datos a grados centígrados

Como hemos dicho antes, cuando se ejecuta la función analogRead Arduino devuelve valores enteros entre 0 y 1023, que son precisamente los números que acabas de ver en el monitor serie. Estos valores resultan ser directamente proporcionales al voltaje aplicado en el pin correspondiente. Teniendo en cuenta que cuando analogRead devuelve el valor 0 el voltaje aplicado al pin es 0 voltios, y que cuando analogRead tiene un valor de 1023 el voltaje es 5 voltios, podemos transformar el número devuelto por analogRead a voltaje (en voltios) sin más que hacer:

volts = sensorValue*(5/1023)

De acuerdo con la hoja de datos del sensor de temperatura LM35, la relación entre el voltaje y la temperatura en grados centígrados es lineal, con una equivalencia de 10 milivoltios = 1 °C. Así que primero pasamos los voltios a milivoltios:

millivolts = volts*1000

y, finalmente, convertimos los milivoltios a grados centígrados:

degreesC = millivolts/10

Con estas operaciones matemáticas sencillas hemos logrado convertir los valores brutos medidos por la placa Arduino en grados centígrados.

Por cierto, debes tener en cuenta que los valores del voltaje y la temperatura ya no son números enteros, sino decimales. Recuerda que, en el lenguaje Arduino, cuando declaramos una variable debemos especificar el tipo de valores que va a contener. La palabra que debes usar para indicar que la variable tomará valores reales es float.

Así, el programa final es:

void setup() {
  // Initializing the serial communication at 9600 bits of data per second
  Serial.begin(9600);
}

void loop() {
  // Reading the value of the sensor from the specified pin
  // and storing the value in a variable called sensorValue
  int sensorValue = analogRead(0);
  
  // Transforming raw input (with values in the range 0-1023) into voltage in volts (0-5 V)
  float volts = sensorValue*(5.0/1023.0); 

  // Transforming voltage in volts into millivolts
  float millivolts = volts*1000; 

  // Transforming voltage in millivolts into temperature in degrees Celsius
  float degreesC = millivolts/10;
  
  // Printing the output in the serial monitor
  Serial.println(degreesC);

  // Delay in between reads (in milliseconds)
  delay(1000);
}

Probablemente te habrás dado cuenta de que las instrucciones que comienzan con una doble barra (//) no son más que comentarios, y no se ejecutan. ¡Incluye siempre comentarios que expliquen tu código!

Cuando subas este sketch a la placa, verás valores similares a los siguientes en el monitor serie:

Estos valores representan la temperatura medida por el sensor, pero ahora expresada en grados centígrados. ¡Mucho mejor así!

Last updated