El panel de control
Los controladores
1. Un pasatiempo para compartir
Si se equipa a los trenes con descodificadores digitales, no solo es para tener un mejor control de la velocidad o la iluminación reversible, sino sobre todo para hacer circular varios trenes al mismo tiempo. Aunque todavía se pueden controlar todos los trenes con un solo mando, esto se complica rápidamente. La forma más sencilla y lúdica es disponer un mando para cada convoy. Esto es más ameno, ya que varias personas pueden controlar todos los trenes simultáneamente.
Las centrales DCC comerciales suelen suministrarse con uno o dos controladores. Para controlar más locomotoras y así aumentar el factor lúdico del sistema, hay que hacer malabares entre las direcciones de los descodificadores, lo cual es bastante tedioso, o comprar controladores adicionales, que son bastante caros. Sin embargo, un controlador solo contiene un potenciómetro, unos cuantos pulsadores y un mínimo de cableado electrónico. Por lo tanto, un aficionado experimentado puede hacerlo perfectamente.
El controlador permite dirigir las locomotoras, ya sea para ajustar la velocidad, elegir el sentido de la marcha del tren o incluso para controlar directamente las funciones del descodificador. Hay dos maneras de concebir este sistema de control:
-
Se puede crear un único panel de control que reagrupe los controles de todas las locomotoras. Se trata de una solución fácil y económica, que se presentará en este capítulo.
-
Si no, se puede optar por diseñar una caja de control destinada a una sola locomotora y reproducirla en varios ejemplares. Esto permite conectarlos a través del bus I²C en varios lugares de la red, lo que resulta más práctico si son varias personas las que manejan los trenes. Esta posibilidad se presenta en el capítulo Controladores independientes.
La gran central DCC, que se creará a continuación, está diseñada para aceptar indistintamente uno u otro de los sistemas de control e incluso será posible combinarlos para controlar aún más locomotoras.
2. Un sistema modulable
No porque sea de una sola pieza significa que no sea modular; es posible adaptarlo a sus propias necesidades. Está diseñado para controlar hasta 16 locomotoras. Cada controlador proporciona acceso...
La lectura de los controladores
1. El principio
En el código de la central, está prevista una estructura para definir el estado de un controlador. Creando una tabla a partir de esta estructura, se puede conocer el estado de cada controlador, ya sea gestionado por el panel de control presentado en este capítulo o por uno de los controladores independientes presentados en el capítulo siguiente. En ella hallamos la identificación de la locomotora, que permite encontrar sus características en la lista de locomotoras, así como la instrucción de velocidad, el sentido de la marcha y el estado de las teclas de función.
typedef struct _command_
{
byte loco;
char F0;
word speed;
word F1;
word F2;
} CONTROL ;
CONTROL ControlList[CONTROL_LIST_SIZE];
Antes de realizar la mínima lectura, hay que configurar las entradas. La función controlInit se llama desde setup. Ella se encarga de configurar correctamente las señales de comandos de los controladores y, a continuación, se inicializa el contenido de la lista de controladores.
void controlInit(void)
{
pinMode(CTRL_MUXEN,OUTPUT);
digitalWrite(CTRL_MUXEN,LOW);
pinMode(CTRL_MUXA0,OUTPUT);
pinMode(CTRL_MUXA1,OUTPUT);
pinMode(CTRL_MUXA2,OUTPUT);
pinMode(CTRL_MUXA3,OUTPUT);
for(int i=0; i<sizeof(ControlList)/sizeof(CONTROL); i++)
{
ControlList[i].loco=0xFF;
ControlList[i].F0=MODE_STOP;
}
}
2. La descodificación
Leer la velocidad es cosa fácil. Solo hay que usar la función analogRead.
word speed=analogRead(CTRL_SPEED);
La lectura del sentido de la marcha requiere un poco más de trabajo, ya que hay que convertir el valor analógico leído antes de almacenarlo en una forma que pueda utilizarse para accionar las locomotoras. Hacer siete desplazamientos a la derecha es lo mismo que hacer una división entre 128, lo que ya se realizó en la sección Las señales analógicas.
char...
Circuito bonus
1. Múltiples posibilidades
Antes de concluir este capítulo, he aquí la presentación de un circuito que se va a utilizar varias veces en el resto de este libro. Este circuito especialmente versátil integra un soporte para un Arduino Nano, así como numerosos conectores que permiten una gran variedad de usos.
-
Controlar pantallas LCD u OLED
-
Controlar matrices LED
-
Controlar amplificadores de potencia
-
Controlar servomotores
No será posible tener todas estas funciones al mismo tiempo, por lo que los conectores nunca se soldarán todos a la vez. En esas condiciones, ¿qué sentido tiene hacer un solo circuito cuando se podrían hacer varios, cada uno dedicado a una tarea? La respuesta es sencilla: la mayoría de los fabricantes de circuitos impresos no permiten hacer menos de cinco ejemplares, por lo que, aun teniendo demasiados circuitos, se pueden utilizar varias veces.
El esquema presentado aquí es bastante sencillo: un Arduino y muchos conectores; nada más. Puede ver que muchas entradas y salidas se utilizan dos veces, pero esto no es un problema, ya que se supone que los conectores no se utilizan simultáneamente.
J1 es un bus I²C. Se conecta a A4 y A5, que son el bus físico I²C del Arduino Nano. Por el contrario, los conectores J5 y J6 también son buses I²C, pero de software. Solo pueden utilizarse por medio de una biblioteca adicional. Un bus I²C por software es, como su nombre indica, totalmente controlado por un programa y, por lo tanto, inevitablemente más lento que un bus físico, también conocido como bus «hardware». A pesar de este inconveniente, ofrece la ventaja de disponer a la vez de un bus esclavo, para comunicarse con la central...