Assignment: Sensing: Potentiometers
Collaborators:
Assignment: Sensing: Potentiometers
Collaborators:
Assignment: Sensing: Potentiometers
Collaborators:
Assignment: Sensing: Potentiometers
Collaborators:
Description
I used the code provided to control the three LEDs with three Pots. Turning each Pot altered the brightness of the corresponding LED, resulting in a color mixer that produced a multitude of colors. For the optional part, I created a scheme where each Pot controlled the blinking of a LED. Turning the pot, in this case, altered the rate of blinking of the corresponding LED. The blinking progressively increased from slow to fast, and the was fastest when all the Pots had been fully turned. With background music, here we had some perfect homemade party lights!
Components Used
Arduino
Red, Blue and Green LEDs
Three Potentiometers
Resistors
Wires
Shot glass wrapped with Gauze and,
Wine glass wrapped in party tissue for diffusers
Code
Option 2: Color Mixer - 3 Pots for 3 LEDs (each pot controls brightness of RGB Hue / colors)
/*
* "Coffee-cup" Color Mixer:
* Code for mixing and reporting PWM-mediated color
* Assumes Arduino 0004 or higher, as it uses Serial.begin()-style communication
*
* Control 3 LEDs with 3 potentiometers
* If the LEDs are different colors, and are directed at diffusing surface (stuck in a
* a Ping-Pong ball, or placed in a paper coffee cup with a cut-out bottom and
* a white plastic lid), the colors will mix together.
*
* When you mix a color you like, stop adjusting the pots.
* The mix values that create that color will be reported via serial out.
*
* Standard colors for light mixing are Red, Green, and Blue, though you can mix
* with any three colors; Red + Blue + White would let you mix shades of red,
* blue, and purple (though no yellow, orange, green, or blue-green.)
*
* Put 220 Ohm resistors in line with pots, to prevent circuit from
* grounding out when the pots are at zero
*/
// Analog pin settings
int aIn = 0; // Potentiometers connected to analog pins 0, 1, and 2
int bIn = 1; // (Connect power to 5V and ground to analog ground)
int cIn = 2;
// Digital pin settings
int aOut = 9; // LEDs connected to digital pins 9, 10 and 11
int bOut = 10; // (Connect cathodes to digital ground)
int cOut = 11;
// Values
int aVal = 0; // Variables to store the input from the potentiometers
int bVal = 0;
int cVal = 0;
// Variables for comparing values between loops
int i = 0; // Loop counter
int wait = (1000); // Delay between most recent pot adjustment and output
int checkSum = 0; // Aggregate pot values
int prevCheckSum = 0;
int sens = 3; // Sensitivity theshold, to prevent small changes in
// pot values from triggering false reporting
// FLAGS
int PRINT = 1; // Set to 1 to output values
int DEBUG = 1; // Set to 1 to turn on debugging output
void setup()
{
pinMode(aOut, OUTPUT); // sets the digital pins as output
pinMode(bOut, OUTPUT);
pinMode(cOut, OUTPUT);
Serial.begin(9600); // Open serial communication for reporting
}
void loop()
{
i += 1; // Count loop
aVal = analogRead(aIn) / 4; // read input pins, convert to 0-255 scale
bVal = analogRead(bIn) / 4;
cVal = analogRead(cIn) / 4;
analogWrite(aOut, aVal); // Send new values to LEDs
analogWrite(bOut, bVal);
analogWrite(cOut, cVal);
if (i % wait == 0) // If enough time has passed...
{
checkSum = aVal+bVal+cVal; // ...add up the 3 values.
if ( abs(checkSum - prevCheckSum) > sens ) // If old and new values differ
// above sensitivity threshold
{
if (PRINT) // ...and if the PRINT flag is set...
{
Serial.print("A: "); // ...then print the values.
Serial.print(aVal);
Serial.print("\t");
Serial.print("B: ");
Serial.print(bVal);
Serial.print("\t");
Serial.print("C: ");
Serial.println(cVal);
PRINT = 0;
}
}
else
{
PRINT = 1; // Re-set the flag
}
prevCheckSum = checkSum; // Update the values
if (DEBUG) // If we want debugging output as well...
{
Serial.print(checkSum);
Serial.print("<=>");
Serial.print(prevCheckSum);
Serial.print("\tPrint: ");
Serial.println(PRINT);
}
}
}
Optional (Party Pot)
/* Created by David Cuartielles
Modified 16 Jun 2009
By Tom Igoe
http://arduino.cc/en/Tutorial/AnalogInput
Modified 20 September 2009
By Janani Vasudev
Control blinking rates of 3 LEDs with 3 Pots.
*/
//Analog Pin Settings
int aIn = 0; // Potentiometers connected to analog pins 0, 1, and 2
int bIn = 1; // (Connect power to 5V and ground to analog ground)
int cIn = 2;
// Digital pin settings
int aOut = 9; // LEDs connected to digital pins 9, 10 and 11
int bOut = 10; // (Connect cathodes to digital ground)
int cOut = 11;
// Values
int aVal = 0; // Variables to store the input from the potentiometers
int bVal = 0;
int cVal = 0;
void setup() {
pinMode(aOut, OUTPUT); // sets the digital pins as output
pinMode(bOut, OUTPUT);
pinMode(cOut, OUTPUT);
Serial.begin(9600); // Open serial communication for reporting
}
void loop() {
aVal = analogRead(aIn); // read the value from the sensor:
bVal = analogRead(bIn); // read the value from the sensor:
cVal = analogRead(cIn); // read the value from the sensor:
digitalWrite(aOut, HIGH); // turn the bOut on
digitalWrite(bOut, HIGH); // turn the bOut on
digitalWrite(cOut, HIGH); // turn the cOut on
delay(aVal); // stop the program for <aVal> milliseconds:
digitalWrite(aOut, LOW); // turn the bOut off:
delay(aVal); // stop the program for for <aVal> milliseconds:
delay(bVal); // stop the program for <bVal> milliseconds:
digitalWrite(bOut, LOW); // turn the bOut off:
delay(bVal); // stop the program for for <bVal> milliseconds:
delay(cVal); // stop the program for <cVal> milliseconds:
digitalWrite(cOut, LOW); // turn the cOut off:
delay(cVal); // stop the program for for <cVal> milliseconds:
}
Video links on YouTube
Party Pot with Wine Glass 1 - http://www.youtube.com/watch?v=zQ1d1OfoOE8
Party Pot with Shot Glass - http://www.youtube.com/watch?v=OEqncqVblH4
Party Pot with Wine Glass 2 - http://www.youtube.com/watch?v=olnUmEBua7g