Nota
¡Hola, bienvenido a la Comunidad de Entusiastas de SunFounder Raspberry Pi & Arduino & ESP32 en Facebook! Sumérgete en el mundo de Raspberry Pi, Arduino y ESP32 junto a otros entusiastas.
¿Por qué unirse?
Soporte experto: Resuelve problemas postventa y desafíos técnicos con la ayuda de nuestra comunidad y equipo.
Aprender y compartir: Intercambia consejos y tutoriales para mejorar tus habilidades.
Preestrenos exclusivos: Obtén acceso anticipado a nuevos anuncios de productos y adelantos.
Descuentos especiales: Disfruta de descuentos exclusivos en nuestros productos más recientes.
Promociones y sorteos festivos: Participa en sorteos y promociones especiales de temporada.
👉 ¿Listo para explorar y crear con nosotros? Haz clic en [Aquí] y únete hoy mismo.
2.2.2 Termistor (MCP3008)
Nota
Dependiendo de la versión de tu kit, identifica si tienes ADC0834 o MCP3008 y procede con la sección correspondiente.
Introducción
Así como un fotorresistor puede detectar la luz, un termistor es un dispositivo electrónico sensible a la temperatura que puede usarse para implementar funciones de control de temperatura, como una alarma de sobrecalentamiento.
Componentes requeridos
En este proyecto, necesitamos los siguientes componentes.
Es definitivamente conveniente comprar un kit completo, aquí tienes el enlace:
Nombre |
ELEMENTOS EN ESTE KIT |
ENLACE |
|---|---|---|
Kit Raphael |
337 |
También puedes comprarlos por separado en los siguientes enlaces.
INTRODUCCIÓN DEL COMPONENTE |
ENLACE DE COMPRA |
|---|---|
- |
Diagrama esquemático
Nombre |
T-Board |
WiringPi |
BCM |
|---|---|---|---|
SPICE0 |
pin24 |
10 |
8 |
SPIMOSI |
pin19 |
12 |
10 |
SPIMISO |
pin21 |
13 |
9 |
SPISCLK |
pin23 |
14 |
11 |
Procedimientos experimentales
Paso 1: Construye el circuito.
Paso 2: Configura la interfaz SPI e instala la librería spidev (consulta Configuración de SPI para instrucciones detalladas).
Si ya has completado estos pasos, puedes omitirlos.
Paso 3: Ve a la carpeta del código.
cd ~/raphael-kit/python-pi5
Paso 4: Ejecuta el archivo
sudo python3 2.2.2-2_Thermistor_zero.py
Cuando el código se esté ejecutando, el termistor detectará la temperatura ambiente, la cual será impresa en la pantalla después de finalizar el cálculo.
Advertencia
Si aparece el error RuntimeError: Cannot determine SOC peripheral base address, consulta Si «gpiozero» no funciona.
Código
Nota
Puedes Modificar/Restablecer/Copiar/Ejecutar/Detener el siguiente código.
Pero antes, necesitas ir a la ruta del código fuente como raphael-kit/python-pi5.
Después de modificar el código, puedes ejecutarlo directamente para ver el efecto.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import spidev
import time
import math
# Inicializar SPI para MCP3008 (Bus 0, CE0)
spi = spidev.SpiDev()
spi.open(0, 0) # Bus 0, Dispositivo 0 (CE0)
spi.max_speed_hz = 1000000 # 1 MHz
def read_adc(channel):
"""
Leer valor analógico del canal MCP3008 (0–7)
"""
if channel < 0 or channel > 7:
return -1
# Formato de comunicación MCP3008
adc = spi.xfer2([1, (8 + channel) << 4, 0])
value = ((adc[1] & 0x03) << 8) | adc[2]
return value
try:
while True:
# Leer valor analógico desde CH0 del MCP3008
analogVal = read_adc(0)
# Convertir a voltaje (referencia de 3.3V)
Vr = 3.3 * analogVal / 1023.0
# Calcular resistencia del termistor
Rt = 10000.0 * Vr / (3.3 - Vr)
# Calcular temperatura en Kelvin usando la aproximación Steinhart–Hart
tempK = 1.0 / (((math.log(Rt / 10000.0)) / 3950.0) + (1.0 / (273.15 + 25.0)))
# Convertir a Celsius y Fahrenheit
Cel = tempK - 273.15
Fah = Cel * 1.8 + 32
# Imprimir la temperatura
print('Celsius: %.2f °C Fahrenheit: %.2f °F' % (Cel, Fah))
# Esperar antes de la siguiente lectura
time.sleep(0.2)
except KeyboardInterrupt:
spi.close()
Explicación del código
Se importan los módulos
spidevpara la comunicación con el ADC MCP3008 mediante SPI,timepara los retardos ymathpara cálculos logarítmicos usados en la conversión de temperatura.#!/usr/bin/env python3 # -*- coding: utf-8 -*- import spidev import time import math
Se inicializa la interfaz SPI para el MCP3008 en el bus 0 y dispositivo 0 (CE0), configurando la velocidad máxima de reloj a 1 MHz.
spi = spidev.SpiDev() spi.open(0, 0) spi.max_speed_hz = 1000000
Se define una función para leer valores analógicos de un canal específico (0–7) del MCP3008 usando el protocolo SPI. Devuelve un entero de 10 bits (0–1023).
def read_adc(channel): if channel < 0 or channel > 7: return -1 adc = spi.xfer2([1, (8 + channel) << 4, 0]) value = ((adc[1] & 0x03) << 8) | adc[2] return value
Se implementa un bucle que lee continuamente valores analógicos del termistor conectado al CH0, los convierte a voltaje (referencia de 3.3V), luego a resistencia y finalmente a temperatura usando la ecuación Steinhart–Hart. Se imprime la temperatura en Celsius y Fahrenheit. Se incluye una pequeña pausa entre lecturas.
try: while True: analogVal = read_adc(0) Vr = 3.3 * analogVal / 1023.0 Rt = 10000.0 * Vr / (3.3 - Vr) tempK = 1.0 / (((math.log(Rt / 10000.0)) / 3950.0) + (1.0 / (273.15 + 25.0))) Cel = tempK - 273.15 Fah = Cel * 1.8 + 32 print('Celsius: %.2f °C Fahrenheit: %.2f °F' % (Cel, Fah)) time.sleep(0.2)
Se captura la interrupción del teclado (Ctrl+C) para finalizar el programa de forma correcta cerrando la interfaz SPI.
except KeyboardInterrupt: spi.close()