Diseñando nuestra solución con Arduino Pro Micro

Como ya vimos anteriormente en la entrada Decidiendo la tecnología del controlador, nuestro dispositivo controlador será un Arduino Pro Micro.

 

Ahora veremos qué capacidades le otorgaremos y de qué modo controlaremos todo nuestro montaje.

 

Diseño de entradas

De la anterior entrega, Capacidades de nuestra botonera, dedujimos que necesitaríamos, al menos, 36 entradas para poder comandar los diferentes botones o dispositivos de entrada con los que queremos datar a nuestra botonera.

Tipos de dispositivos de entrada

Estos dispositivos pueden ser de varios tipos y, en base a ello, de diferente complejidad de control:

  • PULSADOR: este es el dispositivo de entrada mas sencillo, simplemente lanza una señal que determina el accionamiento de la entrada; es decir, es un dispositivo de un solo pulso, con retorno al dejar de ser accionado
  • INTERRUPTOR: el funcionamiento básico es idéntico al del PULSADOR, salvo por la peculiaridad de que el dispositivo se quedará enclavado, hasta volver a ser accionado para desenclavarlo, con lo que podremos mantener la señal de entrada continuamente, o pulso en alto
  • CONMUTADOR GIRATORIO: al igual que un INTERRUPTOR, este tipo de dispositivo mantiene su estado, pero con la diferencia de tener mas de una posición dentro del mismo encapsulamiento, que permitirá simular diferentes decisiones desde un mismo punto de entrada

Luego, como ya habréis visto en el listado de entradas, hemos introducido el uso de un dispositivo digital que está muy de moda últimamente:

  • ENCODER ROTATIVO: este dispositivo de entrada nos permite recibir pulsos constantes cada vez que es accionado, de forma rotativa, que podremos tratar de muchas formas diferentes según nuestras necesidades. A diferencia de los dispositivos anteriores, este tipo de dispositivo precisa de programación extra y un conexionado mas complejo, ya que es capaz de girar de forma infinita, enviando diferentes valores a nuestro controlador, que podremos interpretar del mejor modo posible…

 

Tratamiento de datos de entrada y salida: el uso de I2C

Volviendo a hacer referencia a la entrada anterior, recordemos que decidimos usar 36 entradas de diferente tipo, que deberemos poder tratar de forma singular mediante el controlador. Muy probablemente, en un futuro necesitamos ciertas salidas para manejar otros dispositivos informativos…

Desgraciadamente, nuestro Arduino no dispone de 36 entradas posibles, y mucho menos de más salidas…

Por eso haremos uso de una tecnología llamada I2C (acrónimo de Circuito inter-integrado). Con esta tecnología, y el uso de algunos sencillos dispositivos controladores externos a Arduino, seríamos capaces de manejar hasta 128 entradas y salidas, pero con la peculiaridad del sólo uso de un par de cables…

Esta técnica podría parecer algo compleja desde el punto de vista del usuario que no está habituado a trabajar con Arduino. Sin embargo, es algo muy habitual cuando el número de entradas y salidas supera las posibilidades de la placa seleccionada (que suele ser muy a menudo).

El protocolo I2C consigue, con tan sólo uso de 2 hilos, interconectar una serie de dispositivos que emiten y reciben información de forma completamente aleatoria.

Veamos el siguiente esquema:

 

Tal y como vemos en el diagrama anterior, en la cadena de comunicación I2C existe un dispositivo MASTER (maestro) y n dispositivos SLAVES (esclavos). El dispositivo maestro es quién maneja el sistema de comunicación. En nuestro caso será Arduino, y se encargará de que el resto de dispositivos esclavos se intercomuniquen con él, para enviar la información necesaria de cada entrada.

Como dispositivos esclavos usaremos placas PCF8574, un expansor de 8 entradas y salidas digitales gestionadas por I2C:

Su coste es extremadamente ajustado, y su versatilidad muy alta. Existen diferentes modelos, pero el que tenemos mas arriba en la imagen nos dará un uso muy bueno, ya que se pueden interconectar entre si todos los que sean necesarios, de forma sencilla, siempre que no lleguemos al máximo de 16 (en total 16×8 = 128 entradas /salidas).

Ahora que ya hemos decidido qué controladores vamos a usar, veamos cuántos de ellos necesitaremos.

  • 36 entradas / 8 por controlador = 4,5

Así que necesitaremos, al menos, 5 controladores PCF8574 (y nos sobrarán algunas entradas o salidas).

Pero ojo! Estos controladores solo distinguen señales digitales (0/1), por lo que para los encoders giratorios no nos van a servir, de forma directa, dado que cada encoder tiene 3 pines de señal y dos de alimentación. Esto ya lo trataremos más adelante…

 

Diseño de salidas

Por ahora no vamos a tratar este tema. Es un poco complejo por el tipo de desarrollo que vamos a realizar. Recordemos que nuestro Arduino Pro Micro se conectará como HID de “entrada” en Windows, mediante USB. Para hacer que pueda recibir información hay que configurar su terminal serie para que sea bidireccional. Si bien, no es imposible, si es un tanto complejo.

Por ahora sólo trabajaremos con entradas, porque es realmente lo que necesitamos. Pero como digo, volveremos a las salidas, más adelante, y les dedicaremos una sección completamente a las mismas.

 

Esquema conceptual

A continuación, una vez explicada la estrategia de dispositivos y conexiones que vamos a utilizar en nuestro proyecto, os presento un esquema conceptual para centrar la idea.

Diagrama conceptual

 

¿Qué vemos aquí?

  • La conexión entre PC y Botonera, se realizará mediante conexión USB, que enlazará con la interfaz serie del Arduino
  • La conexión entre Arduino y el sistema de entradas se realiza mediante el protocolo I2C, y el puerto serie que ofrece Arduino a tal efecto (ya veremos más adelante cómo se implementa esta conexión)
    • los dispositivos de entrada serán 5 componentes PCF8574 montados en placa (se podría usar sin ningún tipo de problema un diseño desde 0, pero como ya vimos, las placas que usaremos son extremadamente baratas para el gran servicio que nos darán) 
    • a tener muy en cuenta, la ventaja de usar este sistema de conexión nos facilitará en un futuro poder disponer de mas entradas o salidas, incluso de otros dispositivos, como por ejemplo un display LCD…
  • La cantidad de entradas disponibles son 36, que podría ampliarse sin problemas añadiendo mas dispositivos de entrada al bus I2C (ya sean nuevos PCF8574 u otros equivalentes o de similares capacidades, según nuestras necesidades)

En cuanto a la capacidad de entradas, vemos que son 36, distribuidas de la siguiente manera:

  • Dispositivo de entrada PCF8574_0, con 8 entradas, que van desde la I00 hasta la I07
  • Dispositivo de entrada PCF8574_1, con 8 entradas, que van desde la I10 hasta la I17
  • Dispositivo de entrada PCF8574_2, con 8 entradas, que van desde la I20 hasta la I27
  • Dispositivo de entrada PCF8574_3, con 8 entradas, que van desde la I30 hasta la I37
  • Dispositivo de entrada PCF8574_4, con 4 entradas, que van desde la I40 hasta la I47

Notad que en todos nuestros esquemas, diseños y desarrollos los identificadores siempre empiezan por 0, y van hasta N-1, dónde N es el número máximo o total de dispositivos, entradas, salidas, etc… Esta numeración es nomenclatura típica usada en electrónica e informática.

De este modo, tenemos 5 dispositivos expansores de entrada / salida de bus I2C, los ya conocidos PCF8574, que van a controlar, en una primera versión, 8 entradas cada uno, los 4 primeros, y hasta 4 entradas el quinto, que hacen el total de 36 entradas.

Finalmente, el esquema detalla claramente la dirección dentro del bus I2C de los dispositivos PCF8574, de modo que quedan identificados de este modo:

  • PCF8574_0 > 0x38
  • PCF8574_1 > 0x39
  • PCF8574_2 > 0x40
  • PCF8574_3 > 0x41
  • PCF8574_4 > 0x42

En estos momentos, esto es irrelevante, pero mas adelante veremos el motivo de esta configuración. Por ahora nos basta con saber que una dirección es la forma en que Arduino sabe reconocer cada uno de los dispositivos dentro del bus I2C. Por defecto estas placas empiezan por la 0x38, e iremos aumentando el número en base a nuestras necesidades (ésta es una identificación en hexadecimal).

 

Conclusión

En esta entrega hemos definido el tipo de entradas que necesitamos, así cómo la decisión tomada para poder controlarlas de forma eficiente y sencilla, mediante el bus I2C y los expansores de entrada / salida, PCF8574.

Finalmente también hemos descubierto cómo será nuestro esquema de montaje a nivel conceptual, que nos da una idea clara de qué elementos va a componer nuestro diseño y de qué forma se van a interconectar.

En la próxima entrega veremos el modo en que haremos el conexionado de los diferentes elementos. Entraremos directamente en materia, y os enseñaré un pequeño prototipo que nos servirá para aclarar dudas y ver cómo será nuestro diseño final

Anotación al pie, importante!

Hemos mantenido durante todo este artículo, y anteriores, que usaríamos un teclado virtual como método de entrada, mediante tecnología HID que soporta nuestro Arduino Micro Pro. Desgraciadamente, mientras iba especificando y diseñando la solución, que veremos en la próxima entrega, he podido detectar que nuestro teclado (o uno nuevo virtual) no va a poder darnos un soporte cómodo a 36 teclas, por lo que tendríamos que usar combinaciones especiales, tipo Ctrl+X, etc… Dado que bajo mi punto de vista, esto podría ser problemático a la hora de usar combinaciones que, o bien el juego podría usar, o bien la interfaz de Steam podría definir, he pensado que no es la mejor solución usar un teclado para tal fin. Así que en la próxima entrega veremos qué cambios vamos a hacer a nivel conceptual para que nuestra botonera no entre en conflicto con nada en nuestro sistema, y sea igualmente efectiva con todo el conjunto de entradas que necesitamos.

 

Gracias por leerme, y nos vemos en la próxima entrega!

 

Jordi

 


Navegación:

Buttonbox para simuladores de conducción

 

Share Button