Lámpara Arduino

Este es un pequeño proyecto para realizar una lámpara led, controlada mediante un arduino nano, capaz de mostrar distintos patrones, y adornada por una tulipa de diseño voronoi impresa.

Hace varias semanas, imprimí un adorno voronoi de thingiverse. Ya que había utilizado filamento translúcido, se me ocurrió ponerlo sobre un led azul, para ver el resultado:

Contento con el efecto, pensé que se podría realizar una lámpara completa con una tulipa traslúcida, y controlar los efectos del led mediante un arduino nano.

Diseño de la tulipa y la base

La tulipa es un cilindro hueco, con la base superior cerrada. La forma de construirlo ha sido como una litofanía, con la misma aplicación que usé hace tiempo para la imagen de la Catedral de Burgos.

Lo primero fue buscar un diseño, meterlo en la aplicación y configurarlo para hacer un pequeño relieve en la frontera de cada polígono:

El STL resultante se imprime hueco, con una pared de 0’8 – 1 mm (dos contornos si se usa una boquilla de 0’4), y una altura de capa de 0’2. La base inferior con 4 o 5 capas, y la superior abierta, resulta en un “vaso”:

La base está diseñada con FreeCad, de manera que pueda alojar una placa con los leds, el arduino accesible, iterruptor, pulsador y pila:

Todos los modelos STL están disponibles en esta entrada de thingiverse, para su descarga.

Electrónica

Para evitar el lío de cables que suele representar el arduino, se ha diseñado un shield adaptado a la forma de la lampara, que controla de manera independiente 5 grupos de 3 leds de distintos colores.

El circuito está hecho en placa de fibra de vidrio, con el método de transferencia de tóner que ya conocemos:

Al ponerme a programar la placa, descubrí que el voltaje de salida sólo se puede regular en determinados pines, de ahí los cables que se ven soldados. La señal estaba utilizando inicialmente los pines 7 y 8, que no lo soportan y la desvíe al 10 y 11, que sí que lo permiten. Así que simplemente eliminé las patas de dichos pines, y pasé con cable la señal a los otros pines.

Unos pocos cables para organizar interuptor, pulador y pila, y queda todo alojado en la base:

El diseño del shield está realizado con Eagle, y se puede descargar aquí.

Programación

El programa que he preparado inicialmente para el arduino es muy sencillo, tan solo realiza un efecto fade-in fade-out entre los distintos pines, de manera secuencial y cíclica:

//declaración de pines de leds
int led1 = 5;         
int led2 = 6;         
int led3 = 10;        
int led4 = 11;        
int led5 = 9;     

//declaracion de pin de pulsador
int boton = 2;

//declaración de otras variables
int brightness = 5;     //brillo inicial
int fadeAmount = 1;     //variación de brillo
int ledactivo = led1;   //led activo
int del = 15;           //retardo entre pasos de variación de brillo

//setup
void setup() {
  //modo de salida en pines de leds
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  pinMode(led5, OUTPUT);
  //modo de entrada en pin de pulsador
  pinMode(boton,INPUT);
}

//fade in/fade out secuencial de todos los leds
void loop() {
  //se asigna brillo al led activo
  analogWrite(ledactivo, brightness);

  //se varia brillo según paso asignado
  brightness = brightness + fadeAmount;

  //si llegamos al extremo, se varia dirección
  if (brightness <= 0 || brightness >= 255) {
    fadeAmount = -fadeAmount;
  }   

  //si el led se apaga, pasamos al siguiente
  if(brightness == 0){
    analogWrite(ledactivo, 0);
    if (ledactivo == led1) ledactivo = led2;
    else if (ledactivo == led2) ledactivo = led3;
    else if (ledactivo == led3) ledactivo = led4;
    else if (ledactivo == led4) ledactivo = led5;
    else if (ledactivo == led5) ledactivo = led1;
  }

  //si el led está al máximo, añadimos una pequeña espera antes del fade out 
  if(brightness == 255){
    delay(del*3);
  }

  //esperamos los milisegundos definidos
  delay(del);
}

El pulsador de momento no se usa, pero está disponible, para en el futuro introducir más ciclos, y poder pasar de uno a otro… pero eso, otro día.

Y así quedó la lámpara:

Un pequeño vídeo de la lámpara terminada, para acabar:

Placa MVS vertical

Este proyecto es una nueva adaptación de una placa arcade MVS para su uso en TVS convencionales.

En este caso, el modelo utilizado es el MV1C. Tiene como peculiaridad que la entrada del cartucho es vertical, integrando el zócalo en la placa principal, y que su tamaño es bastante reducido. Esta disposición permite crear una carcasa completa de un tamaño decente, y añadir una tapa para el peine del cartucho:

La premisa es la misma de casos anteriores, no modificar la placa original (en este caso, se ha retirado su carcasa), realizar una carcasa por impresión 3d, y permitir su uso como si de una consola se tratase.

El resultado es:

La carcasa está compuesta de 10 piezas principales, con una tapa deslizante para el zócalo. Más fotos:

El interior:

Como novedad, debido a la escasez de espacio dentro de la carcasa, y para evitar el jaleo habitual de cables, he hecho un par de PCBs para el conector jamma y el scart utilizando el CNC:

Un pequeño vídeo con musicota del Metal Slug 3:

En unas semanas publicaré los modelos STL en thingiverse para quien quiera imprimirlo, así como los eagle de las pcbs. Durante el montaje han aparecido algunos detallesque revisar, y prefiero publicarlas una vez que estén completamente listas.

Gracias a Julen por retarme a comenzar este proyecto, que se ha prolongado más de lo que esperaba, y a mis amigos y compañeros de Byte Swap .

Grabado láser

Aquí va una pequeña entrada, mientras termino el próximo proyecto…

Las pasadas navidades compré en AliExpress un pequeño grabador laser. Este es su aspecto:

Usad gafas protectoras, niños!

Al igual que las impresoras 3d, se basa en una placa arduino (nano en este caso), con motores nema, y un firmware libre llamado GRBL, análogo a marlin.

De serie trae el GRBL 0.8c. Traté de actualizarlo, pero no salió del todo bien, porque el láser no se apagaba nunca. La mesa puede dar fe de ello… Finalmente tuve que volver al original

A diferecia de la impresora 3d, no tiene opción de lectura desde SD, y el envío del gcode se realiza por usb desde un pc. He utilizado principalmente dos aplicaciones para generar los gcode:
Laser GRBL http://lasergrbl.com/en/
Lite Fire Laser (Venía en un pincho con el aparato)

De la primera me quedo con los algoritmos de corte y bordeado, que van muy fluidos, y de la segunda con la funcion de grabado propiamente.

El laser es de 2000mw. Da para cortar cartón, cartulina, goma eva… para madera no llega. Lo que es buena, es para grabado.

Algunas cositas:

Juego de Tronos

Groot

Un Buho

Otros

La madera que se ve cortada en rodajas es de nogal (juego de tronos) y chopo (groot y el buho), procedente de la ultima poda 🙂 El resto es ocume y pino.

Y para acabar, unos vídeos con musicota, que siempre queda más épico:

Carcasa Impresa para GDEMU de Dreamcast con lector SD integrado

GDEMU es un Emulador de Disco Óptico para Dreamcast, que permite el reemplazo de todo el lector óptico, para instalar en su lugar una tarjeta SD donde almacenar isos de juegos ejecutables en la consola.

Es una idea muy práctica, ya no sólo para cargar y almacenar backups fácilmente, sino para resucitar consolas con lentes o lectores muertos.

Se trata de un proyecto personal de su autor, Deunan, con página “oficial” en wordpress donde se puede encargar:
https://gdemu.wordpress.com

Existe también un clon chino, que es el que he utilizado en este proyecto, y que se puede encontrar en las páginas habituales de compras. No daré enlaces de compra de clones por respeto al autor del original.

El aspecto de la placa es este:gdemu (1)

Se instala retirando todo el lector de la consola y pinchandolo en su lugar:

gdemu (8)

La consola arranca y detecta el juego que se haya almacenado en la carpeta 01 de la SD como si fuese un disco virtual. El botón permite cambiar el disco virtual, pasando a la carpeta 02 y sucesivas cada vez que se pulsa.

Este diseño es muy práctico y de fácil instalación, pero presenta un problema de accesibilidad a la SD una vez se monta la carcasa de nuevo al quedar varios centímetros por debajo del hueco. Sobre todo, para caballeros con unas manazas como las mías…

La finalidad de este proyecto es crear una sencilla “tapa” que se pueda producir en impresora 3D para el hueco del lector optico, en la que ubicar un extensor del lector de SD del GDEMU.

Después de unas cuantas medidas y pruebas, el resultado del diseño fue este:

gdemu

La carcasa de Dreamcast tiene tres pivotes para sujetar el bloque optico. Dichos pivotes se pueden usar como anclaje para la tapa, ya que tienen agujeros de 2mm en los que roscar tornillos:

Los extensores de SD se pueden localizar en distintas medidas en aliexpress:
https://es.aliexpress.com/item/SD-Male-To-SD-Female-SDHC-SDXC-Card-Reader-Extension-Adapter-Cable-Extender-For-Phone-Car/32820269171.html?spm=a2g0s.9042311.0.0.410a63c0Bc7Sf9
Con uno de 15 centímetros vamos sobrados, pero si se usa uno de más, hay sitio para alojar el exceso de cable. El primero que compré fue de 48 cm (era el más corto) y entra bien.

Para mejorar la estética, el lector de SD se aloja en una bonita carcasa con el logo de Dreamcast, colocado con una leve inclinación que mejora el acceso:

gdemu (4)

Finalmente, el botón de cambio de disco queda accesible, a través de un “palo” extensor. Se puede poner un muelle dentro para dejarlo más elegante, pero no es obligatorio.

El resultado final mejora la presencia de la consola con el GDEMU instalado:

gdemu (19)

Aquí un vídeo con el detalle de la instalación:

Si a alguien le interesa fabricarse su propia tapa, he dejado los modelos disponibles en thingiverse (licencia creative commons BY-SA-NC-ND) en el siguiente enlace:
https://www.thingiverse.com/thing:3279412

Lo he usado poco de momento, pero es recomendable no tocar la SD en caliente aunque el autor diga que se puede. Sobre todo, usando el alargador, ya que el gdemu no detectará la salida de la SD del zócalo, pudiendose producir corrupción de datos, y cuelgues.

Me queda investigar, como proyecto complementario, el tema del flujo del aire de refrigeración dentro de la consola, ya que la eliminación del bloque óptio afecta al camino que sigue. Hay quien añade una “pared” como esta para asegurar que el aire llega a la fuente como antes:

(Actualizado el 22/12/2018): He añadido en la pieza de thingiverse una nueva pieza que actua como soporte y separador  al mismo tiempo:

El resultado es un anclaje bastante sólido para el GDEMU, que a la vez mejora el flujo del aire. Se monta utilizando dos de los anclajes del lector optico, así que se pueden usar los mismos tornillos. Primero hay que sujetar la pieza poniendo los tornillos marcados en rojo, y luego, colocar el GDEMU encima y sujetarlo con un par de roscachapas en los agujeros marcados en azul:

gdemu (38)

Antes de terminar, agradecer como siempre al resto del equipo de Byte Swap las ideas y apoyo. A O’Neill y Naikon por presentarme el GDEMU y “provocarme” para hacer la tapa. Y al grupo de Telegram de Dreamcast https://t.me/dreamcastSega de Alberto, Martintxo, Javier y compañía, por las sugerencias, y por el cariño que demuestran a esta gran consola de Sega.

Adaptador Master System – Mega Drive

Este es un proyecto realizado en colaboración con el resto del equipo Byte Swap. Especial agradecimiento a Giacomo (Santi), que es quien diseñó la placa que contiene este adaptador, y a O’neill (Javi), encargado de la logística.

El Master System Converter fue un periférico de Mega Drive que permitía utilizar en esta consola la mayor parte de juegos de Master System:

sms12

Esta retrocompatibilidad se lograba gracias al hardware ya presente en Mega Drive, lo que convierte este adaptador en un mero puente entre el cartucho y la consola.

Realizando una investigación, se puede “traducir” el slot de master system al de mega drive. Prescindiendo del adaptador de tarjetas, y con una carcasaimpresa, el resultado es:

 

 

 

 

mastermega (2)

 

 

 

 

mastermega (8)

mastermega (1)

Aquí, en funcionamiento:

 

mastermega-20

Esta es una revisión con el botón en el lateral, en su posición original. Está hecha en dos piezas para poder meter la placa con el botón ya montado:

Convertir una placa arcade bootleg COMECOCOS en un PACMAN

Hace tiempo conseguí un par de placas bootleg de MS PACMAN, conocido en España como COMECOCOS. Se trata de unas placas con una curiosa traduccion al español, con el grabado  “MADE IN GREECE” en la placa.

PACMAN (9)

El aspecto del juego, se mantiene, con los nombres cambiados, y algun color distinto:

Buscando en páginas de venta, es casi imposible localizar placas arcade originales de juegos clásicos tipo Galaga, Donkey Kong, Pacman… A Europa da la sensación de que llegaron pocos de estos juegos, y en algunos casos, ni siquiera bootlegs.

Investigando un poco en el listado de roms de MAME, encontré que este bootleg lleva el citado MADE IN GREECE en el título de la ROM… y que existía otra ROM con este identificador como bootleg del PACMAN original, llamada PUCKMAN.

Con todo esto pensé… quizá pueda convertir este COMECOCOS en un PUCKMAN… y luego convertir el PUCKMAN en algo parecido a un PACMAN…

Así que al lío.

Lo primero era analizar las ROMs de ambos juegos. Comparándolas, vemos que el contenido es muy parecido:

PACMAN (21)

Leí con el willem las eeprom montadas en los zócalos numerados 11 y 13 de la placa, comprobando que corresponden de esta manera con los ficheros del zip:

PLACA mspacmanbcc.zip
Zócalo 11 comecocos.bin
Zócalo 13 10.e5

Comparando con un editor hexadecimal los cuatro archivos de ambas ROMs, pude llegar a esta equivalencia:

PLACA mspacmanbcc.zip pacmansp.zip
Zócalo 11 comecocos.bin 1.bin
Zócalo 13 10.e5 2.bin

En este punto preparé dos eproms 27C256B para grabar los ficheros 1.bin y 2.bin de la ROM del PUCKMAN. Como podéis observar el fichero 2.bin de PUCKMAN pesa 8KB mientras que su equivalente del COMECOCOS, 10.e5, pesa 32KB. Para evitar problemas, preparé una concatenación de 4 cuatro veces el contenido del fichero y lo grabé.

Monto las eproms, enchufo a la TV, y…

Qué colores más raros, ¿no? Pacman es morado y los fantasmas no tienen sus colores originales…

Investigando otro poco más, y teniendo en cuenta el esquema de colores que estoy viendo, y el que debería ver, llego a la conclusión de que los canales verde y azul del RGB están cambiados. Intercambio los pines del euroconector y…

Mucho mejor. Parece que esta placa simplemente tiene los canales cambiados para que COMECOCOS sea algo distinta de MS PACMAN.

Hecho esto, tenemos una placa con un pacman con una traducción atroz… ¿quién es “EL  SUPER” y por qué los fantasmas tienen los nombres de los hermanos Marx?

Esto se puede solucionar relativamente fácil con un editor hexadecimal, editando el contenido de 1.bin de la ROM de puckman y cambiando las traducciones. En este vídeo se puede ver la comparación entre un PACMAN original y un PUCKMAN traducido al castellano:

Con el editor se pueden ir cambiando los strings, con MUCHO cuidado de no salirse de cada zona de texto:

Cabe destacar que la equivalencia de símbolos entre lo que muestra el editor y lo que se ve al ejecutar el juego es:

editor pantalla
puntoy coma (;) guion (-)
arroba (@) espacio ( )
ampersand (&) comilla (“)

Todo el proceso se puede ir probando en un emulador, sustituyendo los ficheros 1.bin a medida que se modifiquen símbolos, antes de grabar la eprom. Así se evita tener que grabar la eprom para probar en la placa cada vez que se toque algo.

Con esto, tendremos una jamma bootleg muy parecida a un PACMAN original…

Habrá que hacer ahora una carcasa, ¿no?

Arduino PONG

Este es un proyecto realizado un fin de semana ocioso…

Llevaba tiempo queriendo hacer un experimento sobre el uso de arduinos para generar señales de video. Realizando una búsqueda en Internet, encontré la librería TVOut, que permite generar una señal de vídeo, representando algo parecido a una interfaz de texto.

De hecho, como podéis ver en las especificaciones, los comandos son muy similares a una salida de consola, con ordenes de escritura de texto en determinadas posiciones.

Y encima, junto a varios ejemplos, encontré una implementación del pong clásico… Perfecto, nuevo juguete al canto. El autor original del código (Peter Lamonica) tiene publicado este vídeo y el código.

Creo que el pong no necesita muchas presentaciones, pero por si alguien está despistado, aquí está la Wikipedia al rescate.

tumblr_nubbhqC9yT1rpco88o2_r1_500

El montaje de la placa es muy sencillo. El código tiene definidos los pines de las ruletas, que son potenciómetros de 10 KOhm, y la propia libreria tiene definidas las salidas de las señales de vídeo. como conector para video, audio y mandos he utilizado jack de audio estero, que tienen los 3 canales necesarios en cada caso.

 

A esto le añadí una bonita carcasa y mando impresos, y el resultado es:

 

Si a alguien interesa, aquí dejo el diseño en thingiverse.

Como puntos pendientes tengo la modificación del código. Me gustaría realizar una opción de un solo jugador, y añadir colores a la pantalla.