sábado, 24 de octubre de 2015

Conectando 2 arduinos por el puerto serie/I2C

Para integrar los dos arduinos de las plazas de parking con el arduino master  (es posible que sea necesario descargar el driver si  es un arduino basado en chip ch340) que gobierna el panel de control y la barrera de entrada necesitaremos algún tipo de comunicación.

La comunicación más básica es el puerto serie. En Arduino está en los pines digitales 0 y 1 , etiquetados como RX(recepción) y TX(transmisión) . Para comunicar dos dispositivos por esta vía, hay que unir los Tx de un dispositivo con los rx del otro y viceversa. Sin embargo en nuestro caso necesitamos comunicar uno de ellos (el master) con otros  dos.

En SoftwareSerialExample teneis un ejemplo simple de cómo se utiliza la comunicación serie sobre otros pines diferentes al 0 y al uno y así poder comunicar más de un arduino.


En Referencia Serial tenéis las principales funciones de comunicación serie.


Si queréis utilizar bluetooth para comunicar dos arduinos, hay que pensar que en bluetooth uno de los extremos debe actuar como maestro. En http://www.prometec.net/bt-hc05/ podeis encontrar un completo tutorial donde se muestra como configurar el lado maestro. una vez conectado el arduino usa el puerto serie como si estuviese cableado.

La conexión por puerto serie requiere que cada enlace esté  en diferentes pines y por tanto la programación es menos genérica. Para comunicar dispositivos de una manera más ágil se utilizan los buses en serie, que con diversos protocolos , permiten tener en unos pocos pines decenas de dispositivos.




Uno de los más utilizados en la industria es I2C. Cada componente que conectamos al bus I2C tiene una dirección única, y cada mensaje y orden que transmitimos al bus, lleva anexa esta dirección, indicando cuál de los muchos posibles, es el receptor del mensaje.
Para comprender los rudimentos de este enlace y conectar dos arduino podéis utilizar este pequeño tutorial . en este otro enlace podeis ver 5 arduinos conectados por I2C .

Respecto a las resistencias que aparecen en el esquema, En el bus I2C es importante colocar una resistencia de pull-up a cada linea, tanto a la SDA como a la SCL, porque son con estas resistencias precisamente las que le marcan la velocidad de transmisión al bus. Recuerda que dependiendo de la velocidad hay que subir o bajar el valor de estas pull-ups. Aunque  para dispositivos con velocidades bajas,Arduino puede funcionar sin resistencias. 

Microchip en este documento (http://ww1.microchip.com/downloads/en/DeviceDoc/i2c.pdf) aconseja:

  • 4K7<100kbps
  • 2K2>100kps
  • 1K>400Kbps

Práctica en clase: Conectar algún dispositivo I2C,.Ejecutar el código para escanear los dispositivos i2c existentes y marcar en el código que hace cada comando de la librería Wire utilizado. Probar la conexión entre dos arduinos y asignarle distintas direcciones. Mostrar los resultados por pantalla de ejecutar este código de scanner sobre el arduino esclavo. Subir al Blog los resultados

El otro bus utilizado en arduino es el SPI (Serial Protocol Interface), que en términos técnicos es muy similar a I2C. En este enlace se pueden ver dos arduinos conectados por SPI .   Las diferencias entre uno y otro están resumidas aquí. Muchos sensores vienen ya para uno u otro protocolo, por lo que muchas veces la decisión de cual usar nos vendrá dada por el tipo de sensor que estemos utilizando.




1 comentario:

  1. Añadida información sobre las resistencias en el esquema de conexión de I2C

    ResponderEliminar