LaserGame V4.1 Alfa, esquemas y fuentes

Atención estos son esquemas V4.1 y fuentes V4.5 en estado ALFA, aunque son totalmente operativos quizás tengan algunos fallos no descubiertos. Todavía queda algo de trabajito…

Actualizado 27/07/2011, efectivamente, en un solo día, ANONIMO me ha comentado que tengo invertida la alimentación del PIC en los esquemas. Un error de principiante, al pasar a limpio los borradores, que ya he corregido.
El circuito principal, que va montado en el arma, lleva incluido el convertidor DC-DC. Un fallo conocido es que no puede usarse el ICSP mientras la salida del convertidor DC-DC está conectada al circuito. La solución es sacar el jumper JP1 entre la salida del convertidor DC-DC y la alimentación de circuito (+5V) para usar el ICSP.
Aunque no he diseñado todavía el circuito impreso hay que tener mucho cuidado con el diseño de pistas de la parte analógica de Q7 y los componentes asociados, ya que es muy sensible al ruido eléctrico. La conexión del fototransistor en P8 ha de ser con cable apantallado. La ganancia del circuito esta programada a 250 y es muy justo teniendo en cuenta el margen de BETA de los BC547B-BC847B. Mejor usar BC547C-BC847C que tienen mas BETA. He observado diferencias de sensibiliad entre varios prototipos y podría deberse a esto.
Esquema principal

Este es el esquema de cableado de los elementos externos del LaserGame. Las memorias I2C son opcionales, no soportadas por el firmware V4.5.
Esquema de cableado

Ese es el esquema de los sensores I2C. A cada sensor se le asigna una dirección mediante los jumper JP0-JP3. Un fallo conocido es que no puede usarse el ICSP mientras haya alguno de estos puentes instalados. Pueden usarse hasta 8 sensores simultáneos con cada arma, y cada sensor dispone de hasta 4 fototransistores para aumentar la superficie sensible al láser. Igual que en el esquema principal la parte analógica es muy delicada, hay que usar cables apantallados y un buen diseño de pistas para los fototransistores. El bloque “modulador emisor” es opcional, normalmente los sensores no lo usarán pero podría ser útil en versiones posteriores del firmware.
Esquema de los sensores

Fuentes de la versión V4.5 de firmware para hardware V4.1, para placa principal y sensores, junto con el programa para PC de configuración.

Esquemas con KiCad de la versión V4.1 del hardware (compatible con el firmware V4.5)

Como puede verse en los esquemas el conjunto es muy sencillo, teniendo en cuenta todas las funciones que realiza. Los componentes mas caros son la PCB (no diseñada todavía) el display 2,17€ en Farnell y el laser 4€ en dealextreme.
El ajuste también e sencillo: regular los potenciómetros de 2K hasta que la señal cuadrada en la pata 5 del PLL LM567 sea de 38,5Khz.

LaserGame V4.1 Alfa

Por fin he encontrado un momento para publicar el trabajo de estos meses. El LaserGame Alfa es una versión preliminar (Alfa) de la evolución del LaserGame original. Ahora es un juego totalente operativo, con muchas funciones avanzadas, pero manteniendo la sencillez del original.

Licencia:
(c) Heli Tejedor, Julio 2011, http://heli.xbot.es, helitp@arrakis.es
Este Software se distribuye bajo licencia
Creative Commons 3.0 Reconocimiento, No Comercial, Compartir Igual(CC BY-NC-SA 3.0)
http://creativecommons.org/licenses/by-nc-sa/3.0/deed.es_ES
http://creativecommons.org/licenses/by-nc-sa/3.0/
Para usos comerciales contactar con el autor en helitp@arrakis.es

Armas: En la última versión del hardware V4.1 usan un PIC16F690 de 20 patillas, un display LED de 7 segmentos y 7 LED para informar del estado del arma. Mediante 7 pulsadores se interacciona con ella: Gatillo, puntero, cerrojo y cargador, además de 3 pulsadores arriba, menú y abajo.
Sensores: Usan otro PIC16F690 y un esquema similar al arma, pero sin display y con mas LED.
La comunicación es mediante un PLL LM567 se genera una onda cuadrada de 38,5Khz que es modulada mediante un transistor por la señal TX RS232 del PIC y se aplica a un transistor amplificador de potencia que alimenta el diodo láser (o infrarrojo).
El receptor funciona mediante un fototransistor sensible a la luz visible (aunque puede usarse uno infrarrojo). Se acopla en alterna a un amplificador y filtro paso banda centrado en 38,5Khz que amplifica la señal por 250. Esta señal se acopla en alterna a la entrada del PLL, que tiene una sensibilidad de 10mV, y la salida de enganche del PLL se lleva al RX RS232 del PIC.

La comunicación entre el arma y los sensores (pueden usarse hasta 8 sensores programados de distintas formas) es mediante un bus I2C, que también permite usar menorias I2C tipo 24cxx.

Estos son los prototipos que he montado para validar los esquemas y probar el firmware. Están montados en el interior de unas postolas (revolver) de juguete. En un bazar pueden encontrarse por 2,50€ y, una vez eliminado los elementos no deseados, queda aprovechable: un portapilas para 3 pilas tamaño AA, un altavoz y 4 LED.

Prototipo de revolver 1

Interior del prototipo de revolver 1

FAQ:
Por que 3 pilas Ni-Mh.
Esta versión de hardware 4.1 Puede funcionar con alimentaciones entre 3,2V y 4,5V. Un convertidor DC-DC eleva esta tensión hasta 5V, que es la que necesitan el PIC y el PLL para trabajar. Podrían usarse 3 baterías NI-MH, tres pilas alcalinas de 1,5V o una batería de litio de 3,7V. El diseño actual no incluye cargador de baterías porque el PIC no dispone de patillas libres, por lo que hay que extraer las baterías y cargarlas externamente. Para esto lo mas cómodo es usar baterías tamaño AA, que además es lo mas barato.

Por que PIC16F690.
La primera versión usaba PIC16F628 y bastaba, aunque limitando el display a 3 dígitos. Para solucionar los problemas de conectar los sensores de forma analógica decido usar sensores inteligentes con I2C. El PIC16F628 no dispone de I2C mientas que el PIC16F690 si. Además se puede usar un display de 4 dígitos.
El PIC16F690 es el PIC más pequeño y barato que soporta este firmware. Podría usarse uno mas potente sin problemas: PIC16F877, PIC18F2550 etc…

Por que láser.
No es imprescindible usar comunicación por láser rojo. Podrían usarse LED y fototransistores infrarrojos con filtro de luz visible. Incluso sensores IR completos como el TSOP1738 ó TSOP1740 e inyectar la señal tras el PLL. El sistema comunica a través de un enlace óptico que puede ser de cualquier longitud de onda (rojo, infrarrojo, verde…) y no es imprescindible que sea de luz coherente (laser). Dependiendo del tipo de luz escogida para la comunicación así serán las prestaciones. Con láser se simplifica el emisor, al no necesitar lentes de enfoque (los módulos laser las llevan incorporadas) ni ajustes complicados. Otra ventaja es que con laser se aumenta el alcance a cientos de metros y se aumenta la precisión a centímetros.
Láser: emisor más sencillo y sin ajustes, largo alcance, alta precisión. Punto visible para ayudar al tirador. Gafas de protección.
Infrarrojo: emisor con lentes y ajuste de enfoque, alcance hasta 10 metros, haz difuso e impreciso. Necesidad de un puntero láser adicional. No es necesaria ninguna medida de protección.

Por que comunicación serie.
Normalmente para enlaces ópticos se usan modulaciones NRZ, pulsos etc. Sin embargo esto complica el hardware y el software del PIC. Transmitiendo los datos serie por RS232 y modulando externamente a 38,5 Khz el hardware y el software son muy sencillos porque puede usarse la UART interna del PIC y el hardware externo es un simple PLL para la detección de las ráfagas de 38,5Khz. Para la transmisión de se aprovecha el oscilador del mismo PLL para generar la portadora y un para de transistores para modularla. El sistema no tiene el alcance ni la inmunidad al ruido que otros pero es mucho más sencillo.

Por que displays LED.
Por precio y disponibilidad. Los displays LED de 7 segmentos son muy comunes, fáciles de conseguir y baratos. El primer prototipo usaba displays reciclados porque era lo que tenía a mano. Los LCD suelen ser más grandes y caros. Aunque el multiplexado de los displays consume bastante potencia de CPU y son menos eficientes, son visibles siempre (excepto con luz solar intensa, pero el entonces tampoco funcionan los detectores) son mas fáciles de leer de un vistazo y le dan un aire retro bastante atractivo.

Por que no hay resistencia limitadoras en el los LED ni en el display.
No son necesarias ya que el firmware del PIC se encarga de limitar la corriente media en los LED a menos de 20 mA. Esto lo hace usando corrienentes de pico altas (al no haber limitación) pero usando ciclos de trabajo variables en el multiplexado se limita la corriente y se facilita variar el brillo del display.

Por que mosfet.
No son imprescindibles. Las primeras versiones usaban transistores bipolares BC548 y BC558. Una mejora es usar mosfet que tienen menos consumo (eliminan VCE ~0,4V de pérdida) y no necesitan resistencias limitadoras en la base. En el modulador su uso tiene más ventajas ya que, al no tener consumo de corriente, no derivan la frecuencia del PLL al extraer la portadora. Como inconveniente son muy frágiles, hay que tomar medidas de protección antiestática al montarlos (yo he averiado un cuarto de los que he montado por tener la punta del soldador derivada).

Es necesario programar los parémetros del arma antes de jugar.
NO. Las armas tienen una EEPROM interna donde se guarda el perfil del jugador y los parámetros del juego. Tras encenderla esta lista para funcionar con los últimos datos memorizados. La única limitación es que no se puede jugar con armas recién programadas y otras con la programación por defecto. Esto es así a propósito par evitar que, en un juego organizado donde cada jugador deba programar su arma según el esquema de juego escogido, alguien pueda resetear su arma y recuperar los parámetros por defecto para recuperar la vida, disparos etc. Al hacer esto esa arma dejará de comunicar con las demás.

Como se cuantos blancos he hecho.
El arma que efectúa el disparo no sabe si ha acertado o no. Sin embargo el arma del jugador que recibe un disparo sabe de que otra arma proviene y lo guarda en memoria. También guarda en memoria el tiro de gracia, el disparo que le mató. Al terminar el juego pueden descargarse los datos de las armas en un PC y cruzarse unos con otros con lo que se sabe quién acertó a quien y quien recibió disparos de que arma y cuantos. También puede verse que arma fue el que mató a cada jugador.

Que es la recamara.
El arma dispara la munición ó energía almacenada en la recámara. Para hacerlo hay que transferirla del cargador a la recámara, de modo automático o usando el pulsador recamara. Incluso cuando el cargador muestra cero puede haber energía o munición en la recámara para realizar otro disparo. Simula la recámara de un arma automática/semiautomática o el percutor levantado en un revolver. En modo potencia variable puede no haber suficiente energía para llenar la recámara con un disparo completo, entonces se muestra PAR por disparo parcial. Si en la recámara hay un disparo de menos potencia que la programada (disparo parcial) parpadea el LED RECAMARA.

Por que tantas opciones de configuración.
Por flexibilidad. Sirven para equilibrar el juego y permitir jugar a novatos con expertos equilibrando las deficiencias de los jugadores con mejores prestaciones de sus armas. También sirven para crear perfiles de jugadores específicos o roles: un francotirador puede tener un arma muy potente pero con una cadencia de disparos baja. Otro jugador puede querer avanzar rápido y estar mucho tiempo a descubierto y escoge un arma con muchos disparos y alta cadencia pero de poca potencia.

Que es el modo oculto.
Es un modo que se activa presionando el pulsador central más de 1,5 segundos y que apaga el display y los LED de los sensores. También desconecta los sonidos y los vibradores. Tiene que estar habilitado en FLAGS0 (Permitir modo oculto). Esto permite al jugador ir en silencio y sin luces que lo puedan delatar. Sin embargo deja de tener información de la munición restante, vida, tiempo etc. Tampoco puede sentir los disparos que recibe. No es un modo “todo ventajas” sino que tiene sus inconvenientes.

Que es el modo especial.
Es un modo en el que no se realizan disparos, sino que se pide vida o cargadores a los puntos de recarga. Se selecciona pulsando puntero + recamara, y se muestra “ESP” en el display. Se deselecciona de la misma forma. Si un arma recibe un disparo de este tipo transferirá un cargador. Puede ocurrir que, durante el juego, alguien realice disparos en ese modo. Solo conseguirá restar cargadores a los contrarios, no vida.

Por que potencia variable.
Cada arma lleva un número determinado de cargadores que permiten un número de disparos de una potencia determinada. La potencia total del arma, la capacidad para restar vida al contrario, es el producto de esos tres valores. En modo normal cada disparo tiene una potencia fija. Si se habilita la potencia variable la potencia de cada disparo puede modificarse, variando a la vez el número de disparos disponibles por cargador para dejar el producto total invariado. Si partimos de una potencia 2 y 20 disparos (la energía de cada cargador sería 40) podemos subirla a 5 y solo podríamos hacer 8 disparos (la energía sigue siendo 40). Si un jugador tiene 50 de vida es necesaria una energía de 50 para matarlo, o bien en un solo disparo de 50 o en 5 de 10…
Si se simula un revólver u otra arma convencional lo normal es que la potencia no pueda variarse. Si se simula un arma de energía futurista es interesante que pueda variarse la potencia. La máxima potencia configurable esta limitada por un parámetro de configuración.

Pueden usarse cargadores físicos.
Existe la posibilidad, desde la versión de hardware 4.0 que usa bus I2C, de conectar memorias 24C01, 24C02, 24C04 ó 24C08 de 128 a 1K bytes. Deben ser de Atmel O ST, no de Microchip que no llevan chip select. Aunque en los esquemas esta reflejado, sin embargo el firmware 4.5 todavía no lo soporta.

Que es el contador de reinicios.
Es un contador que se incrementa cada vez que se inicia un juego, al pulsar. Puede valer de 0 a 255 y no es posible resetearlo. Sirve para evitar trampas, que algún jugador cambie la configuración del arma durante el juego. Este contador puede visualizarse a través del software de programación del PC. Al terminar el juego debe valer una unidad más que al comienzo. Si no es así el arma ha sido reiniciada o recargada durante el juego y eso no esta permitido porque permite recargar el valor de vida, cargadores etc, o incluso variar el perfil del jugador respecto del asignado.

Que significan los LED:
En el encendido del arma, antes y durante la cuenta atrás de inicio de juego, todos los LED excepto “CON CARGADOR” parpadean indicando que no se ha comenzado a jugar.
• DL1 Rojo “FIN DE JUEGO”. Durante el juego permanece apagado. Mientras el arma esta inactiva por haber sido alcanzado por un disparo se enciende. Si la vida alcanza cero parpadea indicando que el fin del juego. Si el tiempo de juego termina se queda encendido fijo.
• DL2 Verde “RECAMARA”. Indica si la recámara esta cargada. Cuando esta apagado el arma no dispara. Parpadeando indica que la recamara esta cargada con un disparo parcial, de menor potencia que la programada.
• DL4 Tricolor “CON CARGADOR”. Apagado indica que no hay cargador. Encendido verde indica que hay un cargador montado. Encendido rojo indica “SIN CARGADOR”, que se han acabado los cargadores. Ámbar significa que se esta usando el último cargador. Verde parpadeando significa que esta seleccionado el modo de transferir cargador. El siguiente disparo será un mensaje de transmisión de cargador, no un disparo real
• DL5 Rojo “MODO AUTO” y DL6 Rojo “MODO SEMI”. Estos dos LED indican el modo de disparo seleccionado.
APAGADOS: Modo manual
MODO SEMI: Modo semiautomático.
MODO AUTO: Modo automático.
MODO SEMI y MODO AUTO: A ráfagas
• DL7 Rojo “SIN ENERGIA”. Encendido significa que se han agotado todos los cargadores y toda la energía incluida la de la recámara. Se acabó la munición. Parpadeando significa que no hay energía suficiente en el cargador para llenar la recamara con un disparo completo a la potencia programada.

Que significan los colores de los sensores.
Actualmente hay cinco secuencias de colores que tienen distintos significados según el estado del arma, pero puden modificarse en el firmware del sensor:
1. Alternancia rojo-azul: Sensor encendido pero sin inicializar por parte del arma.
2. Alternancia 2 rojos-1 rojo: El arma ha inicializado correctamente el sensor, listo para comenzar la cuenta atrás de inicio de juego.
3. Color fijo: Es el color seleccionado para ese jugador (Param.Color). Hay 256 colores distintos mezclando distintas intensidades: 8 de rojo, 8 de verde y 4 de azul.
4. Secuencia 3-2-1 verde: El sensor ha sido apuntado por otra arma (se ha recibido un mensaje correcto de puntero). El vibrador realiza dos cortas vibraciones. Esta función puede desactivarse en FLAGS0 (sentir puntero).
5. Secuencia 1-2-3 roja: El sensor ha recibido un disparo (se ha recibido un mensaje correcto de disparo). El vibrador realiza una secuencia de 6 vibraciones. Esta función puede desactivarse en FLAGS0 (sentir disparo).
6. Alternancia rojo intenso con rojo débil: Fin de juego por tiempo o fin de vida.
Si el arma esta en modo oculto los modos 3, 4 y 5 no se visualizan, quedando los sensores apagados.

Videos improvisados acerca del LaserGame V4.1 Alfa:




LaserGame IV

Aunque teste proyecto lo tenía abandonado desde hace tiempo, ya lo tenía bastante mejorado, aunque sin publicar.
En este post, el quinto de la série Laser Game, voy a exponer las últimas modificaciones.
En primer lugar el hardware mejorado:

Esquema

Las modificaciones son:
Eliminado el driver ULN2007. No es necesario ya que el PIC tiene corriente de salida suficiente para encender los LED del display directamente.
Recableados los pulsadores, ahora sobra una pata del PIC para uso futuro, pero existe un pulsador menos en el display (3 frente a los 4 anteriores).
Nuevo amplificador de los fototransistores con filtro activo. Ahora la sensibilidad es 10 veces mayor y un filtro paso banda centrado en 38,5Khz elimina casi todas las interferencias.
Mejorada la generación de sonidos.
Conector ICSP para programar el PIC sin sacarlo de la placa.

Todo esto acompañado de un nuevo firmware, versión 2.3a, con mas funciones:
El pulsador central permite cambiar entre los modos de visualización:
N: Munición, C: Cargadores, V: Vida, T: Tiempo, R: Rafaga, P: Puntero, OFF
Con el pulsador izquierdo y el puntero se conmuta modo manual, semiautomático y automático.
Con el puntero y el pulsador de cargador se prepara un cargador para enviar.
Pulsando el pulsador central mas de 3 segundos se entra en modo oculto, el display no muestra datos.
Actuando cualquier pulsador del arma se muestra momentáneamente el contador asociado: cargadores, munición etc.

Este es el código fuente del nuevo firmware (escrito con en C para CCS) versión 2.3a
Este es el programa para configurar las armas (escrito con en C builder 6) versión 2.3a

También he construido otra arma, esta vez mas futurista, usando esta plantilla:
Plantilla del arma 2
En proceso de construcción:
Arma 2 en proceso 1
Y así queda terminada cableada y pintada:
Arma 2 terminada

Por último he grabado un par de videos para demostrar como funcionan los prototipos:

Un autómata programable (PLC) casero

Esto no tiene mucho que ver con la robótica, pero si con la domótica. Si queremos automatizar de alguna manera una casa necesitaremos un “cerebro” que tome las decisiones pertinentes en base a las entradas y salidas: un PLC.

Un poco de historia:

Este proyecto lo comencé hace más de 10 años. Entonces no había en el mercado un PLC comercial con entradas y salidas analógicas y comunicaciones serie compacto y a un precio razonable. A mi jefe se le ocurrió clonar un autómata comercial, incorporando los circuitos que faltaban a los modelos estándar. Asi nacio el proyecto EC. El autómata clonado es hitachi serie EB, más tarde incorporé las funciones de la serie EC. El proceso consistía en leer el manual del autómata y simular, con otro micro, el funcionamiento del PLC. Lo mismo con las comunicaciones serie: emular el comportamiento del PLC. Se trataba de poder utilizar, con el nuevo PLC, las herramientas de programación ya existentes para hitachi. El EB utiliza un micro motorola 680x, no recuerdo bien. El EC un H8-325. La primera versión de pruebas corría en un 8051 de intel, la segunda en un H8-534.

Lo cierto es que la cosa funcionó y los autómatas clónicos basados en el H8-534 llevan más de 10 años funcionando perfectamente. A estas alturas ya es innecesario andarse con estas complicaciones de hacer uno mismo los PLC, pero todo el proyecto es muy instructivo y útil para un aficionado, por eso libero el proyecto.

Desgraciadamente el hacer algo en solitario tiene sus ventajas e inconvenientes. Como no tienes que compartir información con nadie no documentas el proyecto (todo esta en mi cabeza). El proyecto esta poco o nada documentado y hacerlo es muy tedioso. Contestaré las dudas a quien lo pida por email. Además, como se basa en un equipo comercial, para el uso y programación no hay más que remitirse a la documentación original de hitachi por lo que no hice manuales propios del PLC emulado. Al dia de hoy las series EB y EC creo que están descatalogadas. Yo tengo los manuales completos de programación y comunicaciónes.

Este es el primer prototipo basado en el 8051 (aunque lleva un DS5000-32-12 de dallas).

PLC DS5000

Consta de un convertidor DC-DC de 24 a 5V el DS500 que integra 32K de RAM, reloj y batería de lítio. Tiene 8 entradas digitales de 24V DC y 6 salidas a LED (solo sirve para pruebas).

En esta foto puede verse el prototipo del diseño definitivo (basado en 8051, DS5000 o DS87c520).

PLC modular

En la placa de arriba están las 16 entradas optoaisladas a 24V DC y las 16 salidas a relé, cada una de ellas con su LED de señalización. En la placa de abajo la CPU. Soporta 64K de EPROM y 64K de RAM. Se alimenta a 24V con un DC-DC y puede llevar un 8051, DS87C520, DS5000 u otro clon del 8051. Tiene 8 dilswitches para la configuración y 4 led de diagnóstico.

Plc modular ensamblado

El conjunto CPU y E/S montado. Pueden verse los LED rojos de señalización de las salidas en la parte superior y los LED ámbar de las entradas en la parte de abajo.

Cableado

En esta foto se aprecia el cableado de la CPU. Es el sistema que prefiero para montar prototipos. Ya habrá tiempo de circuitos impresos cuando esté todo probado y corregidos los errores.

PLC modular final

Este es el modelo definitivo, siguiendo la misma estructura. La placa de la parte superior de la foto es la de entradas/salidas, y pueden conectarse varias para ampliar el equipo.

PLC + HMI

El modelo definitivo montado en modo “compacto” (solo 1 placa de I/O) y funcionando. El terminal de operador es una opción, funciona muy bien y tiene muchas posibilidades. Es un LCD de 20×2 de Batrón con 6 teclas y un selector de 2 posiciones. La electrónica de control son solo dos IC 74hctxx.

Otro PLC

Esta es la versión basada en H8-543. El terminal de operador es intercambiable entre los distintos PLC. Esta placa tiene 2 salidas DA de 8 bit, 7 AD de 10 bit, 32 salidas digitales a transistor, y 32 entradas digitales sin optoaislar. Además tiene 4 puertos de comunicaciones, 2 RS232 y 2 RS485 y uno de los RS485 soporta un protocolo específico para comunicar con hasta 4 indicadores de peso AUMAT-4100. Tiene 8k de EEprom para programas. Un verdadero monstruo, para la época.

Hitachi EC

Ese es un PLC hitachi EC20HR (averiado) desmontado. No tiene nada que envidiar a sus clones.

Desgraciadamente el software que proporcionaba Logitek (el distribuidor de PLCs hitachi) para estos autómatas, el “hitachi eb programmer”, tenía algunas deficiencias, y era muy poco ergonómico. Para salir del programa, por ejemplo, había que pulsar ctrl+sifth+escape. Con el tiempo tuve que desarrollar uno propio: el ECP. Además esto permitía incluir nuevas funciones a los PLC. Del mismo modo que el PLC es compatible con el software de hitachi (Logitek) el software ECP es compatible con los autómatas hitachi. De hecho acabamos usando el ECP para todos los PLCs originales y clónicos.

ECprog

Esta aberración es una captura de pantalla del software ECP. Es un programa de MSDOS (tiene muchos años, aunque la última corrección de un bug la hice en el 2003). Al día de hoy contiene algún bug más sin solucionar, pero nada grave. Solo funciona con puertos serie “de verdad” porque hace acceso directo al hardware, nada de convertidores USB a serie, ni tarjetas PCMCIA. Funciona perfectamente en una ventana de MSDOS de Win XP.

Actualización a 8/5/2007: Probando un adaptador USB-SERIE que usa el chip de FTDI FT232xx he observado que emula correctamente el hardware del puerto serie a nivel de registros. Esto quiere decir que cualquier programa de MS-DOS que acceda a los registros del puerto serie USB virtual funcionará correctamente ya que sus lecturas y escrituras a estos registros virtuales serán reenviadas al dispositivo USB-SERIE. Lo he probado con distintos programas de MS-DOS en ventanas bajo WIN-XP y es correcto. Sin embargo el ECP454c no funciona adecuadamente, por lo que lo he revisado y he encontrado un bug en la gestión de los puertos COM3 y COM4. Esta versión del ECP comunica perfectamente a través de los puertos virtuales creados por el driver del chip FTDI y quizás también con los creados por otros drivers de otros fabricantes.

Software de programación para EC: ECP456.RAR

Este es el diseño de uno de los PLC de pruebas.

Y estos son los fuetes del firmware que hay que ponerle para que funcione:

Fuentes EC8051 V3.8 para Keil 3.2

Para hacer pruebas se pueden cargar estos programas y ver como funcionan: tests

Este es el manual de un Hitachi EC, mi versión del EC soporta lo mismo que uno original y tiene algunas mejoras. Algunas funciones REFX, REFY.. y otras poco utilizadas no hacen nada, pero no dan error.

Manual Hitachi serie EC en Español

Ya se que esto solo sirve para ponerle los dientes largos a más de uno. ¿Y los fuentes? ¿Donde esta el código fuente para poder cacharrear con el? Pues está escrito en clarísimo C de para Keil 3.2 (las versiones de intel 8051 y clones) y para IAR V2.91 las versiones de H8-534. El ECP esta en turbo C++ 3.1. Solo me falta encontrar las versiones adecuadas entre los miles de copias de seguridad (es la pena de los proyectos antiguos, se pierden en el trastero).

Laser Game III

Esta es la parte más vistosa del proyecto: el arma. Yo he construido una con lo que tenía a mano, el resultado final depende de la imaginación de cada uno. Esto es un ejemplo de lo que se puede hacer.

Aquí se ve la pieza que me sirve de base, marcada y a medio cortar. Es un material similar a la espuma de poliuretano, pero moldeado. Puede usarse también madera o corcho. Lo importante es que sea suficientemente rígido pero fácil de mecanizar.

Arma 1

Aquí ya he cortado la base y he mecanizado los alojamientos de los pulsadores. Como cañón utilizo una pieza de PVC de fontanería. Las piezas de aluminio con muchos taladros son perfiles estándar para montar bastidores, pueden usarse perfiles de carpintería metálica o cualquier otra cosa que se tenga a mano. La pieza de aluminio liso cuadrada que se ve abajo formará la corredera (que actuará el pulsador del “cerrojo, para cargar la recámara), es aluminio de 1mm de calorifugar tuberías.

Arma 2

Este es un detalle de los 4 pulsadores en sus alojamientos. Luego los fijaré con pegamento térmico.

Arma 3

Los elementos son:

1. Pulsador de “gatillo” o disparo. He usado un microinterruptor Omron que tiene un tacto muy bueno.
2. Pulsador de “puntero”. Se actúa con el dedo gordo. Es un pulsador de un teclado. Tiene que ser cómodo de actuar porque sirve para los cambios de modo, además de puntero.
3. Pulsador de “cerrojo” lo actúa la corredera de aluminio, sirve para cargar la recámara. La corredera de aluminio lleva un muelle para que retorne a su posición original al soltarla. He usado otro micro Omron, pero más pequeño.
4. Pulsador de “cargador”. Alojado en la empuñadura, aquí se ve saliente pero después de pegarlo quedará hundido de forma que no se pueda actuar por accidente.
5. Conector CANNON de 9 pines macho, sirve para conectar con la parte electrónica.

En la siguiente foto pueden verse los cables que pasan a través de unos taladros hechos en el material base y una ranura para alojarlos

Arma 4

En esta otra foto pueden verse los pulsadores ya pegados en su posición definitiva y la empuñadura forrada, lo mejor es cinta engomada como la que se usa para los mangos de las raquetas. A la izquierda del pulsador de “puntero” he colocado un pequeño altavoz para reproducir los sonidos del programa.

Arma 5

Aquí puede verse la corredera y la pieza de aluminio que actúa sobre el pulsador de “cerrojo”.

Arma 6

Aquí se ve el conector CANNON y los cables de conexión. Es importante que el conector esté bien atornillado a algo sólido, para que no se suelte de un tirón y arranque todos los cables. Yo lo he sujetado a unas piezas de aluminio mediante unas escuadras y tornillos de 3 mm.

Arma 7

Así es como queda el arma, junto con la electrónica. El cable de conexión que he usado es UTP categoría 5, de ethernet que tiene 8 hilos, justo los que hacen falta.

Arma 8

Eso es todo. Cada uno que le eche imaginación, hay muchos modelos y materiales para construir el arma. Yo he decidido construir un arma tipo “subfusil”, sin culata, pero cada uno puede escoger el diseño que más le guste….

Aunque no lo he dicho antes supongo que todo el mundo es consciente de la peligrosidad de esta la luz láser para los ojos. Aunque la potencia emitida es muy baja, menos de 1mW, y la luz es visible hay que tomar las precauciones adecuadas:

No mirar nunca directamente al emisor láser, ni al punto reflejado en superficies pulidas. Llevar gafas de protección adecuadas, sobre todo durante el juego. No apuntar a los ojos (accidentalmente es normal que ocurra, si hay detectores en el casco, por eso son imprescindibles las gafas). No usar las armas en zonas donde haya personas sin gafas de protección etc.

Creo que son indicaciones de sentido común. Este tipo de láser solo puede ser peligroso para la vista. El nivel de potencia y la concentración del haz no puede quemar la piel, pero sí dañar la retina por una exposición prolongada. En circunstancias normales, por ser láser visible, al recibir la luz láser en los ojos los párpados se cierran de forma refleja en menos de 200 ms. Debido a la poca potencia (láser categoría 2) durante esa exposición no debería haber peligro, pero lo correcto es usar gafas de protección.

Programador Pablin 2 Reloaded

Hasta ahora he estado usando un grabador de PIC comercial. Eso no tiene ningún interés, voy a construir uno casero. Me ha gustado el Pablin II, parece bastante bueno.

He visitado http://personales.ya.com/cepalacios/ProgramadorMarco.htm y he copiado el esquema del programador. El funcionamiento y configuración del Icprog105D están también explicados en esa misma página. Sin embargo he visto el foro de ARDE posts de gente quejándose de problemas con la alimentación y el funcionamiento del circuito. Efectivamente, este programador se alimenta a 13,5 Voltios y eso complica un poco encontrar un alimentador adecuado.

Analizando un poco el circuito se ve la razón de esa tensión de alimentación tan rara. Los PIC necesitan entre 11 y 13,5 V para MCLR/VPP durante la lectura o la grabación de su memoria interna. En el Pablin 2 del esquema de abajo esta tensión se consigue cuando cualquiera de las salidas D3 o D4 del puerto LPt están a 1. Entonces Q2 está saturado y corta a Q1 al poner R7 a masa (si no Q1 se se satura a gracias a +13,5 V a través de R6 y R7). Con Q1 cortado en la pata VPP aparecen los 13,5 V a través de R4 de 1K (que actúa de limitadora de corriente) y ¡el diodo led D4!. El diodo led D4, que no luce durante la programación porque la corriente que absorbe VPP es muy pequeña) tiene una caída de tensión típica de 1,5 V (si es rojo). Entonces tenemos que 13,5 V – 1,5 V = 12 V que es la tensión adecuada para VPP. Si usamos 12 V de alimentación en VPP solo tendremos 10,5 V, que está por debajo de las recomendaciones de MICROCHIP. Si alguien pone un LED verde en D4 (2 V de caída) o de otro color verá que el programador funciona cuando le da la gana porque la tensión que le llega a VPP no llega a 11 V..

Esquema grabador

Con esta pequeña modificación conseguimos los 12 V a partir de una alimentación de 12 V. Ya podemos reciclar los alimentadores de los móviles viejos o los del módem de 33K. Este es el esquema de la modificación:

Detalle alimentación

Se trata de quitar el LED D4 del colector de Q1 de forma que la alimentación pasa sólo por R4 y va a VPP sin más caídas de tensión (excepto la caída en R4, pero como la corriente por R4 y VPP es muy pequeña no es apreciable). Para seguir teniendo señalización del estado de la grabación pongo en LED D4 en el colector de Q2 con una resistencia en paralelo de 1K (el único componente que hay que añadir). De esta forma el LED D4 se enciende DURANTE LA LECTURA o PROGRAMACIÓN, al contrario que en el Pablin 2 original. Me parece más lógico: LED rojo encendido PELIGRO no toques nada!! EL diodo en esta situación no interfiere para nada en el corte o la saturación de Q1 (resta 1,5 V pero la corriente sigue siendo suficientemente alta para saturarlo). La nueva resistencia R8 en paralelo con el LED sirve para evitar que la pequeña corriente que circula por D4, R6, R7 y base emisor de Q1 encienda débilmente el LED cuando no se está programando (Q2 cortado). Hace que la tensión en los extremos de D4, con esta pequeña corriente, baje de 1,5 V y ya no puede encenderse. Cuando Q2 conduce la corriente es mucho mas alta y se enciende sin problemas.

También he puesto un jack para aprovechar un alimentador viejo y un interruptor de encendido – apagado (ON/OFF) para evitar tener que poner y quitar el PIC con tensión.

Esta es una foto de mi versión del Pablin 2 con un 16F876A pinchado y listo para ser programado:

Grabador montado

He utilizado placa protoboard (de “topos”) e hilo de 2 décimas aislado en teflón, creo que es la forma más rápida y segura de hacer prototipos. Pueden verse unos jumpers de colores y un 7812, modificación de última hora, para poner o quitar diodos serie a la pata de masa del 7812, y poder variar la tensión de salida a 12,7 V ó 13,4 V. De esta forma puedo alimentar con 15V o más sin problemas.

Grabador pistas

Probado satisfactoriamente con: PIC18F252, PIC16F877A, PIC16F876A, PIC16F628A, PIC16F84, PIC16F84A

Fallos conocidos:

NO es posible programar los PIC16F628 si se configura la pata MCLR como I/O (casilla MCLR desactivada). Parece ser que el algoritmo de programación que usan tanto Icprog105D como WinPic800 NECESITAN resetear el PIC poniendo MCLR/VPP a 0. Si se pone el bit MCLR a 0 la pata MCLR/VPP no resetea el micro y la grabación falla siempre.

Laser Game II

Por fin tengo un programa para las pistolas del Laser Game 100% operativo. Es mejorable pero ya se puede usar con toda las funciones operativas.

Este es esquema del hardware que estoy usando, lo he llamado versión V1.1, y funciona muy bien:

Esquema

No tiene muchas diferencias con la ultima versión, algunos valores modificados y poco más.

Estos son los dos prototipos con los que estoy trabajando, ya terminados y cargados con el mismo programa totalmente operativo:

Prototipos 1

Como ya comenté solo es necesario ajustar la frecuencia de la portadora, (al final he usado 80Khz en vez de 100Khz) en todos los circuitos mediante el potenciómetro R8. El problema que observé para grabar el PIC16F628A con MCLR inactivo ya está solucionado, es problema de mi grabador Pablin2R. Lo he solucionado pero no lo he documentado todavía (se trata de controlar VDD mediante un par de transistores NPN-PNP y el dato 2 del puerto paralelo)

He actualizado el código fuente operativo: Fuentes CCS para LaserGame. El programa para configurar las pistolas LaserGame mediante el PC es este: Builder2. Tras cargar el programa en el PIC en necesario inicializar las variables internas en EEPROM. Hay que conectar la pistola al PC (mediante un conversor RS232 a TTL en el conector SV1) y mediante LaserGame.exe seleccionar los valores adecuados para cada parámetro y pulsar “Transmitir” si contesta “TX-RX ALL OK” pulsar “Transmitir Sonidos”, si la contestación también es “TX-RX ALL OK” pulsar “Salvar en FLASH”. Si la contestación es “TX-RX ALL OK” ya está. A partir de ahora siempre que se encienda el LaserGame usará los parámetros cargados, ya no es necesario el PC más (a no ser que se quiera cambiar algo…). Si se produce algún error en la transmisión reintentarlo después de apagar y encender el LaserGame.

Sensores: cada uno tiene que ingeniárselas con lo que tiene a mano. yo uso dos, uno cuadrado de 5×5 en metacrilato transparente con 2 fototransistores y otro circular de 10cm de diámetro con 3 fototransistores. Los fototransistores se conectan en paralelo y con cable apantallado hasta el circuito del receptor. He marcado en rojo la situación de los fototransistores:

Detectores 1

El mejor resultado lo consigo con el cuadrado de 5×5, el circular quizás necesite más fototransistores. Los fototransistores son de unos detectores de herradura de unas HP690C, pero pueden servir otros modelos. Es importante que sean claros, sin filtro de IR.

El difusor circular (en realidad tiene forma de casquete esférico) lo he conseguido por un euro en Carrefour:

Detectores 2

Los láser que he usado son los de los punteros “de los chinos”. Es posible encontrar láser de más calidad, pero mucho más caros. Es posible comprar este “Cubo Láser” en Leroy Merlin por unos 8 Euros. Es de mucha más calidad que los que he mencionado antes, y mucho más fiable, pero bastante más caro. Este dispositivo emite una línea, no un punto. Quitando el elemento marcado con 1 (una especie de prisma) emite un punto como cualquier láser. Además este contiene un circuito de realimentación mediante dos transistores para compensar la emisión del láser leyendo la intensidad emitida con el diodo de realimentación. Los láser son muy sensibles a la temperatura, si se calientan emiten menos, es necesario compensarlos.

Nivel láser 1

Este es el manual de funcionamiento de los prototipos, de hardware V0.1 y software V0.9:

Prototipo  1

Al pulsar “encendido” se alimenta el circuito. Todos los LED parpadean y el display muestra un valor de 3 cifras, es el programado en “Retardo al inicio”. En este estado y durante la cuenta atrás el arma está inactiva. Al pulsar “Puntero” comienza la cuenta atrás, al llegar a cero se pasa a modo de visualización “u” y se activa el arma. La intención de esta cuenta atrás es que todos la inicien a la vez y de tiempo para alcanzar las posiciones de inicio del juego, con las armas inactivas.

El pulsador P0, manteniéndolo pulsado y pulsando “puntero” se activa el modo “petición” y parpadea el LED verde L6. En este modo, al pulsar “gatillo”, se pide un servicio. Puede ser recarga de vida, cargadores etc, dependiendo a qué disparemos. También sirve para cambiar el modo de visualización en el display. Los modos del display son:

* “u”, Vida: Es el modo inicial y muestra el nivel de vida restante. En el comienzo toma el valor programado en “nivel de vida inicial”. Cada impacto descuenta proporcionalmente al valor programado en “Potencia de Disparo” del arma que ha hecho el disparo. Al llegar a cero parpadea el LED L4 y el arma queda inactiva. El nivel de vida puede aumentarse recibiendo el código adecuado, normalmente al pedirlo mediante el modo “petición” a un botiquín. Sin vida el arma solo acepta comandos de configuración y petición de transferencia de cargadores, de forma que es posible transferir los cargadores de un “muerto” a nuestra arma.
* “t”, Tiempo: Muestra el tiempo restante de juego, inicialmente es el programado en “Duración del Juego”. Al terminar el tiempo programado se enciende el LED L4 y el arma se desactiva, solo acepta comandos de configuración.
* “r”, Ráfaga: Muestra el valor programado en “Disparos por ráfaga”. Puede modificarse pulsando durante 4 segundos el pulsador “P0”. Luego se incrementa o decrementa con “P1” y “P2”. Para salvar el valor se pulsa de nuevo “P0”. Esto solo tiene utilidad si el arma está programada en “Automática con ráfagas”, que se programa en “Tipo de arma”.
* “n”, Munición: Muestra la cantidad de munición disponible en el cargador actual. Si no hay cargador puesto muestra 0. El número de disparos disponibles es este más el que pudiera haber en la recámara. Si hay munición en el cargador se enciende el LED verde L2.
* “c” Cargadores: Muestra el número de cargadores disponibles. Cuando no quedan cargadores se enciende el LED ámbar L1, pero todavía puede quedar por consumir el actual.

El pulsador P1 sirve para incrementar el valor del display al editar el valor de ráfaga.

El pulsador P2, manteniéndolo pulsado y pulsando “puntero” se activa el modo “transferir” y parpadea el LED verde L2. En este modo, al pulsar “gatillo”, se transfiere un cargador a otro jugador. Hay que apuntar bien, si no se acierta en los sensores del otro jugador el cargador se descuenta, pero no se incrementa en el otro jugador, se pierde. Tambien sirve para decrementar el valor del display al editar el valor de ráfaga.

El pulsador P3, manteniéndolo pulsado y pulsando “puntero” se cambia el modo de disparo del arma. Hay 4 modos, en “tipo de arma” se programa el modo más alto que se puede seleccionar. Los modos son:

* Manual. Leds L5 y L6 apagados. El arma se inicia siempre en este modo. Hay que poner un cargador pulsando “cargador” se enciende L2, cargar la recámara pulsando “cerrojo” y se enciende L3. Una vez realizado el disparo se apaga L3 y hay que cargar la recámara manualmente pulsando de nuevo “cerrojo”. Atención, si se pulsa “cerrojo” y la recámara está llena se introduce nueva munición, pero se pierde la que había.
* Semi-automático: Led L5 ámbar encendido. Se prepara el arma como en manual, pero tras cada disparo la recámara se carga sola de nuevo. Es necesario soltar y pulsar de nuevo el “gatillo” para hacer cada disparo. Cuando se queda la recámara vacía al agotar un cargador es necesario usar “cerrojo” para cargarla.
* Automático. Led L6 verde encendido. Como en Semi-automático, pero sin necesidad de soltar el “gatillo” entre disparos. La cadencia de disparo está determinada por “Duración del disparo” y “Retardo entre disparos”.
* Automático a ráfagas. Leds L5 ámbar y L6 verde encendidos. Como en automático, pero solo se realizan “disparos por ráfaga” disparos seguidos. Luego hay que soltar el gatillo para disparar otra ráfaga de nuevo.

Los pulsadores del arma son:

* “Disparo”: Este pulsador es el que se actúa con el gatillo del arma, según el modo seleccionado sirve para disparar (normalmente) o bien para transferir cargadores o pedir servicios (si estos modos están activos). El disparo dura “Duración del disparo” décimas de segundo. Alargando este parámetro se puede hacer que sea más fácil acertar en el blanco, porque hay más tiempo para corregir la puntería. Después hay que esperar “retardo entre disparos” a que el arma pueda disparar de nuevo. Esto determina la cadencia de disparo del arma. La potencia de disparo, que es el número de unidades de vida que le resta al que recibe el disparo.
* “Puntero”: Sirve para actuar el láser pero sin disparar, para usarlo como puntero y coger puntería. Solo está activo “Duración del puntero” décimas de segundo, luego hay que esperar “Retardo entre punteros” décimas para que funcione de nuevo. Variando estos parámetros se puede hacer que sea más fácil o más difícil coger puntería. También sirve, junto con los pulsadores del display, para seleccionar los distintos modos: si se acciona mientras está pulsado P3 se cambia el modo de disparo, con P2 se activa el modo de transferir cargador y con P0 el modo de petición de servicios.
* “Cerrojo”: Sirve para cargar la recámara. Se acciona con el mecanismo de la corredera que – en un arma real – introduciría el cartucho en la recámara. Hay que pulsarlo siempre que la recámara esté vacía para llenarla, cada vez que se dispara en modo manual, al agotarse la munición en modo semi o automático etc. Si se pulsa cuando la recámara esta llena se expulsa el cartucho actual y se mete otro (es decir, perdemos un disparo, hay que estar atento!!).
* “Cargador”: Sirve para cambiar el cargador. Al pulsarlo se deshecha el cargador actual y se pone uno nuevo. Si el cargador actual no está vacío se pierden sus disparos (también hay que estar atento!).

Este es el significado de los LED, los he situado de decha a izquierda LED0 a LED6:

* LED0: Es rojo, encendido indica que no queda nada de munición, ni en cargadores ni recámara…
* LED1: Es ámbar, encendido indica que no quedan cargadores, sólo queda el que se está usando.
* LED2: Es verde, encendido indica que se existe munición en el cargador actual. Parpadeando indica que se ha seleccionado el modo de transferir cargador, el próximo disparo lo transfiere y pasa al modo normal.
* LED3: Es verde, encendido indica que la recámara está cargada, esta todo dispuesto para disparar.
* LED4: Es rojo. Se enciende al acabar el tiempo de juego. Si parpadea indica que se ha agotado la vida. En cualquiera de los dos casos el arma queda inactiva y el juego ha terminado para este jugador.
* LED5: Es ámbar. Encendido indica que se ha seleccionado el modo de disparo semiautomático. Si está encendido junto con LED6 indica que se ha activado el modo de ráfagas.
* LED6: Es verde. Encendido indica que se ha seleccionado el modo de disparo automático. Junto con LED5, indica que se ha activado el modo de ráfagas. Parpadeando indica que se ha activado el modo de petición de servicios. El siguiente disparo pide un servicio (vida, munición etc, dependiendo de los servicios que preste el blanco) y retorna al modo normal de disparo.

El número de disparos que proporciona cada cargador se configura en “Capacidad del cargador”. La cantidad de cargadores con que se inicia el juego se programa en “Numero de cargadores” y durante el mismo no se pueden acumular más que los que se programen en “Máximos cargadores”.

Al inicio del juego se cuenta con “Nivel de vida inicial”, que se va decrementando a cada impacto recibido. Si se “recarga” vida nunca puede sobrepasarse “Máxima vida acumulable”. Tras un impacto el arma queda inactiva “Inhibición tras impacto” décimas de segundo. Variando este parámetro pueden hacerse los tiroteos más rápidos o más tranquilos, valores altos obligan a los “heridos” a ponerse a cubierto hasta que sus armas se reactivan.

Al encender los juegos todas las armas se configuran para “Grupo de juego” 1. De esta forma es posible jugar usando los últimos parámetros que se configuraron con LaserGame.exe sin tener que reprogramarlos con el ordenador. Al configurar las armas siempre se cambia el grupo a otro distinto seleccionado en “Grupo de juego”. De esta forma si alguien apaga y enciende el juego se borra este parámetro, se retorna a grupo 1, y ya no puede seguir jugando con los demás que tienen otro grupo configurado. Esto es así a propósito para evitar que los jugadores apaguen los LaserGame para evitar que corra el tiempo o que se reciban los impactos.

Para transferir un cargador a otro jugador se pone el arma en modo “transferencia” (LED verde LED2 parpadeando) y se apunta al receptor del cargador. Al realizar el disparo se descuenta un cargador del arma que dispara y, si se da en el receptor del compañero, se incrementa un cargador en su arma. Si se falla el disparo el cargador se pierde!!

Cuando un jugador ha “muerto”, su vida es cero, el arma queda inactiva pero pasa al un modo especial en el que mediante el que otro jugador, mediante el modo petición de servicios, puede transferirse los cargadores que le queden. El proceso es el siguiente: un jugador localiza a un compañero “muerto”, pone su propia arma en modo “petición de servicios” y los dos jugadores se apuntan mutuamente. Al activar el disparo en modo petición de servicios el arma del “muerto” entrega un cargador al arma del otro jugador. Esto puede repetirse hasta que se agoten los cargadores o no quepan más en el arma receptora. Es evidente que para realizar este proceso es necesaria la colaboración de los dos jugadores.

Laser Game I

Después de las pruebas realizadas ya es posible emitir y recibir un haz láser modulado y portador de información, ahora hay que diseñar el juego, y los circuitos necesarios para su realización.

Después de muchas pruebas he conseguido emitir y recibir información a 4800 baudios a través del haz láser de 100 Khz, eso abre las puertas a un juego mucho más complejo. Las características básicas del juego serán:

1. Cada jugador lleva un arma que se configura al inicio, pudiendo determinar la potencia, cadencia, munición etc. El arma consta de 4 pulsadores: disparo, puntero, cerrojo y cargador. La “munición” está agrupada en “cargadores”, cuando se agota uno es necesario hacer el proceso de carga: cerrojo, cargador, cerrojo. Esto proporciona más realismo y hace que tengamos que estar atentos al número de cargadores y de munición disponible.
2. Cada jugador lleva un chaleco receptor con 2 detectores: pecho, espalda y otro en la cabeza. En un principio todos van en paralelo, aunque en el futuro podrían ser distintas señales y producir distintos efectos. Al comienzo del juego se determina el nivel de “vitalidad” que se va decrementando con cada impacto, dependiendo de la “potencia” recibida.
3. El “disparo” transmite información de la potencia, número del jugador etc, para hacer estadísticas y distinguir distintos efectos.
4. Es posible intercambiar munición con los compañeros/enemigos. Poniendo el arma en posición “descarga” se transmite, por el haz láser, el código de recarga a otro jugador. Puede haber “polvorines” repartidos por el área de juego para recargar munición.
5. Es posible “curarse” recuperando parte de la vitalidad perdida recibiendo el código adecuado de los “botiquines” repartidos por el área de juego.

Posiblemente se pueda mejorar, simplificar o complicar el juego, pero esa es la idea general. La idea es fomentar el juego en equipo y la estrategia. Según se configuren las armas es posible jugar a un simple “duelo” o a una verdadera guerra de estrategas.

El dispositivo electrónico que permite intercambiar la información y llevar a cabo el juego es muy sencillo. He intentado que sea de fácil construcción, barato y con componentes de fácil localización. La parte analógica, de modulación, emisión, recepción etc. está construida en torno a un chip PLL tipo LM567, barato y fácil de encontrar. Algunos transistores NPN tipo BC548 o similar y, lo más importante, el diodo láser emisor y los fototransistores receptores, La “inteligencia” la compone un PIC16F628A, también fácil de conseguir y barato.

Este es esquema del prototipo, quizás un poco complicado, pero interesante para las pruebas y el desarrollo:

He utilizado unos displays de 7 segmentos MAN71A de ánodo común porque tengo muchos, es posible prescindir de ellos y de mucho cableado dejando solo los 8 pulsadores y los 7 LEDs informativos. También pueden utilizarse otros modelos, incluso un LCD (con la consiguiente modificación en el software, claro).

Estos son los dos prototipos con los que estoy trabajando, uno terminado con algún programa de pruebas y el otro a medias. Puede verse que no tienen mucha complicación, si se usa un circuito impreso (no como yo que he usado placa de prototipos) se puede montar en menos de una hora.

El único ajuste que hay que realizar es el del potenciómetro que regula la frecuencia de la portadora del láser. Yo uso 100Khz, pero podría trabajar con otras frecuencias más bajas que permitan transmitir los datos a 4800 Bps, o bajar la velocidad a 2400 Bps. Es importante que coincida la frecuencia de cada equipo, para que puedan detectar los disparos de los contrarios, si no cada equipo solo detectará sus propios disparos.

No he podido grabar los PIC16F628A con la pata MCLR usada como I/O ( MCLR desmarcado en el grabador) con el Pablin 2 Reloaded. Quizás sea un fallo del algoritmo. Poniendo MCLR activo se graban sin problemas, pero se inutilizan los pulsadores del display, entonces solo resetean el micro.

He actualizado el código fuente de pruebas: Fuentes CCS para LaserGame. He avanzado bastante, ahora ya “hace cosas”. Esta versión de pruebas programa el arma en modo “manual” (hay que actuar el pulsador de “cerrojo” después de cada disparo para meter otra bala en la recámara), con 5 cargadores de 20 disparos y un nivel de vida de 99 créditos. La potencia del arma es 2 (descuenta dos créditos por cada disparo). Con esto estoy haciendo las pruebas. Todavía queda bastante, pero ya es operativo el disparo y la detección del mismo…

Laser Game 0: Preliminar

Estamos estudiando en http://www.webdearde.com el diseño de la electrónica para un juego tipo “laser game” de pistolas láser y chalecos detectores. Una de las características del diseño es que ha de ser de fácil construcción por uno mismo para hacerlo en un taller en la Campus Party 2007 (http://web6.campus-party.org)

En principio hay que probar como de fácil es detectar el láser con fiabilidad. Por precio y disponibilidad voy a usar un láser de llavero de los “chinos”, pero modulado para evitar interferencias y falsas detecciones. Tanto el emisor modulado como el receptor están basados en este diseño:
http://www.mondotronics.com/PDFs/3-337_Mod_IR_v22.pdf

Este es láser de juguete usado, que emite luz roja de 680 nm, ya desmontado:

Puntero láser desmontado

Puede observarse:

1. Conexión del polo negativo de las baterías
2. Pulsador de encendido
3. Resistencia limitadora de corriente de 47 Ohmios
4. Carcasa del diodo láser
5. Muelle de ajuste de la lente
6. Lente de convergencia del haz
7. Tornillo de ajuste de la lente

El diodo láser usado tiene una caída de tensión de 2,3 V, y una resistencia limitadora de 47 Ohmios. Al estar alimentado con 3 pilas de botón LR44 de 1,5 V (4,5 V en total) circula una corriente de 47 mA en continuo.

Yo alimento el láser a 66 mA más o menos, despreciando la Vce de saturación del BC337, y alimentándolo a 4,5 V obtengo una resistencia limitadora de 33 Ohmios. Sin embargo al usar una con onda cuadrada con un ciclo de trabajo del 50% la corriente media queda en 33 mA. Alimentándolo a 5V serían 81 mA instantáneos, 40,5 mA medios. También he variado algunos valores para conseguir 3,3 Khz, que es la frecuencia que he usado, y he incluido un inversor con BC 177 para encender un LED verde cuando detecto la señal, luego me he dado cuenta de que es innecesario pero ya lo había montado. En general lo he montado adaptándolo a lo que tenía a mano.

Esquema 1

Estos son los dos prototipos idénticos de emisor/receptor. En el de la izquierda solo uso la parte receptora y en la derecha solo la parte emisora. Puede verse el diodo láser con su carcasa pero sin la resistencia limitadora ni el pulsador. Esas funciones las hace el emisor. En el receptor he usado un fototransistor de desguace de una disquetera de 5 y 1/4 pulgadas, no conozco sus características pero responde muy bien al láser.

Prototipos

Los elementos que se ven en la imagen son:

1. Led verde, testigo de recepción de la señal.
2. Fototransistor del eceptor.
3. Diodo láser del emisor.
4. Receptor, el zócalo vaccío es para pruebas.
5. Emisor, al ir separado lo puedo alejar mucho del receptor. Lo alimento con una pila de 4,5V.

He regulado el potenciómetro de 50K multivuelta del emisor para que el oscilador del PLL trabaje a 3,3 Khz, porque me ha parecido una buena frecuencia. Luego he encarando emisor y receptor y regulando el potenciómetro del receptor hasta que ha detectado la señal con seguridad. En las pruebas realizadas con este montaje detecta con mucha fiabilidad, y el PLL engancha en ms, hasta más de 10 metros de distancia. No es muy crítico el enfoque, el láser es malucho y tiene bastante divergencia, con muy poco láser que vea el fotodiodo ya detecta. Es totalmente inmune a la luz ambiente, o a la luz sin modular. Solo responde a la luz de la frecuencia ajustada en el PLL.

Para ampliar el área de detección habría que poner algún tipo de difusor o reflector para capturar la luz láser y que la reciba el fototransistor. En esta prueba uso un difusor de un sensor PIR, puede verse el punto rojo del láser emitido desde 5 metros. Aunque el fototransistor no está mirando al punto detecta perfectamente la señal. Con este difusor se detecta el láser en un área de 50 x 50 mm desde 10 metros (para probar a más distancia tengo que salirme a la calle…). El led verde encendido indica que el PLL ha enganchado y que la señal recibida es estable.

Funcionando 1

Este otro difusor es fácil de construir, se trata de una lámina de metacrilato roja de 3 mm de grueso. Mediante una lima la he mecanizado con forma de cuña, y la he lijado para hacerla translúcida. La idea es que conduzca la luz desde el ángulo de la cuña al fototransistor.

Difusor 1

En este caso la superficie de detección es de 25 x 25 mm pero con la ventaja de que el fototransistor no se coloca detrás del difusor, sino en un lado, con lo que el grueso del conjunto es de sólo 3 mm. En esta foto recibe el láser en el difusor muy lejos del fotodiodo, emitido desde 4 metros. El difusor conduce suficiente luz como para que el fototransistor lo detecte.

Difusor 2

Esto es un éxito, funciona sin necesidad de lentes, tubos ni elementos complejos o voluminosos. Creo que esto ya es un punto de partida, ahora solo falta el micro, la emisión y detección ya tienen una solución.

Mejoras: no usar PLL, hacer la emisión y la recepción con el PIC, por software. Tiene la ventaja de que es mucho más estable por el cristal del PIC. El inconveniente es que se complica el programa. No emitir onda cuadrada al 50%, sino al 10% ON, 90% OFF, y aumentar la corriente instantánea en el láser. Se consigue más alcance al haber más potencia instantánea, con la misma potencia media.
Más cosas…

He como el punto láser es muy pequeño es importante aumentar la superficie de detección con algún elemento transmisor de luz de gran superficie que la concentre en el fototransistor. Anteriormente me he referido a “difusor” o “reflector”, creo que la palabra correcta para designarlo es transflector porque el elemento ha de reflejar y transmitir la luz hacia una zona determinada.

Este modelo hecho con metacrilato de 6 milímetros de grueso permite un área de detección de 50 x 50 mm, bastante grande. Se construye en unos minutos con una sierra de metal (para un material tan blando mejor de 18 dientes por pulgada) y una cartulina blanca que yo he sujetado con un clip de papelería, pero convendría pegarla.

Difusor 3

En la foto puede apreciarse también el fototransistor que he usado, era de un detector de herradura de una HP690, da una sensibilidad muy buena. Aquí abajo el detector funcionando, he dirigido el punto láser a una esquina para ver que detecta bien en la periferia del transflector.

Difusor 4

Como no tengo las características técnicas del fototransistor que he usado en las pruebas es difícil que otros realicen el mismo montaje con los mismos resultados. He probado todos los fototransistores que tenía y el que mejor resultados ha producido es el BPW77, aunque no es el más apropiado.

De estas pruebas he sacado las siguientes conclusiones:

* NO usar fototransistores “oscuros”, llevan filtro de luz visible y solo responden a longitudes de onda de infrarrojo (normalmente más de 800 nm) . El láser emite un espectro muy estrecho de luz roja en 680 nm y no lo ven.
* NO usar fotodiodos. La corriente de polarización del fototransistor es bastante alta, un fotodiodo no funcionará.
* NO usar el fototransistor del CNY70, trabaja en 950 nm, ya lo he probado y da una respuesta muy mala.
* PROBAR los fototransistores de los detectores de herradura. Normalmente no llevan filtro de luz visible y dan una respuesta muy buena, mucho mejor que con el BPW77. He probado con un HA21A1, un P802, uno de una HP690C (con el que he hecho las fotos) y un OPB1740. Todos estos me han dado un resultado estupendo, similar al fototransistor de disquetera.

En el mi esquema es posible eliminar el transistor PNP BC177 y la resistencia de 10K que lleva en la base y conectar directamente el LED verde y su resistencia de 330 Ohmios entre la pata 8 del LM567 y el positivo de la alimentación. No me había dado cuenta de que es una salida en colector abierto que soporta hasta 100 mA. Como el LED verde tiene más caída de tensión que uno rojo (alrededor de 2,V) con una resistencia limitadora de 330 Ohmios queda poca corriente (5V – 2,14V) / 330 Ohmios = 8,6 mA, se puede poner una de 220 Ohmios para darle más brillo (5V – 2,14V) / 220 Ohmios) = 13 mA.

Encoders, pruebas y primer programa

Como soy novato en esto de los PIC primero haré algunas pruebas para ver que funciona lo hecho hasta ahora…

Hoy toca hacer de Frankenstein. Voy a transplantar el cerebro de otro robot a Reciclator 1. Voy a conectar las 8 señales de control (4 de encoders, 2 de dirección y 2 de velocidad PWM) un prototipo tengo hecho y funcionando para hacer algunas pruebas. El otro robot está basado en Intel (mi especialidad) y la utiliza hardware para los contadores de los encoders. De esta forma sé que el programa es correcto y puedo probar el hardware. Como estoy empezando con PIC y CCS no me atrevo a poner el PIC y programar porque si no funciona me costará mucho determinar si el problema es del programa o del hardware. De esta forma ahorro mucho tiempo en pruebas.

Terminado

Las pruebas han sido un éxito… He podido controlar los motores y medir con precisión su velocidad. Con el frecuencímetro observo que los encoders proporcionan 4600 Hz a 5V que corresponden a 9200 Rpm del motor. Estos datos ya los había medido anteriormente, pero ahora tiene que medirlos el robot.

Este es el borrador del esquema de conexionado con el PIC:

Esquema

Ahora hay que programar…

Para la decodificación de los encoders voy a aprovechar la interrupción RB_isr() que se produce cada vez que cambia el estado de los bits 7-4 del puerto B del PIC. De esta forma solo tengo que comprobar como están esos bits e incrementar o decrementar el contador los contadores en consecuencia. Además tengo 4 interrupciones (4 cambios de estado en el encoder) por cada pulso, por lo que multiplico por 4 la resolución original de 30 pulsos por revolución.

Los pulsos de los encoders siguen la secuencia de la foto:

Fases encoder

Las flechas de los flancos pertenecen al sentido “contar”. En el sentido “descontar” van al revés. Generalmente solo se usa uno de los 2 flancos de una fase para contar y el estado de la ora fase determina la dirección. En este caso podríamos usar el flanco descendente de B para contar si A esta a 0 o para descontar si A está a 1. Si se usan los dos flancos de una fase se multiplica por 2 la resolución del encoder y si se usan los 2 flancos de una fase y los 2 de la otra la resolución se multiplica por 4. El encoder que uso es de 30 pulsos por revolución, pueden medirse hasta 120 pulsos por revolución

Para decodificar la información de los encoder compongo un número de 4 bit con el estado anterior de las fases A y B del encoder y el estado actual:
Hex Anterior AB Actual AB Pulsos XOR XOR AanteriorBactual
00 00 00 NADA 00 NO IMPORTA
01 00 01 - 01 1
02 00 10 + 10 0
03 00 11 PERDIDO 11 NO IMPORTA
04 01 00 + 01 0
05 01 01 NADA 00 NO IMPORTA
06 01 10 PERDIDO 11 NO IMPORTA
07 01 11 - 10 1
08 10 00 - 10 1
09 10 01 PERDIDO 11 NO IMPORTA
0A 10 10 NADA 00 NO IMPORTA
0B 10 11 + 01 0
0C 11 00 PERDIDO 11 NO IMPORTA
0D 11 01 + 10 0
0E 11 10 - 01 1
0F 11 11 NADA 00 NO IMPORTA

NADA significa que el encoder no se ha movido, no hay nada que cambiar. PERDIDO significa que han pasado 2 pulsos respecto del estado anterior. Esto puede ser interesante si se lee el estado de los encoder mediante una interrupción periódica. Como yo lo leo solo CUANDO CAMBIA (con RB_isr()) el caso NADA no puede darse, no genera interrupción y el caso PERDIDO es imposible: cualquier cambio genera interrupción y no pueden perderse pulsos (a no ser que lleguen tan rápido que no le de tiempo a la interrupción a procesarlos, en mi caso tardo 12 us puedo procesar hasta 833 Khz). Utilizando la función XOR entre el estado anterior y el actual puedo determinar cuando he de contar o descontar y cuando no hacer nada. 00 es NADA, 11 es PERDIDO y otro estado contar o descontar según el estado de A y o B del encoder. Para contar o descontar hago un XOR de de la fase A anterior con B actual: si es 0 es CONTAR si es 1 es DESCONTAR.

A la vista de la tabla de verdad hay muchas otras formas de hacerlo, cada una con más o menos código. Puede contarse siempre que haya un 2,4,B o D y descontarse con 1, 7, 8 o E pero las comparaciones y saltos son menos óptimos que las máscaras…

Ahora llega el problema… Para ver la velocidad tengo que medir los pulsos en un intervalo de tiempo. A 5,5 V el motor gira a 10000 RPM que son 166,6 RPs. Si el intervalo es de 1 segundo tendré un máximo de 30 * 4 * 166,6 = 20000 Pulsos en un segundo. No está mal, pero solo tendré una medida ¡cada segundo!. Es muy poco. Si quiero ejecutar el proceso de regulación cada milisegundo el motor solo se ha movido, a la máxima velocidad, ¡20 pulsos!. Es muy poca resolución para hacer una buena regulación. Hay que llegar a una solución de compromiso entre lectura del encoder (cuanto más milisegundos mejor) y la regulación (cuanto menos milisegundos mejor). Voy a hacer la regulación cada 6,55 ms que corresponde a unas 152 veces por segundo. En ese tiempo al encoder le da tiempo a enviar hasta 131 pulsos. Es poco, pero bastante para regular…

La regulación es el clásico PID aunque yo solo uso PD por ahora:

ErrorVI=ConsignaVI-VelocidadI;
SalidaVI+=((ErrorVI)*KVprop) + ((ErrorVI-ErrorAntVI)*KVder);
ErrorAntVI=ErrorVI;

KVprop y KVder son los parámetros del PID. Habrá que ajustarlos para que no oscile y alcance la consigna con rapidez. Uso enteros de 16 bit con signo para los cálculos, pero en punto fijo 11.5 es decir 11 bits de entero y 5 bits de decimal. Así los cálculos son más rápidos.

Estos son los fuentes de lo hecho hasta ahora: Fuentes C CCS. Están bastante comentados, no es muy dificil seguirlos.

Final

Este es Reciclator1 listo para pintar líneas, no para seguirlas. Así veo si oscila el PID y si las 2 ruedas mantienen sus velocidades. Como innovación he aumentado la tensión de la batería a 9,6 V usando otras 2 células para tener más margen de tensión y he incorporado un acelerómetro basado en el ADXL05 (es un componente obsoleto que tenía en una caja, a saber de donde lo he sacado), aunque el programa no lo usa todavía. No he usado el PIC 16F877 sino que pongo un 16F876 con un zócalo adaptador de 28 a 40 patas.