← Índice del curso

Internet de las Cosas · Tema 8

Conectar sensores al microcontrolador

El sensor ya está elegido. Ahora hay que conectarlo: un cable que va a una entrada analógica, dos hilos de un bus I²C, cuatro de SPI. Parece cuestión de seguir un esquema, pero la mayoría de los sensores que «no andan» fallan por una resistencia mal elegida, una dirección repetida o un cable demasiado largo.

01 · Punto de partida

El enlace entre el sensor y el código

En el tema anterior vimos cómo es un sensor por dentro y cómo entrega la medida. Ahora ocupamos el espacio entre el sensor y el firmware: los conductores, resistencias y reglas de comunicación que hacen que el valor llegue completo. En el escritorio, con cables cortos y un solo sensor, casi cualquier conexión funciona. En un producto, con varios sensores, cables más largos, ruido y años de uso, los detalles aparecen.

Un hecho tranquilizador: tanto I²C como SPI están pensados para que muchos dispositivos compartan pocos cables. La contracara es que compartir exige reglas, y esas reglas (direcciones, resistencias, capacidad máxima) son lo que este tema enseña a respetar.

Los fragmentos de C++ siguen el estilo Arduino para ESP32; las ideas valen para cualquier microcontrolador.

02 · Panorama

Las formas de conectar un sensor

Interfaces habituales entre un sensor y un microcontrolador.
InterfazHilosVelocidad típicaDispositivos por busDistancia razonableUso típico
Analógica1 señal por sensor (más alimentación y masa)Depende del conversor y del muestreoUno por entradaDecenas de centímetrosTermistores, fotoresistencias, sensores simples
I²C2 (SDA, SCL), compartidos100 kHz a 400 kHz (hasta MHz en modos rápidos)Hasta 100 aproximadamente, limitado por la capacitanciaDecenas de centímetros a pocos metrosSensores digitales de baja velocidad
SPI3 compartidos (SCK, MOSI, MISO) más 1 de selección por dispositivoDe 1 MHz a decenas de MHzLos que permitan los pines de selecciónDecenas de centímetrosSensores rápidos, memorias, pantallas
UART2 por dispositivo (TX, RX)9600 a 115.200 baudios o másUno por puertoMetros; hasta kilómetros con RS-485Sensores de CO₂, partículas, GPS, módulos
1-Wire1 de datos (compartido) más masaBaja (unos 16 kbit/s)Muchos, cada uno con identificador únicoDecenas de metrosSondas de temperatura en cables largos
Digital simple / interrupción1 por señalEventosUno por pinMetrosInterruptores, sensores PIR, alertas

La elección más común en IoT es I²C por su economía de pines y por la cantidad de sensores que lo usan. SPI aparece cuando hace falta velocidad, y la conexión analógica queda para sensores baratos o de respuesta continua. Las cuatro opciones coexisten sin problema en un mismo microcontrolador moderno, que dispone de varios periféricos de cada tipo.

03 · Señal analógica

Entrada analógica y conversor

Un conversor analógico-digital (ADC) transforma una tensión en un número. La relación es lineal: con n bits y una tensión de referencia Vref, un valor de entrada V produce el código V / Vref × (2n − 1). Con 12 bits y 3,3 V, el rango 0–3,3 V se divide en 4096 pasos de unos 0,8 mV.

La lectura, como cualquier medida, tiene problemas prácticos que conviene conocer:

  • Rango de entrada. La entrada no admite tensiones mayores que la alimentación. Un sensor de 0–5 V conectado a un microcontrolador de 3,3 V puede dañarlo; se adapta con un divisor de tensión. Por ejemplo, 10 kΩ en serie y 18 kΩ a masa dan 5 × 18 / 28 ≈ 3,21 V con 5 V a la entrada. Un divisor de resistencias grandes tiene alta impedancia de salida y puede distorsionar la lectura; si hace falta, se usa una resistencia menor o un amplificador separador.
  • Ruido. Una lectura aislada varía unos pasos. Promediar N lecturas reduce el ruido aleatorio en un factor √N: con 16 lecturas, cuatro veces.
  • No linealidad y calibración. Los conversores integrados de algunos microcontroladores no son perfectamente lineales, sobre todo en los extremos, y su referencia varía entre chips. Para medidas exigentes se calibra contra un valor conocido.
  • Competencia con la radio. En algunos chips los canales analógicos comparten recursos con el Wi-Fi y no pueden leerse mientras la radio está activa, o se ven afectados por el ruido de sus ráfagas de corriente. Conviene verificar en la hoja de datos qué pines usar.
const int PIN_SENSOR = 34;            // pin con entrada analógica
const int MUESTRAS = 16;

int leerPromedio(int pin, int n) {
  long suma = 0;
  for (int i = 0; i < n; i++) {
    suma += analogRead(pin);          // 0 a 4095 con 12 bits
    delay(2);                         // pausa corta entre lecturas
  }
  return suma / n;
}

void setup() {
  Serial.begin(115200);
}

void loop() {
  int bruto = leerPromedio(PIN_SENSOR, MUESTRAS);
  float milivolts = bruto * 3300.0 / 4095.0;       // convertir código a tensión
  Serial.print(milivolts);
  Serial.println(" mV");
  delay(1000);
}

Observá la estructura: el valor bruto del conversor se convierte a una unidad física (milivolts) y recién después se interpreta. Separar esos pasos hace que el código sea más fácil de calibrar y de probar.

04 · Bus I²C

El bus I²C

I²C usa dos líneas compartidas: SDA (datos) y SCL (reloj). Un dispositivo, el controlador (antes llamado maestro), inicia todas las comunicaciones; los demás son periféricos. Cada periférico tiene una dirección de 7 bits, y el controlador la escribe al comienzo de cada transacción para decir con quién habla.

Bus I²C con tres sensores Dos líneas horizontales, SDA y SCL, conectan al microcontrolador con tres sensores. Cada línea tiene una resistencia de pull-up hacia la alimentación de 3,3 voltios. Los sensores tienen direcciones distintas: 0x40, 0x44 y 0x76. Las líneas permanecen en nivel alto cuando nadie las usa y cada dispositivo las lleva a nivel bajo para transmitir. Microcontrolador(controlador) Sensor Adir. 0x40 Sensor Bdir. 0x44 Sensor Cdir. 0x76 Rp alimentación 3,3 V SDA (datos) SCL (reloj) Reposo: las líneas están en alto por los pull-ups

El funcionamiento eléctrico es el rasgo clave: las líneas son de colector abierto. Ningún dispositivo empuja la línea hacia arriba; solo puede conectarla a masa (nivel bajo) o soltarla. Las resistencias de pull-up la llevan a nivel alto cuando nadie la baja. Gracias a eso varios dispositivos comparten las líneas sin cortocircuitos, y de ahí su aviso permanente: sin pull-ups, un bus I²C no funciona. Muchas placas de sensores ya las traen soldadas; cuando se conectan varias, quedan en paralelo y la resistencia equivalente baja.

Tres reglas de las direcciones:

  • No pueden repetirse en un mismo bus. Dos sensores con la misma dirección fija se pisan y no responde ninguno bien.
  • Algunos sensores ofrecen dos o cuatro direcciones mediante un pin de selección o un puente soldable, para poder usar dos iguales.
  • Si no hay opción, se usa un segundo bus I²C del microcontrolador o un multiplexor I²C, un chip que conecta a un solo ramal a la vez.

Un recurso invaluable al armar un circuito es el escáner de direcciones: un programa que prueba todas las direcciones posibles e informa cuáles responden. Confirma que el sensor está conectado y revela la dirección real, que a veces difiere de la que dice el tutorial.

#include <Wire.h>

void setup() {
  Serial.begin(115200);
  Wire.begin();                       // usa los pines I2C por defecto de la placa
  Serial.println("Buscando dispositivos I2C...");
  int encontrados = 0;
  for (byte direccion = 1; direccion < 127; direccion++) {
    Wire.beginTransmission(direccion);
    if (Wire.endTransmission() == 0) {      // 0 significa que alguien contestó
      Serial.print("Respondió: 0x");
      Serial.println(direccion, HEX);
      encontrados++;
    }
  }
  Serial.print("Total: ");
  Serial.println(encontrados);
}

void loop() {}

Si el escáner no encuentra nada, la causa suele ser eléctrica: alimentación o masa sin conectar, SDA y SCL cruzados, o falta de pull-ups. Si encuentra más direcciones de las esperadas, algún módulo trae otro chip (por ejemplo, una memoria) en el mismo bus.

05 · Pull-ups y capacitancia

Pull-ups y capacitancia del bus

La resistencia de pull-up tiene que cumplir dos requisitos opuestos. Si es demasiado grande, la señal sube despacio: cada línea, con sus cables y los pines de los dispositivos, se comporta como un condensador de capacidad Cb que se carga a través de la resistencia, y la subida tarda del orden de R × C. Si es demasiado chica, los dispositivos no logran llevar la línea a nivel bajo, porque deberían absorber una corriente excesiva.

Rp máx = tsubida ÷ (0,8473 × Cb)   ·   Rp mín = (Vcc − 0,4 V) ÷ 3 mA

La fórmula de la izquierda usa el tiempo de subida máximo que fija la especificación: 1000 ns a 100 kHz y 300 ns a 400 kHz. La de la derecha es la corriente mínima que un dispositivo debe poder absorber (3 mA). Con 3,3 V, la resistencia mínima es unos 970 Ω. Entre ambos límites queda un rango de resistencias válidas, que se achica a medida que crece la capacitancia o la velocidad.

La capacitancia total se estima sumando la de cada pin (unos 10 pF por dispositivo, contando el controlador) y la del cable (unos 50 pF por metro):

Cb ≈ 10 pF × (dispositivos + 1) + 50 pF × metros de cable

La norma limita Cb a 400 pF. Superado ese valor, ninguna resistencia salva el bus: la señal no llega a subir a tiempo con una corriente aceptable. Hay que acortar el cable, quitar dispositivos, bajar la velocidad o dividir el bus con un multiplexor.

06 · Bus SPI

El bus SPI

SPI es un bus pensado para velocidad. Usa tres líneas compartidas, un reloj (SCK), datos hacia el periférico (MOSI) y datos desde el periférico (MISO), más una línea de selección (CS o SS) por cada periférico. El controlador baja la línea de selección del dispositivo con el que habla; los demás ignoran lo que pasa en el bus. No hay direcciones, sino pines.

Frente a I²C, SPI es más rápido (de megahercios a decenas de megahercios), transmite en los dos sentidos al mismo tiempo y no necesita resistencias de pull-up, porque sus líneas se empujan activamente. A cambio, requiere más pines (cada dispositivo suma uno) y no tiene un mecanismo de confirmación.

Comparación entre I²C y SPI para conectar sensores.
CriterioI²CSPI
Pines del controlador2 para todos los dispositivos3 más 1 por dispositivo
Cómo se elige el dispositivoPor dirección de 7 bitsPor línea de selección
VelocidadHasta 400 kHz (comúnmente)Megahercios
Resistencias necesariasPull-ups obligatoriosNinguna
Confirmación de recepciónSí (bit de reconocimiento)No
Ideal paraMuchos sensores lentosPocos dispositivos rápidos (memorias, pantallas, sensores de alta frecuencia)

En IoT con sensores de lectura ocasional, la velocidad de SPI no se aprovecha, por lo que I²C suele ganar. SPI aparece en sensores que entregan grandes cantidades de datos (acelerómetros que registran vibraciones, por ejemplo) o cuando hay que manejar una memoria flash o una pantalla.

07 · Cableado práctico

Cableado práctico

Los problemas que más tiempo cuestan no están en el código sino en el cableado. Una lista de comprobaciones simples evita la mayoría:

  • Masa común. Todos los dispositivos deben compartir la referencia de 0 V. Un sensor con otra alimentación y sin masa común produce lecturas erráticas.
  • Niveles de tensión. No conectes una salida de 5 V a una entrada de 3,3 V: puede dañarla. Si hay niveles distintos, se usa un adaptador de nivel.
  • Desacoplo. Un condensador de 100 nF cerca de la alimentación de cada sensor filtra los picos de corriente; es la mejora más barata y más efectiva.
  • Cables cortos. I²C y SPI están pensados para distancias de centímetros. Con cables largos, bajá la velocidad, usá cable trenzado o blindado, o cambiá a un enlace diferencial como RS-485.
  • Ruido de la radio y de los motores. Mantené los cables de señal lejos de las antenas y de las cargas inductivas; evitá lazos grandes entre señal y masa.
  • Pines con función especial. En muchos microcontroladores algunos pines definen el modo de arranque o están reservados para la memoria o la radio. Si un pin tiene un sensor que lo fuerza a un nivel durante el arranque, el chip puede no iniciar. Consultá la hoja de datos antes de elegir los pines.
  • Contactos. En un producto, los cables en protoboard se sustituyen por soldaduras o conectores con traba: un falso contacto intermitente es muy difícil de diagnosticar.

Y una recomendación final: probá el sensor aislado antes de incorporarlo al producto completo. Con un programa mínimo que lee y muestra el valor, un fallo se atribuye con certeza al sensor o al cableado, y no a la interacción con el resto del código.

08 · Analogía con programación

Verificar un bus I²C en Python

Las fórmulas de los pull-ups se pueden volcar a una función que, para un bus dado, calcula la capacitancia, el rango de resistencias válidas y el tiempo de subida con la resistencia elegida, y dice si funciona. El modelo usa 10 pF por dispositivo (más uno por el controlador) y 50 pF por metro de cable, una alimentación de 3,3 V y los límites de la norma: 400 pF de capacitancia máxima y un tiempo de subida de 1000 ns a 100 kHz o 300 ns a 400 kHz.

Python en tu navegador. Los bloques son editables: cambiá los valores y presioná «Ejecutar Python». La primera vez tarda unos segundos en cargar.

VCC = 3.3
C_PIN_PF = 10          # capacitancia de cada dispositivo (y del microcontrolador)
C_CABLE_PF_M = 50      # capacitancia del cable por metro
I_MIN_MA = 3.0         # corriente que un dispositivo debe poder absorber en nivel bajo
CB_MAX_PF = 400        # límite de capacitancia del bus según la norma
TR_MAX_NS = {100: 1000, 400: 300}   # tiempo de subida máximo según la velocidad (kHz)


def bus_i2c(dispositivos, cable_m, khz, rp_ohm):
    cb = C_PIN_PF * (dispositivos + 1) + C_CABLE_PF_M * cable_m          # picofaradios
    rp_max = TR_MAX_NS[khz] * 1e-9 / (0.8473 * cb * 1e-12)
    rp_min = (VCC - 0.4) / (I_MIN_MA / 1000)
    subida_ns = 0.8473 * rp_ohm * cb * 1e-12 * 1e9
    if cb > CB_MAX_PF:
        veredicto = "demasiada capacitancia"
    elif rp_ohm < rp_min:
        veredicto = "corriente excesiva"
    elif subida_ns > TR_MAX_NS[khz]:
        veredicto = "flanco muy lento"
    else:
        veredicto = "funciona"
    return cb, rp_min, rp_max, subida_ns, veredicto


print("disp  cable  kHz  pull-up   Cb      Rp mín   Rp máx    subida   resultado")
for disp, cable, khz, rp in [(1, 0.1, 400, 4700), (4, 1, 400, 4700), (4, 1, 400, 2200),
                             (8, 1, 400, 4700), (8, 1, 100, 4700), (8, 3, 400, 1000),
                             (8, 3, 400, 2200), (8, 10, 100, 1000)]:
    cb, rmin, rmax, tr, v = bus_i2c(disp, cable, khz, rp)
    print(f"{disp:>4} {cable:>5} {khz:>4} {rp:>7}  {cb:>4.0f} pF  {rmin:>5.0f}  {rmax:>7.0f}  {tr:>6.0f} ns   {v}")

Resultado con los valores iniciales: un sensor con 10 cm de cable y 4,7 kΩ a 400 kHz funciona (25 pF, subida de 100 ns). Con cuatro sensores y 1 m de cable (100 pF), el máximo es 3541 Ω y los 4,7 kΩ no sirven (398 ns contra 300): con 2,2 kΩ la subida es de 186 ns y funciona. Con ocho sensores y 1 m (140 pF), 4,7 kΩ a 400 kHz sube en 558 ns y falla, pero a 100 kHz sí funciona, porque el límite es 1000 ns. Con ocho sensores y 3 m (240 pF), a 400 kHz el rango válido es de 967 a 1475 Ω: 1 kΩ funciona (203 ns) y 2,2 kΩ no (447 ns). Y con 10 m de cable la capacitancia llega a 590 pF y ninguna resistencia sirve.

El modelo deja una lección práctica: el valor de 4,7 kΩ que aparece en todos los tutoriales no es universal. Sirve para un bus corto y liviano; cuando se agregan sensores o cable, hay que recalcularlo. Bajar la velocidad es la solución más simple y suele bastar en IoT, donde los sensores se leen de a ratos.

09 · Exploración interactiva

¿Funciona mi bus?, de extremo a extremo

Este laboratorio ejecuta el mismo modelo del código anterior. Elegí cuántos sensores hay en el bus, la longitud del cable, la velocidad y el valor de la resistencia de pull-up. La banda celeste muestra el rango de resistencias válidas, la marca naranja es tu elección y las barras comparan el tiempo de subida con el máximo permitido. Los parámetros eléctricos son estimaciones típicas.

Verificación de un bus I²C

Capacitancia del bus—
Resistencias válidas—
Tiempo de subida—
Máximo permitido—
Corriente del pull-up en bajo—
Resultado—

Elegí los parámetros y presioná «Verificar el bus».

Recorrido guiado

  1. Con los valores iniciales (4 sensores, 1 m, 400 kHz, 4,7 kΩ), verificá. La capacitancia es 100 pF, el máximo permitido para la resistencia es 3541 Ω y la subida es de 398 ns contra 300: «Flanco muy lento». El tutorial con 4,7 kΩ falla en este bus.
  2. Cambiá a 2,2 kΩ: la subida baja a 186 ns y funciona. Cambiá a 1 kΩ: 85 ns, también funciona, pero gasta 3,30 mA cuando la línea está en bajo.
  3. Con 4,7 kΩ, bajá la velocidad a 100 kHz. El límite sube a 1000 ns y los 398 ns alcanzan. Reducir la velocidad es la salida más barata.
  4. Pasá a 8 sensores y 3 m a 400 kHz. La capacitancia es 240 pF y el rango válido es 967 a 1475 Ω. Solo funciona 1 kΩ; 2,2 kΩ ya no (447 ns). El margen es pequeño.
  5. Con 8 sensores y 3 m, bajá a 100 kHz: el rango válido se ensancha (hasta 4918 Ω): 2,2 kΩ funciona cómodamente (447 ns) y 4,7 kΩ apenas (956 ns contra 1000).
  6. Elegí 10 m de cable: 590 pF, «Demasiada capacitancia», con cualquier resistencia y velocidad. Se necesita otro enlace (por ejemplo RS-485), un multiplexor o acortar el cable.
Desafío: dos resistencias de pull-up en paralelo

Si dos módulos de sensores traen cada uno su pull-up de 4,7 kΩ soldado y los conectás al mismo bus, las dos resistencias quedan en paralelo: 4,7 × 4,7 / (4,7 + 4,7) = 2,35 kΩ. Con cuatro módulos así, la equivalente baja a 1,18 kΩ, cerca del mínimo de 967 Ω. Por eso, un bus que funcionaba con tres módulos puede empezar a fallar al sumar uno más, aunque la capacitancia siga siendo baja: la corriente que deben absorber los dispositivos supera los 3 mA. Al armar un bus con módulos comerciales, contá las resistencias que traen y retirá las que sobren.

10 · Método de trabajo

Cómo poner en marcha un sensor nuevo

Cuando incorporás un sensor que no conocés, seguí siempre el mismo orden. Cada paso descarta una familia de problemas antes de pasar al siguiente:

  1. Hoja de datos. Alimentación, niveles de tensión, interfaz, dirección o modo de selección, tiempo de arranque.
  2. Alimentación y masa. Medí la tensión en el sensor, con el microcontrolador funcionando y la radio transmitiendo.
  3. Conexión mínima. Un solo sensor, cables cortos, sin el resto del circuito.
  4. Presencia. Ejecutá el escáner I²C (o leé el identificador del chip en SPI) y comprobá que responde donde se espera.
  5. Lectura bruta. Leé el valor sin interpretar y verificá que cambia cuando cambia el fenómeno.
  6. Conversión y unidades. Aplicá las fórmulas del fabricante y comparalas con una referencia.
  7. Integración. Sumá el resto de los sensores y el programa completo, y revisá si aparecen interferencias.
  8. Condiciones reales. Probá con el cable definitivo, la fuente de producción y los casos extremos de temperatura y batería.

Si un paso falla, no avances: corregilo allí. La gran mayoría de los problemas de sensores se resuelven en los pasos 2, 3 y 4.

11 · Comprensión

Confusiones frecuentes

«El I²C funciona sin resistencias porque ya lo hice así»

A veces funciona porque el microcontrolador activa resistencias internas muy débiles (decenas de kilohmios) o porque la placa del sensor ya trae las suyas. Con un bus más largo o más rápido, esas resistencias no alcanzan. Para un diseño confiable se calculan y se agregan las externas.

«Con 4,7 kΩ siempre anda»

Es un valor razonable para un bus corto y de pocos dispositivos. Con más capacitancia o con 400 kHz puede ser demasiado grande. El valor correcto se calcula a partir de la capacitancia del bus y la velocidad.

«Más bits en el conversor mejoran la exactitud»

Mejoran la resolución, no la exactitud. Con un sensor que tiene error de ±1 °C, pasar de 10 a 16 bits da más decimales y el mismo error. Y los bits bajos suelen quedar ocultos por el ruido.

«Puedo conectar tantos sensores como direcciones haya»

Hay 112 direcciones útiles, pero la capacitancia total limita el bus a 400 pF, lo que equivale a pocas decenas de dispositivos con cables cortos. El límite eléctrico llega antes que el de direcciones.

«SPI siempre es mejor porque es más rápido»

Es más rápido, pero consume más pines, no tiene confirmación de recepción y complica el cableado. Para sensores que se leen de a ratos, la velocidad extra no aporta nada y I²C es más simple.

«Si el escáner no ve el sensor, el sensor está roto»

Lo más probable es una falla eléctrica: alimentación, masa, SDA y SCL cruzados o falta de pull-ups. También puede ser que el sensor use otra dirección o esté en un modo que no responde hasta recibir un comando. Revisá el cableado antes de descartar el sensor.

12 · Práctica guiada

Predecí antes de comprobar

1. Elegir la interfaz

Proponé una interfaz para: (a) una sonda de temperatura en un cable de 20 m dentro de un tanque; (b) cuatro sensores ambientales digitales a 20 cm del microcontrolador; (c) un acelerómetro que registra vibraciones a 1000 muestras por segundo.

Ver solución

(a) 1-Wire (o un enlace RS-485): funciona con cables largos y un solo hilo de datos. (b) I²C: dos hilos para los cuatro, con direcciones distintas. (c) SPI: la velocidad y el volumen de datos lo justifican.

2. Resolución de la entrada analógica

Una entrada de 12 bits con referencia de 3,3 V mide un sensor de 10 mV/°C. ¿Cuántos pasos distintos se obtienen entre 0 y 3,3 V y qué resolución en °C resulta? ¿Cuánto se reduce el ruido promediando 16 lecturas?

Ver solución

Hay 4096 pasos de 3,3 V / 4096 ≈ 0,806 mV, que a 10 mV/°C son 0,08 °C. Promediando 16 lecturas, el ruido aleatorio baja en un factor √16 = 4.

3. Adaptar un rango

Un sensor entrega 0 a 5 V y el microcontrolador tolera hasta 3,3 V. Calculá un divisor con 10 kΩ y 18 kΩ y la tensión que llega con 5 V a la entrada.

Ver solución

La tensión es 5 V × 18 / (10 + 18) ≈ 3,21 V, dentro del límite. La resistencia de salida del divisor es 10 || 18 ≈ 6,4 kΩ; si la lectura resulta distorsionada, se reducen los valores (por ejemplo, 5,6 kΩ y 10 kΩ) o se agrega un amplificador separador.

4. Un bus con cuatro sensores

Cuatro sensores en un bus de 1 m a 400 kHz y 3,3 V. Calculá la capacitancia, el rango de resistencias válidas y decidí si sirven 1 kΩ, 2,2 kΩ o 4,7 kΩ.

Ver solución

Cb = 10 × 5 + 50 × 1 = 100 pF. El máximo es 300 ns / (0,8473 × 100 pF) ≈ 3541 Ω y el mínimo es 2,9 V / 3 mA ≈ 967 Ω. Sirven 1 kΩ y 2,2 kΩ; los 4,7 kΩ no (398 ns > 300 ns). La de 2,2 kΩ gasta menos corriente en bajo (1,5 mA contra 3,3 mA) y es la mejor opción.

5. Dos sensores iguales

Dos sensores de humedad tienen dirección fija 0x40 y querés usar ambos en el mismo microcontrolador. ¿Qué opciones tenés?

Ver solución

(1) Segundo bus I²C del microcontrolador, que casi todos tienen, con un sensor en cada uno. (2) Multiplexor I²C que conecta uno u otro a la vez. (3) Si el modelo lo permite, usar otra variante con dirección alternativa. (4) Cambiar a un sensor con SPI, que se distingue por la línea de selección.

6. Contar pines

Querés conectar cinco sensores. ¿Cuántos pines del microcontrolador necesitás con I²C, con SPI y con UART (suponiendo un puerto por sensor)?

Ver solución

I²C: 2 pines para los cinco. SPI: 3 compartidos + 5 de selección = 8. UART: 2 por sensor = 10, además de que el microcontrolador debería tener cinco puertos disponibles. De ahí la popularidad de I²C para sensores.

13 · Síntesis

Ideas para recordar

  • Un sensor puede conectarse por entrada analógica, I²C, SPI, UART, 1-Wire o una señal digital simple; para IoT, los sensores digitales por I²C son los más cómodos.
  • El conversor analógico-digital da un código proporcional a la tensión; más bits dan más resolución, pero la exactitud depende del sensor y la calibración.
  • Hay que adaptar el rango de la señal al de la entrada (con un divisor, por ejemplo) y promediar lecturas para reducir el ruido.
  • I²C usa dos líneas compartidas, direcciones de 7 bits y colector abierto; no funciona sin resistencias de pull-up.
  • Las direcciones no pueden repetirse en un bus; el escáner I²C confirma qué dispositivos responden y en qué dirección.
  • La resistencia de pull-up tiene un rango válido que depende de la capacitancia del bus y la velocidad; con más cable o más dispositivos el rango se achica y a 400 pF desaparece.
  • SPI es más rápido y no necesita pull-ups, pero exige un pin de selección por dispositivo y no confirma la recepción.
  • La masa común, los niveles de tensión coherentes, el desacoplo y los cables cortos evitan la mayoría de los fallos de cableado.
  • Un sensor nuevo se pone en marcha en pasos: hoja de datos, alimentación, conexión mínima, presencia, lectura bruta, unidades e integración.

¿Listo para el tema 9?

Antes de avanzar, conectá un sensor digital a tu placa, ejecutá el escáner I²C y anotá la dirección que aparece. Después calculá la capacitancia de tu cableado, el rango de resistencias válidas y comprobá si la que tenés instalada está dentro. Si el sensor responde y los números cierran, estás listo para decidir cada cuánto leerlo.

En el próximo tema estudiamos el muestreo y la frecuencia de lectura: cada cuánto medir según la rapidez con que cambia la variable, qué es el teorema del muestreo en la práctica y qué cuesta medir de más.