User login

Powered by Drupal, an open source content management system

Theory and Practice of Tangible User Interfaces

Lab 03: Sensing: Potentiometers

Submitted by xiaomeng on Wed, 09/24/2008 - 23:38

Assignment: Sensing: Potentiometers

Collaborators:

Description

Use three potentiometers to control each of the three LEDs' brightness.

For the extra point assignment, I used two pots to control all 3 LEDs. One pot controls all 3 LEDs' brightness and another controls all 3 LEDs' blinking rate.

 

Components Used

* 3 Light Emitting Diode (LED)-RGB
* 3 220 OHM resistor
* Wires
* Arduino board
* Breadboard
* 3 Potentiometers

 

Code-for 3 pots control:

/*
* Color Mixer:
*/

// 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);
}
}
}

Code-for 2 pots control

/*
* one pot dims, the other pot changes the blinking rate
* modification of the following
* http://www.arduino.cc/en/Tutorial/AnalogInput
*/
int pot1Pin = 0;   // select the input pin for the potentiometer 1
int pot2Pin = 1;   // select the input pin for the potentiometer 2
int pot1Val = 0;   // variable to store the value coming from pot 1
int pot2Val = 0;   // variable to store the value coming from pot 2
int led1Pin = 9;   // select the pin for the LED 1
int led2Pin = 11;  // select the pin for the LED 2
int led3Pin = 10;  // select the pin for the LED 3
void setup() {
pinMode(led1Pin, OUTPUT);  // declare the led1Pin as an OUTPUT
pinMode(led2Pin, OUTPUT);  // declare the led2Pin as an OUTPUT
pinMode(led3Pin, OUTPUT);  // declare the led2Pin as an OUTPUT
}
void loop() {
pot1Val = analogRead(pot1Pin);   // read the value from pot 1, between 0 - 1024, for dimming
pot2Val = analogRead(pot2Pin);   // read the value from pot 2, between 0 - 1024, for blinking
analogWrite(led1Pin, pot1Val/4); // dim LED to value from pot1
delay(pot1Val);                  // stop the program for some time, meaning, LED is on for this time
analogWrite(led2Pin, pot1Val/4); // dim LED to value from pot1
delay(pot1Val);                 
analogWrite(led3Pin, pot1Val/4);
delay(pot1Val);                 
analogWrite(led1Pin, 0);         // dim LED to completely dark (zero)
delay(pot2Val);                  // stop the program for some time, meaning, LED is OFF for this time
analogWrite(led2Pin, 0);         // dim LED to completely dark (zero)
delay(pot2Val);                  // stop the program for some time, meaning, LED is OFF for this time
analogWrite(led3Pin, 0);         // dim LED to completely dark (zero)
delay(pot2Val);                  // stop the program for some time, meaning, LED is OFF for this time
}