Archive | 6:46 pm

Final Project – Interactive light display – Sarah Wolf, Daniel Scott, Elena Brown, Matthew Schneider

17 Dec

ImageImageImageImage

 

                Our team designed an interactive light screen intended to be a piece of installation art that would react to human hand and wrist movement detected by a Kinect.  This motion  would then trigger an Arduino code controlling a series of motors within the display that would control the motion of shutters allowing the light behind the screen to be  emitted for the audience to view.

                The display itself was a 4’ tall by 5’ wide 5-sided wooden box with the back exposed to allow for setup of the motor/arduino/computer control system. The face of the display had 96 laser-cut 2.5” diameter circles, behind which were shutters weighted down by washers and attached by a cable system to 4 servo motors attached at the top of the display. By using only 4 motors, aggregate motion was designed to control 3 “zones” on the display, so that when a person’s motion was detected each zone would begin to open and close in sequence based on the person’s hand and wrist movement detected by the Kinect.

                We coded for both the Kinect using Firelfly and the Arduino, but found that the Firefly code confused and overloaded our computer systems and resulted to using the Arduino code. Unfortunately, without the ability to detect motion with the Kinect, we needed to simulate motion detection using a potentiometer to activate the display. This code worked, however, several of the cable systems failed on us because the washers attached to the shutter system weighed too much for the motors and dowels attached to the cable system to handle and broke under the pressure.

                If we moved forward with this project, we would develop a more robust  framework for the cable system and purchase stronger servo motors to control the display. We would also like to smooth out the motion of the shutters as they are controlled by the motors to create a more seamless effect of motion across the display and fix coding and wiring bugs so that we could utilize the Kinect with the system.  Additionally, we would like the code to be able to be reprogrammed as needed to fit the needs of the location in which it was installed, so that it might display an image created by the pattern in the visible light.  

                This is the Arduino code we used during our presentation (utilizing a potentiometer):

 

#include <Servo.h> 
 
Servo myservo1;  // first servo
Servo myservo2; // second servo
Servo myservo3; // third servo
Servo myservo4; // fourth servo
 
int potpin = 0;  // analog pin used to connect the potentiometer
 
int val; // variable to read the value from the analog pin
 
 
void setup() 
  myservo1.attach(9);  // attaches the servo1 on pin 9 to the servo object 
  myservo2.attach(6); //attaches servo 2 to pin 6
  myservo3.attach(5); //attaches servo 3 to pin 5
  myservo4.attach(3); //attaches servo 4 to pin 3
 
void loop() 
  val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023) 
  val = map(val, 0, 1023, 0, 179);     // scale it to use it with the servo (value between 0 and 180) 
  myservo1.write(180-val);                  // sets the servo position according to the scaled value 
  delay(15);                           // waits for the servo to get there 
  
   val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023) 
  val = map(val, 0, 1023, 0, 179);     // scale it to use it with the servo (value between 0 and 180) 
  myservo2.write(val);                  // sets the servo position according to the scaled value 
  delay(15);                           // waits for the servo to get there 
  
   val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023) 
  val = map(val, 0, 1023, 0, 179);     // scale it to use it with the servo (value between 0 and 180) 
  myservo3.write(180-val);                  // sets the servo position according to the scaled value 
  delay(15);                           // waits for the servo to get there 
  
   val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023) 
  val = map(val, 0, 1023, 0, 179);     // scale it to use it with the servo (value between 0 and 180) 
  myservo4.write(val);                  // sets the servo position according to the scaled value 
  delay(15);                           // waits for the servo to get there