Cómo leer las temperaturas con Arduino
Spanish (Español) translation by steven (you can also view the original English article)
Leer la temperatura con un Arduino es una función extremadamente útil. Es el tipo de función que es esencial en muchos proyectos que van desde la construcción de su propio termostato doméstico hasta la creación de una estación meteorológica. Además, es lo suficientemente simple como para implementarse en unos minutos con cualquier Arduino y solo dos componentes simples.
En este tutorial, te mostraré cómo usar un Arduino para leer la temperatura de un termistor e imprimirla en el puerto serie. Un termistor es un componente electrónico simple que cambia la resistencia según la temperatura. Este tutorial se centra en los medios más simples y económicos para leer la temperatura. A lo largo del camino, aprenderás a interactuar con un bloque de construcción básico y simple de la electrónica que te permite explorar todo un mundo de sensores con tu Arduino.
Cómo lee la temperatura Arduino
Hay varias formas de leer la temperatura con un Arduino. Algunos de estos incluyen:
- Sensores I2C o en serie: Existen módulos de sensores avanzados que a menudo pueden medir la presión barométrica, la temperatura, la humedad y otras condiciones, todo en un solo paquete. Sin embargo, estos módulos suelen ser mucho más caros y requieren el uso del protocolo I2C o serie para su lectura. Estos pueden ser excelentes para un proyecto de sensores meteorológicos más avanzado.
- Sensor analógico térmico: Un componente de tres clavijas que toma energía, tierra y genera un voltaje variable basado en la temperatura al implementar un núcleo de banda prohibida dentro de un solo componente. Esta clase de componente es útil y lo examinaré en un tutorial futuro.
- Termistor: Una resistencia donde su función es cambiar la resistencia según la temperatura ambiente.
Este tutorial se centra en el uso del método del termistor por varias razones. Primero, responde rápidamente a los cambios de temperatura, segundo, es barato y, finalmente, es fácil de usar.
También hay dos conceptos muy importantes que aprender de este tutorial:
- Leer un valor de un pin analógico de un Arduino.
- Usar un circuito divisor de voltaje para leer sensores de resistencia variable.
Los sensores de resistencia variable se fabrican para medir todo tipo de cosas, en el mundo físico, y la capacidad de leer estos sensores con tu Arduino será una excelente habilidad básica para dominar. La rotación, la presión, la tensión, la flexión, la luz y el calor son ejemplos de cosas que puedes medir con un pin analógico y un circuito divisor de voltaje.
Reúne las piezas
Para este proyecto necesitarás:
- Protoboard.
- Arduino (se usa un arduino UNO en mis ejemplos, pero cualquier modelo debería funcionar)
- Termistor de 10K ohmios
- Resistencia de 10K ohmios (marrón, negro, naranja)
- Cables de conexión
- Computadora con Arduino IDE instalado (la instalación y el uso del IDE no se tratan en este tutorial)
- Cable USB (para conectar Arduino y PC)
Cómo funciona
Los pines analógicos de Arduino leen un voltaje que se espera que oscile entre 0V y 5V. Una forma estándar de convertir un cambio de resistencia en un termistor en un cambio de voltaje que el pin analógico Arduino puede leer es crear un circuito divisor de voltaje. El circuito usa dos resistencias en un circuito de un voltaje conocido para crear un valor de voltaje matemáticamente predecible: Vout.
Es un circuito muy simple como se muestra a continuación. A medida que cambia el valor de R1 (resistencia 1), Vout cambia. En nuestro tutorial, R1 será el termistor y su valor cambiará en relación con la temperatura. Vout está conectado a nuestro puerto analógico en el Arduino para que podamos monitorearlo.



Suficiente teoría, pasemos a la construcción de la placa de pruebas (protoboard) y Arduino.
Configuración
Configura tu placa de pruebas y tu placa Arduino como este diagrama a continuación. El diagrama se hizo con Fritzing, una gran herramienta para conectar proyectos de manera lógica antes de agarrar cables y componentes. El componente gris superior es el termistor, o R1, en el diagrama de arriba. Esta es una de las muchas formas de conectar el circuito, la elegí porque cumple con algunas buenas prácticas básicas de montaje en placa.



Programando el Arduino
Leer el pin analógico en un Arduino es bastante simple. Los pines etiquetados A0 - A5 en el Arduino son pines especiales que cuando se leen con la función analogRead()
devolverán el valor de 0 a 1023 donde el voltaje de entrada es de 0V a 5V. A medida que el valor de R1, el termistor, cambia según la temperatura, el voltaje en el pin A0 cambiará de manera predecible entre 0V y 5V.
Escribamos un código y lo enviamos al Arduino.
- Conecta el Arduino a tu computadora con el cable USB
- Abre el IDE de Arduino
- Copia y pega el código de abajo
- Presione el botón Cargar para montar el código en tu Arduino
- Abre el Monitor serial del Arduino IDE presionando CTRL + SHIFT + M o seleccionando el menú Herramientas > Monitor serial.
1 |
void setup() { //This function gets called when the Arduino starts |
2 |
Serial.begin(115200); //This code sets up the Serial port at 115200 baud rate |
3 |
} |
4 |
|
5 |
void loop() { //This function loops while the arduino is powered |
6 |
int val; //Create an integer variable |
7 |
val=analogRead(0); //Read the analog port 0 and store the value in val |
8 |
Serial.println(val); //Print the value to the serial port |
9 |
delay(1000); //Wait one second before we do it again |
10 |
} |
Sugerencia: Asegúrate de que la velocidad en baudios del monitor en serie coincida con la que configuramos en la función setup()
. En este ejemplo: 115200.
La salida debería verse así:
463 463 463 463 463 463
A menos que tu protoboard esté en un horno muy caliente, estos valores no tienen sentido. Esto se debe a que son simplemente muestras de voltaje traducidas a una escala de 0 a 1023. A continuación, debemos convertirlas en un valor de temperatura utilizable.
Conversión de valores analógicos a temperatura
Anteriormente mencioné que usar el termistor sería simple, y eso es porque podemos pararnos sobre los hombros de gigantes. Existe una ecuación para hacer la traducción del valor muestreado a la temperatura llamada ecuación de Steinhart-Hart. (http://en.wikipedia.org/wiki/Thermistor) La ecuación de Steinhart-Hart ya se ha traducido para Arduino. Se puede encontrar un ejemplo de esto en playground.arduino.cc en un artículo de Milan Malesevic y Zoran Stupic. A continuación, ilustré su función Thermistor()
y agregué comentarios sobre cómo usarlo.
- Copia y pega el código a continuación en el IDE de Arduino reemplazando el ejemplo original
- Haz clic en el botón Cargar para enviar este código a tu Arduino.
- Abre la ventana Monitor serial de Arduino una vez más, ya que desapareció cuando cargaste el código.
1 |
#include <math.h> //loads the more advanced math functions |
2 |
|
3 |
void setup() { //This function gets called when the Arduino starts |
4 |
Serial.begin(115200); //This code sets up the Serial port at 115200 baud rate |
5 |
} |
6 |
|
7 |
double Thermister(int RawADC) { //Function to perform the fancy math of the Steinhart-Hart equation |
8 |
double Temp; |
9 |
Temp = log(((10240000/RawADC) - 10000)); |
10 |
Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp ))* Temp ); |
11 |
Temp = Temp - 273.15; // Convert Kelvin to Celsius |
12 |
Temp = (Temp * 9.0)/ 5.0 + 32.0; // Celsius to Fahrenheit - comment out this line if you need Celsius |
13 |
return Temp; |
14 |
} |
15 |
|
16 |
void loop() { //This function loops while the arduino is powered |
17 |
int val; //Create an integer variable |
18 |
double temp; //Variable to hold a temperature value |
19 |
val=analogRead(0); //Read the analog port 0 and store the value in val |
20 |
temp=Thermister(val); //Runs the fancy math on the raw analog value |
21 |
Serial.println(temp); //Print the value to the serial port |
22 |
delay(1000); //Wait one second before we do it again |
23 |
} |
Ahora la salida debería verse mucho más como esto:
69.22 69.07 69.22 69.22 70.33 72.07 72.86 73.34 74.13
Ahora esto tiene sentido. Mi espacio de trabajo es de hecho a 69 grados Fahrenheit. Durante este ejemplo, toqué la parte superior del termistor con mi dedo y sintió el aumento de temperatura como puedes ver.
Intenta experimentar con tu configuración para sentirte más cómodo con estas nuevas habilidades. Aquí hay algunas sugerencias.
- Reduce el valor de retardo en el lazo para ver qué tan rápido puede reaccionar el termistor a los cambios de temperatura. (No sugiero cambiar esto por debajo de 50 o podrías desbordar tu búfer de serie).
- Intenta alterar el programa para obtener valores Celsius (pista: lee los comentarios en el código)
- Modifica la placa de pruebas y el código para usar el pin A1 en lugar de A0
- Crédito adicional: Reconfigura el circuito para usar una mini fotorresistencia de 10K Ohm y documenta los valores de
analogRead()
según los cambios de iluminación (pista: usa el primer segmento de código)
Resumen
Eso es todo al respecto. Ahora puedes crear cualquier tipo de invento utilizando un termistor muy económico.
- Has empleado las habilidades de construir un circuito en una protoboard.
- Has compilado y cargado un boceto en tu arduino.
Además de este tutorial, has aprendido a:
- leer valores analógicos del Arduino usando
analogRead()
. - comprender y manipular el valor devuelto por la función
analogRead()
. - usar un circuito divisor de voltaje para leer los cambios en un sensor basado en resistencias, como el termistor.
- convertir los valores del termistor analógico en valores de temperatura.
Si bien al principio programar tu Arduino para leer y comprender el mundo que lo rodea puede parecer complicado, en realidad, existe una gran variedad de sensores simples y económicos disponibles que te permitirán interactuar con el mundo real de manera rápida y fácil. El circuito divisor de voltaje y un código simple pueden darle sentidos nuevos y poderosos a tu próxima creación