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:

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.