Friday, December 9, 2011

Medical Ring Design








Recently I have started working at a custom jewelry design company. This project is for a client that has issues with a joint on her left hand. The original device was given to her by her physician. However I was approached by my employer to redesign the device because the client wanted to mask her device as jewelry. The lower two images are the original device and the top three are the ones I have designed. The entire project was scripted using grasshopper for rhino and rhino gold for ring sizing.

Thursday, February 17, 2011

Phenomenology Project

This was a project for the phenomenology research center at Southern Illinois University Carbondale. The objective was to design a bookshelf that responded to the space and individuals that occupy the space at any given time. The forms where derived through the studies of magnetic attraction, based on time. the primary tools that where used are MAYA, Real flow, Rhino, and grasshopper.









Sunday, February 6, 2011

Arduino Servo Control

A sketch to drive an arbitrary number of stepper motors and control each one of them independently with potentiometers. It should be able to drive one motor for each available analog input. The sketch uses no libraries, the motors are driven by PWM signals.


// Many Servos no libraries by using arrays, sketch by Fp-2010.
// Change next three to match number of servos, servo pins and pot pins.
const int totalServos=2; // used in the 'for' loops below
const int theServos[]={7,8}; // pins connected to servos
const int thePots[]={4,3}; // pins connected to pots

const int refreshServo=20; // 20mS servo refresh cycle
long servoSpeed[20]; // stores potentiometer values
long pulseWidths[20]; // stores pulseWidths for each servo
long prevPulse[20]; // keeps track of last pulse

void setup(){
     for (int i=0; i < totalServos; i++) { // for every servo
     pinMode(theServos[i],OUTPUT); // declare servo pins as outputs
     pinMode(thePots[i], INPUT); } // declare pot pins as inputs
}

void loop(){
    for (int i=0; i < totalServos; i++) { // for every servo
      servoSpeed[i] = analogRead(thePots[i]); // set speed to pot value
        doServo(theServos[i],servoSpeed[i]);   // move servo
     }
}

void doServo(int thisPin, long pulseWidth){
    pulseWidths[thisPin] = map(pulseWidth,0,1023,560,2310); // map pot input to pulse width range
    if (millis() - prevPulse[thisPin] >= refreshServo){
    prevPulse[thisPin] = millis();
    digitalWrite(thisPin,HIGH);
    delayMicroseconds(pulseWidths[thisPin]);
    digitalWrite(thisPin,LOW); }
}