Making Things Interactive

May 14, 2008

Final Project: PhytoBot “Augmenting Plant Behavior Through Robotics”

The PhytoBot is a semi-intelligent plant which responds to external stimulus (light intensity and light location) and responds to it as a phototropic plant would. Essentially it is designed as a piece of interactive artwork for operation over a long period of time. The motivation driving this was triggered by the lack of understanding & acceptance of plants as reactive living organisms. Many of us are so used to placing life on merely objects that have visual and audible external responses which can be seen by the naked eye. Plants on the other hand tend to be overlooked as their responses are more drawn out over time and hence we tend to see them as inanimate objects.


The PhytoBot has two degrees of freedom and motion, rotational and angular (from the normal). The rotational range of motion is 360 degrees whereas the vertical/angular range is approximately 70 degrees. The second component of the response is the pulsing lights on the face. The lights pulse from on to off in a smooth glowing fashion as if the plant was breathing. The variance in frequency is driven by the amount of light given to the plant. A fast pulse indicates that the plant is healthy, and a slow pulse indicates that the plant is in need of more light. There are two basic mechanical features within the PhytoBot. When the PhytoBot actively seeks light, it is oriented by two servos in the x and y axes. When the light has been located the plant will twitch depending on how far away the light source is. For example a closer point light will produce more twitching than if the Plant was facing the sun.  

Parts List:

– Plastic Laser Cut Structural Parts
– Foam Petals
– Foam core Box
– 4 Photo sensors
– 1 Green LED
– Wire (Solid core Flexible)
– Cable Wire
– 1 Standard Servo
– 1 Continuous rotation servo
– Screws
– 1 Arduino Microcontroller
– 4 100kOhm resistors
– Circuit boards for soldering components
– Acrylic glue

How it is Built: The PhytoBot is built primarily from laser cut acrylic parts. It was paramount to have my parts laser cut as they needed to fit correctly with minimal error. The whole plant can be divided up into 4 segments, the fixed base, rotating housing, stem and face. Each segment has their specific application and all working together complete the PhytoBot. The fixed base houses the rotational servo which in turn rotates the whole rotating housing. The rotating housing contains the stem servo. This stem servo is attached to the face via a cable wire through the stem. The stem supports the plant as it stands erect and also provides just the right amount of resistance to allow the plant to return to its erect position when not being pulled down. The face contains all the sensors and lights which provide the input and outputs of the whole plant. All the parts barring the petals were glues together using acrylic glue. This provided a strong hold and minimal movement/slop between the moving components.

Currently Im working on making a complete days time lapse video of my plant. Its a lot harder than I thought so the video isnt up as yet


April 15, 2008

Final Project

Currently I have a manually working plant which can rotate from left to right and move up and down with inputs from two potentiometers. I have been having difficulty working with the input values from the photosensor (eliminating noise) and then problems with the servo twitching and not responding correctly to the photosensor values.

int pulse = 0;
int StemServoPin = 10;
int BaseServoPin = 11;
int LED = 5;
long count = 0;
int phi[] = {100};
int theta[] = {180} ;
int buffer = 5000;

void setup() {
  pinMode(StemServoPin, OUTPUT);
  pinMode(BaseServoPin, OUTPUT);
  pinMode(LED, OUTPUT);
  pinMode(0, INPUT);
  pinMode(1, INPUT);

void pulseStemServo(int phi)
  int time;
  time = phi*10+1500;
  digitalWrite(StemServoPin, HIGH);
  digitalWrite(StemServoPin, LOW);

void pulseBaseServo(int theta)
  int time;
  time = theta*0.555+1450;
  digitalWrite(BaseServoPin, HIGH);
  digitalWrite(BaseServoPin, LOW);

int smooth(int buffer, int Pin){
  long sum = 0;
  for(int i = 0; i  100){
    count = 0;}

  phi[count] = smooth(buffer, 0);
  theta[count] = smooth(buffer, 1);




These photos are of my project from Saturday.

Laser Cut Parts before assembly

some of the mounting parts

The base assembled

closeup of the stem which shows the actuator cable

Initial version of the plant which broke


March 25, 2008

Final Project Proposal

Final Project Proposal

I aim to create a robot which represents a stationary living organism i.e. plant, flower, tree etc. The goal is to embed as many life-like, even human characteristics into the organism. As of now I have determined inputs such as light, presence of user, sound (maybe music), and temperature.  These inputs will work together to ultimately drive various responses observed by the user. Some of the outputs I have been thinking of are, actuation, based on presence of user, amount of sunlight received (like a plant, possibly a light following plant like a sunflower), possibly even response to music/loud noise etc. Another output I want to incorporate is visualization of happy/sad emotions through lights and posture. For example, a droopy, blue plant can signify sadness whereas a erect orange plant signifies happiness. Sadness and happiness can be determined through 4 metrics, amount of sunlight received, amount of interaction (not just presence, but change of presence) & loudness of noise (louder leads to negative emotion). The inspiration came from two interactive toys, the Tamaguchi and Digimon. I want to see this artifact being treated just as one would treat a real plant, give it sunlight, water (maybe not this iteration) & even sound.

Parts List

          Photo sensors


          IR or Proximity sensors (need to purchase)

          Microphone (need to purchase)

          Various Resistors


          Servo Motors (need to purchase) w/ Links

          Arduino Microcontroller

          External Power Supply

          Solar Panels (need to purchase)

          Fasteners (need to purchase)


          Materials for building the base, stem, etc.

          String/Wire for actuation


State Diagram



Pseudo code

Initialize Metrics

Calibrate w/ Environment (Light, Noise, Temp)

Initialize Interaction variable

Begin Operating Loop

                Read Inputs, Light, Temp, Sound, Rate Interaction

                Evaluate Emotion Rating (if emotion rating is too low, organism dies and loop exits)

                Output Emotion Module (Drive Light & Rigidity)

                Determine which branch to drive

                Drive Either Follow User, Follow Light or Idle (Drive Servos)

                Return Loop

Flow Chart 



Electric Schematic 

Yet to be decided

 Related Products/Projects 

Here are a few links about Robotany and other products which aim to achieve similar goals:


Create a free website or blog at