Paso 2: Receptor de paquete DCC - circuito básico
Actualizado 23 de marzo de 2016:
Añadido circuito de sentido actual para proteger dispositivos de puente de H y bobinas de desvíos etc. más de corriente.
int analogPin = 7; const int Power_shut_off = 19; // A5 as digital pinMode(Power_shut_off, OUTPUT); digitalWrite(Power_shut_off, HIGH);
En el void loop():
amp = analogRead(analogPin); if (amp > 5){ Serial.println(amp); } if (amp > 200 ){ // approx 2 amps digitalWrite(Power_shut_off, LOW); }
Cuando se supera los 2 amperios, el 120 de punta, se corta la alimentación (12 voltios o 15 voltios) los desvíos.
_____________________________________________________________________
De un excelente tutorial por Geoff Bunza en el foro de la revista del aficionado a los hobbys de Model Railroad . Describe cómo un Arduino Mini Pro (una placa de Arduino bajo costo) podría ser cableado y programado para responder a las teclas de función en un controlador de DCC. Esto abre un mundo de opciones de control para las animaciones, sonidas y otras opciones en un ferrocarril del modelo DCC equipado.
He hecho uso de este circuito para capturar los paquetes DCC de mi Arduino basado en central
(ver instructivo). La central también ha sido modificada para permitir el control de desvío (8 desvío hasta ahora).
Básico paquete decodificador de accesorios es:
10AAAAAA 0 0 1AAACDDD EEEEEEEE 0 1
De analizar el paquete utilizado por Lenz (compacto / Atlas) para puntos de control, he utilizado el siguiente formato de paquetes binarios para bytes 1 y 2:
tunAddr = 1
1a participación: 1000 0001 1111 1000 / participación 1b: 1000 0001 1111 1001
Participación 2a: 1000 0001 1111 1010 / participación 2b: 1000 0001 1111 1011
Séquito de la 3a: 1000 0001 1111 1100 / participación 3b: 1000 0001 1111 1101
Séquito de la 4a: 1000 0001 1111 1110 / participación 4b: 1000 0001 1111 1111
tunAddr = 2
------------------------------------------------------------------------------------------------------------
Participación 5a: 1000 0010 1111 1000 / participación 5b: 1000 0010 1111 1001
Séquito de la 6a: 1000 0010 1111 1010 / participación 6b: 1000 0010 1111 1011
Séquito de la 7a: 1000 0010 1111 1100 / desvío 7b: 1000 0010 1111 1101
Séquito de la 8a: 1000 0010 1111 1110 / participación 8b: 1000 0010 1111 1111
-----------------------------------------------------------------------------------------------------------
Séquito de la 9a: 1000 0011 1111 1000 / participación 9b: 1000 0011 1111 1001
etc....
Por la manipulación del paquete binario, podemos extraer los desvíos necesarios y enviar un pulso de ms de 350.
Por ejemplo
busca en el primer byte:
0 x 80 en hexadecimal = 1000 0000 en binario
tunAddr = (Msg->Data[0] - 0x80);
busca en el segundo byte:
0x8f8 en hexadecimal = 1111 1000 en binario, entonces cambie de puesto bitwise >> 1 para eliminar la última parte
F1A en:
if (tunAddr == 1){
if ((((Msg->Data[1]) - 0xf8>>1) + 1) == 1 && (Msg->Data[1] & 0x01) == 1){
digitalWrite(FunctionPin1a, 1); delay(350); digitalWrite(FunctionPin1a, 0); }
El diagrama muestra LED salidas. Sustituir el LED con controlador de solenoide por ejemplo TIP120 (2 apagado para cada participación) o controlador SN754410 Quad (2 desvíos por IC de las fuentes).
Todas las salidas digitales se utilizan en pares para producir un pulso que se activa los solenoides de participación a través de controladores de motor o los transistores darlington de potencia. El código puede cambiarse para que coincida con los controladores que utiliza un pulso de '1' para un pulso de '0'.
Descargar biblioteca NMRA aquí
Descargar el código de Arduino: