¿Qué es este blog?

La idea de este blog nace para compartir los avances que se vayan realizando a lo largo de un estudio sobre cómo interconectar los distintos sensores que se pueden encontrar en el mercado, o fabricar de forma casera, con la plataforma Mindstorms de LEGO. Para ello se hará uso ARDUINO, un entorno de desarrollo abierto basado en microcontrolador.

miércoles, 23 de febrero de 2011

Arduino Mega 2560 y los Mindstorms

Como ya sabeis, el primer paso es comunicar un Mindstorm NXT con una plaquita de Arduino. A la hora de hacer la elección de la placa para este proyecto, se tuvo en cuenta la capacidad, las prestaciones, etc. pero se omitió un detalle fundamental que voy a explicar a continuación. La placa elegida fue la Arduino Mega 2560.

En primer lugar, las conexiones que en principio hay que hacer entre el Mindstorm y Arduino son muy sencillas:

- Pines 2 y 3 del NXT (Rojo y negro) (tierra) --> Arduino GND
- Pin 4 del NXT (alimentacion) (verde) --> Arduino 5V
- Pin 5 del NXT (Amarillo) (SCL) --> Arduino SCL
- Pin 4 del NXT (Azul) (SDA) --> Arduino SDA

Y tanto la señal SDA como SCL están conectas a la línea de alimentación a través de unas resistencias de Pull-up de 82 K, así dichas líneas tendrán la tensión adecuada para que las detecte Arduino. Hasta aquí todo bien, salvo por un detalle... no funciona.

Tras pasar varios días repasando el código (que ya pondré en otra entrada del blog), las conexiones, las resistencias, etc. descubrí el motivo por el que no funcionaba: la placa que estoy usando tiene ya integradas unas resistencias de 10 K conectadas a las señales SDA y SCL. Estas resistencias hacen imposible poder conseguir el valor que necesito de resistencias de Pull-up.

Si la placa fuera una Arduino Mega (el modelo anterior) la solución es "sencilla", y consiste en eliminar las resistencias. Aquí tenéis una explicación de ello: Enlace

¿Por qué en nuestro caso no es posible? Como veis en la imagen inferior, las resistencias que tiene nuestra placa están dentro de un encapsulado (el que pone 103) que, de acuerdo con el esquemático, engloba 4 resistencias. Una de ellas está conectada al pulsador de reset, lo que quiere decir que si eliminamos este encapsulado, nuestra placa no llegaría a encenderse (ya que el reset estaría siempre estaría a nivel bajo, y por tanto funcionando).



De momento no he logrado encontrar solución a esto, así que cualquier sugerencia es bienvenida, pero me parece que poco se puede hacer salvo probar con otra modelo de Arduino.

Una alternativa que se ha barajado, ha sido la de usar SoftI2C, opción que ya comenté en alguna ocasión. Básicamente consiste en usar cualquier entrada analógica de Arduino para emular el protocolo I2C, y hacer toda la gestión por software. Pero esto tiene 2 problemas: las entradas analógicas también están conectadas a una resistencia interna, aunque algo más grande (20 K), y las librerías de softI2C sólo están creadas para que Arduino funcione como maestro en la comunicación, y nosotros lo necesitamos como esclavo del robot.

No hay comentarios:

Publicar un comentario