Proyecto final: Arduino

De Casiopea



TítuloLámpara Led Ring
Tipo de ProyectoProyecto de Curso
Período2019-2019
AsignaturaInteracción y Performatividad
Del CursoInteracción y Performatividad 2019
CarrerasDiseño
Alumno(s)Catalina Armijo, Florencia Cusicanqui, Javiera Riquelme Maceiras, Catalina Torres
ProfesorRenzo Varela

Proyecto final: Lámpara Led Ring

Encontrándonos ya en el proyecto final del semestre, nos dividimos en grupos y cada grupo escoge un proyecto con Arduino para aplicar lo aprendido sobre el software y materializarlo. En este proyecto en particular nos centramos en la utilización de luces LED y un stepper para construir una lámpara cuya pantalla es la contra-forma que rota en un eje, mostrando así diversas formas de manera sucesiva y todo operando simultáneamente.

Materiales

  • Led Ring 24'
  • Cautín
  • Estaño
  • Arduino
  • Cables
  • Batería
  • Stepper
  • Papel hilado
  • Cartón
  • Papel diamante

Proceso creativo

Se parte el proyecto con la instalación de los cables al led. Estos se deben soldar al led ring de la siguiente manera :

Captura de pantalla 2019-07-31 a la(s) 13.48.35.png


El resultado es el siguiente:

Conexion.jpg

Luego con el programa de Arduino se realiza el código de todas las variaciones posibles para el proyecto.

Transparencia y refracción

En esta fase se realizan experimentaciones con distintos materiales para ver la variación de sombras, luces y tonos que se logra por la refracción de la luz sobre el papel.

Video


Lampara Led Ring

A continuación se presenta los distintos prototipos que se realizaron con sus respectivas especificaciones y observaciones:

Primer prototipo

  1. Piezas
  2. Experimentación de luz
  3. Observaciones
Piezas


Renzopiezas.png

Experimentación de luz


En el video se muestra el resultado de la pantalla sólo con las luces LED.

Observaciones

En el primer prototipo solo se hace funcionar los LED para probar la efectividad de la pantalla. Es necesario realizar un ajuste para que las siluetas resulten nítidas. Además se le agrega una acción de rotación en su eje con un motor stepper.

Segundo prototipo

  1. Código final LED
  2. Código final Stepper
  3. Conexiones
  4. Vistas
Código LED
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
  #include <avr/power.h>
#endif

#define PIN 6


Adafruit_NeoPixel strip = Adafruit_NeoPixel(60, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  // This is for Trinket 5V 16MHz, you can remove these three lines if you are not using a Trinket
  #if defined (__AVR_ATtiny85__)
    if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
  #endif
  // End of trinket special code


  strip.begin();
  strip.show(); // Initialize all pixels to 'off'
}

void loop() {
  theaterChaseRainbow(50);
}

void theaterChaseRainbow(uint8_t wait) {
  for (int j=0; j < 256; j++) {     // cycle all 256 colors in the wheel
    for (int q=0; q < 3; q++) {
      for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, Wheel( (i+j) % 255));    //turn every third pixel on
      }
      strip.show();

      delay(wait);

      for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, 0);        //turn every third pixel off
      }
    }
  }
}

uint32_t Wheel(byte WheelPos) {
  WheelPos = 255 - WheelPos;
  if(WheelPos < 85) {
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  }
  if(WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
  WheelPos -= 170;
  return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}
//Fin del Código

Código Stepper
//Valores editables
int radio=3.5; // medida del radio del eje del motor en milimetros
int distancia=100; // distancia de recorrido de la cuerda en milimetros
int duracion=10; // tiempo del recorrido en segundos, 10 para enrollar y 10 para desenrollar


const int stepPin = 5; // pin de conexión al arduino
const int dirPin = 11; // pin de conexión al arduino
const int enPin = 12; // pin de conexión al arduino

int unidadtiempo=(0.0455/radio); // constante dividida por el radio del eje del motor
int total=(duracion/(0.0455/radio)); // tiempo dividido por unidadtiempo
int perimetro=(2*PI*radio); // perímetro del espesor del eje del motor
int calculo1=(distancia/perimetro); // cálculo para saber cuantas vueltas debe dar el motor en una distancia determinada
int calculo2=(calculo1*1600); // cálculo 1 por 1600 (correspondiente a una vuelta del motor)

void setup() {
 pinMode(stepPin,OUTPUT);
 pinMode(dirPin,OUTPUT);
 pinMode(enPin,OUTPUT);
 digitalWrite(enPin,LOW);

}
void loop() {
 digitalWrite(dirPin,HIGH); // sentido de giro del motor a la derecha
 for(int x = 0; x < calculo2; x++) { // ciclo for para mantener la duración del ciclo
 digitalWrite(stepPin,HIGH);
 delayMicroseconds(total);
 digitalWrite(stepPin,LOW);
 delayMicroseconds(total);
 }
 delay(10); // un segundo de retraso
 }
 delay(10); // un segundo de retraso
}
//Fin del Código
Conexiones