User login

Powered by Drupal, an open source content management system

Theory and Practice of Tangible User Interfaces

Lab3

Submitted by davida on Tue, 09/23/2008 - 22:22

Assignment: Sensing: Potentiometers

Collaborators:

 

<!--[if gte mso 10]> <! /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-qformat:yes; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin-top:0in; mso-para-margin-right:0in; mso-para-margin-bottom:10.0pt; mso-para-margin-left:0in; line-height:115%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin;} --> <!--[endif]-->

Description:

A project that uses the Arduino board and programming environment to demonstrate how to make three separate LEDs light up according to a programmable interval.

Components List:

  • x3 Light Emitting Diodes (LED)
  • x3 Resistor (220 Ohm)
  • Breadboard
  • Arduino board
  • Laptop running Arduino 11
  • Power came from computer via USB Cable
  • Two rubber bands (to secure boards together)
  • Wires
  • solder (to attach wires to the potentiometers)
  • X3 Potentiometers

Notes:

I used the three hands to control the pots.

Acknowledgments:

The potentiometers were tangled but working. I’d like to arrange them better next time.

Code used in this Assignment:

 

/*
* "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 = 4;    // Potentiometers connected to analog pins 0, 1, and 2
int bIn = 3;    //   (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);
}
}
}