Logotipo de sheen.bot

← Ideas y reflexiones

¿Se puede conectar un sensor I2C a 5 metros de un Arduino en un huerto escolar?

26 sept 2026·Sheen Robotics
¿Se puede conectar un sensor I2C a 5 metros de un Arduino en un huerto escolar?

No de forma fiable tal cual viene de fábrica. I2C se diseñó para circuitos de pocos centímetros, pero se puede salvar un tramo de cinco metros en el huerto ajustando las pull-ups, bajando la velocidad de reloj o pasando a RS485.

No de forma fiable tal cual viene de fábrica. El protocolo Inter-Integrated Circuit (I2C) se diseñó en 1982 para comunicar chips dentro de una misma placa de circuito impreso en distancias de unos pocos centímetros, no a través de bancales o dentro de túneles agrícolas. Si tiendes cinco metros de cable de conexionado estándar o de cable plano flexible barato entre un Arduino y un sensor I2C de humedad del suelo o de temperatura, el microcontrolador casi con toda seguridad se bloqueará, devolverá 0xFFFF o perderá paquetes en cuanto la línea capte ruido eléctrico.

Sin embargo, es posible hacer que un tramo de cinco metros funcione de manera fiable si se comprende por qué falla y se aplican los ajustes eléctricos adecuados (o, mejor aún, si se cambia a una topología de bus diseñada para largas distancias).

Por qué falla I2C con cables largos

I2C utiliza dos líneas: reloj serie (SCL) y datos serie (SDA). Ambas líneas son de drenador abierto (open-drain, o colector abierto). Los dispositivos pueden llevar activamente la línea de señal a 0V (GND), pero no pueden elevarla a 5V o 3,3V. En su lugar, unas resistencias pull-up pasivas devuelven el voltaje a nivel alto cuando todos los dispositivos liberan la línea.

Todo cable físico introduce capacitancia parásita entre conductores adyacentes y tierra. La especificación oficial de I2C limita la capacitancia total del bus a 400 pF en modo estándar (Standard-mode). Un cable estándar de cuatro hilos sin apantallar o un cable de red Cat5e añade aproximadamente de 50 pF a 100 pF de capacitancia por metro. En un tramo de cinco metros, solo el cable ya aporta entre 250 pF y 500 pF, antes incluso de tener en cuenta el módulo del sensor, las pistas de la placa de pruebas (breadboard) y la propia capacitancia interna de los pines del microcontrolador.

Cuando la capacitancia del bus aumenta, la resistencia pull-up y la capacitancia del cable actúan como un filtro paso bajo RC. En lugar de elevarse de forma limpia en una onda cuadrada, el voltaje sube lentamente en curva. Si el reloj conmuta antes de que el voltaje alcance el umbral de nivel lógico alto (típicamente 0,7 × Vcc), el microcontrolador registra un error de bit, pierde un bit ACK o se queda bloqueado indefinidamente a la espera de una transición.

Soluciones en el aula: cómo conseguir 5 metros con I2C

Si ya dispones de sensores I2C (como un BME280 para clima ambiental o un SHT31) y no puedes cambiar el hardware, tres ajustes permitirán estabilizar el enlace a lo largo de cinco metros.

1. Reducir la resistencia de pull-up

La mayoría de placas auxiliares (breakout boards) vienen de serie con resistencias pull-up débiles de 10 kΩ, y las pull-ups internas de Arduino son todavía más débiles (de 20 kΩ a 50 kΩ). Estas resistencias tardan demasiado tiempo en cargar una línea con alta capacitancia.

Calcula la resistencia pull-up mínima segura para descargar la capacitancia más rápidamente. El estándar I2C especifica una corriente máxima de drenaje (sink current) en el bus de 3 mA. Aplicando la ley de Ohm en un Arduino Uno a 5V:

R_min = Vcc / I_max = 5V / 0.003A = 1,666 Ω

Añadir una resistencia externa de 1,8 kΩ o 2,2 kΩ entre SDA y 5V, y otra entre SCL y 5V, define drásticamente el flanco de subida sin superar el límite de corriente de 3 mA de los sensores estándar.

2. Reducir la velocidad de reloj de I2C

El reloj I2C estándar de Arduino funciona a 100 kHz (Standard-mode), mientras que el modo rápido (Fast-mode) funciona a 400 kHz. A 100 kHz, cada ciclo de reloj dura solo 10 microsegundos. Al ralentizar el reloj del bus, se le da al lento flanco de subida RC tiempo suficiente para alcanzar el nivel lógico alto.

En el IDE de Arduino, añade esta línea justo después de Wire.begin() dentro de la función setup():

Wire.setClock(10000); // Reduce clock from 100kHz to 10kHz

La humedad del suelo y la temperatura ambiental varían a lo largo de minutos, no de milisegundos. Leer un sensor a 10 kHz apenas tarda una fracción de milisegundo más y no afecta en absoluto a la monitorización del cultivo.

3. Topología del cableado y pares trenzados

Si utilizas restos de cable Ethernet Cat5e del aula de informática del colegio, nunca pongas SDA y SCL en el mismo par trenzado. Si trenzas el reloj y los datos juntos, la diafonía capacitiva de los pulsos de conmutación del reloj inyectará ruido directamente en la línea de datos. En su lugar, utiliza este patillaje (pinout):

  • Par 1: SDA + GND
  • Par 2: SCL + GND
  • Par 3: VCC + GND (o dejar sin usar)

Rodear cada hilo de señal con un hilo de tierra proporciona apantallamiento capacitivo y deriva el ruido transitorio directamente a tierra.

Soluciones técnicas superiores para huertos escolares

Llevar I2C hasta los cinco metros es una solución rápida aceptable, pero sigue siendo vulnerable a la entrada de humedad, a las interferencias electromagnéticas (EMI) de las bombas de riego y a los bucles de masa. Para instalaciones robustas a largo plazo, conviene recurrir a protocolos mejor adaptados.

Protocolo / SoluciónAlcance máx. recomendadoIdoneidad para huertosComplejidad de cableado
I2C ajustado (reloj bajo + 2,2kΩ)3–5 metrosAceptable (interiores/seco)4 hilos (VCC, GND, SDA, SCL)
Extensor diferencial I2C (PCA9615)50–100 metrosBuena4 hilos en par trenzado
1-Wire (DS18B20)50–100 metrosExcelente para temperatura3 hilos (o 2 en modo parásito)
RS485 / Modbus RTUMás de 1.000 metrosEstándar industrial4 hilos (VCC, GND, A, B)

Opción A: Búferes de bus diferencial activos

Si es imprescindible utilizar un sensor I2C a distancia, añade una placa adaptadora diferencial I2C (como la PCA9615 o la P82B715) junto al Arduino y otra junto al sensor. Estos chips convierten las líneas I2C asimétricas en señales diferenciales (similares a las del bus CAN o RS485), lo que hace que la señal sea inmune al ruido de modo común a lo largo de decenas de metros de cable Ethernet económico.

Opción B: Sensores 1-Wire para temperatura

Para medir la temperatura del compost, del suelo o de depósitos de agua, sustituye I2C por sensores Dallas 1-Wire (DS18B20). Este protocolo gestiona la capacitancia del cable de forma nativa, funciona sin problemas a lo largo de 30 a 50 metros con cable estándar y permite que decenas de sondas compartan un único pin digital.

Opción C: RS485 Modbus para sondas de suelo industriales

Las sondas de suelo comerciales con varillas (que miden humedad, conductividad eléctrica y NPK) utilizan de forma generalizada comunicación serie RS485 con el protocolo Modbus RTU. RS485 emplea señalización diferencial equilibrada que rechaza las interferencias eléctricas procedentes de inversores solares o electroválvulas de agua cercanas. Un módulo económico MAX485 permite que cualquier placa básica Arduino o ESP32 se comunique con sensores situados hasta a un kilómetro de distancia.

En proyectos de monitorización agrícola y ambiental en centros educativos, merece la pena explorar arquitecturas de telemetría dedicadas; consulta nuestras guías curriculares y opciones de hardware en Sheen Farming para elegir la topología de bus más adecuada para el invernadero de tu centro.

Lista de comprobación resumen

Si vas a conectar hoy mismo un sensor I2C a una distancia de hasta cinco metros:

  • Añade resistencias pull-up externas de 2,2 kΩ tanto a SDA como a SCL.
  • Llama a Wire.setClock(10000); en el código para reducir la velocidad del reloj.
  • Utiliza cable Cat5e, emparejando SDA con GND y SCL con GND.
  • Para tiradas superiores a 5 metros o instalaciones exteriores cerca de motores, cambia a 1-Wire o RS485.
#arduino#i2c#electrónica#sensores#iot

Más de Ideas y reflexiones