Introducción
La Raspberry Pi Pico posee un sensor de temperatura interno basado en un diodo especialmente diseñado para este fin. En esta guía rápida te enseñaremos cómo leer el sensor de temperatura interno en Raspberry Pi Pico en el lenguaje de programación MicroPython.
El sensor presente en el microcontrolador RP2040 no está diseñado para ser preciso, pero puede sacarnos de un apuro en ciertas situaciones y todo sin requerir componentes externos.
Materiales
¿Cómo leer el sensor de temperatura interno de Raspberry Pi Pico?
El sensor de temperatura está conectado al quinto canal del convertidor analógico a digital (ADC4). Para leer el sensor debemos realizar la conversión analógico a digital en este canal y realizar la conversión de voltaje a temperatura.
El sensor tiene una salida típica de 0.706 volts a 27 grados centígrados y una pendiente de -1.721 mV por grado centígrado.
Para obtener lecturas precisas con el sensor interno es necesario agregar una referencia de voltaje externa y también calibrar contra un instrumento preciso.
El funcionamiento detallado del sensor de temperatura está documentado en la hoja de datos del microcontrolador RP2040, por lo que si deseamos conocer más a detalle su funcionamiento lo ideal es referirnos a este documento.
Código para leer el sensor de temperatura interno de la Raspberry Pi Pico en MicroPython
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | # GEEK FACTORY - Dale vuelo a tus proyectos # https://www.geekfactory.mx # # Ejemplo para leer el sensor de temperatura interno de un microcontrolador RP2040 # Creamos una función que podemos reutilizar en nuestros proyectos para leer la temperatura # con el sensor interno. # import machine,time # objeto utilizado para acceder al pin canal analógico del sensor de temperatura interno tempadc = machine.ADC(4) # Función para leer sensor de temperatura interno de un microcontrolador RP2040 # # Esta función lee el sensor de temperatura 10 veces y calcula el promedio de las lecturas, # retornando un valor mas preciso y libre de ruido. def tsensor_read_temperature(): temp = 0 for i in range(0,10): temp += 27 - ((tempadc.read_u16() * (3.3 / 65536)) - 0.706) / 0.001721 time.sleep_us(100) return temp/10 # ciclo principal del programa while True: # llamar a la función para leer el sensor e imprimir a la terminal temperature = tsensor_read_temperature() print(f"Temperatura leida por sensor interno: {temperature}") # esperar un segundo entre lecturas para no saturar la pantalla time.sleep(1) |
Explicación del código
La funcionalidad principal del código se encuentra en la función tsensor_read_temperature() en la cual se convierte el valor que proporciona el ADC de la Raspberry Pi Pico en un valor de temperatura y también se calcula un promedio de las mediciones para lograr una medida más exacta.
En las lineas de código siguientes, definimos la función tsensor_read_temperature() y creamos e inicializamos la variable temp que utilizaremos localmente. Además comenzaremos un bucle que se ejecuta 10 veces. Dentro de ese bucle realizaremos las lecturas de temperatura:
17 18 19 | def tsensor_read_temperature(): temp = 0 for i in range(0,10): |
El bucle tiene solamente dos lineas dentro de el. En la linea 20 tomamos la lectura de temperatura y sumamos en cada iteración del ciclo el valor de la temperatura medida a la variable temp para calcular el promedio de las mediciones. En la linea 21 esperamos 100 micro-segundos antes de continuar con otra iteración del ciclo:
20 21 | temp += 27 - ((tempadc.read_u16() * (3.3 / 65536)) - 0.706) / 0.001721 time.sleep_us(100) |
La linea 20 es la más importante de este programa. Se puede dividir en dos operaciones: En la primera vamos a realizar la conversión analógica a digital y a convertir este valor a voltaje realizando las siguientes operaciones:
1 | (tempadc.read_u16() * (3.3 / 65536)) |
La segunda operación consiste en convertir la lectura en volts a grados centígrados; Para realizarlo, restamos el desplazamiento que tiene la medición a 27 grados de 0.706 volts y luego la dividimos entre los 1.721 milivolts /grado centígrado. Finalmente restamos el resultado a 27 que es nuestra temperatura de referencia a la cual fue caracterizado el sensor:
1 | 27 - ((tempadc.read_u16() * (3.3 / 65536)) - 0.706) / 0.001721 |
En la línea 22 dividimos entre 10 para finalizar el cálculo del promedio y retornamos el valor de la temperatura al programa que llama nuestra función:
22 | return temp/10 |
Finalmente en en el bucle principal del programa llamamos a la función para leer el sensor de temperatura e imprimimos el resultado a la terminal.
Enlaces y lecturas recomendadas
- Lectura de voltaje con el convertidor analógico a digital en MicroPython
- Leer el sensor LM35 con Raspberry Pi Pico en MicroPython
- Instalación de MicroPython en Raspberry Pi Pico
- Termómetro con Arduino, sensor LM35DZ y pantalla LCD 16×2
Conclusión
- En este tutorial aprendimos a leer el sensor de temperatura interno del microcontrolador RP2040.
- Aprendimos a convertir el valor retornado por el convertidor analógico a digital (ADC) de nuestro microcontrolador RP2040 a voltaje.
- En base al voltaje medido en el sensor de temperatura interno de la Raspberry Pi Pico pudimos derivar la medición de temperatura.
- Mencionamos que aunque no se trata de un sensor de precisión, podemos usar esta característica para monitorear y controlar la temperatura del chip RP2040.








