As computing becomes more ubiquitous in our objects, designers need to be more aware of how to design meaningful interactions into electronically enhanced objects. At the University of Washington, a class of junior Interaction Design majors is exploring this question. These pages chronicle their efforts.

Wednesday, June 10, 2015

Code // Nick Ricci & Naoki Hisamoto

This is the completed code for our project. It took various parts from various places.

/* //~~~~~~~~~~Description~~~~~~~~~~~~//

  Ping))) Sensor
 
   This sketch reads a PING))) ultrasonic rangefinder and returns the
    distance to the closest object in range. To do this, it sends a pulse
    to the sensor to initiate a reading, then listens for a pulse
   to return.  The length of the returning pulse is proportional to
   the distance of the object from the sensor. \

   This distance variable is used to fade the LED proportional to the

   distance of the object.

     
    The circuit:
     * +V connection of the PING))) attached to +5V
     * GND connection of the PING))) attached to ground
     * SIG connection of the PING))) attached to digital pin 7
     * LED connected to pin 9 (PWM)

  //~~~~~~~~~~~~~~~~~~~~~~~~~~~//  
    Created 3 Nov 2008
    by David A. Mellis
    Modified 30 Aug 2011
    by Tom Igoe

    Modified 25 Dec 2011
    by Ritesh Kanjee
    This example code is in the public domain.
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~//

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
 */


// this constant won't change.  It's the pin number
// of the sensor's output:
const int pingPin = 10;
// connected to the base of the transistor
const int transistorPin = 9;  
int focusrelay = 7;
int shutterrelay = 6;
int  fadeValue, fadeValue2 ;


void setup()

  {
      // initialize serial communication:
         Serial.begin(9600);
         pinMode(transistorPin, OUTPUT);
         pinMode(focusrelay, OUTPUT);
         pinMode(shutterrelay, OUTPUT);
         analogWrite(transistorPin, 30);
   }

void loop()
 {

//-------------Get-Distance-----------------------------//
   // establish variables for duration of the ping,
  // and the distance result in inches and centimeters:
   long duration, inches, cm, cm2;

  // The PING))) is triggered by a HIGH pulse of 2 or more microseconds.
   // Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
     pinMode(pingPin, OUTPUT);
     digitalWrite(pingPin, LOW);
     delayMicroseconds(2);
     digitalWrite(pingPin, HIGH);
     delayMicroseconds(5);
     digitalWrite(pingPin, LOW);

  // The same pin is used to read the signal from the PING))): a HIGH
  // pulse whose duration is the time (in microseconds) from the sending
  // of the ping to the reception of its echo off of an object.
     pinMode(pingPin, INPUT);
    duration = pulseIn(pingPin, HIGH);

  // convert the time into a distance
     inches = microsecondsToInches(duration);
     cm = microsecondsToCentimeters(duration);
  //-------------End-Get-Distance----------------------------//


  //-------------Fading-LED------------------------------//
  // If Distance is 90 cm then do the following:
  if (cm==90)  

 {    


  // LED brightens from dimmed state
  for (int brightness = 30; brightness < 255; brightness++) {
      analogWrite(transistorPin, brightness);
      delay(10);
    }
        // Relays triggered to take picture
        digitalWrite(focusrelay, HIGH);  
        delay(200);
        digitalWrite(shutterrelay, HIGH);  
        delay(1000);            
     
    delay(2000);
  // LED returns to dimmed state
  for (int brightness = 255; brightness >= 30; brightness--) {
      analogWrite(transistorPin, brightness);
      delay(10);
    }
         // Relays turn off
         digitalWrite(focusrelay, LOW);  
         digitalWrite(shutterrelay, LOW);  
         delay(1000);            
    delay(2000);
 }
 //If distance is not 90cm then lamp remains in dimmed lighting
 else
 {
   analogWrite(transistorPin, 30);

 }
 //-------------End-Fading-LED-----------------------------//




 //-------------Debugging-------------------------------//
   //For debugging purposes

    Serial.print(inches);
    Serial.print("in, ");
    Serial.print(cm);
    Serial.print("cm");
    Serial.println();
    Serial.print("Centi 2  :");
    Serial.print(  fadeValue2 );

   Serial.println();
//-------------End-Debugging------------------------------//

 
  delay(10);  // Short Delay allows for smoother fading

 }  //End Loop



//-------------Functions-------------------------------//
long microsecondsToInches(long microseconds)
 {
   // According to Parallax's datasheet for the PING))), there are
   // 73.746 microseconds per inch (i.e. sound travels at 1130 feet per
   // second).  This gives the distance travelled by the ping, outbound
   // and return, so we divide by 2 to get the distance of the obstacle.
   // See: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
   return microseconds / 74 / 2;
 }

long microsecondsToCentimeters(long microseconds)
 {
   // The speed of sound is 340 m/s or 29 microseconds per centimeter.
   // The ping travels out and back, so to find the distance of the
   // object we take half of the distance travelled.
   return microseconds / 29 / 2;
 }

 //------------End-Functions-------------------------------//



//End Of Program

No comments:

Post a Comment