2.8 El echidna dice la temperatura

1. Qué vamos a hacer
Vamos a convertir a nuestra placa en un hombre del tiempo: cada segundo medirá la temperatura con su sensor y nos la dirá en el Monitor serie de Arduino IDE con una frase como «Hola, ahora hace una temperatura de 23.75 ºC».
1.1 Qué vamos a aprender
- A utilizar el sensor de temperatura para medir la temperatura ambiente en grados Celsius (ºC).
- A convertir la lectura de un sensor en una magnitud real mediante una fórmula.
- A guardar números con decimales en variables de tipo
float. - A enviar mensajes de la placa al ordenador y verlos en el Monitor serie.
1.2 Qué vamos a usar
Componentes
- Sensor de temperatura (pin A6): Mide la temperatura del ambiente. Entrega un voltaje que depende de la temperatura.

Programación
El sensor está en un pin analógico (ver la tabla de pines de la Introducción), así que lo leemos con analogRead, que nos da un número entre 0 y 1023. Para pasar ese número a grados Celsius usamos esta fórmula, ajustada a la EchidnaBlack2:
Para que la placa nos diga la temperatura, usamos el Monitor serie: una ventana de Arduino IDE donde vemos los mensajes que la placa envía al ordenador por el cable USB. Si hiciste la primera mejora del Interruptor crepuscular, ya lo has usado; aquí lo vemos con detalle. Para enviar los mensajes usamos la función Serial.print(dato):
- dato: lo que queremos mostrar. Puede ser un texto, entre comillas (
"Hola"), o el valor de una variable (temperatura). Serial.println(dato)hace lo mismo, pero después salta a la línea siguiente, así cada mensaje empieza en una línea nueva.
Antes de enviar mensajes hay que abrir la comunicación en setup() con Serial.begin(9600), donde 9600 es la velocidad en baudios.
2. Programamos
El programa lee el sensor de temperatura, convierte la lectura a grados Celsius y escribe en el Monitor serie una frase formada por tres partes: el texto «Hola, ahora hace una temperatura de », el valor de la temperatura y el símbolo «ºC». Después espera un segundo y vuelve a empezar.
Escribe el siguiente código en Arduino IDE y cárgalo en la placa:
// Echidna dice la temperatura: muestra la temperatura en el Monitor serie
const int sensorTemperatura = A6; // sensor de temperatura conectado al pin A6
int lectura = 0; // guarda el valor que lee el sensor (de 0 a 1023)
float temperatura = 0.0; // guarda la temperatura en grados Celsius, con decimales
void setup() {
Serial.begin(9600); // abre la comunicación con el ordenador a 9600 baudios
}
void loop() {
// lee el sensor y convierte el valor a grados Celsius
lectura = analogRead(sensorTemperatura);
temperatura = (lectura * 0.4658) - 50.0; // conversión ajustada a EchidnaBlack2
// escribe la frase en el Monitor serie
Serial.print("Hola, ahora hace una temperatura de ");
Serial.print(temperatura);
Serial.println(" ºC");
delay(1000); // espera 1 segundo hasta la siguiente medida
}
Después de cargar el programa, abre el Monitor serie desde el menú Herramientas > Monitor Serie y comprueba que la velocidad está en 9600 baudios. Verás aparecer una frase nueva cada segundo.

Cómo funciona:
La constante (línea 3): guarda el pin del sensor de temperatura.
Las variables (líneas 5 y 6): lectura guarda el número que da el sensor, entre 0 y 1023; es de tipo int, que solo admite números enteros. temperatura guarda los grados Celsius y es de tipo float, que admite números con decimales (por ejemplo, 23.75). En el código, los decimales se escriben con punto, no con coma.
La función setup() (líneas 8 a 10): abre la comunicación con el ordenador con Serial.begin(9600). El sensor no necesita pinMode, porque está en un pin analógico.
La función loop() (líneas 12 a 23): lee el sensor con analogRead y aplica la fórmula para obtener la temperatura. En el código, el signo de multiplicar es el asterisco (*). Después escribe la frase en tres partes: los dos primeros Serial.print escriben el texto y el valor seguidos, en la misma línea, y el Serial.println final añade « ºC» y salta de línea. El programa repite continuamente:
Lee la temperatura del sensor.
--> Escribe en el Monitor serie la frase con la temperatura.
--> Espera 1 segundo.
Para probarlo, calienta el sensor tocándolo suavemente con el dedo y observa cómo sube la temperatura.
3. Mejóralo
Prueba a realizar algunas de las siguientes modificaciones al proyecto:
-
Como la tecla t: En EchidnaML, el echidna dice la temperatura al pulsar la tecla t. Haz que la placa diga la temperatura solo cuando pulses el pulsador SR.
Pista: declara la constante del pulsador SR (pin
2) y configúralo como entrada. Enloop(), mete todo lo que había dentro de unifque compruebe si SR está pulsado:if (digitalRead(pulsadorSR) == HIGH). -
Grados Fahrenheit: Añade el pulsador SL para que, al pulsarlo, la placa diga la temperatura en grados Fahrenheit (ºF). Con SR seguirá diciéndola en grados Celsius.
Pista: para pasar de grados Celsius a Fahrenheit, multiplica por
1.8y suma32. Guarda el resultado en una nueva variablefloatllamadafahrenheity añade un segundoifpara el pulsador SL (pin3). -
Frío o calor: Partiendo del programa original, haz que el LED rojo se encienda cuando la temperatura supere un valor (por ejemplo,
28ºC) y que, si no lo supera, se encienda el LED verde. Para probarlo, calienta el sensor tocándolo suavemente con el dedo.Pista: declara las constantes del LED rojo (pin
13) y del LED verde (pin11) y configúralos como salidas. Guarda el valor límite en una constantefloatllamadaumbraly compáralo con la temperatura conif ... else, como en el interruptor crepuscular.