mcp3008_read.py
El GPIO de la Raspberry Pi es solo digital: este script añade ocho entradas analogicas de 10 bits con un MCP3008 en SPI (bus 0). El potenciómetro va al canal 0 y la conversion 0–1023 pasa a 0–3,3 V. En la model-b-rev2, active SPI (spi_arm) en config.txt o raspi-config.
Hardware
Una Raspberry Pi Model B revisión 2 (BCM2835, conector GPIO de 26 pines, puertos Ethernet/USB movidos al borde de la placa). Un circuito MCP3008 (DIP-16), un potenciómetro de 10k, breadboard, cables dupont.
Cableado
MOSI/MISO/SCLK a GPIO10/9/11 (pines 19, 21, 23), CS0 al pin 24, VDD 3,3 V, el cursor del potenciómetro a CH0, puente 3,3 V/GND.
Funcionamiento
spidev intercambia 3 bytes; el MCP3008 devuelve 10 bits escalados por 3,3/1023. Nunca supere 3,3 V en las entradas.
Ejecución
Copia el script en la placa (scp o memoria USB) y ejecútalo con python3 (o bash). En Raspbian, instala gpiozero con sudo apt install python3-gpiozero. El esquema oficial de Raspberry Pi incluye el brochage del conector de 26 pines.
Variantes
Hay 8 canales; media movil de 16 lecturas para estabilizar. Broche en el esquema oficial de P1.
mcp3008_read.py
# mcp3008_read.py — lit un potentiel analogique via ADC SPI MCP3008.
# Deps: sudo apt install python3-spidev (activer spi_arm dans config.txt)
import spidev, time
spi = spidev.SpiDev()
spi.open(0, 0) # bus SPI0, celecteur CS0
spi.max_speed_hz = 1350000
def read_ch(ch):
val = spi.xfer2([1, (8 + ch) << 4, 0])
out = ((val[1] & 0x03) << 8) + val[2]
return out * 3.3 / 1023.0
try:
while True:
print(f"CAN0 = {read_ch(0):0.2f} V")
time.sleep(1)
except KeyboardInterrupt:
spi.close()