Tabla de contenido:

Maqueta de ferrocarril - Estación de comando DCC con Arduino :: 3 pasos
Maqueta de ferrocarril - Estación de comando DCC con Arduino :: 3 pasos

Video: Maqueta de ferrocarril - Estación de comando DCC con Arduino :: 3 pasos

Video: Maqueta de ferrocarril - Estación de comando DCC con Arduino :: 3 pasos
Video: DCC++ Tutorial en español - Comandos: Accesorios y desvíos 2024, Mes de julio
Anonim
Image
Image
Código Arduino - Estación de comando con teclado
Código Arduino - Estación de comando con teclado

Actualizado en agosto de 2018: consulte el nuevo Instructable:

Actualización del 28 de abril de 2016: Ahora capacidad de control de 16 puntos / desvíos para Command Station. Los desvíos T1 - T8 están disponibles mediante la tecla 'B' Los desvíos T9 - T16 están disponibles mediante la tecla 'C'

Actualización 10 de marzo de 2016:

Ahora se agregó capacidad de control de 8 puntos de participación / puntos a la estación de comando. El código Arduino se ha actualizado en consecuencia utilizando el paquete estándar NMRA para desvíos (también basado en un estudio de paquetes de datos Lenz / Atlas Compact para control de desvíos).

Los desvíos T1 - T8 están disponibles mediante la tecla 'B'

Consulte las instrucciones sobre el circuito receptor de paquetes de datos utilizado y el código Arduino requerido.

Actualización 18 de enero de 2016:

Agregué una resistencia de detección de corriente (1k5 ohmios) y un condensador (10 uf) al circuito y modifiqué el código Arduino para cortar la energía cuando se detecta una corriente máxima de> 3200 mAmps. La especificación del puente H establece una corriente de detección de salida de 377 uA por 1 amperio en la carga.

La resistencia de 1.5 k ohmios entregará 0.565 voltios por amperio en el pin analógico 6. Con 1023 pasos en la entrada analógica, esto da 0.565 * 1023/5 = 116 por carga de amperio.

A = 100 * (lectura analógica (AN_CURRENT)) / 116; A = A * 10; (dar resultado en miliamperios) a.

La corriente de carga en miliamperios se muestra en el TFT

El teclado completo 4x4 incluye funciones de F1 a F8 y otras 10 locomotoras (1-19) a través de la tecla '#' (para agregar 10 a las teclas numéricas comenzando por la locomotora 10).

El código arduino incluye el estándar NMRA para bytes de instrucción.

Ver enlace

www.nmra.org/sites/default/files/s-9.2.1_20…

(la página 6 es de especial relevancia)

Los paquetes se organizan según el número de pasos de velocidad, la dirección larga / corta y las instrucciones del grupo de funciones.

Todos los bytes de instrucción están precedidos por un preámbulo de '1' bits 11111111 (o paquete inactivo) seguido de;

p.ej. Una dirección de 4 bytes 0 00000011 0 00111111 0 10000011 0 10111111

equivale a la locomotora 3, 128 pasos de velocidad, dirección de avance y paso de velocidad 3 (el byte final es la comprobación de errores XOR)

p. ej., una dirección de 3 bytes 0 00000011 0 10010000 0 10110011

equivale a la locomotora 3, grupo de funciones 1, FL se enciende más el byte XOR (un bit '0' separa cada byte)

Vea el video de demostración adjunto para la locomotora 12.

Las funciones F1 - F8 están disponibles mediante la tecla 'A', DIR (tecla '*' = dirección) FL (tecla '0' = luces) y la tecla '#' proporciona las locomotoras 10 a 19 en el teclado numérico. La tecla 'D' ahora se usa para una 'PARADA de emergencia'.

Gracias a varios proveedores en la web por fuentes de información DCC y código Arduino.

En particular, este proyecto se inspiró en Michael Blank y su 'DCC simple: una estación de comando'

www.oscale.net/en/simpledcc

Teclado de interruptor de membrana de 16 teclas Matrix Array 4x4 (ebay) £ 1.75

Módulo de pantalla LCD SPI TFT serie 240x320 de 2,2 pulgadas (ebay) 7,99 €

ADAPTADOR DE ALIMENTACIÓN AC UNIVERSAL 12V 5A 60W (ebay) 6,99 €

Nano V3.0 para Arduino con CH340G 5V 16M compatible ATmega328P (ebay) 2 x £ 3.30 = £ 6.60

Módulo controlador de motor LMD18200T para Arduino R3 (ebay) 7,99 €

Conectores, cable, placa vero, potenciómetro aprox. 3,50 €

Precio total 32,52 €

La estación de comando básica sin pantalla tft y 1 x nano costaría £ 22.03

[Nota: Es posible agregar una tarjeta de memoria a la pantalla TFT y modificar el código para mostrar imágenes de los motores seleccionados, aunque los códigos de la biblioteca deben editarse para crear más memoria para el boceto. El tamaño del boceto actual es máximo para el TFT Arduino Nano]

El código Arduino original de Michael Blank era para un motor, solo avance / retroceso sin control de función, sin teclado y sin pantalla.

He modificado el código para incluir 1 - 19 motores, una pantalla de visualización, dirección, luces, 8 funciones, parada de emergencia y límite de corriente automático.

El puente LMD18200T puede transportar hasta 3 amperios, lo que lo hace adecuado para todas las escalas, incluida la escala G (trenes de jardín). La fuente de alimentación de red y la electrónica son aptas para uso en interiores únicamente, a menos que pueda hacerlo todo resistente a la intemperie. Tengo la estación de comando en la casa de verano con cables de conexión de rieles que atraviesan la pared hasta la vía.

Paso 1: Código Arduino - Estación de comando con teclado

Mi agradecimiento a tvantenna2759 por señalar 2 errores en el diagrama del circuito donde el código Arduino no coincidía con el cableado, ahora actualizado (21 de octubre de 2017).

Ahora se agregaron 16 desvíos a la estación de comando. Consulte las instrucciones en el diagrama de circuito de desvíos / puntos utilizando el módulo Arduino Mini Pro.

El código modificado que incluye el control de participación se adjunta a continuación.

El paquete decodificador de accesorios básicos es: 0 10AAAAAA 0 1AAACDDD 0 EEEEEEEE 1 A partir del análisis del paquete utilizado por Lenz (Compact / Atlas) para el control de puntos, he utilizado el siguiente formato de paquete binario para los bytes 1 y 2: tunAddr = 1 Turnout 1a: 1000 0001 1111 1000 / Desvío 1b: 1000 0001 1111 1001 Desvío 2a: 1000 0001 1111 1010 / Desvío 2b: 1000 0001 1111 1011 Desvío 3a: 1000 0001 1111 1100 / Desvío 3b: 1000 0001 1111 1101 Desvío 4a: 1000 0001 1111 1110 / Desvío 4b: 1000 0001 1111 1111 tunAddr = 2 ----------------------------------------- -------------------------------------------------- ----------------- Desvío 5a: 1000 0010 1111 1000 / Desvío 5b: 1000 0010 1111 1001 Desvío 6a: 1000 0010 1111 1010 / Desvío 6b: 1000 0010 1111 1011 Desvío 7a: 1000 0010 1111 1100 / Desvío 7b: 1000 0010 1111 1101 Desvío 8a: 1000 0010 1111 1110 / Desvío 8b: 1000 0010 1111 1111 ----------------------- -------------------------------------------------- ---------------------------------- Turnout 9a: 1000 0011 1111 1000 / Turnout 9b: 1000 0011 1111 1001 etc ………

Extracto del código modificado: agregue 2 actualizaciones de mensajes 'struct' más. // decodificador accesorio 0x80 & dirección 1 x.data [1] = 0; }

void modificar_tun2 (estructura Mensaje & x) {x.data [0] = 0x82; // decodificador accesorio 0x80 & dirección 2 x.data [1] = 0; }

Agregar nuevo vacío para desvíos: boolean read_turnout () {delay (20);

booleano cambiado_t = falso; obtener la clave();

if (key_val> = 101 && key_val <= 404 && turn == 1) {

datos = 0xf8; // = binario 1111 1000

modificar_tun1 (msg [1]);

}

if (key_val> = 505 && key_val <= 808 && turn == 1) {

datos = 0xf8; // = binario 1111 1000

modificar_tun2 (msg [1]);

}

if (key_val == 101 && turn == 1) {

si (tun1 == 1) {

datos | = 0; // t1a

cambiado_t = verdadero;}

si (tun1 == 0) {

datos | = 0x01; // t1b

cambiado_t = verdadero;}

}

if (key_val == 202 && turn == 1) {

si (tun2 == 1) {

datos | = 0x02; // t2a

cambiado_t = verdadero;

}

si (tun2 == 0) {

datos | = 0x03; // t2b

cambiado_t = verdadero; }

}

if (key_val == 303 && turn == 1) {

si (tun3 == 1) {

datos | = 0x04; // t3a

cambiado_t = verdadero;

}

si (tun3 == 0) {

datos | = 0x05; // t3b

cambiado_t = verdadero;}

}

if (key_val == 404 && turn == 1) {

si (tun4 == 1) {

datos | = 0x06; // t4a

cambiado_t = verdadero;

}

si (tun4 == 0) {

datos | = 0x07; // f4b

cambiado_t = verdadero;}

}

if (key_val == 505 && turn == 1) {

si (tun5 == 1) {

datos | = 0; // t5a

cambiado_t = verdadero;

}

si (tun5 == 0) {

datos | = 0x01; // t5b

cambiado_t = verdadero;}

}

etc ………………….

Paso 2: Código Arduino - Pantalla TFT

Código Arduino - Pantalla TFT
Código Arduino - Pantalla TFT
Código Arduino - Pantalla TFT
Código Arduino - Pantalla TFT
Código Arduino - Pantalla TFT
Código Arduino - Pantalla TFT
Código Arduino - Pantalla TFT
Código Arduino - Pantalla TFT

El circuito de visualización sigue siendo el mismo con un código modificado para mostrar el estado de los 16 desvíos. Nota: El código de la biblioteca ocupa casi toda la memoria del código de boceto, dejando poco espacio para nuevas funciones. Si alguien tiene un archivo de biblioteca más eficiente para el TFT utilizado aquí, hágamelo saber.

Paso 3: Controlador de participación

Controlador de participación
Controlador de participación
Controlador de participación
Controlador de participación

Vea instrucciones sobre cómo hacer el controlador Turnout / Points.

El circuito completo controla 16 puntos y 15 accesorios como luces, sonidos, tocadiscos, etc.

Recomendado: