Tabla de contenido:

Garden Train - Arduino Wireless NMRA DCC: 4 pasos (con imágenes)
Garden Train - Arduino Wireless NMRA DCC: 4 pasos (con imágenes)

Video: Garden Train - Arduino Wireless NMRA DCC: 4 pasos (con imágenes)

Video: Garden Train - Arduino Wireless NMRA DCC: 4 pasos (con imágenes)
Video: Let's learn together - CVs for DCC Decoder! (DCC model railway with Arduino 4) 2024, Noviembre
Anonim
Image
Image
Diseño de sistema
Diseño de sistema

Además del instructable anterior con DCC en sistema de carril muerto, he desarrollado la idea aún más con una estación de comando DCC portátil con teclado y pantalla LCD. La estación de comando contiene toda la codificación requerida para las instrucciones NMRA DCC; sin embargo, en lugar de conectarse a los rieles, los datos se transfieren mediante el módulo de radio RF24L01 + a un receptor montado en un camión o debajo de la locomotora, siempre que el espacio lo permita.

Por supuesto, sus locomotoras deben estar equipadas con un decodificador de capacidad de carga adecuado a los motores del motor.

Paso 1: Diseño del sistema

Diseño de sistema
Diseño de sistema

El Arduino Pro Mini está en el corazón del diseño. Utilizando Fritzing para desarrollar el circuito y producir PCB.

Pude usar la misma PCB tanto para el transmisor como para el receptor, lo que me permitió ahorrar algunos costos.

El transmisor tiene conexiones para teclado y LCD mientras que el receptor no las requiere y usa el puente H para suministrar la salida DCC para la locomotora.

Un desarrollo adicional incluye conexiones para un puente en H más grande si es necesario para locomotoras más potentes.

El PCF8574 se puede eliminar si usa una pantalla LCD que viene con la mochila que permite que las conexiones SCA / SCL en el Arduino alimenten la pantalla usando solo 2 cables Lista de partes: Total = aproximadamente £ 60 para DCC Command Station + 1 receptor Costo de receptores adicionales = £ 10.00 aprox cada uno. + baterías

Arduino Pro Mini. x 2 = £ 4.00

Teclado de membrana 4x3 = £ 3.00

Pantalla LCD de 20 x 4 = £ 7.00

PCF5874 = £ 1.80

NRF24L01 +. módulos de radio x 2 = £ 5.80

Fabricación de PCB por 10 de descuento (o se puede usar placa Vero) = £ 24 o £ 4,80 por 2 de descuento

Regulador de 3.3 v = £ 0.17 (paquete de 25 de RS Comp)

Regulador 5v LM7805 = 0,30 €

Puente en H SN754410ne = £ 3.00

Pilas recargables Lloytron de 2700 maH AA x 12 = £ 22.00. (las baterías con clasificación de maH más baja son más baratas)

Condensadores, ollas, pines, conectores, etc. = £ 2.00 aprox.

Caja 190x110x60 mm = £ 8,00

Transmisor - cargador de teléfono / batería = £ 2.00

Paso 2: transmisor

Transmisor
Transmisor

El diagrama del circuito se muestra donde los pines D2 a D8 en el Arduino Pro Mini están conectados al teclado. Un potenciómetro de 100k ohmios está conectado al pin analógico A0 para ajustar la velocidad. Los pines SDA y SCL del chip PCF8574 están conectados a los pines A4 y A5 en el Arduino Pro Mini por medio de cables soldados a los pines en la capa superior del Pro Mini.

El boceto de Arduino se adjunta para su descarga.

He utilizado una pantalla LCD de 20 x 4 que permite 4 líneas de información con 20 caracteres por línea. El teclado proporciona el siguiente menú:

1 a 9 = dirección de la locomotora * = dirección 0 = luces # = Menú de funciones para las teclas 1 a 8

Descripción básica del boceto de Arduino Pro Mini: esta línea del código organiza el mensaje DCC en formato HEX. struct Mensaje de mensaje [MAXMSG] = {

{{0xFF, 0, 0xFF, 0, 0, 0, 0}, 3}, // mensaje inactivo

{{locoAdr, 0, 0, 0, 0, 0, 0}, 3} // dirección de 3 bytes

};

Para almacenar la configuración de cada locomotora, se configura una serie de matrices de la siguiente manera:

int la [20]; // matriz para contener los números de locomotoras

int sa [20]; // matriz para contener valores de velocidad

int fda [20]; // matriz para contener dir

int fla [20]; // matriz para contener luces

int f1a [20]; // matriz para contener fun1…..

int f8a [20]; // matriz para contener fun8

Para permitir que las instrucciones de DCC se modifiquen a medida que avanzamos:

Para obtener instrucciones de velocidad: void correct_speed (struct Message & x) {

x.data [0] = locoAdr;

x.data [1] = 0x40; // locoMsg con 28 pasos de velocidad}

Para instrucciones de función:

void modificar_grupo1 (estructura Mensaje & x) {

x.data [0] = locoAdr;

x.data [1] = 0x80; // locoMsg con instrucción de grupo uno 0x80}

El bucle principal del boceto:

bucle vacío (vacío) {if (read_locoSpeed ()) {ensamblar_dcc_msg_speed ();

send_data_1 (); // enviar datos de forma inalámbrica

retraso (10);

send_data_3 (); // mostrar datos en la pantalla LCD

send_data_4 (); // mostrar datos en el monitor de serie}

if (read_function ()) {

ensamblar_dcc_msg_group1 ();

send_data_1 ();

retraso (10);

send_data_3 (); }}

Actualice los datos cuando cambie la velocidad:

booleano read_locoSpeed () Esto detecta una nueva configuración de dirección, velocidad o dirección de la locomotora y modifica los 'datos' HEX en consecuencia. Aquí he especificado 28 pasos de velocidad y para cumplir con la norma NMRA S 9.2, los datos de velocidad deben encontrarse en una tabla de consulta en 'paso_velocidad ()'

void speed_step () {switch (locoSpeed) {

caso 1: datos | = 0x02; rotura;

caso 2: datos | = 0x12; rotura;

caso 3: datos | = 0x03; rotura;

………

caso 28: datos | = 0x1F; rotura; }}

Actualice los datos cuando cambien las funciones:

función_de_lectura booleana ()

if (fla [locoAdr] == 0) {datos = 0x80;

} // luces delanteras apagadas

if (fla [locoAdr] == 1) {

datos = 0x90;

} // faros encendidos

Para cada función:

if (f2a [locoAdr] == 0) {datos | = 0; }. // Función 2 desactivada

if (f2a [locoAdr] == 1) {

datos | = 0x02; // La función 2 en} 'datos' se construye combinando ['| =' compuestos bit a bit o] los códigos HEX para cada función.

Paso 3: receptor

Receptor
Receptor

El diagrama del circuito se muestra donde se utilizan los pines 5 y 6 del Arduino Pro Mini para proporcionar la señal DCC suministrada al puente H. Los pares de puentes H se conectan en paralelo para aumentar la capacidad de corriente. Dependiendo de la corriente consumida por la locomotora, se puede requerir que se conecte un disipador de calor al dispositivo DIP de 16 pines, o se puede conectar un puente en H de alta resistencia externamente.

El boceto de Arduino se adjunta para descargar. La señal DCC se compone de un reloj que funciona a 2MHZ

void SetupTimer2 () hace este trabajo.

El reloj incluye 'pulsos cortos' (58us) para '1' en datos DCC y 'pulsos largos' (116us) para '0' en datos DCC.

El bucle vacío, obtiene datos de la radio y, si se encuentra una cadena válida, los datos se convierten en datos DCC.

bucle vacío (vacío) {if (radio.available ()) {bool hecho = falso; hecho = radio.read (inmsg, 1); // lee los datos recibidos

char rc = inmsg [0]; // poner el carácter leído en esta matriz

si (rc! = 0) {. // si el carácter no es igual a cero

inString.concat (rc); // construye el mensaje}

if (rc == '\ 0') {// si el carácter es '/ 0' final del mensaje

Serial.println (inString); // imprime el mensaje ensamblado

cuerda(); // de-construye el mensaje de cadena para obtener instrucciones DCC

} } }

Paso 4: Ejecuta los Locos

Ejecuta los Locos
Ejecuta los Locos

Para evitar la interrupción de los datos por el funcionamiento de varios trenes en la misma vía, debe desconectar los contactos entre las ruedas y la vía para cada locomotora y camión empleado.

Disfrute de los trenes que circulan libremente independientemente de las condiciones de la vía, ¡qué diferencia! Sin complicaciones, sin arranque y parada y sin necesidad de limpieza.

Las baterías que utilicé son recargables LLoytron AA x 12. He construido un cargador especialmente para ellas que carga 6 a la vez. (ver instructable)

Recomendado: