trensim.comSimulación Ferroviaria
   

¿Alguno quiere hacerse su propio RailDriver para RW?

Foro de ámbito general para temas de RailWorks / Train Simulator 2012, y compatibilidad con Rail Simulator.

Moderador: Moderadores

¿Alguno quiere hacerse su propio RailDriver para RW?

Notapor lgg2 » Mié Ago 10, 2011 9:42 pm

Buenas,

Le he estado dando vueltas al tema de hacerme un "apaño" de RailDriver casero. Viendo que existe un proyecto, creo que parado desde hace 2 años, para utilizar un joystick de ese modo.

El caso es que he estado mirando las fuentes y haciendo algunas pruebas. El proyecto original estaba realizado en .NET, con una aplicacion para configurarlo y comunicarser con el RW.

Mi idea es (y mis pruebas han ido en ese sentido) es emplear Python (muy facil de entender y modificar, al estilo de Lua) para la mediacion y una (o varias) placas ARDUINO (con potenciometros) como "RailDriver". Cada ARDUINO puede manejar hasta 8 potenciometros (8 entradas analogicas) y 14 digitales (o interruptore, pulsadores, etc). Pienso que es mas que de sobra.

Las pruebas han ido bien, en parte. Puedo controlar perfectamente el RW, pero a pesar de que en teoria podria ver los indicadores de velocidad o presiones, no funciona (cosas del API).

La oferta: que alguno mas se apunte al I+D, sobre todo en la parte "fisica", con ideas de como simular fisicamente los controles unidos a los potenciometros.

El "intermediario" en Python va a ser sencillo. Como es un lenguaje "script", culaquiera lo podra ajustar o modificar a su gusto. La programacion de las placas ARDUINO es igual de facil, son baratas (por unos 20€) y los potenciometros... que decir.

Comentarios y opiniones, aqui. A ver si para cuando salga la susodicha "actualizacion" hay alguna cabina "chula" funcionando...


Un saludo.

Imagen
lgg2
 
Mensajes: 32
Registrado: Dom Mar 27, 2005 11:12 pm

Re: ¿Alguno quiere hacerse su propio RailDriver para RW?

Notapor lgg2 » Jue Ago 11, 2011 2:34 pm

Bueno,

Aqui va un paso a paso totalmente funcional para controlar el RW. A ver si con pruebas de alguien mas y comentarios lo podemos ampliar.

Materiales necesarios:

- Distribucion de Python 3.x http://python.org/ftp/python/3.2.1/python-3.2.1.msi (Lo he hecho con la 3.x puesto que la 2.x la consideran "antigua")
- La libreria de Python necesaria para acceder a los puertos serie a juego con Python 3.x http://pypi.python.org/packages/any/p/pyserial/pyserial-py3k-2.5.win32.exe#md5=c7d770dede6f6c6197d9652a7658f18e
- Una placa ARDUINO. Cualquiera. Buscad en eBay o tiendas on-line. Por ejemplo: he encontrado esta en eBay por 17€ http://cgi.ebay.es/Arduino-Duemilanove-2009-AVR-ATmega328-P-20PU-USB-placa-/190561411885?pt=LH_DefaultDomain_186&hash=item2c5e58632d
- Una o varias resistencias variables o potenciometros. En principio, para "chapucear" un poco con 2 vale (regulador y freno tren). Tipo a este de eBay: http://cgi.ebay.es/POTENCIOMETRO-LINEAL-47K-/190523853142?pt=LH_DefaultDomain_186&hash=item2c5c1b4956
- La aplicacion de ARDUINO http://arduino.googlecode.com/files/arduino-0022.zip

Pasos a seguir:

- Instalar Python, la libreria de los puertos serie y la aplicacion de ARDUINO (realmente esta ultima no se instala, tan solo se descomprime el contenido del ZIP y para eliminar tan solo borrar la carpeta). Esta ultima tan solo necesaria para enviar el fichero a ARDUINO (luego se puede eliminar sin problemas).
- Soldar/empalmar/sujetar las resistencias variables/potenciomentros de forma que las patillas exteriores vayan las de un lado al pin "5V" de la placa ARDUINO y la del otro extremo a la indicada como GND. La patilla del centro de cada potenciometros ira al pin señalado como "Analog In" o y 1 respectivamente.
- Cargar el programa a la placa ARDUINO.
- Iniciar el programa de Python y el RW.
- ¡¡ A jugar !!

No tiene mas misterio. Ni necesita el RW una configuracion especial ni nada. Para empezar es suficiente.

El programa de Python es:
Código: Seleccionar todo
import serial
from ctypes import *

PuertoSerie = serial.Serial('COM3',9600)
LibreriaRailDriver = cdll.LoadLibrary("C:\\Archivos de programa\\Steam\\SteamApps\\common\\railworks\\plugins\\RailDriver.dll")

LibreriaRailDriver.SetRailSimConnected(True)
LibreriaRailDriver.SetRailDriverConnected(True)

Repetir = True
while Repetir:
   Linea_0 = PuertoSerie.readline()[:-2]
   if (Linea_0!=b''):
      Linea = Linea_0.split(b'|')
      for Comando in Linea:
         if (Comando[0:1] == b'A'):
            LibreriaRailDriver.SetRailSimValue(1,c_float(float(Comando[1:])/1023))
         elif (Comando[0:1] == b'B'):
            LibreriaRailDriver.SetRailSimValue(4,c_float(float(Comando[1:])/1023))
         elif (Comando[0:1] == b'C'):
            Repetir = False
            break
print ("Finalizada la apliacion.")


El programa para ARDUINO es:
Código: Seleccionar todo
//----------
// Variables
//----------
// Valor leido
int lectura_analogica;
// Indicador para insertar separadores en caso de enviar mas de un comando al PC
boolean separador = false;
// Anteriores valores leidos para poder comparar con los nuevos
int old_A = 0;
int old_B = 0;

//--------------
// Configuracion
//--------------
void setup() {
  // Configuramos la comunicacion serie (podemos hacerla a mas velocidad, pero no es necesario)
  Serial.begin(9600);
}

//-----------------------
// Bucle de la aplicacion
//-----------------------
void loop() {

  // A lo practico, se leen los puertos analogicos y se van enviando al PC.
  lectura_analogica = analogRead(A0);
  // Como filtro para que no este enviando a cada minima variacion, solo se actualiza
  // cuando la diferencia sea de +-5 (sobre 1024 "puntos")
  if ((lectura_analogica > (old_A+5)) || ((lectura_analogica < (old_A-5)))){
    Serial.print("A");
    Serial.print(lectura_analogica);
    old_A = lectura_analogica;
    separador = true;
  }

  lectura_analogica = analogRead(A1);
  if ((lectura_analogica > (old_B+5)) || ((lectura_analogica < (old_B-5)))){
    if (separador){
      Serial.print("|");
    }
    Serial.print("B");
    Serial.print(lectura_analogica);
    old_B = lectura_analogica;
    separador = true;
  }

  if (separador){
    Serial.println("");
    separador = false;
  }
}


Comentarios, dudas, ruegos y preguntas aqui.

Un saludo.

Imagen
Última edición por lgg2 el Vie Ago 19, 2011 9:54 am, editado 1 vez en total
lgg2
 
Mensajes: 32
Registrado: Dom Mar 27, 2005 11:12 pm

Re: ¿Alguno quiere hacerse su propio RailDriver para RW?

Notapor HANNIBAL SMITH » Jue Ago 11, 2011 3:06 pm

No había yo visto este post...

Interesante hacer esto con arduino y python.
Yo en su dia lo intenté hacer con un teclado, más bien emulandolo, era mitad teclado y mitad joystick, lo quería enchufar por USB y usar un microcontrolador, programarlo, etc. Al final lo dejé olvidado con pensamientos de retomarlo algún dia :?

Con arduino y python no lo veo nada lioso, además es facil y barato. Me ha gustado este proyecto a ver si sigue adelante y te montas un buen RailDriver.
43 6F 6D 69 64 61 20 70 61 72 61 20 67 61 74 6F 73 20 57 69 73 2E 20 6B 61 73

ME ENCANTA QUE LOS PLANES SALGAN BIEN
Avatar de Usuario
HANNIBAL SMITH
 
Mensajes: 571
Registrado: Vie Feb 13, 2009 8:45 pm
Ubicación: LOS ANGELES (CALIFORNIA)

Re: ¿Alguno quiere hacerse su propio RailDriver para RW?

Notapor lgg2 » Jue Ago 11, 2011 4:44 pm

Buenas,

La prueba con dos escenarios y la verdad es que aun en plan "cutre" es totalmente distinto el control de las locomotoras.

Foto del invento en su estado actual, mas pelado que pelado, pero funcional:

Imagen

Un saludo.

Imagen
lgg2
 
Mensajes: 32
Registrado: Dom Mar 27, 2005 11:12 pm

Re: ¿Alguno quiere hacerse su propio RailDriver para RW?

Notapor Divi4p » Jue Ago 11, 2011 6:43 pm

Hola!

Increíble post, aporta un montón. Había otro forero que estaba haciéndose una cabina completa en su casa para Trainz y lo logró con placa Arduino también, logrando incluso hacer funcionar el velocímetro, aunque en Trainz, claro.

Tenía ganas de catar la Arduino, así que me has dado la excusa perfecta para ir comprando una ;). ¡En cuanto la tenga pruebo esto!

La historia sería lograr combinar una locomotora con su script y controles personalizados con una cabina real, que por lo que veo va siendo posible...

Mil gracias!
Imagen
Avatar de Usuario
Divi4p
Bibliotecario
 
Mensajes: 1314
Registrado: Lun Abr 04, 2005 5:19 pm
Ubicación: en un zarrio

Re: ¿Alguno quiere hacerse su propio RailDriver para RW?

Notapor javierfl » Jue Ago 11, 2011 7:01 pm

Muy interesante lo que estáis consiguiendo.

¿Los dos potenciometros que parámetros regulan? ¿Regulador y freno?

Saludos:

Javier.-
Avatar de Usuario
javierfl
grupo TrenSim
 
Mensajes: 9620
Registrado: Sab Ago 30, 2003 11:23 pm
Ubicación: Ciudad Astur

Re: ¿Alguno quiere hacerse su propio RailDriver para RW?

Notapor lgg2 » Jue Ago 11, 2011 8:34 pm

Buenas,

En principio los he puesto para controlar regulador y freno. Pero se pueden controlar mas parametros. Tambien se pueden colocar pulsadores para funciones, como "seta", bocina, etc. Tambien he probado como control mixto regulador-freno con un solo potenciometro y funciona perfectamente. Todo depende de que emplee la locomotora en uso. Los parametros que utilizan en el otro proyecto (el del joystick) son:
Código: Seleccionar todo
      Reverser
      Throttle
      CombinedThrottle
      GearLever
      TrainBrake
      LocomotiveBrake
      DynamicBrake
      EmergencyBrake
      HandBrake
      WarningSystemReset
      StartStopEngine
      Horn
      Wipers
      Sander
      Headlights
      Pantograph
      FireboxDoor
      ExhaustInjectorSteam
      ExhaustInjectorWater
      LiveInjectorSteam
      LiveInjectorWater
      Damper
      Blower
      Stoking
      CylinderCock
      Waterscoop
      SmallCompressor
      AWS
      AWSReset
      Startup
      Speedometer
      ' Events
      PromptSave
      ToggleLabels
      Toggle2DMap
      ToggleHud
      ToggleQut
      Pause
      DriverGuide
      ToggleRvNumber
      DialogAssignment
      SwitchJunktionAhead
      SwitchJunktionBehind
      LoadCargo
      UnloadCargo
      PassAtDangerAhead
      PassAtDangerBehind
      ManualCouple
      ' Camera
      CabCamera
      FollowCamera
      HeadOutCamera
      RearCamera
      TrackSideCamera
      CarriageCamera
      CouplingCamera
      YardCamera
      SwitchToNextFrontCab
      SwitchToNextRearCab
      FreeCamera


Yo tan solo he utilizado [Throttle],[CombinedThrottle],[TrainBrake]. Para utilizar cualquier otro es tan solo cambiar un numero del fichero de Python o si se quieren utilziar mas controles es question de añadir unas lineas y potenciometros o pulsadores al invento.

Un saludo.

Imagen
lgg2
 
Mensajes: 32
Registrado: Dom Mar 27, 2005 11:12 pm

Re: ¿Alguno quiere hacerse su propio RailDriver para RW?

Notapor lgg2 » Jue Ago 11, 2011 8:46 pm

Buenas, de nuevo,

De todas formas, los ficheros que he puesto son lo basico. La idea es poder configurar algo mas completo. Pero se necesitan ideas sobre la parte "fisica". Por ejemplo: ¿Como simular correctamente un accionamiento de regulador? ¿Como realizar un accionamiento con "muescas"?

La programacion no es problema. Es muy sencillo de implementar todo (gracias al driver RailDriver que incorpora el RW por defecto). Mi idea es poder "modular" un tablero con distintos accionamientos intercambiables, y ahi es donde se necesitan las ideas. En cuanto al indicador de velocidad, ya he comentado que por algun problema no devuelve la indicacion, a pesar de haber seguido el mismo ejemplo del Joystick. Es mas, el propio programa del Joystick trae un enorme velocimetro que por lo menos en mi RW no funciona (v117.3).

Tambien si alguien tiene sitio, le gusta el vapor y es un manitas en carpinteria, no tendria demasiado problema en hacerse un "set" de una locomotora con los mandos (tornillo de distribucion con un potenciometro multivueltas, etc) y un monitor a modo de ventanilla frontal. La imaginacion al poder. No hay la limitacion del RailDriver de todos los controles juntos. Es cuestion de tirar de cable y los accionamientos adecuados.

Un saludo.

Imagen
lgg2
 
Mensajes: 32
Registrado: Dom Mar 27, 2005 11:12 pm

Re: ¿Alguno quiere hacerse su propio RailDriver para RW?

Notapor jorgete449 » Jue Ago 11, 2011 8:58 pm

Hola, llevo pensando en hacer lo mismo desde hace muco pero no sabia como, y ahora se puede hacer una cabina entera. Mi pregunta es como habria que configurarlo para utilizarlo en el Trainz 2010
Gracias de antemano
jorgete449
 
Mensajes: 9
Registrado: Mié Nov 11, 2009 5:58 pm

Re: ¿Alguno quiere hacerse su propio RailDriver para RW?

Notapor capitan pecho lata » Vie Ago 12, 2011 9:27 am

Hola lgg2

Muy interesante lo que propones con los módulos de Arduino. Creo que se pueden lograr grandes cosas.

Tras mirarme la pagina de Arduino y ver las características de modulo que utilizas, el Arduino Uno, veo como dices que tiene entradas/salidas digitales, pero solo tiene entradas analógicas y para poder hacer funcionar aparatos de medida analógicos en cabina, serian necesarias tener salidas analógicas para alimentar los indicadores de aguja. Si creo que se podrían utilizar las seis salidas digitales utilizables como PWM para indicadores numéricos digitales.
Avatar de Usuario
capitan pecho lata
 
Mensajes: 1608
Registrado: Mié Nov 19, 2003 8:34 pm

Re: ¿Alguno quiere hacerse su propio RailDriver para RW?

Notapor lgg2 » Vie Ago 12, 2011 11:20 am

Buenas,

Por partes. No tengo Trainz 2010, tengo el 2006, y desconozco si tiene pre-instalado el driver del RailDiver. Si quieres puedes mirar si existe el fichero "RailDriver.dll" en alguna carpeta del Trainz 2010. Si existe, creo que no habria mas que probar.

En cuanto a la placa ARDUINO, yo tengo una Duemilanove que es el modelo anterior y la que mas facilmente se encuentra por internet. La diferencia con la UNO (actual) es que han sustituido el chip USB. En cuanto a las caractersticas 6 entradas/salidas analogicas/digitales y 14 entradas/salidas digitales. Lo bueno que tiene ARDUINO y sus variantes (excepto la MEGA) es que tiene las mismas caracteristicas fisicas de entradas y salidas. Las diferencias han ido por el lado de la capacidad de memoria. Pero la mas pequeña es de 16kb las nuevas de 32kb y el proyecto este ocupa 2kb (lo que mas ocupa son las librerias), por tanto mas que de sobra para un pupitre de control muy recargado hasta con las basica.

Como ya he dicho anteriormente, existe un problema con la opcion de "leer" los datos desde el simulador, por lo que descarta (por ahora) la utilizacion de "relojes". A nivel de entradas, 6 entradas de accionamientos tipo "reguladores", frenos y demas creo que es mas que de sobra. En el caso de una locomotora de vapor: regulador, distribuidor, freno locomotora, freno tren e inyectores. Cualquier otro control el tipo si/no tan solo necesita una entrada digial. De todas formas, si se necesitasen mas entradas/salidas del tipo que sean, en muy facil ampliar su numero bien con uno o dos integrados o con una segunda placa ARDUINO.

Un saludo.

Imagen
lgg2
 
Mensajes: 32
Registrado: Dom Mar 27, 2005 11:12 pm

Re: ¿Alguno quiere hacerse su propio RailDriver para RW?

Notapor LBA » Vie Ago 12, 2011 11:47 am

Tengo todos los materiales que se necesitan, una placa arduino uno sin uso desde hace meses, lo que no se donde he dejado el tiempo :roll:

Un post de lo más interesante. Ánimo!
Saludos,LBA
Avatar de Usuario
LBA
 
Mensajes: 1414
Registrado: Mar Sep 09, 2003 10:20 am
Ubicación: Almería

Re: ¿Alguno quiere hacerse su propio RailDriver para RW?

Notapor Marc Artigues » Vie Ago 12, 2011 1:51 pm


Si se puede conseguir esto, se puede conseguir todo...
Avatar de Usuario
Marc Artigues
 
Mensajes: 400
Registrado: Dom Jun 08, 2008 4:15 pm

Re: ¿Alguno quiere hacerse su propio RailDriver para RW?

Notapor lgg2 » Vie Ago 12, 2011 2:02 pm

Buenas,

Un problema y gordo al respecto... no se trata del RW.

Me explico, por el lado de accionamientos, de una manera u otra se pueden hacer funcionar con el RW. Pero respecto a los relojes de velocidad, presciones y demas... NO.

Por otra parte, veo el problema del sitio, de la obtencion de elementos, etc. De ahi la razon de este hilo. Mas que la obtencion de funcionalidades, se trataria de solucionar la obtencion fisica de los controles, para poder tenerlos en una mesa y sean bastante fieles a la realidad. En el RailDriver estan todos muy juntos y lo veo muy poco realista.

Un saludo.

P.D.: A proposito, me gusta mas este pupitre http://www.youtube.com/watch?v=A52KFuqJhRM

Imagen
lgg2
 
Mensajes: 32
Registrado: Dom Mar 27, 2005 11:12 pm

Re: ¿Alguno quiere hacerse su propio RailDriver para RW?

Notapor HANNIBAL SMITH » Vie Ago 12, 2011 3:14 pm

Como no te hagas con una impresora 3d, que según tu firma no creo que tengas problema, y modeles los elementos, o te pases por alguna chatarrería para conseguir los originales..., fotos y demás de las cabinas seguro que encuentras por inet.

En cuanto a los velocimetros y demás si se podrian hacer funcionar, hay una DLL de donde puedes sacar esto, se llama "GameManager.dll" y controla todo el juego, desde velocímetros, presiones, pantógrafos y un montón de cosas más que no tienen que ver con las físicas de los vagones y locomotoras.
De todas formas esta DLL cambiará por completo con la nueva actualización así que no se yo si te merece la pena hacer nada.
43 6F 6D 69 64 61 20 70 61 72 61 20 67 61 74 6F 73 20 57 69 73 2E 20 6B 61 73

ME ENCANTA QUE LOS PLANES SALGAN BIEN
Avatar de Usuario
HANNIBAL SMITH
 
Mensajes: 571
Registrado: Vie Feb 13, 2009 8:45 pm
Ubicación: LOS ANGELES (CALIFORNIA)

Siguiente

Volver a RailWorks

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 5 invitados