Usar ADC MCP3008 para leer sensores analógicos con Raspberry Pi
Conectar sensores analógicos a una Raspberry Pi puede ser un reto porque los pines GPIO de la Pi son solo digitales. Una solución económica es el MCP3008, un conversor analógico-digital de 8 canales y 10 bits que se enchufa directo al bus SPI de la Pi y no requiere componentes extra.
En esta guía recorreremos cablear un MCP3008 a una Raspberry Pi, conectar una resistencia dependiente de luz (LDR) y un sensor de temperatura TMP36, y leer los datos con un script Python simple.
Qué necesitarás
- Raspberry Pi (cualquier modelo con header GPIO)
- MCP3008 ADC 8 canales
- Resistencia dependiente de luz (LDR) – ej. NORPS-12
- Sensor de temperatura TMP36
- Resistencia de 10 kΩ (para circuito LDR)
Habilitar SPI en la Pi
La interfaz SPI viene deshabilitada por defecto. Sigue los pasos en Habilitar la interfaz SPI en la Raspberry Pi para activar SPI e instalar la librería Python spidev.
Conexiones del circuito
El MCP3008 requiere cuatro pines GPIO en el header de 40 pines de la Pi. Conecta los siguientes pines (números según numeración P1 del header):
VDD 3.3V VREF 3.3V AGND GROUND CLK GPIO11 (P1‑23) DOUT GPIO9 (P1‑21) DIN GPIO10 (P1‑19) CS GPIO8 (P1‑24) DGND GROUND
Cada uno de los pines CH0–CH7 del MCP3008 se convierte en entrada analógica. En el ejemplo usamos CH0 para el LDR y CH1 para el TMP36; los seis canales restantes quedan libres para futuros sensores.
Resistencia dependiente de luz (LDR)
La resistencia del LDR cae a unos 10 kΩ bajo luz brillante y sube a varios megaohmios en oscuridad. Formando un divisor de voltaje con una resistencia de 10 kΩ, el MCP3008 lee un voltaje que cae hacia 0 V cuando hay luz y sube hacia 3,3 V en la oscuridad.
Sensor de temperatura TMP36
El TMP36 es un sensor analógico de temperatura de 3 pines. Aliméntalo con 3,3 V y lee su pin VOUT. El sensor emite 0,750 V a 25 °C, con pendiente lineal de 10 mV por °C. Así, 0 °C da 0,500 V y 100 °C da 1,500 V.
Leer datos con Python
El MCP3008 emite valores de 10 bits de 0 a 1023, mapeados linealmente a 0 V–3,3 V. Para el TMP36, esto corresponde a un rango de temperatura de aprox. –50 °C a +280 °C.
Abajo hay un ejemplo mínimo usando la librería spidev para leer canales 0 y 1:
import spidev
import time
spi = spidev.SpiDev()
spi.open(0, 0) # bus 0, device 0
spi.max_speed_hz = 1350000
def read_channel(channel):
# Protocolo MCP3008: bit inicio, single/diff, canal (3 bits), 5 bits dummy
adc = spi.xfer2([1, (8 + channel) & 0x0F << 4, 0])
data = ((adc[1] & 3) << 8) + adc[2]
return data
while True:
ldr_val = read_channel(0)
temp_val = read_channel(1)
temp_c = (temp_val * 3.3 / 1023) * 100 - 50 # Convertir a °C
print(f'LDR: {ldr_val}, Temp: {temp_c:.2f}°C')
time.sleep(1)
Reemplaza los números de canal según tu layout de sensores. El script imprime continuamente el valor ADC crudo del LDR y la temperatura calculada en grados Celsius.
Con esta configuración puedes añadir sensores analógicos adicionales —fotodiodos, transductores de presión, sondas de humedad— cableándolos a los pines CH2–CH7 restantes y extendiendo el código Python accordingly.
¡Feliz hacking!
Proceso de manufactura
- Construya un registrador de temperatura con Raspberry Pi y sensor I2C de 5 $
- Perfilado preciso de temperatura en Raspberry Pi con Python, SQLite y LabVIEW
- Conectar múltiples sensores DS18B20 1‑Wire a Raspberry Pi para monitorización precisa de temperatura
- Cómo leer temperatura con un DS18B20 en Raspberry Pi 2
- Monitorización profesional de temperatura con Raspberry Pi y DS18B20
- Medición de temperatura en Raspberry Pi con sensores 1-Wire Maxim y puente I2C DS2482
- Sensor infrarrojo TMP006 con Raspberry Pi: librería Python y guía de configuración
- Construya un sensor de temperatura remoto con Raspberry Pi y Python – Guía paso a paso
- Monitorización precisa de temperatura en armario de servidores con Raspberry Pi
- Monitorización meteorológica remota con Raspberry Pi 3 y PubNub
- Integración de TI SensorTag con Blynk vía Node‑RED en Raspberry Pi Zero