Pines Arduino

Para flexibilizar la creación de proyectos es conveniente poder conectar mas sensores a la misma placa controladora, ya que por ejemplo a veces surge la necesidad de conectar solo 2 leds adicionales, o solo querer agregar un buzzer a un proyecto existente. Si ya se usaron todos los puertos se puede recurrir a colocar una shield adicional que tenga de los puertos requeridos.

Para poder aumentar la cantidad de sensores conectados (de forma modular) es necesario recurrir al concepto de shield stackable (o placas apilables) sobre una placa controladora como la Arduino. Por lo tanto aparece la necesidad de establecer un uso coherente de todos los pines del Arduino, algo parecido a un "bus", como si fuera el bus ISA o el bus PCI de una computadora común. Además, el establecer una especie de bus habilita el cambio transparente de placa controladora, por ejemplo con una PICduino.

En lo que sigue se ha considerado solamente la Arduino UNO, por ser la mas común y la implementación de referencia de Arduino. Los modelos mas chicos, como la Arduino Micro o la Arduino Nano, no soportan el concepto de shields. Los modelos mas grandes, como la Arduino Mega, son mucho mas caros y son mas grandes de tamaño al ser manipulados o al querer colocarlos dentro del proyecto robótico. Además, una controladora como la Arduino Mega si bien tiene muchos mas pines, no es modular en el sentido que no es fácil, por ejemplo, agregar solo 8 pines mas, o quitar 8 pines que me sobran. Por otro lado, la Arduino Leonardo si bien tiene mas interrupciones hardware y puede hacer AI sobre algunos pines digitales, ha cambiado la ubicación de los pines SPI. Aparentemente, el cambio de SPI hacia el ICSP header parece ser el camino a futuro que han tomado los diseñadores de Arduino, aunque esto implique un nuevo tipo de conector para los dispositivos o shields (observar que es justo de 6 pines: los 4 de SPI, masa y +5V).

Pines UNO

Pines UNO R3

Uso de los pines

Una descripción detallada de los pines se encuentra en el sitio oficial. En esta implementación de referencia, que es concordante con las librerías oficiales, ya se ha establecido algunos usos determinados para los pines. Por ejemplo, la librería oficial Wire para comunicaciones I2C ya está configurada internamente para usar los pines A4 y A5, podrían usarse otros pines si se modifica la librería, pero es mas simple respetar la que viene. Lo mismo sucede con la libreria SPI y la Serial. Otros usos son permitidos, por ejemplo, los pines analógicos podrían usarse como pines digitales, accediéndolos con la numeración 14 .. 19. Sin embargo esos otros usos no se consideran en la siguiente tabla.

Otro tema a considerar es que cuando se usan ciertas librerías de Arduino, las mismas suprimen o reemplazan la funcionalidad PWM de los pines que lo poseen de manera predefinida. Por ejemplo, al usar la "Servo Library" se suprimen las funciones PWM y analogWrite() de los pines P9 y P10, ya que esa librería usa el Timer1 para su propio funcionamiento. Otro caso es la "Tone Library" para emitir sonidos por un pin digital, pero que usa el Timer2 deshabilitando la funcionalidad PWM de los pines P3 y P11.

Matriz de Compatibilidad

Al colocar una sola de las shields de FreeSensors sobre una Arduino UNO R3 obtenemos toda la funcionalidad de sus puertos. ¿Pero que sucede si empezamos a apilar la misma o diferentes shields? Para responder esta pregunta se realiza la siguiente matriz:

Por el lado de la compatibilidad entre las shields y los puertos de comunicaciones, tanto para I2C como para Serial RX/TX no hay problemas, porque esos pines se usan en exclusividad para esas tareas.

Pero para SPI podrían haber conflictos con la AIport, aunque no los habría si mantenemos el P10 de Chip Select o Slave Select de modo de no activarlo cuando colocamos un address para la AIport. Ahora bien, el P10 si conflictúa con el uso dado para el motor S2 de la Motor y para la Servo. De este modo, esas shields podrían ser incompatibles con módulos SPI.

Sin embargo, en Arduino solo estaría previsto conectar un solo dispositivo SPI a la vez (hay una sola linea de Slave Select). Entonces la otra solución posible para SPI, es utilizar los mismos tres pines de direccionamiento (P11, P12, P13) para comandar un decodificador de 3 a 8 y asi tener la posibilidad de conectar hasta 8 dispositivos SPI simultáneamente, generando la señal de Slave Select de forma correcta en cada puerto SPI. Esta solución daría lugar a una shield exclusiva para SPI y la necesidad de modificar la libreria para que soporte este modo de funcionamiento, sin cambiar los tres pines principales dedicados a SPI.