Assignment 3 – Sundial

For this DMX features group project we got the three spot lights. Because ours can’t really move so we tried to experiment more with the colors and the rhythm of the lights when all three on them work together.

We six struggled a bit at first with the concept, other than recreating a dial, we also thought about using selective materials or creating shadows. I proposed using a box (as shown in the picture below) that covers the three lights which would then project colorful shadows in the entire room. Or it’s also possible to have multiple wind shield like boards that has different patterns hollowed out, and would create dynamic shadows if pulling using the boards horizontally.

But after giving some thought we figured that it’s probably easier to build a wooden stick for the dial instead of making boards or boxes. But we then encountered the problem of not being able to create shadows that actually moves like a real dial. We could only make the shadows stick out on certain angles depending on where the lights were put. We tired to put the lights on the IMA chairs and moving the chairs but it would then Beto high to create a clears shadow and the lines would also be a big problem if they were to move in circles. Someone in the group also proposed combing some reflective material but apparently despite the difficulty of finding a perfect angle and installing them they would also block the view of the dial, so we gave up on that idea as well. 

Concept/present wise, we design the lights into three phases. First phase is when three of the light  illuminate one by one, second phase two at a time, the third three at a time. We wanted to use the Fade effect but then did not incorporate it due to timing. Based on this three phase design, I came up with the concept of mimicking a clock that represents the pace of our daily lives or the university life in a semester. We start off a slow paced light that changes color rhythmically, like how everything is smooth, stressless and in order. But as time go on it starts to pick up its pace and we see more colors flashing quicker, like how we accumulate more tasks. The shadows which could also be interpreted as the hands of the clock, could also mean that as we get busier we need to calculate our time more carefully and precisely, so we start from only look at the hour hand to the minute hand then to even the second hand. In the end, when the light flashes its fastest speed it could also be interpreted as the chaos derived from too much stress and work lol. One of the group members also said the colors and represent different mood, such as red for passion, green for energy and blue for being chill.

Here are the videos of the project:

 

Here is the code:

// 9 variables for the DMX channels of light 1
byte light1Dimmer = 0;
byte light1Red = 0;
byte light1Green = 0;
byte light1Blue = 0;
byte light1ColorMacros = 0;
byte light1Strobe = 0;
byte light1AutoPrograms = 0;
byte light1ProgSpeedSoundSens = 0;
byte light1DimmerSpeedMode = 0;

// 9 variables for the DMX channels of light 2
byte light2Dimmer = 0;
byte light2Red = 0;
byte light2Green = 0;
byte light2Blue = 0;
byte light2ColorMacros = 0;
byte light2Strobe = 0;
byte light2AutoPrograms = 0;
byte light2ProgSpeedSoundSens = 0;
byte light2DimmerSpeedMode = 0;

// 9 variables for the DMX channels of light 3
byte light3Dimmer = 0;
byte light3Red = 0;
byte light3Green = 0;
byte light3Blue = 0;
byte light3ColorMacros = 0;
byte light3Strobe = 0;
byte light3AutoPrograms = 0;
byte light3ProgSpeedSoundSens = 0;
byte light3DimmerSpeedMode = 0;

bool stage3shown = false;



// include the DMX library
#include 

// set the maximum amount of channels we'll need
// each light will run 9 DMX channels so 27 is enough
#define DMX_MASTER_CHANNELS 27

// pin number to change read or write mode on the shield
#define RXEN_PIN 2

// configure a DMX master controller, the master controller
// will use the RXEN_PIN to control its write operation on the bus
DMX_Master dmx_master(DMX_MASTER_CHANNELS, RXEN_PIN);



void setup() {

  // Enable DMX master interface and start transmitting
  dmx_master.enable();

  // To be extra safe,
  // let's set channel 1 - 30 to off (0) to start with
  dmx_master.setChannelRange(1, 30, 0);
}

void loop() {

  if (!stage3shown) {
    delay(2000);
    stage1Red();
    writeDMXdata();
    delay(5000);

    stage1Green();
    writeDMXdata();
    delay(2500);

    stage1Blue();
    writeDMXdata();
    delay(2500);

    stage1Yellow();
    writeDMXdata();
    delay(2500);

    stage1Purple();
    writeDMXdata();
    delay(2500);


    stage1GreenBlue();
    writeDMXdata();
    delay(2500);


    light1Red = 255;
    light1Green = 153;
    light1Blue = 18;

    light2Red = 173;
    light2Green = 255;
    light2Blue = 47;

    light1Dimmer = 255;
    light2Dimmer = 255;
    light3Dimmer = 0;
    writeDMXdata();
    delay(5000);

    light2Red = 216;
    light2Green = 191;
    light2Blue = 216;

    light3Red = 176;
    light3Green = 224;
    light3Blue = 230;

    light1Dimmer = 0;
    light2Dimmer = 255;
    light3Dimmer = 255;
    writeDMXdata();
    delay(5000);

    light3Red = 255;
    light3Green = 182;
    light3Blue = 193;
    light1Red = 0;
    light1Green = 245;
    light1Blue = 255;
    light3Dimmer = 255;
    light1Dimmer = 255;

    light1Dimmer = 255;
    light2Dimmer = 0;
    light3Dimmer = 255;
    writeDMXdata();
    delay(5000);
    stage3shown = true;
  } else {
    stage3();
  }
}

void stage3() {

  light1Red = random(0, 255);
  light1Green = random(0, 255);
  light1Blue = random(0, 255);

  light2Red = random(0, 255);
  light2Green = random(0, 255);
  light2Blue = random(0, 255);

  light3Red = random(0, 255);
  light3Green = random(0, 255);
  light3Blue = random(0, 255);

  light1Dimmer = 255;
  light2Dimmer = 255;
  light3Dimmer = 255;

  writeDMXdata();
  delay(400);
}



//2nd period: 2 lights are turned on together

 
  delay(500);

//3rd period: 3 lights are turned on together, random color, speed++

  light1Red = random(0,255);
  light1Green = random(0,255);
  light1Blue = random(0,255);

  light2Red = random(0,255);
  light2Green = random(0,255);
  light2Blue = random(0,255);

  light3Red = random(0,255);
  light3Green = random(0,255);
  light3Blue = random(0,255);
  
  light1Dimmer += 2;
  light2Dimmer += 2;
  light3Dimmer += 2;


  light1Red = random(0,255);
  light1Green = random(0,255);
  light1Blue = random(0,255);

  light2Red = random(0,255);
  light2Green = random(0,255);
  light2Blue = random(0,255);

  light3Red = random(0,255);
  light3Green = random(0,255);
  light3Blue = random(0,255);
  
  light1Dimmer += 3;
  light2Dimmer += 3;
  light3Dimmer += 3;


  // write the DMX data to the lights
  // see the function declaration below
  writeDMXdata();

  delay(50);
  */
//}


void stage1Red() {
  light1Red = 255;
  light1Green = 0;
  light1Blue = 0;
  light2Red = 0;
  light2Green = 0;
  light2Blue = 0;
  light3Red = 0;
  light3Green = 0;
  light3Blue = 0;
  light1Dimmer = 255;
}

void stage1Green() {
  light1Red = 0;
  light1Green = 0;
  light1Blue = 0;
  light2Red = 0;
  light2Green = 255;
  light2Blue = 0;
  light3Red = 0;
  light3Green = 0;
  light3Blue = 0;
  light2Dimmer = 255;
}

void stage1Blue() {
  light1Red = 0;
  light1Green = 0;
  light1Blue = 0;

  light2Red = 0;
  light2Green = 0;
  light2Blue = 0;
  light3Red = 0;
  light3Green = 0;
  light3Blue = 255;

  light3Dimmer = 255;
}

void stage1Yellow() {
  light1Red = 255;
  light1Green = 255;
  light1Blue = 0;

  light2Red = 0;
  light2Green = 0;
  light2Blue = 0;
  light3Red = 0;
  light3Green = 0;
  light3Blue = 0;

  light1Dimmer = 255;
}

void stage1Purple() {
  light1Red = 0;
  light1Green = 0;
  light1Blue = 0;

  light2Red = 255;
  light2Green = 0;
  light2Blue = 255;
  light3Red = 0;
  light3Green = 0;
  light3Blue = 0;

  light2Dimmer = 255;
}


void stage1GreenBlue() {
  light1Red = 0;
  light1Green = 0;
  light1Blue = 0;

  light2Red = 0;
  light2Green = 0;
  light2Blue = 0;
  light3Red = 0;
  light3Green = 255;
  light3Blue = 255;

  light3Dimmer = 255;
}


void writeDMXdata() {
  // write to channel 1-9 for light1
  dmx_master.setChannelValue(1, light1Dimmer);  // 亮度
  dmx_master.setChannelValue(2, light1Red);
  dmx_master.setChannelValue(3, light1Green);
  dmx_master.setChannelValue(4, light1Blue);
  dmx_master.setChannelValue(5, light1ColorMacros);  // 光宏
  dmx_master.setChannelValue(6, light1Strobe);       //频闪
  dmx_master.setChannelValue(7, light1AutoPrograms);
  dmx_master.setChannelValue(8, light1ProgSpeedSoundSens);
  dmx_master.setChannelValue(9, light1DimmerSpeedMode);

  // write to channel 11-19 for light2
  dmx_master.setChannelValue(11, light2Dimmer);
  dmx_master.setChannelValue(12, light2Red);
  dmx_master.setChannelValue(13, light2Green);
  dmx_master.setChannelValue(14, light2Blue);
  dmx_master.setChannelValue(15, light2ColorMacros);
  dmx_master.setChannelValue(16, light2Strobe);
  dmx_master.setChannelValue(17, light2AutoPrograms);
  dmx_master.setChannelValue(18, light2ProgSpeedSoundSens);
  dmx_master.setChannelValue(19, light2DimmerSpeedMode);

  // write to channel 21-29 for light3
  dmx_master.setChannelValue(21, light3Dimmer);
  dmx_master.setChannelValue(22, light3Red);
  dmx_master.setChannelValue(23, light3Green);
  dmx_master.setChannelValue(24, light3Blue);
  dmx_master.setChannelValue(25, light3ColorMacros);
  dmx_master.setChannelValue(26, light3Strobe);
  dmx_master.setChannelValue(27, light3AutoPrograms);
  dmx_master.setChannelValue(28, light3ProgSpeedSoundSens);
  dmx_master.setChannelValue(29, light3DimmerSpeedMode);
} 

Leave a Reply

Your email address will not be published. Required fields are marked *