Estoy usando un Arduino para comunicarme con los sensores magnetométricos I2C. La lista de piezas y un diagrama de bloques básico del cableado se muestran a continuación:
Magnetómetro HMC5883L:
TCA9548A Expansor I2C:
Cable de cinta estándar de 4 clavijas:
Cabecera rectangular de 6 clavijas estándar:
Encabezado estándar de 4 pines:
Pido disculpas por el esquema, pero tuve que simplificarlo para hacerlo más claro. Esencialmente, estamos usando un Arduino Uno para leer desde seis sensores magnetométricos usando un multiplexor I2C. El multiplexor está conectado a una placa PCB hecha para el Arduino, por lo que está muy cerca de ella, y los sensores están a una distancia de 1,5 metros a través de un cable de cinta conectado a través de los encabezados a la placa PCB. El esquema solo muestra un sensor, ya que incluir los seis lo haría desordenado, pero los otros sensores también están conectados de la misma manera.
Ahora, por lo que leí sobre I2C, hay algunos problemas con la interferencia, y de acuerdo con otra pregunta publicada, se recomienda que se coloquen VDD y GND entre SDA y SCL para reducir y / o evitar que se produzcan interferencias . El HMC5883L falla en ese sentido, así que con mi cable de cinta, crucé los cables para que VCC y GND estén entre SDA y SCL. No es la solución más elegante, pero es la solución más simple. El cruce solo se produce en el extremo del cable del sensor (menos de 1 pulgada), no en el medio, pero me preguntaba si esto sería un problema con la comunicación I2C. Para ser honesto, probé esto con dos sensores, por lo que estoy bastante seguro de que esta configuración funcionará con los 6 sensores, pero quería preguntar en caso de que pudiera surgir algún problema que nunca haya considerado.
También, en caso de que te lo preguntes, tuve que agregar las resistencias de extracción de 10k en las líneas SDA y SCL para poder leer los sensores desde una distancia de 1,5 metros. Inicialmente, cuando lo instalé en una placa de pruebas, no respondieron, y no fue hasta que agregué las resistencias que se podían leer desde una gran distancia. Los sensores en sí tienen resistencias de arranque de 10k, pero supongo que la disminución de la resistencia permitió una distancia más larga. Las resistencias son resistencias SMD de 10k que se encuentran en la propia placa PCB.