This blog is dedicated to my Final Year Project which will be an Urban Installation created in an abandoned house, where the 4 seasons are unleashed. Within this blog, you will know how my project has progressed including the problems which I will encounter and also the development of my final piece - Hafiza :D

Tuesday, 18 May 2010

3D Model of Installation

I have designed a 3D model of my installation. This was a last minute idea of how I could visualise my installation piece.


Note: The model was not made to scale.

Sunday, 16 May 2010

Final Installation Footage

My final year project is complete. Here is a video footage of the whole installation:
The turntable is set to loop the instructions for the animations. The above video footage shows the loop twice.

The footage below is the projector view of the installation. The camcorder is placed on top of the projector whilst recording:

Final Year Project Complete: The seasons have been unleashed in a abandoned house. Combination of Wallpaper Cutouts, Fine Line Drawing Details and Simple stop frame silhouette animations projected onto the walls whilst rotating on my home-made turntable which has been coded in Processing.


Further Development of the Season Walls

Deadline date is coming closer and I am not happy about the outcome of the season walls. My aim is to have one wall completely finished and therefore have chosen to work with the Spring Wall.


This is how the wall looks at the moment:



I am happy with the detail added to the foreground, however the right hand side and centre box I am not happy with. I just think it doesn't feel right and therefore it doesn't work.


After discussing this with my tutor, I decided to just rip down the cutouts I don't like (which is the whole of the right side and the centre box.


I have now decided to just have a foreground with fine detail work like the tree and grass shown in the photograph above and have a middle ground which will be detailed but just using charcoal to symbolise its distance from the foreground. And the background will in fact be the wall itself.


This is now my complete Spring Wall:


I have painted the centre box in grey. As you can see that I have light and dark areas, this is created by using black and white paint but not to mix then. I just dripped the paint brush in white and then black paint and just started making strokes to get this effect. I thought this world look better than having just one shade of grey.


Along the bottom I had added detailed cutouts of daffodils and tulips to symbolise that is wall is spring, because previously it just looked like a landscape.


Although, I spend a lot of time making the cutouts for this wall, and then ripping them off and re-doing then, this Spring wall now complete looks simple but great and I am happier with the way the wall looks now.


This is what the Summer wall looks like at the moment:



This is what the Summer wall looks like after the further development:

As you can see that I have taken out the river and also the waterfall, instead I have placed a middle ground and also continued the grass from the spring wall.


I have also added detailed sunflowers along the bottom of the wall.

This is the detailed line drawing of the sunflowers.


This is how the detailed drawings looks when pasted onto the walls.


This is how the Autumn wall looks like at the moment:

I like the look of the left hand side of this wall. There will only be changing the right hand side.


This is what the Autumn Wall looks like after the further development:

Rather than adding detailed drawings, I added dried autumn leaves, which I had collected last Autumn and pasted them on the wall and along the bottom of the wall. I then spray painted them white. I have drawn onto the wall to add detail of the cutouts already pasted. The hill on the left hand side is continued from the summer wall.


Here is a close up of the leaves:



This is the Winter Wall at the moment:

I am happy with this wall, therefore will not change it. I will add cutouts of snowflakes and layer them along the bottom of the wall rather than adding detail. The cutouts themselves will be quite detailed.


This is the complete winter wall:

The back wall on the right hand side was also supposed to be part of the winter wall, however due to health and safety risk factors I chose not to use the back wall.


I am happy with the wallpaper cutouts of all the walls. Spring and Winter walls are both complete, however for Summer and Autumn, I need to add fine detail onto the large tree. I left this till I have time as it is very time-consuming.

Saturday, 15 May 2010

Turntable Complete and working Successfully

The turntable is working successfully and is following instructions without any problems or jittering.

Here is a video showing how the turntable is working:

The instructions for rotating the turntable and playing animations,etc are set to reset once the last video is played. The video above shows the whole loop twice.

But you can see from the video that the turntable is working fine, with no jittering and the animations are playing when told to do so.

The projector that I am using for this, is not the same as the one I have been working with. This was the only one available, but since it is smaller and lighter it worked fine.


Thursday, 13 May 2010

Summary of Special Study

Stage One:

For stage one, I have constructed a rotating turntable. I have succeeded in this because I have managed to construct a very stable turntable. In addition, I have also added a laser and light sensor to the platforms to reset the co-ordinations just in case the co-ordination values over shoot the maximum value.

To begin with, I had researched into the ways in which I could construct a turntable. I then decided to build the whole thing and use a stepping motor to get the turntable to rotate.

In order to successfully complete this stage of the special study, I would like to thank my tutors, Spencer and Jay, and also to Andy (Master's Student) for their suggestions and recommendations. I would also like to thank Simon from the workshop department at the University of Huddersfield, who cut out my boards for me and also for the metal clog cutout and filing the top end of the stepping motor.

With all the suggestions and recommendations made by Spencer, Jay and Andy, I put all the ideas together to build the turntable.

The second bit of this stage was to make a circuit board that is used to communicate between the Arduino Program, Arduino board and the stepping motor. I used 4 relays that represented each step equalling to 4 steps. Once I had the breadboard working successfully. I used a soldering iron to soldered the wires and relays in place on a stripboard in order to make the circuit permanent.

This bit was the electronic side to my special study and I enjoyed soldering considering it was my first experience. I got the hang of it and managed to complete this bit in one day and at a later date then deciding to add the laser and light sensor, I soldered these into place too without a problem.

Problems Encountered:

The only problem I had during this stage was to somehow balance and hold the weight of the projector on the turntable and to run smoothly. Ball-bearings was the answer to this. I therefore, I planned and experimented the different ways in which I could place the ball-bearings which causing a lot of friction. In the end, the most successful idea was to create a ring-track in which I would place the ball-bearings. I used 78 12mm ball-bearings to form a single line ring around the centre of the stepping motor.

Stage Two:

Stage Two of the special study is the coding, getting the turntable to follow instructions by rotating to specific co-ordinations and stopping. Playing an animation and wait for the next instructions.

The first bit of coding was to get the turntable to rotate. This was completed successfully when I first started working on the first stage of the special study.

The second bit of coding was to get the turntable to display co-ordinations and setting the specific co-ordinations. After this, the next bit of coding was to load the animations when the turntable has reached to the specific co-ordination. This was controlled by 'Mouse Click' functions.

Once I had achieved this, I decided to have the turntable rotating whilst playing some of the animations. For the other animations, the turntable would rotate to the specific co-ordination and then play the animations.

This was the third and final bit of coding completed in order to get the turntable to rotate whilst playing animations and also to stop and then play animations.

Problems Encountered:

The main problem I had with this stage was the jittering caused due to the magnets in the relays used on my circuit. However, this was solved by replacing the relays with a stepping motor controller drive IC. Although, I was just replacing the relays with this one chip, I had to re-wire and re-solder the whole circuit in order to get it to work again. During my first attempt, I fried the IC chip and also the main power supply and therefore had to replace both of these. But during my second attempt, everything was working successfully.

Even after the new circuit was in place, I still got slight jittering. However, this time it was very little compared to before. But I managed to track this down to the ball-bearings as I had experienced this problem towards the end of stage one. At one point of the special study, I had removed the ball-bearings as the turntable was working fine. However at this point, the ball-bearings needed to be in place to be able to hold and balance the weight of the projector and to run smoothly. Once the ball-bearings were back in place, the jittering stopped and the turntable was working fine.

I'd say that coding is not one of my strengths, however, I have learnt and gained a lot of knowledge of coding and how it works and also the basic knowledge of electronics.

New Concept Use for Turntable

As I have previously mentioned in the 'Animations Completed So Far' post that I was thinking of changing the way the turntable works. At the moment, the turntable is set to follow instructions based on clicks of the mouse. In addition to the clicks, the turntable will rotate to specific co-ordinations, stop and play an animation set to that co-ordination and wait for next instructions.

However, after spending another 3 hours working on the code with Spencer, the turntable will now automatically rotate to a set co-ordination whilst playing an animation. Once it has reached to the co-ordinations, the current running animation will end and another animation will play. I can set the variables of the animations on whether I want the animations to rotate with the turntable or to get the turntable to rotate to the specific co-ordination and then play the animation.

Some of the animations will be static (i.e. stay in the same place and play) or moving (i.e. play with the turntable rotating).

The coding for this concept was quite difficult and complicated. There wasn't really a simple way around it either. However, finally after 3 hours of coding and testing, the turntable is now working as instructed to the new set of coding.

Here is the full coding of Processing:
This is how I am instructing the turntable to rotate and play the animations, etc.
I have added notes to those areas of the coding to explains how this concept works.

import processing.serial.*;

import jmcvideo.*;
import processing.opengl.*;
import javax.media.opengl.*;
int fcount=0;
int clickedval=0;
int first=1;
int cansend=1;
int playing=0;
int coords=0;
String thisSlice="";
String lastSlice="";
String showVal;
//PImage maskthing;
int xpos=0;
int incval=1;
JMCMovieGL myMovie;
JMCMovieGL myMovie2;
PFont myFont;
int pvw, pvh;
Serial myport;
int[] coordinates={0,20,30,30,40,50,0}; //specific co-ordinations
String[] movs={"bird.mov","sky_divers.mov","01_squirrel.mov","02_squirrel.mov","leaves.mov","snow_falling.mov","blank.mov"};
//List of all the videos that will be loaded when requested to. They are listed in order of the specific co-ordinations.
int[] doesMove={1,0,1,0,1,0,1}; //States whether the animation is Static or moving. 1=Moving 0=Static. The order of these are listed in order for the animations and co-ordinations above.
String lastVideo=""; //Variable for last animation
int goPlace=0; //Variable for setting target co-ordination
int triggerVid=1; //1 or 0 (true or false)
int offsetter=0;
int vidNum = 0;

All the coding above is setting variables that will be used in statements below.

void setup() {
size(800,600, OPENGL);
frame.setResizable(true);
background(255);
myport=new Serial(this, Serial.list()[0],9600);
myMovie = movieFromDataPath("bird.mov");
myMovie.loop();
myFont = createFont("FFScala", 32);
//maskthing=loadImage("mask.png");
textFont(myFont);

}

void draw()
{
background(255);
if(doesMove[clickedval]==0 && playing==1){
if(myMovie.getPlaybackPercentage()>.99){
println("movie finished");
clickedval=clickedval+1;
goPlace=goPlace+1;
println("interested in mov:"+movs[clickedval]+" goplace="+coordinates[clickedval]+" doesmove="+doesMove[clickedval]);
triggerVid=1;
cansend=1;
if(doesMove[clickedval]==1){
offsetter=-1;
}
The above coding is basically telling the turntable to rotate automatically and to jump to the next co-ordination that are stated above. It also tells Arduino to print line the following statements:

"interested in mov:"+movs[clickedval]+" //
"goplace="+coordinates[clickedval]+" //
"doesmove="+doesMove[clickedval]" //

With these statements printing, I can tell that code is working.
}
}

if(triggerVid==1 && cansend==1){
println("triggering");
cansend=0;
triggerVid=0;
clickedval=goPlace;
println("in range");

if(doesMove[clickedval]==1){
myport.write(coordinates[(clickedval+1)+offsetter]);
offsetter=0;

//The coding above is telling the turntable to rotate to the next co-ordination

if(!lastVideo.equals("blank.mov")){ //if its not the last video,
if(first==0) myMovie.dispose(); //dispose the video, this is so this concept does not slow down whilst repeating the whole instructions.
myMovie = movieFromDataPath(movs[clickedval]);
//delay(200);
first=0;
lastVideo=movs[clickedval];
myMovie.loop();
}
playing=1;
}
//The above coding instructs the animation to play and loop as it is rotating with the turntable.
println("c="+coordinates[clickedval]);
if(doesMove[clickedval]==0){
playing=0;
myport.write(coordinates[clickedval]);
}
}

if(myport.available()>0){
int dat=myport.read();

if(dat==13){
//println(thisSlice);
if(thisSlice.length()==4){
println("playvideo");
if(lastVideo.equals("blank.mov")){
offsetter=0;
goPlace=0;
triggerVid=1;
cansend=1;
lastVideo="";
clickedval=0;
}
//The above coding is instructing the turntable that if the last video is "blank.mov" reset all the variables.

else{
if(clickedval>-1 && doesMove[clickedval]==1){
if(!lastVideo.equals("blank.mov")){
clickedval=clickedval+1;
goPlace=goPlace+1;
//If its not the last video "blank.mov" then go to the next co-ordinations and plus one.
println("Loading:"+movs[clickedval]);
if(!lastVideo.equals(movs[clickedval])){
if(first==0) myMovie.dispose();
myMovie = movieFromDataPath(movs[clickedval]);
//delay(200);
first=0;
lastVideo=movs[clickedval];
myMovie.play();
}
playing=1;
}
}

//The above coding is telling the turntable to play the animation to the next co-ordination whilst rotating.
if(clickedval>-1 && doesMove[clickedval]==0){
// clickedval=clickedval+1;
// goPlace=goPlace+1;
println("Loading:"+movs[clickedval]);
if(!lastVideo.equals(movs[clickedval])){
if(first==0) myMovie.dispose();
myMovie = movieFromDataPath(movs[clickedval]);
//delay(200);
first=0;
lastVideo=movs[clickedval];
myMovie.play();
}
playing=1;
}
}
}
lastSlice=thisSlice;
thisSlice="";
}else{
thisSlice=thisSlice+char(dat);
}
}
if(playing==1){
if(myMovie.getPlaybackPercentage()>.01){ //This tells processing to play the animation but missing the first few frames. This was added to stop the animations flickering in between each animations.
PGraphicsOpenGL pgl = (PGraphicsOpenGL) g;

GL gl = pgl.beginGL();
{
if (pvw != width || pvh != height)
{
background(255);
gl.glViewport(xpos,0, width, height);
pvw = width;
pvh = height;
}
if(xpos>1600){
xpos=-800;
}
background(255);
gl.glViewport(xpos,0, width, height);
myMovie.centerImage(gl);
// xpos=xpos+incval;
}
pgl.endGL();
}
}

//image(maskthing,0,0);
stroke(255);
fill(255);
if(lastSlice.length()<4){
showVal=lastSlice;
}

//The above coding is used to mask the animation when being played.

fill(100);
text(showVal,390,30);

for(int lop=0;lop
rect(10+(lop*20),20,10,10);
//The coding above is for the text of the co-ordination that is displayed when running Processing and also for the rectangles that are drawn for each of the specific co-ordinations displayed in the top left hand side of the screen. For the final run of this coding I will delete these as these won't be necessary.

if(mousePressed==false){
cansend=1;
}
if(mousePressed==true && cansend==1){
println("got click");
if((mouseY>20 && mouseY<30)>10+(lop*20) && mouseX<20+(lop*20))){
cansend=0;
clickedval=lop;
println("in range");
myport.write(coordinates[lop]);
println("c="+coordinates[lop]);
playing=0;
}
}
}
//////
}

JMCMovieGL movieFromDataPath(String filename)
{
return new JMCMovieGL(this, filename, RGB);
}

The whole of the coding above plays the animations that I have done so far. If I add more animations, all I will need to do is to add in the co-ordinations and whether the animation is static or moving at the top of the coding and also add the name of the file to the list.

Monday, 10 May 2010

Solution Solved of last minute problem

I had previously mentioned about the last minute problem that I encountered with my turntable.
Problem: Jittering of turntable.

Cause: The jittering is due to the magnetic switching of the relays.

Solution: To use a Stepping Motor Controller Driver IC instead of the relays.

Here is a photograph of the new stripboard I made using a single IC chip to control the four steps in the stepping motor:
The black chip on the stripboard is the Stepping Motor Controller Driver IC. One side is equal to two relays. The live line is for the two Enable pins on the IC and also the Arduino live wire.
The live line 2 is for the main power supply and also for the two power pins on the IC. The ground line is the ground for all of the circuit. You can also see how the stepping motor wires are connected onto the stripboard.

Here is a photograph of the Arduino:
I used 0.1 inch Header Plugs to solder the wires onto the Arduino, this way I don't need to solder onto the Arduino.

Here is a video of the turntable now working successfully without the jittering that I had previous encountered:




I did not have the projector with me therefore could not test it with the projector. But in replacement of the projector I used 4 bags of sugar. Each bag weighs 1kg therefore, if in total the turntable is holding the weight of 4kg and is running smoothly.

Saturday, 8 May 2010

Daffodils & Tulips

Here are the detailed daffodils I drew for the bottom of spring wall:

Opened & Closed Tulip: These images are set out so the largest and sharpest would be up front on the wall, and the smaller one in less contrast will be slightly behind.

Here is a photograph of how I layered the daffodils:
In order to create many of these cutouts, I drew two different positioned daffodils, scanned them and edited them in Photoshop to sharpen them. I printed the drawings on cartridge paper and whilst pasting them up, the paste brought out colour of the inks. There are hints of greens and magentas on the flowers. However, overall they work well.

Here is a photograph of the Spring Wall (side view):


Friday, 7 May 2010

Snow Animation

This is a Visual Video of the Snow animation:

This is the video of the animation that will be projected onto the wall:


Monday, 3 May 2010

Location Test Runs of Turntable

Here is a Video footage of the turntable set up at the location:


From this video you can see how the coding (stage two of special study) works.

Here is a long video footage of the whole installation:

As you can see that the turntable still jittered in certain places. I have brought the IC that will solve this issue. I am still waiting for it to be posted. But once I receive it, this problem shouldn't happen again.

Other than that, everything else is working successfully.

As you can see from the videos above that some of the animations are played at wrong co-ordinates. I set the co-ordinates for the animations at random to test the whole process. However, once I have the jittering sorted I will find the accurate positions for the animations and set them instead.


Sunday, 2 May 2010

Last Minute Problem Encountered with Turntable

I have encountered a last minute problem with the turntable. I have been running the turntable it has been working fine and responding to the instructions given. However, there is a slight jittering problem where the turntable would get stuck in its place and jitter from side to side but in the same spot.

After running this a few times, I started to notice a pattern in the jittering. At first, I tested the turntable with no weight on it, and it runs smoothly. Following instructions without any problem or jittering.

Here is a video footage of the above statement:


Here is a video footage of the turntable jittering, then working smoothly and then ending with jittering:


I have managed to track down the cause of the jittering. The problem is in one of the relays that are on my stripboard. The jittering is due to the magnetic switching of the relays.

I am now planning to use an IC which is a Stepping Motor Controller Driver to compensate this problem. The IC has no magnetic components therefore this problem will not occur again.

I have purchased the IC from eBay today and will have this problem solved by end of this week.

Saturday, 1 May 2010

Animations Complete So Far...

These are the first few animation clips that will be projected onto the walls at the location.

They are simple, silhouette stop frame animations so they work well with the wallpaper cutouts that have been pasted onto the walls at the Location.

Loading Animations:
At the moment, you select a co-ordination, the turntable rotates to that position, stops, and plays the animation. I am thinking to change this to playing the animation at a starting co-ordination and continue playing animation till an ending co-ordination so the turntable rotates but the animation stays in its place.

These animations are finalised to that idea. So now all I have to do is work out the exact co-ordination of the start and end positions for the animations and add them into Processing.

This is my final animation of the sky-divers that will be projected onto the Summer Wall on top of the cutout of the waterfall.


This is the animation of the leaves falling off the tree on the Autumn wall. The animation will be projected from the tree and across the river.


This is the animation of the squirrel running along the Spring Wall, eating and then running off.


This is the animation of the bird that will be flying across Spring to the Summer wall before disappearing off the projection screen.