Color Mixer with an IR Sensor

What a disaster! I’ve ruined one an IR sensor, and only just about managed to get this second one in action. I haven’t changed my code (yet), so I’m still using the code from the Arduino site. The code can been seen below.

http://vimeo.com/moogaloop.swf?clip_id=1906225&server=vimeo.com&show_title=1&show_byline=0&show_portrait=0&color=00ADEF&fullscreen=1
Color Mixer with an IR Sensor and a tri-color LED from Joana Kelly on Vimeo.

Here are some fine photos of the thing in action.
The Color Mixer

Img_5079

This is what my color mixer looks like from the top. The black rectangle on the right is my IR sensor. I’d like to make a nicer case for this soon.

The Innards

Img_5083

Here are the innards of my color mixer. It’s kind of a mess.

The Disaster

Img_5086

Through the simultaneous use of solder, wrapping wire, and hot glue, I finally got this working, for the most part. I do not recommend this approach. Jumper wires are definitely the way to go.

Here’s the code:
// INPUT: Potentiometer should be connected to 5V and GND
int potPin = 3; // Potentiometer output connected to analog pin 3
int potVal = 0; // Variable to store the input from the potentiometer

// OUTPUT: Use digital pins 9-11, the Pulse-width Modulation (PWM) pins
// LED’s cathodes should be connected to digital GND
int redPin = 9;   // Red LED,   connected to digital pin 9
int grnPin = 10;  // Green LED, connected to digital pin 10
int bluPin = 11;  // Blue LED,  connected to digital pin 11

// Program variables
int redVal = 0;   // Variables to store the values to send to the pins
int grnVal = 0;
int bluVal = 0;

int DEBUG = 1;          // Set to 1 to turn on debugging output

void setup()
{
  pinMode(redPin, OUTPUT);   // sets the pins as output
  pinMode(grnPin, OUTPUT);   
  pinMode(bluPin, OUTPUT);

  if (DEBUG) {           // If we want to see the pin values for debugging…
    Serial.begin(9600);  // …set up the serial ouput in 0004 format
  }
}

// Main program
void loop()
{
  potVal = analogRead(potPin);   // read the potentiometer value at the input pin

  if (potVal < 341)  // Lowest third of the potentiometer’s range (0-340)
  {                  
    potVal = (potVal * 3) / 4; // Normalize to 0-255

    redVal = 256 – potVal;  // Red from full to off
    grnVal = potVal;        // Green from off to full
    bluVal = 1;             // Blue off
  }
  else if (potVal < 682) // Middle third of potentiometer’s range (341-681)
  {
    potVal = ( (potVal-341) * 3) / 4; // Normalize to 0-255

    redVal = 1;            // Red off
    grnVal = 256 – potVal; // Green from full to off
    bluVal = potVal;       // Blue from off to full
  }
  else  // Upper third of potentiometer"s range (682-1023)
  {
    potVal = ( (potVal-683) * 3) / 4; // Normalize to 0-255

    redVal = potVal;       // Red from off to full
    grnVal = 1;            // Green off
    bluVal = 256 – potVal; // Blue from full to off
  }
  analogWrite(redPin, redVal);   // Write values to LED pins
  analogWrite(grnPin, grnVal);
  analogWrite(bluPin, bluVal); 

  if (DEBUG) { // If we want to read the output
    DEBUG += 1;      // Increment the DEBUG counter
    if (DEBUG > 100) // Print every hundred loops
    {
      DEBUG = 1;     // Reset the counter
                             // Serial output using 0004-style functions
      Serial.print("R:");    // Indicate that output is red value
      Serial.print(redVal);  // Print red value
      Serial.print("\t");    // Print a tab
      Serial.print("G:");    // Repeat for grn and blu…
      Serial.print(grnVal);
      Serial.print("\t");   
      Serial.print("B:");   
      Serial.println(bluVal); // println, to end with a carriage return
      Serial.print("\t");   
      Serial.print("P:");   
      Serial.println(potVal);
    }
  }
}