Author: Julie Rall

  • Arduino code for Happy Accident 3

    /* 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.

    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

    http://www.arduino.cc/en/Tutorial/Ping

    created 3 Nov 2008
    by David A. Mellis
    modified 30 Aug 2011
    by Tom Igoe

    This example code is in the public domain.

    */
    byte pattern[]={
    B11111111,
    B01111111,
    B00111111,
    B00011111,
    B00001111,
    B00000111,
    B00000011,
    B00000001,
    B00000000,

    };
    byte pattern2[]={
    B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,
    B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,
    B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
    B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
    B00100010,B00100010,B11011100,B10101100,B10101110,B01010000,B00000011,B10101000,B10110101,
    B01010110,B10101110,B10010010,B11011100,B10101100,B01010000,B10101110,B00100010,B10001010,
    B00100010,B11011100,B10101100,B10101110,B01010000,B00000011,B10101000,B01010110,B10011010,
    B10101110,B10010010,B01101100,B10101100,B01010000,B10101110,B00100010,B00010010,B01100101,
    B11011100,B10101100,B10101110,B01010000,B00000001,B10101000,B01010110,B10101110,B10100000,
    B00100010,B00100010,B11011100,B10101100,B10101110,B01010000,B00000011,B10101000,B01101001,
    B01010110,B10101110,B10010010,B11011100,B10101100,B01010000,B10101110,B00100010,B10100110,
    B00100010,B11011100,B10101100,B10101110,B01010000,B00000011,B10101000,B01010110,B10100110,
    B10101110,B10010010,B01101100,B10101100,B01010000,B10101110,B00100010,B00010010,B10110001,
    B11011100,B10101100,B10101110,B01010000,B00000001,B10101000,B01010110,B10101110,B11101101,
    B10010010,B01101110,B10101100,B01010000,B10101110,B00000000,B00000000,B00000000,B00100010,
    B00100010,B00100010,B11011100,B10101100,B10101110,B01010000,B00000011,B10101000,B10110101,
    B11011100,B10101100,B10101110,B01010000,B00000001,B10101000,B01010110,B10101110,B10100000,
    B00100010,B00100010,B11011100,B10101100,B10101110,B01010000,B00000011,B10101000,B01101001,
    B01010110,B10101110,B10010010,B11011100,B10101100,B01010000,B10101110,B00100010,B10100110,
    B00100010,B11011100,B10101100,B10101110,B01010000,B00000011,B10101000,B01010110,B10100110,
    B10101110,B10010010,B01101100,B10101100,B01010000,B10101110,B00100010,B00010010,B10110001,
    B11011100,B10101100,B10101110,B01010000,B00000001,B10101000,B01010110,B10101110,B11101101,
    B10010010,B01101110,B10101100,B01010000,B10101110,B00000000,B00000000,B00000000,B00100010,
    B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,
    B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,

    };
    #define NUM_REGISTERS 8
    #define MAX_PATTERN (((sizeof(pattern2)/sizeof(byte))/NUM_REGISTERS) -2 )
    //#define MAX_PATTERN (sizeof(pattern2)/sizeof(byte))
    // this constant won't change. It's the pin number
    // of the sensor's output:
    const int pingPin = 7;
    #define CLOCK 12
    #define LATCH 8
    #define DATA 10
    void setup() {
    // initialize serial communication:
    Serial.begin(57600);
    pinMode(CLOCK,OUTPUT);
    pinMode (LATCH, OUTPUT);
    pinMode ( DATA,OUTPUT);
    }
    long int lastMovement=0;
    long int lastDistance=0;
    void loop()
    {
    // establish variables for duration of the ping,
    // and the distance result in inches and centimeters:
    long duration, inches, cm;
    int output,rn;

    // 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);
    if ( cm 125)cm=125;
    if (lastDistance != cm) {
    lastDistance=cm;
    lastMovement=millis();
    }
    Serial.print(cm);
    Serial.print(" cm, ");
    output=map(cm,0,125,0,MAX_PATTERN);
    Serial.print(output);

    // Serial.print(cm);
    digitalWrite (LATCH, LOW);
    //shiftOut(DATA,CLOCK,LSBFIRST,~(1<>cm));
    //delay(1000);
    for (rn=0;rn 2000) {
    delay(60); // one thing to try. //output=MAX_PATTERN+1;
    } else {
    delay(100+random(200));
    }

    }

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

  • Light sculpture hooked up to the ping and software from my last project.
    It would be great if we could have a little group show at PNCA. I could bring this piece and the last class project.

  • fiber optic filaments

    Does anyone have any extra fiber optic filaments I could play with?

  • Light sculpture

    Control a light sculpture without a laptop. Create an interactive sequence of lights that looks animated.