Lab 1 – DigiSketch

Group 10:

  • Junjun Chen (junjunc),
  • Igor Zabukovec (iz),
  •  (av),
  • Osman Khwaja (okhwaja).

Description: 

This DigiSketch is intend to do renew the famous Etch-a-Sketch, providing a new way to write on the computer. The principle is quite simple : use the two potentiometers to draw lines of circles and the photo-sensor to change the color of them. You can basically write and draw whatever you want. Start by writing letters, basic forms, and continue by increasing the complexity of your drawings and to test how skillful you are, try to draw a circle. If the user is adventurous, the Processing program can be modified in order to use a different color palette, a different sized canvas, or a different pen shape.

Our system overall achieved its goal. However, the calibration of the photocell could be improved, in order to allow the user more precise control over the color. Perhaps a different sensor could be used for this purpose. To make the system more sophisticated, we could have three different sensors controlling red/green/blue, rather than a single sensor controlling the shade of one color, as we have now. In general, our system proves how easy it is to replicate the Etch-a-Sketch concept; the possibilities for refinement are vast.

Pho­tos of sketches:

A system which allows you to draw in Processing using two rotary potentiometers to control  position, and using a photocell to control color.

photo2

A system which allows you to control the playback speed of a sound file by flexing your finger.

photo

An LED night-light system: turns on the night light when it is dark.

photo3

Sto­ry­board: photo

DigiSketch in Action:

The Arduino and the circuit:

photo7

An example of different colors that can be obtained by varying input to the photocell:

photo6

An attempt at drawing a circle:

photo5

List of parts

  • Arduino, wires, USB cord, breadboard
  • 10 k ohm resistor
  • Photocell
  • 2 rotary pots

Instruc­tions for Recreation

Connect a photocell to the bread board, with a 10kOhm pull down resistor from one leg of the photocell the ground. Connect the other leg to 5V. Connect the point between the photocell and the resistor to analog pin on the Arduino (we used A0). Connect a rotary potentiometer the the breadboard so that one other pin is connected to 5V and the other outer pin is connected to ground. Connect the middle pin to another analog pin (A1). Do the same for the other rotary pot to connect it to A2. Use the attached source code for Processing and Arduino – the Processing program receives messages from Arduino in order to draw on the screen.

Circuit diagram:

photo4

Arduino Source Code:

/* COS 436 - Lab 1 - Group 10 */
/* A Processing drawing system using two rotary potentiometers
   and a photocell. */
/* The Arduino program communicates with Processing with Serial port. */

int photoPin = 0; // the photocell is connected to A0
int pot1Pin = 1; // the 1st pot is connected to A1
int pot2Pin = 2; // the 2nd pot is connected to A2

int photoReading; // the analog reading from the photocell
int pot1Reading; // the analog reading from pot1
int pot2Reading; // the analog reading from pot2

// minimum and maximum values for calibration of photocell
int photoMin = 0;
int photoMax = 0;

void setup(void) {

  Serial.begin(9600);

  // Calibrate photocell during the first five seconds
  while (millis() < 5000) {     // Read in value from photocell     photoReading = analogRead(photoPin);     // Record the maximum sensor value     if (photoReading > photoMax) {
      photoMax = photoReading;
    }
    // Record the minimum sensor value
    if (photoReading < photoMin) {       photoMin = photoReading;     }   }      // Establish contact with Processing   establishContact(); } void loop(void) {   // Only send messages when there is a connection   if (Serial.available() > 0) {
    // Read input from Arduino's analog pins
    photoReading = analogRead(photoPin);
    pot1Reading = analogRead(pot1Pin);
    pot2Reading = analogRead(pot2Pin);

    // Map sensor value to desired range
    photoReading = map(photoReading, photoMin, photoMax, 0, 255);
    photoReading = constrain(photoReading, 0, 255);

    // Send sensor reading as comma separated values.
    Serial.print(photoReading);
    Serial.print(",");
    Serial.print(pot1Reading);
    Serial.print(",");
    Serial.println(pot2Reading);
  }
}

// Establish contact with processing.
void establishContact() {
  // Send an initial string until connection made
  while (Serial.available() <= 0) {
    Serial.println("0,0,0");  
    delay(300);
  }
}
Processing Source Code:
/* COS 436 - Lab 1 - Group 10 */
/* The Processing program recieves input from sensors which the 
   Arduino sends by serial port. */

import processing.serial.* ;

/* Serial port for message communication. */
Serial port;

/* Drawing parameters */
float ypos;
float xpos;
float fgcolor;

void setup() {
  size(500, 500); /* Canvas dimensions */
  background(255); /* White background. */

  println("Available serial ports:");
  println(Serial.list());

  port = new Serial(this, Serial.list()[0], 9600);  

  port.bufferUntil('\n'); /* Read in one line at a time. */
}

void draw() {  
  fill(fgcolor, fgcolor, fgcolor); /* Set color. */
  ellipse(xpos, ypos, 20, 20); /* Draw circle with a center determined by pots. */
}

void serialEvent(Serial port) {
  String myString = port.readStringUntil('\n'); /* Read in a line. */
  myString = trim(myString); /* Remove leading / tailing whitespace. */

  int sensors[] = int(split(myString, ',')); /* Split CSV input into int array. */

  // Print out sensor values:
  for (int sensorNum = 0; sensorNum < sensors.length; sensorNum++) {     print("Sensor " + sensorNum + ": " + sensors[sensorNum] + "\t");   }   println();      if (sensors.length > 1) { /* else input is incorrectly formatted */
    fgcolor = 255 - sensors[0]; /* Set color of circles */
    xpos = map(sensors[1], 0, 1023, 0, width); /* Set x-position of circle center. */
    ypos = map(sensors[2], 0, 1023, 0, height); /* Set y-position of circle center. */
  }
  port.write("A"); // Send byte to get more data from Arduino program.
}

Do You Even Lift?

Team Name:

Do You Even Lift?

Group Members:

Adam Suczewski, Andrew Callahan, Matt Drabick, Peter Grabowski

Brainstorming:

  1. Live music aid — Music device that changes based on movement/attitude of the crowd. Uses Kinect to sense motion, adjusts lights/sound/fog accordingly.
  2. Skateboard odometer/speeder to monitor travel data for the curious skateboarder. Communicates to watch display, or alternatively to LCD display on board.
  3. Device to display airplane information (flight number, etc) by pointing to an airplane.
  4. Gesture based interface for surgeons in OR — they can’t touch anything during the operation for risk of becoming not sterile, so a hands free interface for browsing patient records would be useful — also useful for other professions like butchers, potters
  5. Emergency condom delivery system — when you’re in an intimate situation where it may be inappropriate to get up and leave, send out a (private message) to a trusted contact that you need a special delivery.
  6. Display/Orb that indicates what club to go to based on where your friends are going to. One dial (with marks for each of the clubs) that integrates GPS data from friends and points to the club with the most friends
  7. There are frequently used commands in photoshop (any program, really). Create a pedal based interface to map to these frequently used commands, to allow users to enter input with their feet as well and increase throughput
  8. Secret knock or password to open door without key or prox. – motor to pull down on down handle
  9. Arduino in a house hears fire alarm and shuts off the gas line
  10. Full, new and improved smoke detector. Chemical sensor/light trap detects smoke. Alerts security company, calls your phone, takes pictures inside for insurance company
  11. Kinect interface that allows you to make gestures to change the channel, up the volume, turn it on/off. Voice recognition for Netflix commands, etc.
  12. Hardware interface for convenient ordering from seamless – does online ordering for a particular. One button for your favorite chicken parm, one button for sushi, etc.
    1. We could use mechanical turk to map orders to buttons so that the user doesn’t have to dig through the API – he can just say “2 slices pepperoni pizza from Dominos” and an anon does the hard work for 10 cents
  13. Automated shocking when user bites nails to help break bad habit. Could be kinect based, although that might be overkill. May be too hard to differentiate between “hand near face” and “biting nails”
  14. Device to wear while running that vibrates on your left or right side to indicate a turn coming up. Useful for novel routes — think about downloading other’s routes from a site like runkeeper and following them for the first time.
  15. Kinect/webcam at the gym watches you lift and identifies problems in your form
  16. Monitor lifting technique using force sensors in hands and feet to check if force is equal. Also use wrist watch with sensors on each leg/arm. Choose which exercise you are about to perform and get feedback
    1. Could integrate with Fitocracy or other account. Keep track of your progress
  17. Weight lifting equipment with sensors built in to check the balance of the bar. Sensors detect balance and movement of the bar itself to give feedback.
  18. Previous points assume you already know proper form and are looking to improve it. Kinect based system could teach you step by step, overlaying a video of your exercise with what a correct exercise would look like. Also uses voice cues.
  19. Help runners with running form using a treadmilll with force sensors to detect foot striking. Display foot strike data on a monitor to help runner’s technique.
  20. Detect when runners have bad form when tired and using sensors on legs and arms that can detect when they pass each other.
  21. Arduino detects when it’s too bright/dark in room and adjusts shades on windows. Useful for classrooms
  22. Arduino raises/lowers blinds to act as an alarm clock
  23. Arduino works as a physical thermostat by opening windows when the room is too hot and closing them when too cold. Could also turn fan on and off.
  24. Combine above three ideas for room maintenance system. Potential for cross communication — for example, it might be ok for the room to be dark and cold if you’re sleeping, but not during the day.
  25. System that photographs people entering lecture, builds real-time attendance list, and can select a random attendee to answer a question. Solves problem of tracking attendance (students can sign in other students on sign in sheet), as well as wanting to pick a random student to answer a question
  26. When you’re low on some household supply, scan your barcode on device, and it gets added to an online shopping list/shopping cart, such as fresh direct or amazon.
  27. “Smart Container.” Have plastic containers that can be filled with water, flour, etc. that automatically adds that ingredient to your shopping list when the container is less than a quarter full.
  28. Integrate the above two into automated kitchen. Containers and to-do list converse, to answer more complicated questions like “Do I have what I need to make cookies tonight?” or “What do I need to pick up at the store if I want to make chicken parm tonight?”
  29. Arduino locks your door while you’re busy programming (while you have an IDE open or while you’re typing code etc). Or more realistically, illuminates a “Do no disturb” light
  30. Single button to open IDE, enable warning light, and initialize brew of favorite coffee. Enter “programming mode”
  31. Arduino turns off toaster when toast is done. Can be done with a light sensor that can detect the change in color as it browns, or a light trap/smoke sensor (depending on how dark you like your toast.
  32. Arduino listens while you make popcorn and turns off microwave when popcorn is done
  33. One better – Arduino uses netflix API to detect that you’re starting a movie, and makes popcorn for you.
  34. Automated smoothie making with arduino. Preset options to streamline process.
  35. Light controls for cyclists — button to signal for left right turns, as well as breaking lights
  36. Arduino measures out ingredients for you in the kitchen — you enter in a recipe, and it dispenses the correct amount of flour, sugar, etc for you.
  37. “Weasley clock” — location of various family members on dial, if they’re in predefined locations
  38. Location sensors on valuable items, with dial indicator of where they are in the house
  39. Device analyzes tempo of sex and plays appropriate music
  40. Arduino resets your WRT-54G (router). Have an infrared or radio remote so you can do it from the comfort of your couch upstairs

a. Also keeps from you from having to go under the desk or somewhere inconvenient.

  1. Device adjusts oven temperature based on meat thermometer and maybe color of steak
  2. Arduino power control for dishwasher. Monitors power grid data, and turns on dishwasher when power cost is lowest (i.e., middle of the night). Reduces peak (max) power usage, and more evenly distributes power usage over the course of the day.
  3. An Arduino based system that works as an air freshener that detects bad smells and activates a burst of delicious smell. Could be useful for public restrooms, and potentially more efficient than timer based systems.
  4. In a car, Arduino continually monitors the air coming through vents. If it detects bad air quality it rapidly shuts the vents. It could check for skunk or nasty north Jersey refineries or smelly truck brakes.
  5. Arduino brews tea for you by removing the teabag at the appropriate time. Useful if you need to brew many bags of tea at once, with specific brew times (consider Teavana or Infini-tea)
  6. Bartenders place bottles on LED stand. When they go to make a drink, the appropriate bottles light up. Decreases time required to find the bottles, increasing bar’s throughput. Especially good for new bartenders. Also looks pretty cool.
  7. Above could hook-in with DJ system, for song-themed drinks. For example, when Margaritaville comes on, you could offer a half price special on margaritas for the duration of the song. “Flash sale” mentality would potentially increase drink sales. Bartending system could flash or otherwise indicate ahead of time, so the bartender could prepare for the imminent rush.
  8. Place microphones around room or other venue to sense volume. If speaker is too loud, lower volume levels. If speaker is too soft, arduino aims microphone to maximize sound captured (or raises volume levels). Could use tracking system to make sure microphone is pointed optimally at face
  9. Glove for conductor of an orchestra. They can’t move or gesture while conducting, but may need to communicate during the performance with audio/house staff or parts of the orchestra. Glove has buttons to send predefined messages, or alternatively has a one handed keyboard system
  10. Washing machine status light (for the living room, kitchen, etc.). Make it easy to see if your permanent press load is finished, so it doesn’t wrinkle while sitting in the drier.

Sketches:

IMG_2095

1) Live music aid
2) Skateboard odometer/speedometer watch
4) Gesture interface for messy hands
7) Computer foot pedals for commonly used commands.

 

IMG_2100

11) Gestures to change tv settings
36) Auto measuring of kitchen indredients
41) Oven meat temperature adjuster

IMG_2098

Clockwise from top left:
29) Door lock when busy
32) Popcorn / Toast monitor
41) Auto adjust thermostat
45) Auto tea-brewing
46) LED bartender helper
Bike brake lights/ turn signals

IMG_2097

21) Window shade adjuster
25) Camera for attendance
26) Household barcode scanner
27) Smart containers

IMG_2096

Clockwise from top left:
6) Friend finding orb
9) Gas line cutoff in fire
13) Bad habit/nail biting breaker
20) Running form detector
15) Lifting technique montior
12) Convienient food ordering
8) Secret knock to get in room

IMG_2099

17) weight sensors in lifting equipment to check technique
19) Treadmill foot strike detector
42) Run appliances (dish washer) at low times on power grid.

Short description:

Our first choice is a kinect-based trainer for the weight room. This device would use a camera and body-tracking APIs to identify problems in form and point out fixes. It could also provide a full tutorial on how to do the lift, useful for a complete novice. We like the idea because:

  • We can approach the problem from a few different areas
  • Kinect APIs should make it easy to watch the lifter and identify problems
  • The advice would be very useful to the end-user, as it would be a very inexpensive (free, probably) way to check your form and avoid mistakes that could cause injury
  • Commercial gyms are always looking to buy the latest gimmicky things


If we can’t have a kinect, our second choice is to try using a standard webcam-based system to the same effect, or to just go and spend all of our budget on another kinect.

If none of the above pans out, another project we are interested in is an Arduino-based window thermostat, ideal for dorm rooms. The device could open and shut the windows when the room is too hot or cold, and could roll up the shades in the morning when it’s time to wake up. We think this could accomplished pretty efficiently and would be useful for your typical lazy college student. It has room for extra goals in the form of learning and adapting to the user’s patterns.

Full Description:

Target User Group – The system would aimed primarily at novice weightlifters. The system could start from scratch, assuming no user knowledge of the lift, and teach it in stages. The system’s ability to identify subtle problems in form could be useful for trainees of all skill levels, though, as some common problems in form are very tricky to notice on your own (e.g. not having the back in the right spot on the back in a squat, or allowing the lumbar to round in a deadlift).

Problem Description & Context – We are looking to solve the problem of inexperienced weightlifters doing lifts inefficiently or dangerously by compromising their form. This solution could offer guidance on how to correct these problems, as well as more general advice on routines and workout programming. We envision addressing this in the weightroom, right where the user does his/her lifts. Users will have varying experience levels, and we don’t want to interrupt experienced lifters who would rather not be annoyed. Some users might have different or mis-concieved opinions on how a lift should be done, and might choose to ignore some or all of the advice given. Some users might have friends or (human) trainers with them to help out.

Technology Platform – We imagine this working with a Windows PC (probably one of our laptops initially) hooked up to a Kinect. This gives us body-tracking APIs that will make it much easier to identify what the user is doing. Unless these saturate the gym, they could be placed on something like a cart with wheels, so that it can monitor different exercises or from different angles. If the idea takes off, the technology could be incorporated directly into exercise equipment like squat racks.

More Detailed Design Sketches:

IMG_2102

-Using a kinect, monitor lifting technique and give the user feedback
-System can evaluate technique and also give instructions to user
-Can be built in to lifting equipment or implemented separtately

IMG_2101

-User will be able to select from different lifts they want to perform.
-Visual and auditory display will give feedback (“Good Job!”, “Keep Arms Even”…) as well as act as the interface for selecting lifts or receiving instruction.
-Monitor/Audio can show “ideal” lifts teach user.

IMG_2103

-Kinect watches technique.
-Forces sensors check balance/evenness

 

Light DJ

Light DJ
Ryan Soussan, Bereket Abraham, Lauren Berdick, Andrew Ferg

Description
We used Processing and the Arduino to map a color wheel to the multi-color LED. On the computer screen, Processing displayed 3 overlapping circles, which were red, green, and blue. The mouse’s distance from each circle’s center corresponds to the intensity of that color. We then send those values to the Arduino and use them to set the brightness of each LED color. The only problem we encountered was the mismatch between the RGB mixing from Processing’s color values and the actual mixing of red, green, and blue light. When the LED mixes all 3 colors at equal intensities, it creates white light; however, mixing red, green, and blue in Processing creates a dark black-brown, creating a discrepancy between the GUI and the actual LED output.

Parts
1 computer (to run Processing and Arduino)
1 Arduino Uno microcontroller
1 multi-color LED
4 jumper wires
3 330 ohm resistors
1 small breadboard
1 piece of wax paper to diffuse the LED

Instructions

2 of our design sketches:

LightDJ3LightDJ4
Install Arduino and connect the board to you computer. Use the Blink and Dimmer tutorials to make the LED turn on. Remember to include a resistor for each pin. Use three PWM pins (~) so that you can modulate the brightness of the LED (these let you mimic an analog signal using a digital output). Test the different ends in order to match each pin to a certain color, and then encase the LED and mini-breadboard in wax paper to diffuse the light.

Front and back views of our little contraption:

LightDJ

LightDJ2

Now go to Processing and make your GUI. We represented the color wheel with 3 circles in a triangle (go to the color tutorial at processing.org). Make the circles slightly transparent so that they can overlap and mix. We then mapped the distance from each circle to the intensity of that particular color.

Our Processing GUI:

LightDJ5

The last step is to send the Processing color values to the Arduino using serial communications. Convert the color values calculated by Processing into bytes, to ease serial communications, and have the Arduino read the bytes one at a time, and set them to the corresponding color values. (For debugging, it may be useful to have the Arduino print the RGB values back to the serial port)

Source Code

Arduino:
#define RED 6
#define GREEN 10
#define BLUE 3

int rByte = 0;
int gByte = 0;
int bByte = 0;

void setup() {
pinMode(RED, OUTPUT);
pinMode(GREEN, OUTPUT);
pinMode(BLUE, OUTPUT);
Serial.begin(9600);
}

void loop() {

while (Serial.available() < 3) {};

// if there are any serial bytes available to read
if (Serial.available() > 0) {
// then read the 3 bytes, sent in order R,G,B
rByte = Serial.read();
gByte = Serial.read();
bByte = Serial.read();
}

// write the RGB values to the LED outputs
analogWrite(RED, rByte);
analogWrite(GREEN, gByte);
analogWrite(BLUE, bByte);

//Serial.write(rByte);
//Serial.write(gByte);
//Serial.write(bByte);
}

Processing:
import processing.serial.*;

int r = 390;
float rr = 0;
float gg = 0;
float bb = 0;
int b1,b2,b3 = 0;

Serial port;

void setup_port() {
port = new Serial(this, Serial.list()[0], 9600);
}

void setup() {
size(600, 600);
colorMode(RGB, 255);
noStroke();

setup_port();
}

void draw() {
background(255);
//blue circle
fill(0, 0, 255, 255);
ellipse(300, 200, r, r);
//green circle
fill(0, 255, 0, 150);
ellipse(200, 400, r, r);
//red circle
fill(255, 0, 0, 150);
ellipse(400, 400, r, r);

rr = sqrt((400-mouseX)*(400-mouseX) + (400-mouseY)*(400-mouseY));
gg = sqrt((200-mouseX)*(200-mouseX) + (400-mouseY)*(400-mouseY));
bb = sqrt((300-mouseX)*(300-mouseX) + (200-mouseY)*(200-mouseY));

rr = 255 – rr;
gg = 255 – gg;
bb = 255 – bb;

if (rr < 0)
rr = 0;
//  else if (rr < r)
//    rr = 255;
if (gg < 0)
gg = 0;
//  else if (gg < r)
//    gg = 255;
if (bb < 0)
bb = 0;
//  else if (bb < r)
//    bb = 255;

fill(rr, gg, bb, 255);
ellipse(0, 0, r, r);

b1 = (int)rr;
b2 = (int)gg;
b3 = (int)bb;

byte[] rgb = {(byte) rr, (byte)gg, (byte)bb};

port.write(rgb);

println(“Sending:”);
println(b1);
println(b2);
println(b3);

if (port.available()  > 0) {
println(“Reading: “);
println(port.read());
println(port.read());
println(port.read());
}
delay(5);
}

Team GARP – Project 1

Team Members

Gene Merewether

Alice Fuller

Rodrigo Menezes

Phil Oasis

Brainstorming

  1. Device for determining friends’ drunkenness by making them perform motor tasks and gauging their responsiveness
    1. decreased respiratory rate – breath sensor
    2. loss of balance – stand on one foot, sense movement of person holding it
    3. slurred speech – record speech….
    4. depressed pulse –  test pulse
    5. erratic behavior – checklist of irrational behavior friends can check off
    6. loss of fine motor control – similar to baby toy of putting shapes into the correct locations, the move the sensor along the wire without touching it, simple game
  2. Baby toy to teach shapes with different shaped (polygon etc) blocks and appropriate holes for the blocks that recognize them and light up correct parts
  3. LED strip from “cold” (blue) to “hot” (red) that senses proximity to a tagged object and displays appropriate colors, to help make finding your keys fun
    1. https://docs.google.com/file/d/0B4_S-8qAp4jyc3dZb2RQZjh1RVU/edit?usp=sharing
  4. Transparent DJ table that allows the audience to see the DJ’s work. Ordinarily, the audience does not see the work a DJ puts in.
  5. Keyboard that lights up when you are supposed to press a key. Preferably, something that can rollover an existing keyboard with a nifty interface to allow you to choose songs to play. Some implementations of this exist, but they suck.
  6. a device than can test the security of rock or ice before stepping on it.
  7. Device that allows you to tilt and turn your hands to control a remote control airplane or Quadcopter. Less scary/more natural for kids than a remote control
    1. https://docs.google.com/file/d/0B4_S-8qAp4jyWDFzTmZNUk93SUE/edit?usp=sharing
  8. An insulin needle with instruction that project or display before/during use.
    1. https://docs.google.com/file/d/0B4_S-8qAp4jyODc3Tk52ZjM4Szg/edit?usp=sharing
  9. A ring that allows you to control your iPhone or mobile phone. Has a digital display that allows you to see your current song or text so you don’t have to pull it out. Essentially, the Pebble watch, but as a ring.
  10. massage display that projects lights onto the persons back indicating where and with what pressure to massage the person.
  11. A robot that plays ping pong. Instant ping pong partner.
  12. ring that integrates with google calendar/phone/blackboard and lights up as a reminder
  13. Cup with automatic drink instructions, and maybe shake/stir mechanism.
    1. https://docs.google.com/file/d/0B4_S-8qAp4jydWtXakVURXcyeFU/edit?usp=sharing
  14. Opera/Movie glasses that display the subtitles and allow you to zoom in and out. Some people love subtitles, other hate them and this would solve that problem so both people can watch.
    1. https://docs.google.com/file/d/0B4_S-8qAp4jyUFFCajF4TG9IT3c/edit?usp=sharing
  15. A clipboard that digitizes notes.
  16. A device that a choreographer could use. First walk around the perimeter of the room to set the spacal place, it will then record the spatial locations of the choreographer as he/she moves, allowing them to look back at a recording of the movement patterns they made.
  17. A bag that will measure the weight of its contents. Memorizes previous weights and will tell you if you forgot something.
  18. A RFID pin that you can easily put on important objects that allows a bag or container to determine if you’ve forgotten to bring something.
  19. Shoes for elderly people to keep them from tripping. They have ultrasonic range-finders on them that see upcoming objects and start a cell-phone vibrate motor in the shoe to alert the operator
    1. https://docs.google.com/file/d/0B4_S-8qAp4jyZkxJS21xZzk1WDA/edit?usp=sharing
  20. a coffee cup that indicates the temperature of the contents, preventing people from burning their tongues or taking a sip of cold gross coffee.
  21. A sensor connected to your legs that can sense if you ACl or achilles tendon is about to break and it will indicate that you need to stop exercising and stretch
  22. Connect a telephone to an elderly person’s hearing aid that turns on and calls the ambulance when an impact is sensed in the hearing aid.
  23. Jigsaw puzzles that allow you to change the background as you’d like.
  24. A training racket or watch that critiques your tennis/squash swing.
  25. A silent training violin
  26. Watch that measures pulse and motion and determines the right time in your sleep cycle to wake you up
  27. A belt of shirt that can help correct your posture helping to prevent back injuries and promote proper form while working out. It could send signals to your ipad or something to show what corrections need to be made to your posture.
  28. A coin that is needed to unlock your phone, like a physical key.
  29. A way to unlock your phone using a 3-D signature.
  30. A training flute that lights up when you need to press a note.
  31. A pen which digitizes what you’re writing, as you’re writing it
  32. A baseball or tennis ball that gives you information about its trajectory and path
  33. A fencing sword that shows how fast/bent the sword got in a bout and other information.
  34. Assisted driving gloves for the deaf that vibrate the hand that is in the direction of the next turn more as the turn approaches
  35. A device in a refrigerator that will text you when food is rotting.
  36. A toothbrush that glows if it goes over an area in your mouth that you should brush more.
  37. Multi-purpose two factor authentication apps. Authentication apps are becoming increasingly common on the app store for different services (GMail, etc.) and it would be useful to have one that is tied to your identity, so services only ask you to use one app.
  38. Building off of 16, a set of joint position sensing sleeves for knees, elbows, etc that remember body positions of dancers, martial artists, performers etc throughout a piece
  39. A clock that tracks and plots your sleeping habits
  40. A pillow or blanket that senses the occupants body temperature and adjusts its heat so as to optimise the person’s temperature. It could track the information and allow you to look back at the data. It will always be the cold side of the pillow.
  41. Similar to 14, a collaborative movie watching experience where people can post stuff on another screen next to the TV so people (especially parents/younger siblings) don’t talk to ask questions about plot etc.
  42. A scanner which you upload your grocery list to, and removes them from the list as you then scan items that you get
  43. Shoes that measure your gait and critiques it/helps it.
    1. https://docs.google.com/file/d/0B6XMC9ryo5M5R1FiaXBvQk5PdDQ/edit?usp=sharing
  44. A training drum kit that glows with the beat and tells you how off you are. Or something you can add to a drum kit that does this.
  45. Automatic gavel for a meeting. If it gets too loud, it will gavel automatically.
    1. https://docs.google.com/file/d/0B4_S-8qAp4jyZ2Z4VEd5ZmVJams/edit?usp=sharing
  46. Stethoscope for taking a patient’s pulse/blood pressure in loud environments that changes the brightness of lights based on sound level in the earpieces
  47. A soccer ball that detects when it has crossed a line, and lights up to indicate that
  48. A watch that if you lick it will let you know if you are dehydrated.
  49. Game controllers that make it harder to play if you’re winning, and easier if you’re losing
  50. A heat resistant temperature sensor that changes color based on the temperature of the object it is touching
  51. A bar that has weight sensors under each of the bottles. It can tell you how much you have left of everything and it automatically gives inventory metrics.
  52. Electronic labels for stores that allow you to change prices throughout the day. Comes with inventory software so you can code how the prices change with how much quantity is left.
  53. A ring or other object that monitors a stock price and changes colors unobtrusively to indicate price changes so you can look during a meeting
  54. A breadboard that lights up with instructions when you input a wiring diagram
  55. Attachment for the phone that can analyze blood in different ways – insulin, oxygen content, disease, etc.
  56. A watch that will not let you fall asleep. Detects drowsiness and gives the wearer and nice shock.
  57. Digital chips that let you spatially organize emails or texts
    1. https://docs.google.com/file/d/0B4_S-8qAp4jyZUlEb0tYMEZSZGM/edit?usp=sharing
  58. Headphones that sense when you’ve fallen asleep, and can be used for noise cancelling or to wake you up after a fixed amount of time
  59. An interface to flip through ebooks using a kinect.
  60. A coatrack that tells you which coat you should wear today via a light up hanger / that gives you metrics on which clothes you use and which ones you don’t.
  61. A laundry bag that texts you when it is full
  62. Building on 60, an automatic coat checker! No humans required, very efficient and secure.
  63. Kinect application to sort through emails spatially
  64. A digital chip and map based application which gives you streetview or a picture from where you put the chip

Project Choice

We will be building a pressure-sensing insole for running shoes. We will place several force sensors on the footbed, and use the output to coach runners on proper gait. It is common for runners to require additional weight or support on either the inside of the sole or the outside of the sole. This project could be used in shoe stores to allow vendors to advise potential customers on the best type of shoes to wear.  Currently, in order to get gait analysis, you must go to a specialty running store, which will videotape you while running in order to analyze which parts of your feet hit the ground first.  With a pressure-sensing insole, this analysis can be done much more accurately, allowing runners to select insoles or shoes which best suit their gait.  Furthermore, the inclusion of live feedback would allow a runner to dynamically modify their running technique to best use energy.

We picked our idea because we have a specific user type, helping us narrow down the idea. Also, we felt it was the right scope for our group project. We also believe that starting simple is a good goal and the potential expansions to different areas are intriguing. This could also turn into a balance trainer using vibrating motors to give feedback on balance, for example.

We also think that there are a lot of directions to expand from this project – we can expand to other sensors in the leg and provide deeper diagnostics. We’re interested in making an intuitive user interface for people not experienced with computers. Presenting the collected data in an easy-to-understand way will also be a challenge. Existing solutions have a complex and unfriendly user interface that isn’t attractive to less computer-savvy users.

Detailed Description

Target User Group

Our target user group is employees and customers of Princeton Running Company, who we will have access to through in-store visits. Customers want to compare different models of shoes during a short in-store experience. They hope to find a pair of shoes that will be healthy for their feet. Customers also enjoy involving technology, and will enjoy the experience of “seeing” comfort or discomfort. Employees want to show their expertise to help put the customer at ease, and give the customer additional basis for making their decision.

As well, we may test the device with students using treadmills in Stevens Fitness Center, or with trainers associated with Varsity teams. Princeton students love analyzing things, and so will like making their run more comfortable with technology. Trainers will appreciate being able to visually demonstrate to their athletes when they are running.

Problem Description and Context

The employees of the Princeton Running Company will want a product that will help them sell shoes and be a trusted company. To do this they will need a product that is accurate so that customers leave happy. They will need something that does data analysis quickly so that the client does not need to have any extra wait time. They will want something aesthetically pleasing and easy to use so that they can quickly understand how to use it as well have something that the customer will want to look at. The customer will want something that feels comfortable and does not affect the way they run. They will want a visual result that they can easily understand so that feel that they are learning something about how they run as well as have trust in what the employee is telling them.

Trainers are likely to have similar desires as the store employee, but they will be more focused and accurate and in depth results. If they are actually trying to help improve an athletes running style or figure out what areas of the body the athlete need to strengthen they will need a very clear look of the precise areas that are receiving pressure. They might also want a comparative diagram or color system that shows how different the athletes pressure dispersion is from where it should be.

It is difficult to analyze gait and running form in a quantitative manner. This problem arises in many different scenarios: coaches looking to advise their athletes, shoe store customers looking for shoes with the right support, and doctors looking to provide more information to physical therapy patients. Many solutions to this problem still involve videotaping, which is inexact and inaccurate. Some products have recently entered the market with pressure sensor soles, such as the Tekscan F-Scan In-Shoe Plantar Pressure Mapping System, but it remains a largely unsolved problem for everyday use. Also, this system does not allow handheld/portable feedback, which would allow easy integration into sports.

The best possible scenario is to allow the system to provide easy-to-understand instant feedback. Hopefully, this would allow the user to play with the device and associate how different movements put pressure on their feet on the fly. It would also allow vendors to allow customers to A/B test shoes and make the system require less effort to use.

Appropriate Technology Platform

We are planning on making an Arduino-based system. The primary hardware element of the our project is pressure sensors, which can be easily linked to an Arduino. The data from Arduino can be easily read into a system and we can choose from a variety of different platforms to show data.  Because of the small form factor of the Arduino and associated parts, we envision the prototype including an ankle strap to hold those components.

Ideally, this would be able to provide live feedback to the user as they were running.  This would have the benefit of allowing the user to dynamically adjust their running style.  While this would be technically difficult, it might introduce another use for the product by allowing the user to change their gait mid-run and use less energy.  However, in order for this to be a viable product in that sense, it might be necessary to manufacture multiple models of insoles with different types of support.  This idea would add another level of complexity, but would also allow the insoles to be worn on a regular basis.

We envision that the greatest benefit of the product would be in post-run analysis.  The pressure sensors could act as a sort of pedometer, and help judge when new shoes are required.  Furthermore, after a run, the user could receive feedback on how their running style changed as they tired, and on what types of shoes they should purchase for running.  While these reports may seem trivial, they would help runners reduce injuries and accurately select shoes that best fit their running style.

Photos

Product in Use:

https://docs.google.com/file/d/0B6XMC9ryo5M5MVY1NmFwRy01WHM/edit?usp=sharing

Sensor Layout:

https://docs.google.com/file/d/0B6XMC9ryo5M5bkt1ZEVveklYNEk/edit?usp=sharing

Display Watch:

https://docs.google.com/file/d/0B6XMC9ryo5M5NFVZWGpOWFgxODg/edit?usp=sharing

Lab 0: Groovy Lava Lamp

Group Members

  • David Dohan
  • Miles Yucht
  • Andrew Cheong
  • Shubhro Saha


Description
In a moment of ‘70s nostalgia during our lab brainstorming session, we decided to build a lava lamp. Not only did we want to reproduce the brilliance of the original lava lamp, but also our objective was to creatively extend its capabilities. In particular, our innovative lava lamp allows the owner to change the lamp’s color/brightness with an interactive slider and switch between color/brightness modes witha push button. The milk and oil lava produced a unique texture of very fine bubbles which act as an excellent light diffuser. Our final product turned out to be a great success. It’s not perfect, but it changes color according to the user’s input and turns on when the room lights are turned off. The code written for this interactivity is our proudest feature, and there are several areas of improvement. The lava lamp is hardly robust—electrical connections inside the test tube had to be completed with paper clips because alligator clips were too large. With more time, we would’ve made it less obvious that the lamp is a crude Princeton water bottle with a test tube dropped inside of it. However, it demonstrates a proof of concept, and it is easily expandable in the event that one would like to use more LEDs or add more modes. Additionally, we could improve the smoothness of the mapping from linear values (from the soft pot) to the color wheel.

Photos of Sketches

 

We considered making a reaction time game with Arduino.

We considered making an LED change brightness in response to ambient light levels.

photo

 

This is our final schematic for the lava lamp.

Video

Here’s a YouTube video of our final system in action.

Parts

  • Arduino Uno
  • Small water bottle
  • 12 mL test tube
  • Tricolor LED
  • 5 330-ohm resistors
  • Photoresistor
  • Button
  • Softpot
  • Vegetable Oil
  • Teaspoon of milk


Instructions
There are four components to this build: the lava and its container, the tri-color LED light source, the interactive controls (i.e., the softpot, photoresistor, and button), and the Arduino with associated code. We first built and tested the light source with the Arduino before putting it into the test tube. When building the light source, make sure that the way you connect the LED to the rest of the circuitry makes a difference: it needs to be slim enough to fit inside a test tube. To build the light source:

  1. Connect pin 9 on the Arduino to a 330-ohm resistor, and in series connect the cathode on the tri-color LED corresponding to the red LED. For the second connection you will want to use longer cables so that they can reach from your breadboard to the LED once it is suspended in the lava lamp.
  2. Repeat step 1 with pin 10 on the Arduino to the green cathode and pin 11 on the Arduino to the blue cathode.
  3. Connect the tri-color LED anode to ground, again using a long cable.
  4. Because these wires all have to be very close to one another inside of the test tube, we recommend using a small amount of electrical tape between connections so that you don’t short out any connections.

To build the interactive component (softpot and button):

  1. Connect the softpot to the breadboard with pin 1 at 5V+, pin 2 to A1 on the Arduino, and pin 3 to ground.
  2. Connect the button using a 330-ohm resistor according to the Arduino Button tutorial (http://arduino.cc/en/tutorial/button).
  3. Connect the 5V+ to a 330-ohm resistor in series with the photoresistor. Connect A0 on the Arduino to the conductor between these two resistors, and connect the other end of the photoresistor to ground.

To build the lava lamp:

  1. Fill the bottle with half water, half vegetable oil up to about ⅘ of the way.
  2. Add in approximately a teaspoon of milk.
  3. Shake vigorously.
  4. The resulting mixture should have a slightly yellow/white color but also have a large number of small bubbles (resulting from the mixture of water and oil).

Assembling the final product:

  1. After finishing the LED assemblage, insert the LED into a test tube such that, when the test tube is lowered into the bottle, the LED will be approximately half-way down the bottle. The point of the test tube is to keep the LEDs dry and away from the oil-milk lava. If you’re having trouble (as we did), you can try a larger test tube.  Ideally, you should solder and insulate the leads, but since we are not allowed to solder, our makeshift solution was to use paper clips to extend one of the cathodes so that we could connect to it using an alligator clip. Also, a small amount of oil on the inside of the test tube acts as a lubricant, so it is then a bit easier to slide the LED assembly inside.
  2. Lower the test tube into the lavalamp, and use tape to hold the test tube in place inside the bottle.
  3. Play!

Usage
There are 4 basic modes: one to set the color of the LED and one to set the brightness. Switching between modes is accomplished using the button. In the color mode, the softpot controls only the color of the LED along a color wheel. In the brightness mode, the softpot controls the brightness of the LED without affecting its color. The third and fourth modes are for cycling through different colors By the nature of the softpot, as soon as one stops touching the component, the resistance returns to a steady state. Instead of trying to identify instances when this happens, we also made a fifth mode that saves the current settings. In this mode, the softpot has no effect on the color or brightness. In the future, we might add indicator lights to identify what mode we are in at any given time, even though it is really easy to find out (just touch the softpot and see how the light changes).

Source Code

// Lava lamp code for HCI (COS 436/ELE 469)

/*
  The RGB LED has three cathodes and a common anode. Each cathode
  corresponds to a color in the LED and is independently
  controllable.
*/

//for color of the tricolor LED only. determines the size of the 
//set of values over which each color fades on/off while using the 
//softpot.
int range = 300;

/*
  In each set of variables RGBLED_xxxx and RGB_x_mid, the former
  corresponds to the pin being used for color xxxx. The latter 
  corresponds to the softpot value at which color x is at its greatest
  brightness.
*/
int RGBLED_Red = 9;
int RGB_R_mid = 100;

int RGBLED_Blue = 10;
int RGB_B_mid = 500;

int RGBLED_Green = 11;
int RGB_G_mid = 900;

//Arduino pinouts for each component 
int softpot = A0;
int photosensor = A1;
int button = 2;

//current color
int color = 0;

//current values for the intensities of each LED color
int rgb_r, rgb_g, rgb_b;

// brightness ranges from 0 to 1
double brightness = 1.0;

// mode is:
//   0: set color
//   1: set brightness
int mode = 0;

// psthreshold is the least amount of light needed to activate the lights
int psthreshold = 850;

// state variable is:
//	0: off
//	1: on
int state = 1;

//calculates the intensity of a color based on the current value of
//the softpot, the color’s RGB_x_mid value, and the range variable.
int getBrightness(double mid, double cur) {
  int t1 = abs(mid - cur);
  int t2 = abs(mid - (cur - 1024));
  int t3 = abs(mid - (cur + 1024));

  int test1 = min(t1, t2);
  int minimum = min(test1, t3);

  if (minimum > range) return 0.0;

  return 255 * (range - minimum) / range;
}

//sets the color for all three colors in accordance with the current
//softpot value
void setVals(int cur) {
  if (state == 1) {
	rgb_r = getBrightness(RGB_R_mid, cur);
	rgb_g = getBrightness(RGB_G_mid, cur);
	rgb_b = getBrightness(RGB_B_mid, cur);
  }

  writeToLED();
}

//sets the brightness of the LED according to the current 
//softpot value
void setBrightness(double cur) {
  if (state == 1)
	brightness = cur / 1024;

  writeToLED();
}

//actually sets the PWM pins to the values dictated by the current
//color and brightness
void writeToLED() {
  analogWrite(RGBLED_Red, rgb_r * brightness * state);
  analogWrite(RGBLED_Blue, rgb_b * brightness * state);
  analogWrite(RGBLED_Green, rgb_g * brightness * state);
}

//switch between modes
void toggleMode() {
  mode = (mode + 1) % 5;
}

//setup each LED and button
void setup() {
  pinMode(RGBLED_Red, OUTPUT);
  pinMode(RGBLED_Blue, OUTPUT);
  pinMode(RGBLED_Green, OUTPUT);
  pinMode(button, INPUT);

  Serial.begin(9600);
}

void loop() {
  // Check to see if there is light in the room using the
  // photoresistor. If so, set the output to 0. Otherwise, use the
  // softpot.
  int current_light = analogRead(photosensor);
  int current_soft = analogRead(softpot);
  int button_state = digitalRead(button);

  if (button_state == HIGH) {
	while (digitalRead(button) == HIGH);
	toggleMode();
	Serial.print(mode);
	Serial.print("\n");
  }

  if (mode == 0) {
	setVals(current_soft);
  } else if (mode == 1) {
	setBrightness(current_soft);
  } else if (mode == 3) {
	color = (color + 1) % 1024;
	setVals((int)color);
  } else if (mode == 4) {
	color = (color + 1) % 2048;
	setVals(color/2);
  }
}

The Best Way to Spend Time before Class: Note Clouds!

Observations

In the time before class, many students and Faculty could use tools to organize themselves, get to class sooner, or use their time more effectively in general. Before my classes, students perform a variety of tasks:

  • Checking email 
  • Texting Friends
  • Playing Angry Birds
  • Reading notes from the previous class
  • Searching through browser history to find a previously read article

In general, the atmosphere was a bit uneasy and people were not striking up conversation.

Since I have precepts 10 minutes after my lectures (often on the other side of campus) I had the opportunity to follow my classmates to precept. Often their routes were not efficient

On my route to class, I always pass by two of my friends who walk together since they have classes in the same buildings two periods in a row.

Brainstorming

I brainstormed on my own and with several students in an outside of class – in many cases, directly interviewing subjects to get opinions. (Individuals include Nigel Brauser, Sara Figel, Kate Gardener, Kelsea Best, Angad Anand, Abbi Ward, Dillon Sharp, George Touloumes, and Brendan Wright)

Proposals

I generated a list of ideas which could possibly help students use their time more effectively before class:

  1. Figure out what is for lunch or dinner – an easy app which shows information about food (maybe even that it looks like!)
  2. People want to start conversation with those around them – make an app to pose conversation topics, those in the same location can see them. These topics expire after 10 minutes (state what you look like so they know who to interact with)
    1. Had to add this note: I think that this application would be very popular among students: It encourages discussion before class which warms up student’s brains and helps to create a comfortable environment in which to discuss for seminars. But this particular application is hard to prototype and get feedback on
  3. Track the location of your friends and where they are going – maybe you’re close to each-other! You can walk together, or you’ll cross paths, map paths to interact
  4. Keep track of articles you have bookmarked, allow you  to read them in your spare time
  5.  An app that shows you a word cloud of your notes from last lecture – jog your memory enough for you to remember!
  6. Take mini quizzes and see what your friends answer – could be fun or intellectually challenging
  7. Application which determines the fastest path which you can take to get to your classroom
  8. An application which allows professors to save the settings they like in the lecture hall so the are remembered for next lecture
  9. A troubleshooting program for professors to follow when setting up a lecture hall – this way they have something to do while waiting for someone to come and try to help them
  10. Something which tracks which students are present in the lecture hall, then the professor can start earlier and everyone doesn’t have to wait
  11. For Tower Club Members – A way to order food from the grill when you’re on the go (you can stop by the club and pick it up between classes if your schedule is too packed for lunch
  12. Something which tests your ability to remember name/face combinations (quiz yourself to remember new acquaintances.
  13.  A check list that makes sure that you have everything you need before class. Dynamically updates with which classes you have that day and can tell you what items you will need for the weather that day
  14. An application to show you your course syllabi so you can have a larger view of where you  are in the course and how close major deadlines are
  15. An application which can show you the location of electrical sockets in your classroom so that you can charge your computer
  16. An application which shows you study spaces which are close to your classes so you can quickly get to work when you’re done with classes for the day, and discover new study spaces.

Prototypes: Two ideas were chosen to prototype one of which was tested on users

Face-name quizer: Face-name combinations can be really hard, especially in a new seminar with a ton of people. This application will help you match faces and names so that you feel more comfortable participating in your seminars. Here’s how it works:

The user can create groups of people which they want to be quizzed on:

F1

Using the Princeton database, students’ names and photos can be added to the application for quizzing (this would probably have to be approved using a student ID). Either name to face matching or face to name matching are available in this application

F2

Name matching shows a name which the user has to visualize

F3

And the user can see the face to ensure that they are thinking of the right person. Names can also be skipped if the user knows them and doesn’t need to be quized

F4

Face to name recognition will show a face and ask the user to think of the name

F5

Similar to name to face recognition the user can skip faces

F6

As an expansion on this project, the application could track names and faces which the user marks as “hard” and will show those names and faces more often until the user marks them otherwise.

Note Cloud: Effectively skim your notes

 

People want to review their notes, but only what is important – skimming doesn’t really get the job done effectively and this application shows you the weight of different topics from the previous class; it’s great for those who type their notes so they can select words within the cloud and find instances of those terms.

Here’s how it works:

Students add classes which they are a part of and can select particular classes they want to review

NC1 NC2

Lecture notes sync online to allow user to access them on their phone – these are typed notes which the user has taken while typing. Below we can see an example of “Lecture 3” becoming available after manual sync

NC3 NC4 NC5 NC6

Selecting a lecture shows a word cloud of important terms from that lecture.

NC7

By selecting a term from the word cloud, the user can see all instances of where that word appears in their notes. By selecting the instances, they can see their full notes and what they wrote about that term (this also allows full note browsing with the term highlighted)

NC9 NC10

If students want to remove items from the word cloud temporarily in order to see the second most relevant terms they can do that as well.

NC11

NC12

 

Feedback

The word Cloud prototype was tested on several subjects (Some who were even in PSY 208) Subjects included Dan Steurer, Erica Sollazzo, and George Touloumes.

–          Without prompt, users were able to figure out that the application is used to jog their memory about key concepts from previous lectures which they had taken notes on. The interface was intuitive enough that they could figure out what was happening.

–          A prompt to tell people that they can click on words to see instances of them in their notes would be helpful,

–          Users were unsure of why they would use the remove function to narrow down the word cloud (they may be capable of ignoring larger words on their own)

–          Users wanted a way to search for multiple words at the same time – perhaps a drag and drop option to select your words then “GO!” to see shared instances of them

–          Users wanted to be able to add to their notes (a text editor which will also sync with their notes)

–          Users were concerned that coordination with lecture slides may be lost (many users take notes in power point) the application should be made compatible with power point slides

–          Two users immediately identified that this application syncs with notes in the cloud because of the presence of a sync button (and perhaps the hint from the title “note cloud” which could refer to the word cloud generated or the fact that notes are stored in the cloud)

In summary, I think that either of these applications could be a potential success and user feedback has certainly given me more directions to expand.

A Game of Simon Sees

Group members:

David Lackey – dlackey@

John O’Neill – jconeill@

Horia Radoi – hradoi@

(Santhosh Balasubramanian)

Playing Simon Sees

The aim of our project was to create a wearable version of the classic game of Simon Says. As such, the goal of Simon Sees is to remember and duplicate the sequence of lights generated by the microcontroller. The player wears a pair of glasses with two lights, one on each side, which are diffused via straws to create a visible beam of light. The game begins by showing a light sequence of length 1, which the player must duplicate by pressing the corresponding buttons – lighting the straws to indicate his or her decision. After each successful level, an additional light is added to the sequence. When the user makes a mistake, a red LED light notifies the user, and he or she has to restart the game. Overall, we found our final implementation fairly successful, especially after decreasing the time between the lights in the sequence, which increased the amount of attention needed by the player. After spending time with our prototype and inviting additional users to participate, we discovered that future iterations should contain more than two sources of input/ouput and that the current interface for user input (two buttons) could be transformed into something more engaging and unique, such as auditory- or motion-based forms of interaction.

Click here to view our project in action!

Initial Design Sketch

Initial Design Sketch

IMG_20130213_230037

The Simon Sees interface. Note the red light used to notify a user when they make an incorrect move.

Players use the controller to indiciate which light they think is next in the sequence.

Players use the controller to indiciate which light they think is next in the sequence.

Additional Designs

1. Contextual Disco Ball

If our disco ball senses a low-light environment, it begins increasing the brightness of our LED’s (one red, one green, one blue,) which are placed inside of a semitransparent ball. The lights are pulsating, and the frequency at which these lights pulsate is determined by an interactive Processing interface.

sketch_ball

2. Slit Experiment

Using an LED light and a dark box with two thin vertical cuts in one side (at a known distance), generate an interference pattern on a wall by turning the LED light on inside the black box and pointing the side with the two cuts towards a wall (requires a dark room).

Page-01

List of Parts

  • 1 Arduino
  • 2 Breadboards
  • 2 Buttons
  • 3 LEDs (1 blue, 1 green, 1 red)
  • Alligator clips
  • 1 Pair of glasses
  • 2 Straws

Instructions

  1. Begin by properly placing the circuitry elements on the Arduino board. One button, which is used to trigger the left light, must use pin 13 and should be arranged to a schematic similar to that as described in the Arduino blogs. The button for the right light should be using pin 12. Our left, right, and red LEDs should be using pins 10, 11, and 9, respectively.
  2. In order to attach the LED’s to the glasses, use long wires that have been braided together. These allow us to alter where we place our LEDs while being fairly unobtrusive.
  3. Place LEDs in straws and tape them to the corresponding side of the glasses.
  4. Load the Arduino with the following code, observe the first light in the sequence, and copy – enjoy!

Code

/*
 Simon Says
 Repeat the sequence of lights given by the button inputs.
 */

// Constants 
int N = 10;
int RED_LED = 9;
int LEFT_LED = 10;
int RIGHT_LED = 11;
int LEFT_BUTTON = 13;
int RIGHT_BUTTON = 12;
int DELAY = 200;
int RED_DELAY = 1000;
// State variables
boolean isShowing; // Are we showing lights?
boolean leftLights[10]; // Each element is true for left, false for right
int i; // leftLights index
int level; // Game level

// the setup routine runs once when you press reset:
void setup() {

 // LEDs
 pinMode(RED_LED, OUTPUT);
 pinMode(LEFT_LED, OUTPUT);
 pinMode(RIGHT_LED, OUTPUT);

// Buttons
 pinMode(LEFT_BUTTON, INPUT);
 pinMode(RIGHT_BUTTON, INPUT);

// Init game
 reset();
}

// Reset game
void reset() {
 i = 0;
 level = 1;
 isShowing = true;
 generateLights();
}

// generate lights array
void generateLights() {
 randomSeed(analogRead(0));
 for (int j = 0; j < N; j++){
 leftLights[j] = random(0, 2);
 } 
}

// the loop routine runs over and over again forever:
void loop() {
 if (!isShowing) {
 checkInput();
 }
 else if (i < level && level <= N) {
 showLights();
 }
 else {
 // Stop showing lights
 isShowing = false;
 i = 0;
 }
}

// Check player input
void checkInput() {
 // Collect input
 int leftButtonState = digitalRead(LEFT_BUTTON);
 int rightButtonState = digitalRead(RIGHT_BUTTON);
 // Check
 if (leftButtonState == HIGH && leftLights[i]) {
 // Left hit
 i++;
 show(LEFT_LED);
 }
 else if (rightButtonState == HIGH && !leftLights[i]) {
 // Right hit
 i++;
 show(RIGHT_LED);
 }
 else if (rightButtonState == HIGH || leftButtonState == HIGH) {
 // Miss
 show(RED_LED);
 reset();
 }

 // Check level completion
 if (i == level) {
 i = 0;
 level++;
 isShowing = true;
 }
}

// Show lights
void showLights() {
 // Show lights
 if (leftLights[i++]) {
 show(LEFT_LED);
 }
 else {
 show(RIGHT_LED);
 }
}

// play light
void show(int led) {
 int d = DELAY;
 if (led == RED_LED) {
 d = RED_DELAY;
 }

 digitalWrite(led, HIGH);
 delay(d);
 digitalWrite(led, LOW);
 delay(d);
}

Lab 0: RGB Whack-a-Mole

 

We designed an RGB version of the ever-popular Whack-a-Mole game using a single multicolor LED, some buttons, and good old Arduino. We wanted to create something entertaining and interactive, that similarly allowed us to explore coding on the Arduino. At first, we envisioned a game with multiple LED’s, but then decided that playing the game in response to different colors in a single light was much more interesting than responding to the turning on or off of lights. Our second revision imagined the multicolor LED starting out as fully lit (white light), and then having components of the light drop out with the player having to press buttons to restore those color components. We liked the dual challenge both of reacting quickly and having to determine which color component was missing, but when playtesting we found that this latter aspect of the challenge was more frustrating than enjoyable for the player. Our final version lights up the LED with one of the three colors behind the diffusion screen and rapidly begins to dim. If the player either fails to respond in time or presses the wrong button, the light will go white, signaling GAME OVER! We are overall quite happy with how the game turned out, and how it helped us play around with the Arduino. The game is fun and completely customizable in just about every parameter. However, we had very few materials with which to construct the physical exterior of the game, so the prototype itself is somewhat of an eyesore.

Team Members: Joseph Bolling, Evan Strasnick, Aleksey Boyko, Jacob Simon

List of Parts:

  • Arduino Uno
  • Pushbutton style switches (3)
  • Tri-color RGB LED
  • 330Ω resistors (3)
  • Wire jumpers
  • Prototyping Breadboards (2)
  • Cardboard
  • Scotch tape

Instructions:

To create your own RGB Whack-a-Mole game, take a look at the circuit included above as a reference.  For the switches, use basic push-buttons.  Note that we chose to place our buttons on a separate breadboard from our tri-color LED, so that we would have a rudimentary controller and output device setup.  Connect the button that you’d like to correspond to the red color to pin 4 of the Arduino, the button that you’d like to use for blue to pin 7, and the button that you’d like to use for green to pin 10.  The red, green, and blue led leads should connect to pins 3, 6, and 9, respectively.

Label your buttons with the color they control, and make a cover for your LED so that the wiring is protected and hidden.  We used simple cardboard and some scotch-tape to make a window for our LED.  Then, upload our code to your Arduino and have fun!

Diagrams:

RGB Whack-a-Mole Circuit — This is the idea we implemented.

WhackAMole

Binary Calculator Circuit — This would allow the user to perform simple arithmetic.

BinaryCalculator

Color Selector Circuit — This would allow the user to create any color by selecting its RGB components.

Sketch 3 - Color scaler

Arduino Program:

// :::::::::::::::::::::::
// Lab 0
// COS436 / ELE469
// Trichromatic Whack-a-Mole / Color Blindness Reflex Test
// Group participants: jbolling, jasimon, estrasni, aboyko
// :::::::::::::::::::::::

// :::::::::::::::::::::::
// INPUT PINS
// :::::::::::::::::::::::
int r_but = 4;
int g_but = 7;
int b_but = 10;

// :::::::::::::::::::::::
// OUTPUT PINS
// :::::::::::::::::::::::
int r_pin = 3;
int g_pin = 6;
int b_pin = 9;

// :::::::::::::::::::::::
// INITIAL COLOR VALUES
// :::::::::::::::::::::::
int r_v = 0;
int g_v = 0;
int b_v = 0;

// :::::::::::::::::::::::
// DIMMING PARAMETERS
// :::::::::::::::::::::::
boolean dim_on = false;
int dim_delta = 0;
float dim_factor = 1;
int dim_ch = 0;
int counter = 1;
int score = 0;

// :::::::::::::::::::::::
// SETUP FUNCTION
// :::::::::::::::::::::::
void setup() {

Serial.begin(9600); // Terminal output

// Input settings
pinMode(r_but, INPUT);
pinMode(g_but, INPUT);
pinMode(b_but, INPUT);

digitalWrite(r_but, HIGH);
digitalWrite(g_but, HIGH);
digitalWrite(b_but, HIGH);

// Output settings
pinMode(r_pin, OUTPUT);
pinMode(g_pin, OUTPUT);
pinMode(b_pin, OUTPUT);

Serial.println(“Set up complete”);

reset_state();

}

// :::::::::::::::::::::::
// MAIN LOOP
// :::::::::::::::::::::::
void loop() {
// If no dimming is happening, try to initiate
if (!dim_on) {
Serial.println(“Dim is not on”);
dim_on = initiate_dimming();
}

int io_code = factor_input();
if (dim_on) {
Serial.println(“Dim is on!”);

// see if input stops dimming
if (io_code != 0) {
// no user input
dim_more();
} else {
// correct input
counter++;
reset_state();
}
} else {
reset_state();
}

// set the diffuser output
analogWrite(r_pin, r_v);
analogWrite(g_pin, g_v);
analogWrite(b_pin, b_v);

delay(100);
}

void reset_state() {

// Reset color values
r_v = 0;
g_v = 0;
b_v = 0;

// Turn dimming off
dim_ch = 0;
dim_on = false;
}

boolean initiate_dimming() {

// Choose a random color
dim_ch = random(0, 3);

// Turn that color on, full brightness
switch (dim_ch) {
case 0:
analogWrite(r_pin, 255);
r_v = 255;
break;
case 1:
analogWrite(g_pin, 255);
g_v = 255;
break;
case 2:
analogWrite(b_pin, 255);
b_v = 255;
break;
default:
break;
}

// New dimming factor
dim_factor = 1.0 – (counter) / 20.0;

// Terminal output
Serial.print(“\tDimming channel “);
Serial.print(dim_ch);
Serial.print(” with factor “);
Serial.println(dim_factor);

return true;
}

int factor_input() {

// read KEY_DOWN events
boolean r_pressed = (digitalRead(r_but) == LOW);
boolean g_pressed = (digitalRead(g_but) == LOW);
boolean b_pressed = (digitalRead(b_but) == LOW);
// encode input with one value
int in_code = (r_pressed?1:0) + (g_pressed?2:0) + (b_pressed?4:0);

// if any was down wait until all keys are released
while (r_pressed || g_pressed || b_pressed) {
delay(100);
r_pressed = (digitalRead(r_but) == LOW);
g_pressed = (digitalRead(g_but) == LOW);
b_pressed = (digitalRead(b_but) == LOW);
}

// Encode dimming channel in the same way as buttons
int out_code = 0;
if (dim_on)
out_code = 1 << dim_ch;

// Difference between input and output
int input_factor = out_code – in_code;

// If user’s input doesn’t match correct input…
if (input_factor != 0 && in_code != 0) {
failure(); // Fail and reset
}

return input_factor;
}

void dim_more() {
if (!dim_on) return;

switch(dim_ch) {
case 0:
//r_v += dim_delta;
r_v *= dim_factor;
if (r_v < 10) failure();
break;
case 1:
//g_v += dim_delta;
g_v *= dim_factor;
if (g_v < 10) failure();
break;
case 2:
//b_v += dim_delta;
b_v *= dim_factor;
if (b_v < 10) failure();
break;
default:
break;

}

}
void failure() {
digitalWrite(r_pin, 255);
digitalWrite(g_pin, 255);
digitalWrite(b_pin, 255);
Serial.print(“Game over! Score = “);
Serial.print(score);
Serial.println(” Try again…?”);
score = 0;
counter = 1;
dim_on = false;
delay(3000);
}

void light_correct() {
score++;
reset_state();
}

PitchSqueak

Group: Bonnie Eisenman (bmeisenm), Mario Alvarez (mmcgil), Erica Portnoy (eportnoy), Valentina Barboy (vbarboy)

Description: We built a cardboard “robot” that responds to having its hand held and its nose tweaked. When you hold its hand, its heart glows and it burbles in robot-speak. Its nose is a potentiometer which controls the color of its eyes. We built PitchSqueak because we wanted to build a puppy, but we couldn’t with the given materials, so we figured that an interactive robot was a decent second choice. We’re all kids at heart and we like kids’ toys. (Also, we wanted to experiment with the buzzer.) While we don’t have any kids on hand to test PitchSqueak with, we all find him quite delightful, so we judge this project to be a success. Improvements we would include if possible would be making the cardboard construction better, and making the potentiometer easier to turn. Originally we had also envisioned having PitchSqueak respond to having his head petted, using the linear Softpot.

Photo Feb 20, 9 54 27 PM Photo Feb 20, 9 40 22 PM Photo Feb 20, 9 32 36 PM Photo Feb 20, 9 10 10 PM

Photos of sketches:

A mini-weather-station with sensors that record the ambient light and temperature, and periodically tweets them.

A mini-weather-station with sensors that record the ambient light and temperature, and periodically tweets them.

A "musical instrument" whose pitch and volume can be controlled using the Softpot and the potentiometer.

A “musical instrument” whose pitch and volume can be controlled using the Softpot and the potentiometer.

PitchSqueak! An interactive robot/toy whose heart glows and he babbles when you hold his hand. You can also change the color of his eyes.

PitchSqueak! An interactive robot/toy whose heart glows and he babbles when you hold his hand. You can also change the color of his eyes.

 

Storyboard:

Our storyboard. Little Timmy learns to be nice to people / robots!

Our storyboard. Little Timmy learns to be nice to people / robots!

PitchSqueak in Action:

List of parts:

  • 1 buzzer
  • 1 potentiometer
  • 1 FSR
  • 1 red LED
  • 1 RGB LED
  • 1 breadboard
  • 1 cardboard box
  • Electrical tape
  • Wires
  • Paper
  • 1 Arduino
  • 1 USB cable

Instructions for Recreation:

We constructed PitchSqueak out of a cardboard box. We cut out a rectangle of cardboard for the face, and cut holes for the eyes, heart, and nose. The holes for the eyes and heart were covered with paper to diffuse the light from the LEDs. The potentiometer was placed in the hole for the nose and secured with electrical tape. We then used a second piece of cardboard for a “shelf” between the heart and the eyes, to shield the two LEDs from each other. The red LED was taped to the hole for the heart. Electrical tape was used for connecting the wires to the potentiometer. We then cut out a second piece of cardboard for the body, as well as cardboard arms. We taped the FSR to one of the arms, and then attached the arms to the body. Next we connected the body to the face. We taped the LED for the eyes to the top of the robot’s body, inside. Finally, we connected all the sensors according to our circuit diagram with the breadboard.

Circuit diagram.

Source code:

/* Pitch squeak! */

// Pins:
int greenPin = 10;     // analog pin for the green component of RGB LED
int heart = 7;        // the analog pin for the red LED (heart)
int fsrPin = 2;       // the FSR and 10K pulldown are connected to this pin
int potPin = 0;       // the potentiometer is connected to this pin
int music = 3;        // pin that connects to music

// Input: 
int fsrReading;       // the analog reading from the FSR resistor
int potRead;          // the analog reading from the potentiometer

// Constants: 
int brightness = 255;   // the brightness the LED glows with

void setup(void) {
  // We'll send debugging information via the Serial monitor
  Serial.begin(9600);

  // Set the modes of the pins
  pinMode(heart, OUTPUT);
  pinMode(music, OUTPUT); 
  pinMode(greenPin, OUTPUT);
  pinMode(potPin, INPUT);
  pinMode(fsrPin, INPUT);
}

void loop(void) 
{
  fsrReading = analogRead(fsrPin);
  potRead = analogRead(potPin);
  /*
  Serial.print("FSR reading = ");
  Serial.println(fsrReading);     // the raw analog reading  
  Serial.print("Pot reading = ");
  Serial.println(potRead);     // the raw analog reading
  */
  int greenVal = potRead/4.0; // convert 0-255 to 0-1023
  analogWrite(greenPin, greenVal);

  // Light up heart and make noise if hand squeezed
  if (fsrReading >= 500)
  {
    analogWrite(heart, brightness);
    digitalWrite(music, HIGH);
    for(int i=0; i<10; i++) {
      int r = random(0,255);
      analogWrite(music,r);
      delay(100);
     }
     digitalWrite(music, LOW);
     analogWrite(heart, 0);
  }
  else {
    digitalWrite(music, LOW);
  }
}

 

P1: EyeWrist

Evan Strasnick, Xin Yang Yak, Jacob Simon, Joseph Bolling

Brainstorming!

  1. Dielectric stimulation – Choreography is hard to communicate and record, teach it to people by stimulating their bodies
  2. For anyone attempting to hobbies, sports, or arts requiring tacit skills (e.g. skiing), a helmet could record the motions and perspectives of the master, and then the apprentice could have this perspective played back for them as they attempt the motions.
  3. Dynamically adapting screen that uses eye tracking to take advantage of foveal resolution / peripheral resolution and thereby optimize resources and space.
  4. Glasses or some form of headpiece that tracks direction of gaze to turn on lights only where a person is currently looking, to conserve energy (or just a cool social experiment)
  5. Bad habits tracker: a basic app combined with select hardware pieces could allow users to select their personal bad habits and collect statistics on how often they occur, as well as give advice (teeth-grinding, snoring, stuttering, etc.).
  6. A patch containing a variety of flex sensors could be applied to any of a number of target areas on patients with bad posture, helping to remind them with simple vibration when they sink into unhealthy positions.20B6BBFD-114B-4E8F-894F-756FBAA22E7A
  7. A flex-sensor based device to be placed on the neck, that stimulates (vibration, dielectric, etc.) students with a tendency to fall asleep during class.
  8. Speech recognition software that reads the users lips (and applies predictive software) instead of listening to an audio stream would allow users in public locations to have text-to-speech input without having to speak to their computer, or could serve as an enhancement to existing audio-based software, or could serve as input for disabled/blind patients.
  9. Door that is gesture-triggered, not just motion-triggered – automatic doors often open even when passersby don’t intend to pass through the door; this could be fixed with a more nuanced interface
  10. An automatic toilet that will never flush while you’re still using it. (heat or pressure sensors)
  11. Integrating an accelerometer component into a watch or wedding ring, allowing users to respond to common prompts instantly and effortlessly (answering/rejecting calls, turning off reminders, etc.)
  12. An alarm that wakes you up using gradually increasing light rather than sound. This not only allows users to wake up more naturally and peacefully, but does not disturb neighbors/roommates.
  13. Track REM periods through eyelids to monitor quality and duration of sleep states.
  14. For anyone who wishes to check time discreetly during class, work, a meeting, etc: a ring, bracelet or other touch-controlled item that can signal with vibrations
  15. Sensors (pressure sensors, proximity sensors) that can be placed around the house to automate the tasks a user must perform in various locations (e.g. turn off lights when pressure in bed registered after a certain time, open blinds by stepping in front of them, etc.)
  16. A device which monitors basic physiological readings (blood pressure, heart rate), and activates severity-determined anxiety prevention steps (from helpful text messages to emergency personnel alerts) to help patients with phobias
  17. 3D TV must be viewed from a specific angle to reach the full effect. We propose glasses that use accelerometers or eye tracking to constantly adjust the TV to the correct viewing angle in real time.
  18. Playing cards visible only to players – each player wears glasses which overlay images on specialized cards currently being held in front of them; other players are not shown these images.
  19. Splitscreen multiplayer that is player-specific, hides other player’s screen
  20. A TV which allows family members to view different channels or programs at the same time, using polarized light and viewing glasses for example.
  21. For improved hygiene in public restrooms, an intelligent toilet that automatically raises or lowers its seat depending on user intention (penis identifier).
  22. Making it easier to observe shabbat by automating common tasks using passive proximity technology.
  23. New types of trackpads which can distinguish and recognize individual fingers for advanced gestures – Modern trackpads are very accurate, but cannot identify which finger is being used; doing so would allow for much more nuanced interactions, shortcuts, etc. with a computer.
  24. Car safety (warning if you don’t check your mirrors and blind spots) – eye tracking software could be used to train new drivers to check their blindspots, one of the harder things to learn when driving.
  25. Phone mouse using visual and accelerometer input – The camera on a modern smartphone could be used with accelerometer data to let users accurately pan onscreen by moving their phone.
  26. Actively heated clothing – Clothing that is actively heated by warmed fluids or another mechanism would maintain body temperature in extremities during winter without adding too much bulk, and could be made smart through temperature sensors and shiver-detection.
  27. Study space noise tracker – It’s difficult to know which public spaces on campus are being used as social areas and which are available for quiet study at any given moment; this could be fixed with noise sensors and a web application.
  28. Dance-based music selection – We could solve the problem of poor party DJ-ing with a system that recognized the dances different dancers are performing and selects songs accordingly.
  29. Dance-controlled music synthesizer – The improvised dance performance is vastly improved by live musicians.  This device would produce a similar conversation between dancer and musician without the inconvenience of finding a live musician.
  30. Anti static phone charger – Harvesting the static electricity that builds up in clothing during winter could help charge small devices and solve a major annoyance.
  31. People who like to do gardening recreationally may not know what kinds of plants their garden soil/climate is suitable for. A device that monitors the soil and climate condition can help the planter figure out what types of plants are likely to do well in the garden.
  32. Dental sensors in dentures/retainers – Basic dental diagnostics such as bacterial populations, enamel health, and tooth position could be assessed using devices implanted in dentures and retainers
  33. Text input for severely disabled patients by touching their tongue to their teeth using a specialized retainer.2013-02-20 21.35.21
  34. A toothbrush that maps out where users reach (and don’t reach) while brushing, allowing them to improve their brushing habits and dental hygiene.
  35. Audiovisual recording buffer device – Allows you to retroactively record moments in your life or lecture by keeping a running buffer of the last few minutes. Allows users to never miss out on a moment of accidental hilarity, without the storage restraints of constantly recording the entire day
  36. Improve bad handwriting with a pen that actively corrects its user with counterbalanced weights.
  37. In some sports, it’s easier to spot bad form if you can see yourself in third-person view. Goggles that allow the athlete to see him/herself in third person while performing the action during athletic training might help to improve form.
  38. Monitoring the food that is being baked in the oven currently requires one to open the oven, but this reduces the oven temperature and requires that the chef always be nearby and alert. An oven camera which streams to a smartphone would allow constant monitoring without interfering with the baking.
  39. Smart microwave oven that both scans barcode of food and figures out how long to cook it, and also adjusts the microwaving plate using pressure sensors to always center food to cook evenly.0ED4EB11-E517-4D0F-9E33-611282A0DA5E
  40. It’s a hassle for hikers/athletes/patients who need to stick to a hydration plan to keep track of their fluid intake. A water bottle that tells you how much to drink would help.2013-02-20 21.40.17
  41. CPR instructor necklace/tattoo – A device worn by populations at risk for cardiac arrest could indicate to untrained rescuers how and where to apply chest compressions for CPR.
  42. Phone EKG patch/heart monitor – People could keep continuous track of their cardiac health by wearing small electrode devices that would communicate warnings to a cellphone or other handheld interface.
  43. Weight-lifting sensor gloves – Gloves with built in pressure sensors and accelerometers could track and deliver statistics on how much work is being done with each arm, to allow weightlifters to more accurately exercise their muscles.6E40A95A-BB52-4DBD-8F29-E6AA5952D046
  44. Customer heatmap for stores/attractions – A manager could track which areas or displays experience the most traffic by using pressure sensors or infrared cameras, and adjust product locations and inventory appropriately.
  45. Diagnostic toilet with fluid and fiber recommendations (tracks volume, frequency, and possibly chemical content)
  46. Eyeglasses that not only darken in bright light, but can accurately adjust to any desired level of light (using a liquid crystal layer, for example).
  47. Ctrl + F for physical books: so that a user could instantly find parts of a book, a piece of hardware with an equipped camera would be adjusted to rapidly flip through the pages of a book and photograph each one, using text-recognition software to compile a digital version within minutes.9B215C8B-1BFA-44EB-A3B3-D0C5A83D1E93
  48. Kinect phantom limb therapy – Kinect could be used to display missing body parts in the mirror image of a user, helping ease phantom limb pain.
  49. “Intelligent mirror” – Kinect system + screen would allow users to virtually try on all of the clothes in a store’s inventory  2591AF79-2DC2-45FD-B285-083FF1AECE3D
  50. Kinect-based application that allows the user to turn their entire body into a musical instrument – e.g. control volume by opening mouth while playing out pitches with arm position – but user could select which parts of their body they wanted to control which elements of the music.
  51. Sonar glove (or infrared glove) – a glove which emits and records a high-frequency sound (or infrared beam), indicating the distance from an obstacle via vibrations and allowing blind users to detect obstacles in front of them.

819E9F45-7678-4F4E-8802-5B9DF7D2278A
9A60F65C-F554-4F5F-AA7D-0DD9B0A2523D

 

After much discussion, we finally decided upon idea #51, the “sonar-glove” (which may or may not actually employ sonar!) First and foremost, we believed that it would be a product that could completely change the way that the user base (the visually handicapped) faces its daily problems. By being something as inconspicuous as a glove, it would serve the same basic goal as a cane, but would draw much less attention and be far more convenient. By offering an analog scale of vibration frequency, users could know exactly how far away they were from an object, and if they wanted, they could even use more than one in order to scan even greater regions of space around them. Another advantage to this system is its design flexibility. While the idea was originally proposed as a glove, the same system could take the form of a more conventional cane (allowing the propioceptive benefits of this more standard approach), or even be embedded in the users shoes. Similarly, we began by thinking in terms of sonar, but have already begun discussing the advantages and disadvantages of other approaches (i.e. infrared beams). We believe that this idea will allow us to make the most of the experience of iterative design, while realistically culminating in the creation of a prototype that could be nothing short of miraculous for its users.

Target User Group: Our main target user group is the blind and visually handicapped. Of course, there are many other possible applications for this technology (working in dark spaces, assisting patients recovering from eye surgery, etc.), but the blind face daily challenges that make even the most basic of tasks frustrating, not the least of which is simply navigating their environment. As evidenced by the fact that multiple coping strategies already exist (canes, seeing-eye dogs, etc.), safely traversing the world is a demanding task for the visually handicapped – one we believe would be much alleviated by constantly being able to sense the distance of obstacles. Of course, while this is a user group which is not terribly common on Princeton’s campus, we believe it would be perfectly feasible to get user feedback by reaching out to hospitals, assisted-living homes, or other members in the nearby community. We believe it is important for users who actually understand the struggles of a visual handicap to test the system, so we will not simply allow testing to consist of “closing one’s eyes.”

Problem Description: The visually handicapped often use canes or other aids in order to walk about without fear of tripping or walking into an unseen obstacle.  While effective, the cane provides a limited amount of information-the device does not alert the user to an obstruction until they are within a few feet of it, and the information refresh rate of the cane is limited by the speed with which the user can physically sweep it.  What’s more, the cane is noisy and physically intrusive, and can become entangled in objects or other pedestrians.  Our glove would serve instead of or in addition to a cane, and would provide more information while being less

Technical platform: Our technological platform of choice is the Arduino. We chose this because our device needs to be portable and needs to be able to make use of input from the proximity sensors and to control the vibration motors on the glove. It also does not require much computational power. The Arduino would also make it easier for us to quickly iterate on technical parameters of the device such as the sensitivity of the proximity detectors or the intensity of the vibration motors to provide the optimal user experience.