Byeong Sam Jeon          Projects    |    Bio / CV    |     Support    |     Link    |    Contact

 

 

   Ten Worlds: Garden of Life  (v2.0)     -{   Video   |   Concept   |   Images   |   Technical Info   }-

 

Previous Project   |   Next Project   

 

Technical Statement

 

The interactive multimedia installation, Ten Worlds: Garden of Life, consists of a garden with live flowers and plants embedded with custom-made water indicating sensor, a water sprayer triggered with a push switch and a temperature sensor, a spotlight controlled by a micro-controller, a video projection system controlled by a micro-controller and Max/MSP/Jitter in a computer, and a set of powered speakers.

 

   

 

When a viewer enters the dark installation space, s/he sees the spotlighted flower garden and the water sprayer on the pedestal at the space.  If the viewer grabs the water sprayer, the person’s body temperature is checked through the sensor.  Then if s/he sprays the flowers, the water indicating sensor hidden in the garden senses the water around the surface of the flowers.  This information goes to a micro-controller to dim down the spotlight.

 

    

 

Behind the scenes, once the micro-controller detects a change in value, it uses this information to do a mathematical calculation.  This formula uses the viewer’s body temperature and the time the person watered the flowers to determine the value that is then sent to a computer controlled by Max/MSP/Jitter.  Next, the software selects a video clip based on the calculation received from the micro-controller.  Finally, the clip fades in on the front wall of the space.  Each clip is 27 seconds.  When it finishes, it fades out to black and the spotlight is dimmed up like beginning.  Now It waits until the viewer sprays the flowers to show another clip.

 

 

// This is the C code #1 (water sensing controller) for the interactive multimedia installation, 'Ten Worlds: Garden of Life'.

 

#include <16F877A.H>                        

#include <math.h>

 

#fuses HS, NOWDT, NOPROTECT, NOBROWNOUT, NOPUT, NOLVP

 

#use delay(clock=20000000)

 

int i;

int mask_portA;

int mask_portC;

int mask_clr;

int mybyteA;

int mybyteC;

 

void main(){

    while(1){

 

        mask_clr = 00000000;  

                                // read input from portA and output to portB

        for(i=0;i<6;i++){               // loop 6 times

            output_b(mask_clr);         // clear portB

            mask_portA = pow(2,i);          // set mask to 2^i (1,2,4,8,16)

            mybyteA = input_a();            // read portA and setting value to mybyteA

            if(mybyteA & mask_portA){       // checking if any pins in portA are high

 

                output_high(PIN_D1);        // output high dip pin #20

                delay_ms(2000);         // delay 1 second

                output_low(PIN_D1);     // output low dip pin #20

                output_high(PIN_D0);        // output high dip pin #19

                delay_ms(2000);         // delay 1 second

                output_low(PIN_D0);     // output low dip pin #19

                

 

                while(mybyteA & mask_portA){    // checking if any pins in portA are high

                    output_b(mybyteA);  // mirror the input of portA to output portB

                    mybyteA = input_a();    // reseting mybyteA to portA

                }

            }

        }

                                // read input from portC and output to portD

        for(i=4;i<8;i++){               // loop 4 times

            output_d(mask_clr);         // clear portD

            mask_portC = pow(2,i);          // set mask to 2^i (16,32,64,128)

            mybyteC = input_c();            // read portC and setting value to mybyteC

            if(mybyteC & mask_portC){       // checking if any pins in portC are high

 

                output_high(PIN_D1);        // output high dip pin #20

                delay_ms(2000);         // delay 1 second

                output_low(PIN_D1);     // output low dip pin #20

                output_high(PIN_D0);        // output high dip pin #19

                delay_ms(2000);         // delay 1 second

                output_low(PIN_D0);     // output low dip pin #19

                

                while(mybyteC & mask_portC){    // checking if any pins in portC are high

                    output_d(mybyteC);  // mirror the input of portC to output portD

                    mybyteC = input_c();    // reseting mybyteC to portD

                }

            }

        }

    }

}

 

 

 

// This is the C code #2 (light controller) for the interactive multimedia installation, 'Ten Worlds: Garden of Life'.

 

#include <12F683.h>

#device ADC=8

#include <STDLIB.h>

#fuses INTRC_IO,NOWDT,NOPROTECT,NOMCLR,NOBROWNOUT,NOIESO,NOFCMEN //uses built-in clock only!

#use delay(clock=8000000)

int i;

int analog_val;

void main(void){

    setup_adc(ADC_CLOCK_INTERNAL);      //analog clock setup

    set_adc_channel(1); 

 

    output_high(PIN_A2);                //yes i'm on

    delay_ms(1000); 

    output_low(PIN_A2);

    delay_ms(1000);

    output_high(PIN_A2);

 

    setup_ccp1(CCP_PWM);                //Enable Pulse Width Modulator Mode

    setup_timer_2(T2_DIV_BY_1, 127, 1);

 

    while(1){

 

        if (input(PIN_A4) == 1)

        {

            for(i=254; i>9; i--)

            {

                set_pwm1_duty(i);

                delay_ms(15);

            }

            delay_ms(32000);

 

            for (i=10; i<255; i++)

            {

                set_pwm1_duty(i);

                delay_ms(25);

            }

        }

        else

        {

            output_high(PIN_A2);

        }

    }

}