Arduino Hacking – RGB LED and Force Pressure Sensor
Here's a circuit for changing the color of an RGB LED based on the amount of pressure applied to a force pressure sensor.
Materials:
- Arduino Board (I used a Duemilanove)
- Force Sensor Kit
- RGB LED
- 100Ω Resistor
Arduino Code:
/*
* This script does the following:
* 1. Gets analog sensor input from a touch sensor
* 2. Processes sensor data in a four state machine
* 3. Adjusts an RGB LED color based on toouch sensor pressure using PWM
*
* Written by: Jacek Spiewla (jacekspi@umich.edu)
* Date Created: 2/23/2009
* Date Modified: 3/17/2009
*/
//Setup all pins
int sensPin = 2; // set the touch sensor (analog) input pin on Arduino
int redPin = 11; // set the PWM (analog) output pin on Arduino controlling the red anode
int grnPin = 9; // set the PWM (analog) output pin on Arduino controlling the green anode
int bluPin = 10; // set the PWM (analog) output pin on Arduino controlling the blue anode
//Setup all initial values
int val = 0; // initial value for touch sensor input
int state = 1; // initial machine state
//Initialize variables
int redVal; // pulse width variable for red anode
int grnVal; // pulse width variable for green anode
int bluVal; // pulse width variable for blue anode
void setup() {
pinMode(redPin, OUTPUT); // set the LED pins as output
pinMode(grnPin, OUTPUT);
pinMode(bluPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
val = analogRead(sensPin); // read touch sensor values
Serial.println(val);
if (state == 1) {sleep();} // turn off LED
else if (state == 2) {redIn();} // fade in red color
else if (state == 3) {grnIn();} // fade in green color
else if (state == 4) {bluIn();} // fade in blue color
}
void sleep() {
alloff(); // turn off LED
if (val > 20 && val <= 500) {state = 2;} // test for low pressure
if (val > 500 && val <= 850) {state = 3;} // test for medium pressure
if (val > 850) {state = 4;} // test for high pressure
}
void redIn() { // function to fade in red color and transition to other states
grnVal = 0;
analogWrite(grnPin, grnVal); // turn off green in case the last state was green
if (redVal == 255) { // if red is at maximum, continue to light it up
analogWrite(redPin, redVal);
} else { // else fade in the red color
redVal ++;
analogWrite(redPin, redVal);
}
if (val < 20) {state = 1;} // turn off the LED if no pressure detected
if (val > 500) {state = 3;} // fade in green if pressure has increased
}
void grnIn() { // function to fade in green color and transition to other states
redVal = 0;
bluVal = 0;
analogWrite(redPin, redVal); // turn off red in case the last state was blue
analogWrite(bluPin, bluVal); // turn off blue in case the last state was blue
if (grnVal == 255) { // if green is at maximum, continue to light it up
analogWrite(grnPin, grnVal);
} else { // else fade in the green color
grnVal ++;
analogWrite(grnPin, grnVal);
}
if (val <= 500) {state = 2;} // fade in red if pressure has decrease
if (val >= 850) {state = 4;} // fade in blue if pressure has increased
}
void bluIn() { // function to fade in blue color and transition to other states
grnVal = 0;
analogWrite(grnPin, grnVal); // turn off green in case the last state was green
if (bluVal == 255) { // if blue is at maximum, continue to light it up
analogWrite(bluPin, bluVal);
} else { // else fade in the blue color
bluVal ++;
analogWrite(bluPin, bluVal);
}
if (val <= 850) {state = 3;} // fade in green if pressure has decreased
}
void alloff() { // function to turn off the LED
redVal = 0;
grnVal = 0;
bluVal = 0;
analogWrite(redPin, redVal);
analogWrite(grnPin, grnVal);
analogWrite(bluPin, bluVal);
}
Dynamic List Design Pattern
I came across this example of a dynamically-changing list of most popular offers on Borders Rewards Perks. It simply uses a color gradient to communicate to the user how "hot" the offer is. We'll probably be seeing design pattern this on more online stores in the near future. Caution: if you're going to use this on your page, make sure the entire gradient of colors have enough contrast against the background.

Dynamic list with color gradient
Tag clouds as personas
Adding metadata ("tags") and visualizing them in "tag clouds" can be thought of as a process that self-organizes information over time. Users supply the classification keywords, and over time, patterns emerge. Could user-generated tag clouds be used as personality assessment tools to help guidance counselors or employment offices place Internet users in a specific job or academic field?

Could you use her tag cloud to help her find employment?


