Autor Tema: [TUTORIAL] Automatizar el encendido/apagado de LEDs con un relé USB y RocketLaun  (Leído 1371 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Conectado Pegafun

  • VIP
  • *
  • Mensajes: 183
  • Gracias 17
  • Ciudad: Lorca
  • Pais: España
  • Iniciales nick: PGF
Advertisement
[TUTORIAL] Automatizar el encendido/apagado de LEDs con un relé USB y RocketLauncher

ÍNDICE
     1.- INTRODUCCIÓN
     2.- CÓMO CONECTAR EL RELÉ USB EN EL CIRCUITO Y AL PC
     3.- FUNCIONAMIENTO Y SOFTWARE
     4.- SCRIPT PARA AUTOMATIZAR EL ENCENDIDO/APAGADO CON ROCKETLAUNCHER Y SU HERRAMIENTA "USER FUNCTIONS"

1.- INTRODUCCIÓN

A la hora de utilizar una pistola GUN4IR en nuestro mueble arcade o PC deberemos instalar unos LEDs IR en los marcos de la pantalla que sirvan de referencia a la cámara de la pistola para saber en todo momento hacia dónde estamos apuntando. Y a menos que incluyamos un interruptor o desenchufemos la fuente de alimentación cuando no los estemos utilizando estos LEDs IR van a estar encendidos todo el tiempo. Esto no es que sea un problema en sí mismo, pero si tenemos más dispositivos de juego que dependan de LEDs IR en una distribución diferente (por ejemplo, Wiimotes que hacen uso de una barra de leds sobre el marco del televisor) la luz de unos LEDs y de los otros se interferirá, dificultando el buen funcionamiento de los dispositivos que dependen de ellos para posicionarse.


Así que lo ideal es tener apagados los LEDs IR hasta el mismo momento de necesitarlos. Esto lo podemos hacer manualmente, con un interruptor o enchufando la fuente de alimentación, pero en mi caso concreto y por comodidad he decidido automatizar el proceso haciendo uso de un relé USB. De esta forma el propio frontend gestionará el ecendido y apagado de los LEDs al lanzar un juego que necesite de pistola GUN4IR o de Wiimote.
En el mercado existen muchos modelos de placas de relés USB, desde las que tienen un único relé hasta las que tienen 8 relés. Los de 1 y 2 se alimentan directamente del puerto USB del ordenador al que se conectan, mientras que los de más relés precisan de una fuente de alimentación externa para funcionar correctamente. Pero lo que es muy importante que conozcáis es que todas las placas de relés USB del mercado, ya se vendan en Amazon o AliExpress, funcionan igual y utilizan los mismos drivers y software. Os dejo un enlace al vendedor de AliExpress al que le he comprado yo la mía:

Enlace de compra relé USB en AliExpress: https://es.aliexpress.com/item/1005001763829926.html

Ahí podréis comprar placas con cualquier número de relés, aunque yo la he adquirido de tan sólo dos relés porque realmente no necesito más: sólo quiero controlar el encendido y apagado de dos circuitos de LEDs, uno para los 4 LEDs que utilizan las GUN4IR y otro para los 2 LEDs que utilizan los Wiimotes.

2.- CÓMO CONECTAR EL RELÉ USB EN EL CIRCUITO Y AL PC

Aquí os dejo un detalle de la placa de dos relés que me llegó a mí:



Como podéis comprobar cada relé tiene tres conexiones. La explicación de la leyenda para identificar cada una es la siguiente:

COM1: Entrada Común 1
NO1: Normalmente Abierto 1
NC1: Normalmente Cerrado 1

COM2: Entrada Común 2
NO2: Normalmente Abierto 2
NC2: Normalmente Cerrado 2

Como nosotros queremos que los LEDs estén siempre apagados, menos cuando juguemos a algún juego de pistola con la GUN4IR, utilizaremos la entrada "NO1" junto a la C´omún 1 "COM1". Os muestro el esquema de nuestra conexión:


Como podeis ver el relé va a funcionar como un interruptor programable intercalado en uno de los dos cables de alimentación desde la fuente. Este relé funciona con voltajes de alimentación de hasta 30V 12A, así que podremos utilizarlo sea cual sea el circuito de LEDs que tengamos en nuestro mueble arcade. Yo lo estoy utilizando con la toma de 5V de la fuente del PC para alimentar un circuito de cuatro LEDs donde tengo dos parejas de leds en serie cada una, y luego cada serie de dos en paralelo a la fuente:


El otro relé lo voy a utilizar en un circuito de dos LEDs para los Wiimotes. Os dejo un par de fotografías para que veáis cómo he conectado los relés:



3.- FUNCIONAMIENTO Y SOFTWARE

Como ya hemos comentado todas estas placas USB genéricas utilizan el mismo software para funcionar, pero como los vendedores no suelen proporcionarlo os dejo el enlace la página de Github desde la que se provee este software, así como un enlace directo para que podáis descargarlo desde este mismo tutorial:


Lo primero que deberéis hacer es descomprimir el contenido del archivo. Yo lo he hecho dentro de una carpeta destinada a utilidades que tengo dentro de mi frontend:


Es muy importante que la ruta donde descomprimáis el software no contenga espacios en blanco. La razón de ello es que si existen espacios en blanco las sentencias que tendremos que escribir más adelante en el script de AutoHotKey se pueden complicar un poco. Dentro de la carpeta donde descomprimamos el software nos escontraremos con varias subcarpetas. En una estarán los ejecutables para sistemas Windows de 32bits y en otra de 64bit:


Dentro de cada una de estas carpetas encontraremos dos ejecutables, en mi caso voy a utilizar los de 64bits. El llamado "hidusb-relay-cmd.ese" es el ejecutable para línea de comandos (el que realmente nos va a interesar para realizar la integración automática):


El otro ejecutable es el archivo "GUIapp.exe" y nos permitirá activar/desactivar los LEDs cuando estemos fuera del frontend:


Al lanzar este ejecutable aparecerá una ventana desde la que podremos controlar nuestras placas de relés USB (recordad, podremos poner tantas placas como puertos USB tengamos disponibles para conectarlas):


Por ello el primer paso será siempre reconocerlas por su ID y seleccionarlas, aunque tengamos una solamente. Esto lo haremos pinchando en el botón "Find device":


Y después seleccionando la placa que deseemos controlar desde el desplegable:


Si ahora pinchamos en el botón "Open device" lo que haremos es activar la placa seleccionada para poder trabajar con ella:


Ahora es cuando todo se puede hacer un poco lioso. Al haber utilizado la entrada "NO" (Normalmente Abierto) del relé, el circuito estará siempre abierto (LEDs apagados) hasta que "abramos" (Open) el relé del circuito de LEDs que nos interese encender:


4.- SCRIPT PARA AUTOMATIZAR EL ENCENDIDO/APAGADO CON ROCKETLAUNCHER Y SU HERRAMIENTA "USER FUNCTIONS"

Como YA hemos indicado, para realizar el encendido/apagado automático de los LEDs al lanzar los juegos desde el frontend vamos a utilizar el ejecutable para l´ínea de comando "hidusb-relay-cmd.ese" y la función "User Functions" de RocketLauncher. Este ejecutable acepta las siguientes instrucciones:

hidusb-relay-cmd [ID=XXXXX] ON|OFF <num>         -- cambia la posición del relé
 
donde <num> es el número de identificación del relé: puede ser 1-2 o "ALL"

hidusb-relay-cmd STATUS         -- muestra en pantalla el estado de una placa de relés con su "ID" identificativo.
hidusb-relay-cmd ENUM           -- muestra en pantalla el estado de todas las placas de relés conectadas con sus "IDs" identificativos
 
El parámetro  ID=XXXXX  especifica ona placa de relés si hay varias conectadas.
Si no especificamos el parámeto  ID=XXXXX  , y tenemos varias placas conectadas, el programa utilizará una de ellas.
El parámetro ID distingue entre mayúsculas y minúsculas.

Ejemplos de uso:

hidusb-relay-cmd ID=ABCDE ON 1
hidusb-relay-cmd ID=ABCDE OFF ALL
hidusb-relay-cmd ID=ABCDE STATUS

hidusb-relay-cmd ON ALL         -- utiliza la primera placa que encuentra
hidusb-relay-cmd STATUS         -- utiliza la primera placa que encuentra
 

ANOTACIONES:

El comando  Enum  enumera los ID de todas las placas de relés disponibles.
El parámetro  ID  distingue entre mayúsculas y minúsculas. y debe coincidir exactamente con la salida del comando "enum".

Cada relé tiene dos pares de contactos: normalmente abierto (NO) y normalmente cerrado (NC).
El estado APAGADO es el estado "normal", cuando el LED rojo está apagado y los contactos normalmente abiertos están desconectados.
El estado ENCENDIDO es cuando el LED rojo está encendido y los contactos normalmente abiertos están conectados.


Como vemos lo primero que necesitamos es obtener el ID de nuestra placa de relés. Esto lo podemos hacer de dos formas: bien desde el ejecutable de la GUI o bien desde el ejecutable de línea de comandos. Con el ejecutable de la GUI ya hemos visto cómo hacerlo anteriormente, paso a mostraros ahora cómo hacerlo también con el ejecutable "hidusb-relay-cmd.ese". Para ello lanzaremos una ventana de comandos localizada en la misma carpeta de la aplicación escribiendo "cmd" en la barra de dirección de la carpeta abierta:


y presionaremos la tecla "Enter" de nuestro teclado. Esto nos abrirá una ventana de secuencia de comandos ya ubicada en nuestro directorio destino:


Como ya hemos visto en las instrucciones de uso de la aplicación para hacer que ésta nos liste el ID de las placas que tenemos conectadas escribiremos la siguiente secuencia de comandos:

Código: [Seleccionar]
hidusb-relay-cmd.exe ENUM

Y presionaremos "Enter" en nuestro teclado. Inmediatamente la aplicación identificará y numerará las placas de relés USB que tengamos conectadas y su estado:


Ya os adelanto que si sólo tenéis una placa esta normalmente se llamará "HURTM". Una vez que ya conozcamos el ID de nuestra placa estaremos en disposición de crear los script que encenderán y apagarán nuestros LEDs:

hidusb-relay-cmd.exe id=HURTM ON 1         -- Cierra el relé 1
hidusb-relay-cmd.exe id=HURTM OFF 1         -- Abre el relé 1
hidusb-relay-cmd.exe id=HURTM ON 2         -- Cierra el relé 2
hidusb-relay-cmd.exe id=HURTM OFF 2         -- Abre el relé 2

Os recuerdo que yo estoy usando el relé 1 para encender/apagar los cuatro LEDs IR que utilizan lan GUN4IR para posicionarse y el relé 2 para encender/apagar los dos LEDs IR que utilizan los Wiimotes.

Ahora es cuando haremos uso de la herramienta "User Functions" con RocketLauncher. Para ello nos dirigiremos a la carpeta "..\RocketLauncher\Lib\User Functions":


Aquí es donde deberemos guardar los scripts que generemos para la herramienta. Esta funciona y se gestiona igual que los perfiles de "Keymappers", es decir, como un árbol jerárquico de prioridades. En la parte más alta se encuentra el script "Global.ahk", que se aplicará siempre que lancemos cualquier juego, si la herramienta no encuentra otro más específico. Si deseáis conocer más sobre las funcionalidades de la herramienta "User Functions" os dejo el enlace directo al wiki de RocketLauncher donde se explica con más detalle. Para nuestro propósito lo primero que deberemos hacer es crear con el Bloc de notas de Windows un archivo con extensión .ahk que se llame exactamente igual que nuestro sistema Gun Games. Una vez más os recuerdo la importancia supina que tiene la concordancia de nombres en RocketLauncher:


Lo editaremos para añadir el siguiente código:

Código: [Seleccionar]
class SystemUserFunction extends UserFunction {

; Use this function to define any code you want to run in every module on start
StartUserFeatures() {
Global dbName
RLLog.Info(A_ThisFunc . " - Starting")
; INSERT CODE HERE
; Activando Relé LEDs IR GUN4IR
Run("hidusb-relay-cmd.exe id=HURTM ON 1", "C:\HyperSpin\Utilities\USBRelayHID\bin-Win64\")        ;HURTM, ID de mi placa de relés.
RLLog.Info(A_ThisFunc . " - Ending")
}

; Use this function to define any code you may need to stop or clean up in every module on exit
StopUserFeatures() {
Global dbName
RLLog.Info(A_ThisFunc . " - Starting")
; Desactivando Relé LEDs IR GUN4IR
Run("hidusb-relay-cmd.exe id=HURTM OFF 1", "C:\HyperSpin\Utilities\USBRelayHID\bin-Win64\")        ;HURTM, ID de mi placa de relés.
RLLog.Info(A_ThisFunc . " - Ending")
}

; Use this function to define any code you want to run before Pause starts
StartPauseUserFeatures() {
Global dbName
RLLog.Info(A_ThisFunc . " - Starting")
; Desactivando Relé LEDs IR GUN4IR
Run("hidusb-relay-cmd.exe id=HURTM OFF 1", "C:\HyperSpin\Utilities\USB_Relay_HID_bin_20150330a\bin-Win64\")        ;HURTM, ID de mi placa de relés.
RLLog.Info(A_ThisFunc . " - Ending")
}

; Use this function to define any code you may need to stop or clean up after Pause ends
StopPauseUserFeatures() {
Global dbName
RLLog.Info(A_ThisFunc . " - Starting")
; Activando Relé LEDs IR GUN4IR
Run("hidusb-relay-cmd.exe id=HURTM ON 1", "C:\HyperSpin\Utilities\USB_Relay_HID_bin_20150330a\bin-Win64\")        ;HURTM, ID de mi placa de relés.
RLLog.Info(A_ThisFunc . " - Ending")
}

}

Si estudiáis un poco el código veréis que le estamos indicando a RocketLauncher que cierre el circuito del relé 1 cada vez que lancemos un juego del sistema "Gun Games" y que lo abra cuando salgamos. También le estamos diciendo que haga los mismo, pero al revés, cuando entremos al menú de "Pause" y cuando salgamos de él.

Ahora vamos a hacer lo mismo con el relé 2 para utilizar los Wiimotes con los juegos del sistema Nintendo Wii. Para automatizar su encendido apagado crearemos otro archivo de sistema en la carpeta "..\RocketLauncher\Lib\User Functions", en este caso llamado "Nintendo Wii.ahk". Para hacerlo más rápido podemos copiar el que ya tenemos creado "Gun Games.ahk" y renombrarlo, porque el código interno que necesitamos es el mismo, con la diferencia de que ahora debemos hacer referncia al canal "2" en lugar de al "1":


Código: [Seleccionar]
class SystemUserFunction extends UserFunction {

; Use this function to define any code you want to run in every module on start
StartUserFeatures() {
Global dbName
RLLog.Info(A_ThisFunc . " - Starting")
; INSERT CODE HERE
; Activando Relé LEDs IR GUN4IR
Run("hidusb-relay-cmd.exe id=HURTM ON 2", "C:\HyperSpin\Utilities\USBRelayHID\bin-Win64\")        ;HURTM, ID de mi placa de relés.
RLLog.Info(A_ThisFunc . " - Ending")
}

; Use this function to define any code you may need to stop or clean up in every module on exit
StopUserFeatures() {
Global dbName
RLLog.Info(A_ThisFunc . " - Starting")
; Desactivando Relé LEDs IR GUN4IR
Run("hidusb-relay-cmd.exe id=HURTM OFF 2", "C:\HyperSpin\Utilities\USBRelayHID\bin-Win64\")        ;HURTM, ID de mi placa de relés.
RLLog.Info(A_ThisFunc . " - Ending")
}

; Use this function to define any code you want to run before Pause starts
StartPauseUserFeatures() {
Global dbName
RLLog.Info(A_ThisFunc . " - Starting")
; Desactivando Relé LEDs IR GUN4IR
Run("hidusb-relay-cmd.exe id=HURTM OFF 2", "C:\HyperSpin\Utilities\USB_Relay_HID_bin_20150330a\bin-Win64\")        ;HURTM, ID de mi placa de relés.
RLLog.Info(A_ThisFunc . " - Ending")
}

; Use this function to define any code you may need to stop or clean up after Pause ends
StopPauseUserFeatures() {
Global dbName
RLLog.Info(A_ThisFunc . " - Starting")
; Activando Relé LEDs IR GUN4IR
Run("hidusb-relay-cmd.exe id=HURTM ON 2", "C:\HyperSpin\Utilities\USB_Relay_HID_bin_20150330a\bin-Win64\")        ;HURTM, ID de mi placa de relés.
RLLog.Info(A_ThisFunc . " - Ending")
}

}

Y eso es todo. Os dejo un vídeo de andar por casa, donde os muestro cómo se encienden los LEDs para usar mis pistolas GUN4IR cuando lanzo cualquier juego del sistema Gun Games y cómo se apagan al volver a la ruleta del frontend. El "click" que se escucha es el sonido del relé al cambiar su conmutación:

« Última modificación: Junio 16, 2021, 11:03:11 am por Pegafun »



Desconectado beaches

  • El amo de los recres
  • ****
  • Mensajes: 895
  • Gracias 18
  • Iniciales nick: TTD
Chapó el mod que te has marcado, ya no se estila este tipo de explicación, por eso gracias.




Desconectado empardopo

  • Admin
  • *
  • Mensajes: 21728
  • Gracias 761
  • Espero mejorar al KungFu Master!
    • Mi canal de Youtube
  • Ciudad: Norte de África
  • Pais: Escoña
  • Iniciales nick: EPP
Genial compi, muchas gracias por compartir!

Sin tener el invento y viendo que lo usas con Rocket Launcher puede ocurrir que alguien lo quiera usar directamente desde otro frontend así que supongo que estás alternativas deberían funcionar...

1.- Usar un fichero bat para lanzar el juego X

Código: [Seleccionar]
hidusb-relay-cmd.exe id=HURTM ON 1
Juego X
hidusb-relay-cmd.exe id=HURTM OFF 1

donde Juego X es el command line completo del juego a lanzar tal y como lo pondríamos en el frontend que fuera...

2.- Directamente en el command line como puede ser AM (attract Mode) integrar delante la primera linea y al final la tercera linea

Entiendo que debería funcionar.



 


* Salón Recreativo #55 (27-04-2024 / 26-05-2024)  Autor: jordani11 Foro: Salón Recreativo FaseBonus 03/05/2024 (23:29)
* iojukebox Theme, un JukeBox para Attract-Mode  Autor: gucaza Foro: Themes AM 03/05/2024 (21:42)
* Nuevo miniPc para mi vieja recre y juegos Windows compatibles formato 4:3  Autor: jmpuk Foro: Offtopic 02/05/2024 (23:31)
* Homenaje a Locomalito  Autor: beaches Foro: Otros programas 02/05/2024 (23:03)
* La inteligencia artificial ha llegado a la música  Autor: jmpuk Foro: Offtopic 02/05/2024 (21:45)
* [N3DS] Red Viper - Emulando Virtual Boy como Dios manda  Autor: Zael Foro: Noticias de emuladores 02/05/2024 (21:06)
* [Recomendación] Cine para los findes en casa (bueno, bonito y barato)  Autor: arquillos Foro: Offtopic 02/05/2024 (09:39)
* ¿A qué estáis jugando ahora mismo?  Autor: joselopez Foro: Offtopic 02/05/2024 (04:07)
* [Recomendacion] Series para ver  Autor: jmpuk Foro: Offtopic 01/05/2024 (21:54)
* Etpa8: El Reino Subterráneo  Autor: jmpuk Foro: ZX Spectrum 01/05/2024 (21:49)
* Stop the express  Autor: jmpuk Foro: ZX Spectrum 01/05/2024 (21:29)
* Amiga Games + 1.9.2  Autor: empardopo Foro: Emuladores 01/05/2024 (20:58)
* West Bank para ZX Spectrum  Autor: empardopo Foro: ZX Spectrum 01/05/2024 (20:07)
* Recopilatorio Retos: Desde el 1 hasta .....  Autor: Zael Foro: Competiciones y concursos 29/04/2024 (23:59)
* Info sobre MARP  Autor: Zael Foro: Records y wolfmame 29/04/2024 (23:45)
* Patrocinador para el foro ArcadeSpain  Autor: empardopo Foro: Noticias 29/04/2024 (19:37)
* Retro 320 - Wizard of wor  Autor: empardopo Foro: Competiciones y concursos 29/04/2024 (19:29)
* Aprende a hacerte un PORTABLE de tu juego arcade favorito  Autor: empardopo Foro: Records y wolfmame 29/04/2024 (19:27)
* Screenshot de empardopo  Autor: empardopo Foro: Otros programas 24/04/2024 (19:42)
* Concurso Bytemaniacos 2025  Autor: empardopo Foro: Creación de juegos 23/04/2024 (21:46)
* Retro Portable Maker ArcadeSpain (RPMA)  Autor: empardopo Foro: Otros programas 21/04/2024 (19:16)
* Van dos y se cae el del medio - Hilo de cachondeo general  Autor: empardopo Foro: Offtopic 21/04/2024 (18:47)
* Hacer fondos de pantalla con Excel para Spectrum  Autor: empardopo Foro: Creación de juegos 18/04/2024 (19:33)
* Salón Recreativo FaseBonus - Preparativos y Sugerencias  Autor: Zael Foro: Salón Recreativo FaseBonus 17/04/2024 (00:17)
* Retropixel 2024  Autor: Zael Foro: Eventos Arcades 14/04/2024 (12:24)
* Ofertas Amazon  Autor: empardopo Foro: Offtopic 11/04/2024 (20:29)
* Restauración Terminator 2 + LightGun Gun4IR  Autor: HeroTonma Foro: Diario de construccion de tu arcade 04/04/2024 (14:18)
* Ojo con telegram  Autor: Zael Foro: Noticias 29/03/2024 (19:30)
* Galería de fotos en ArcadeSpain - sube las fotos a nuestro servidor -  Autor: empardopo Foro: Noticias 24/03/2024 (16:49)
* Flipando con la desinformación en el caso del emulador Yuzu  Autor: Zael Foro: Offtopic 22/03/2024 (20:13)

Countdown
Buscaunchollo.click