9

Central digital DCC++ (DCCPlusPlus)

DCCppcustomLogo¿Quien no ha pensado en una central DCC totalmente funcional y compatible con la mayoría de los estándares DCC por unos pocos Euros? Pues estas en la página adecuada ya que en esta entrada vamos a ver las posibilidades que nos ofrece el proyecto Open Source DCC++ Base Station. Con esta central DCC podremos controlar locomotoras, funciones, accesorios, programación, etc…  prácticamente todo de nuestra maqueta digital.

En la web original (en ingles) podéis encontrar información de las características de esta central pero aquí tenéis las más destacadas:

Características:

  • Direcciones de locomotoras de 2 y 4 bytes.
  • Velocidad de 128 pasos.
  • Programación en pista principal.
  • Control simultaneo de múltiples locomotoras.
  • Control de todas las funciones de cabina F0-F28.
  • Activación y apagado de  todas las direcciones de accesorios 0-2048.
  • Programación en vía de programación.

El código del proyecto lo tenéis para la su descarga en la web de github.

Por mi parte he traducido parte de los comentarios de BaseStation1.2.1 y se puede descargar desde este enlace. En principio la traducción es de la carpeta DCCpp_Uno iré traduciendo poco a poco.

En mis primeras pruebas con Rocrail he comprobado el sistema DCC++ con varias locomotoras y una pequeña pista y todo ha ido como la seda, ahora solo tengo que añadirlo a la maqueta mediante un interruptor bipolar para poder cambiar de mi sistema DCC habitual al DCC++.

Rocrail_DCCpp

Otra de las pruebas que quiero realizar es la conexión mediante un modulo Bluetooth conectado en TX/RX.

El proyecto usa como base una placa Arduino UNO con un coste de menos de 3€ o MEGA por unos 8€ junto con un Motor Shield basado en un chip L298P que dependiendo del modelo podemos encontrar desde unos 3,50€, así que el coste máximo no superaría los 11,50€.

En mi caso he optado por el Arduino UNO y un motor Shield «Ardumoto» con el driver L298P.

 

 

 Comunicación: 

 La comunicación se lleva a cabo con el protocolo serial estándar vía cable USB conectado a un sistema Linux, Windows o MAC. Este sketch configura el baudrate serial del UNO en un valor máximo de 115200 baudios. Este Baudrate se puede cambiar a uno inferior pero recuerda que tienes que cambiar es mismo valor en el programa serial que se utilice para comunicarse con la central DCC++.

 

Respetando estos parámetros, podemos utilizar la conexión serial de un PC ya que tenemos multitud de software disponible como Rocrail o JMRI. Este tipo de conexión nos dará un alto grado de realismo (y un alto grado de quebraderos de cabeza) pudiendo realizar rutas o simulaciones.

 

Con un módulo bluetooth HC-06 el cual podremos conectar al PC como a un smartphone Android. 

Si vuestro PC no dispone de bluetooth existen dispositivos USB muy económicos y que además podremos usar para otros menesteres.

 

 

Con el módulo Wi-Fi ESP8266 podemos conectarnos vía web desde cualquier parte del mundo (previa configuración). Por mi parte y experiencia, que dicho sea de paso no es mucha, ha sido la manera más difícil y limitada de las tres opciones. Solo nos permite el uso de 2 locomotoras simultaneas con sus funciones. Queda muy bonito, pero digamos que no lo veo practico si quieres que esta central sea la que finalmente quede instalada en tu maqueta.

Los Archivos: 

El sketch DCC++ Base Station está almacenado en una carpeta llamada DCCpp_Uno y consiste en una serie de 6 archivos C++ y 6 cabeceras asociadas (*.h) Los archivos son los siguientes:

  • DCCpp_Uno.ino:
    Entrada principal del sketch. Declara las variables globales, configura Timers y contiene las subrutinas requeridas setup() y loop().
  • SerialCommand.cpp:
    Paso y procesamiento de los comandos de texto recibidos por el puerto serial.
  • CurrentMonitor.cpp:
    Mide el consumo de corriente en ambas vías de operaciones y la vía de programación y monitoréa los cortocircuitos.
  • Accessories.cpp:
    Para la creación de una lista de desvíos controlados por decodificadores DCC fijos. La dirección de los desvíos especificados en esta lista son actualizados y almacenados en la memoria EEPROM del UNO antes de apagarse.
  • Sensor.cpp:
    Para la creación de una lista opcional de sensores «detectores de tren» que estén conectados a los pines que no se usen en el UNO.
  • PacketRegister.cpp:
    Contiene todo el código para crear los paquetes NMRA DCC basándose en los comandos que le pasa SerialCommand.cpp.

Instalando y usando DCC++ Base Station:

La instalación del software es igual que en otros proyectos, abrimos la carpeta y abrimos el archivo DCCpp_Uno.ino. Esto abrirá el IDE de Arduino con todos los archivos *.cpp y *.h asociados.

Antes de cargar el sketch tenemos que revisar la pestaña configuración:

Archivo Config.h

Estos son algunos parámetros básicos que debemos tener en cuenta

#define MOTOR_SHIELD_TYPE 0

Aquí cambiamos la configuración del tipo de placa que vamos a utilizar, en este caso utilizo una estándar, así que no tengo que tocar nada y lo dejamos como esta.

#define MAX_MAIN_REGISTERS 12

Cuando habla de registros  hablamos de locomotoras. Este es número máximo de locomotoras que podemos controlar al mismo tiempo. Hablo un poco más sobre esto en la entrada DCC++ y los registros CAB.

#define COMM_INTERFACE 0

Este define es para la seleccionar el tipo de comunicación que vamos a utilizar. El 0 se utiliza para la comunicación serial y es la que usaremos con más frecuencia tanto para USB, Bluetooth o wifi.

Las opciones 1, 2 y 3 es para placas de comunicación vía ethernet o red local. Esta conexión utiliza la tarjeta de red o conexión a un router o switch. No puedo decir gran cosa ya que no la he usado nunca y tampoco creo que la vaya usar en un futuro próximo.

Como veis su configuración es bastante sencilla, lo que no quita que se puedan añadir más elementos a la central como pantallas o un pequeño altavoz. 

Alimentación:

El tema de la alimentación es también algo muy importante a la hora de poner en marcha la central. Los dos factores más importantes a tener en cuenta son el Voltaje (V) y la potencia que mediremos en amperios (A) o miliamperios (mA)

Normalmente usaremos una fuente regulada de entre 12V y 18V  y entre 1A y 2A. Esta información normalmente viene impresa en la misma fuente de alimentación como la de la imagen. 

INPUT: 100-240V~50/60Hz:

Esta es la entrada, en España se usa corriente alterna de 220V y 50Hz (generalmente). Revisa que tipo de corriente utiliza tu hogar antes de comprar o utilizar un transformador de este tipo.

OUTPUT: 15V – 1.5A DC:

La salida que proporciona el transformador, en este caso 15 Voltios con un máximo de 1.5 Amperios. 

Como el Shield es de 2 Amperios y un máximo de 18 Voltios estamos dentro del rango. Aquí hay que tener en cuenta el consumo de nuestro tren o trenes. El consumo del motor de una locomotora varia según ciertos parámetros como el número de ruedas, tracción o carga entre otros.

Es decir, no es lo mismo que una locomotora funcione sola a que vaya arrastrando 5 vagones, pero de media suelen consumir un 500mA es decir 0,5A. Con estos datos ya sabemos que podremos utilizar entorno a 3 o 4 locomotoras al mismo tiempo.

Por otra parte es conveniente separar la alimentación de Arduino de la del Shield Ardumoto, esto lo explico en la entrada de este blog llamada Central DCCpp Alimentando externamente Arduino con 5V. Para este caso si que seria conveniente cambiar a una de 2 Amperios ya que el regulador también tendrá algo de consumo.

¿Que transformadores podemos usar? 

Mucha gente piensa que en H0 poniendo una fuente de alimentación tipo PC tendrá energía suficiente para poder utilizar la central, pero esta opción solo es valida para hacer pruebas o para escala N ya que sus locomotoras necesitan no tienen motores tan grandes como los de H0. También hay que tener en cuenta en dentro del Shield Ardumoto tendremos una caída de tensión de entorno a 1,5 y 2 voltios, es decir si en H0 tenemos una fuente de 15V a las vías llegaran en torno a los 13V en escala N si metemos 12V la salida sera entorno a los 10V (esto son datos aproximados).

Tabla de valores de corriente máxima para central DCCpp

Tampoco podemos venirnos arriba y poner un transformador demasiado grande para nuestros menesteres, si ponemos un transformador de, por ejemplo, 3A todo ira bien hasta que todo empiece a consumir por encima de los 2A con el riesgo de quemar el L298P o el Arduino o como suelo decir «catastrof!!!». La central DCC++ también tiene un pequeño «cortafuegos» para que no pase esto. Puedes leer algo más sobre esto aquí.

 

Comandos:

Un ejemplo de la estructura de comandos y datos mandados y recibidos del sistema DCC++ puede ser el siguiente: 

 < C P1 P2 … PN>

Donde « es un único comando alfanumérico y «P1″ hasta «PN» son parámetros alfanuméricos opcionales.

El espacio en blanco entre la apertura « y el comando «C» esta permitido, pero no es requerido.
El espacio en blanco entre el comando «C» y el primer parámetro «P1» esta permitido pero no es requerido.
El espacio en blanco entre el ultimo parámetro «PN» y el cierre «>» esta permitido pero no es requerido.
El espacio en blanco entre parámetros «P1 P2» es requerido.

La lista de comandos (Sin lista de parámetros):

  • <t> : Sitúa la velocidad del decoder de una locomotora usando una velocidad de 128 pasos.
  • <f> : Controla las funciones del decoder de una locomotora F0-F28.
  • <a> : Control de decoders de accesorios fijos.
  • <T> : Control de desvíos conectados a decoders de accesorios.
  • <w> : Escribe la configuración de una variable Byte en un decoder de locomotora en la vía de operaciones.
  • <b> : Sitúa/limpia la configuración de una variable Byte en un decoder de locomotora en la vía de operaciones.
  • <W> : Escribe la configuración de una variable Byte en un decoder de locomotora en la vía de programación.
  • <B> : Sitúa/limpia la configuración de una variable Byte en un decoder de locomotora en la vía de programación.
  • <R> : Lee la configuración de una variable Byte en un decoder de locomotora en la vía de programación.
  • <1> : Enciende alimentación a las vías.
  • <0> : Apaga la alimentación a las vías.
  • <c> : Lee la corriente consumida de las vías de operaciones.
  • <s> : Devuelve los mensajes de estado, incluido el estado de alimentación, estado de los desvíos y versión del sketch.

Y este es el sistema DCC++ Base Station, un sistema compacto totalmente compatible con la mayoría de los decodificadores del mercado. Con un software totalmente escalable tanto por la central como por los diferentes accesorios que se le pueden añadir como mandos de control, pantallas con información del estado de la central, software de control, etc…

Descargar DCC++ Base Station con comentarios traducidos al español

Control DCCpp Android Cab (Conexión mediante Bluetooth)

DCC++ con Arduino Mega 2560

Ver DCC++ Comandos y su estructura (comandos completos en español)

DCC++ Accesorios y desvíos

DCC++ Sensores

DCC++ y los registros CAB

DCC++ Conexión Bluetooth con modulo HC-06

DCC++ Conexión con modulo ESP8266

Estos son los enlaces en los que podéis encontrar mucha información y muy útil sobre el tema DCC:

    • Iguadix.es web con mucha información sobre sistemas DCC.
  • Trainelectronics.com Otra web donde también hay bastante información y que merece la pena visitar.

 

Montando la central DCC++ en Arduino UNO
Comandos DCC++
DCCpp Android Cab
(Visitado 4.863 veces, 1 visitas hoy)

9 comentarios

  1. Hola, he probado esta central y me funciona muy bien comandando distintos decodificadores, lo que no puedo hacer es tener retorno del decodificador , por lo tanto no puedo leer los CV , etc, si puedo programarlos, tampoco usando JMRI, el problema lo tengo en que transmite pero no recibe nada del decodificador , esta hecha con ARDUINO UNO y Motor shield igual al publicado, corte la pista y conecte los dos puentes tal cual lo especificado, uso el monitor del IDE de Arduino, todo funciona transmitiendo, cuando pido retorno obtengo un -1 , es decir error, en JMRI obtengo error 308 , que dice lo mismo no hay retorno del deco. Alguna idea, sugerencia ? Gracias desde ya por todo lo que has publicado hasta ahora , me hizo retornar al hobby usando lo que fue mi trabajo de toda la vida , la electronica, mis mejores saludos desde Argentina

    • Buenas Carlos!!! Me alegra haberte hecho retornar al hobby!!! El punto más flojo en esta central es (a mí parecer) la programación. He leído varias propuestas tanto en software como en hardware. Las de software superan ya un poco mi nivel pero en cuanto a hardware hay algunos pasos que hay que tomar en cuenta aunque el más importante es la fuente de alimentación, si estás con H0 (cómo es mi caso) te recomiendo una fuente de alimentación en continua de mínimo 15V 1A. Si es de menos seguramente de error. La que uso en mis pruebas me da como mucho 12V y si quiero programar uso la de la maqueta que son 15V. También es algo que me queda por investigar más a fondo, pero también es algo que por el momento uso poco, solo las CVs principales y poco más que porciento, siempre se programan bien, tanto en vía principal como en vía de programación. Que fuente usas? Que comando en particular? O todos? Saludos!!!

    • Buenas!!! Veo que no ha probado desde el seríal que lleva incorporado el ID de Arduino, intenta encender y hacer andar la locomotora con comandos escritos. Con JMRI no he probado, pero debería funcionar. Prueba con el seríal y a ver si por lo menos enciende, Saludos!!!

  2. Gracias, gracias a todos los desarrolladores: Esto es una maravilla. Me he entretenido mucho aplicando aquí lo expuesto y funciona muy bien la central con HC05 y Dccpp Cab. Ahora me meteré a los decodificadores. Felicidades por la página… y los exhorto a seguir desarrollando: una pantalla touch para el arduino no sería mala idea. De nuevo gracias.

    • Muchas gracias Benigno!!! Me alegra enormemente que todo lo desarrollado te sea de utilidad. Cuando conocí DCC++ vi el enorme potencial que esta pequeña central tiene para ofrecer una experiencia completa con el manejo de locomotoras accesorios y sensores. He mirado algo de las pantallas touch, y también hice algo (cacharreo más bien) lo tienes aquí: DCC++ con pantalla táctil Pero he preferido dedicar más tiempo al DCCpp Cab, que también me alegra saber que te funciona bien. Espero esté disfrutando de estas fiestas, saludos!!!

  3. Muy buen trabajo, yo tambien estoy con esta central a base de Arduino. Me ha funcionado con el programa JMRI, pero no he podido, o más bien no he sabido, configurar la locomotora en Rockview. Veo que a ti te ha funcionado de maravilla, podrias indicarme como configurar desde el principio el rockview.
    Muchas gracias y lo dicho un gran trabajo.

Responder a Benigno Goyos Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *