Weatherbe (working title)

WEATHERBE – by Demi Kandylis, Ryan Rizzo and Heather Phenix


Our inspiration for the Weatherbe project was informed by nature, and the desire to render the weather into an artistic and comparative visualization of data from a specific set of cities across the globe. But why? For one, we found the important connection between weather and mood in humans to be intriguing, and the notion of how the relationship with one’s self can be deeply affected by weather patterns that are very much beyond our control. We thought about how weather is an increasingly common topic of conversation – often the basis of small talk – and more often the basis of important discussions surrounding disaster and the never-ending influx of opinions on global warming. It’s often the marker of how favourable a city is to live in, how we relate to each others’ state of being, whether together or apart, and how we decide on anything from which modes of transport to use, to how many layers to wear on a daily basis. Weather, in some ways, can be considered as central to how we live our lives as time.


When thinking about what kind of data visualizations could do justice to such a force, we realized that sometimes the most simple, uniform things can be the most effective. Our data sets needed to be representative of motion in an interesting way. We delved into creating mesmerizing simplicity of changing and interconnected shapes, and were inspired by Matthew and Susan Gorbet’s Chronos and Kairos project,  “a robotic suspended sculpture located at Gate 19 of the San Jose International Airport. An abstract timepiece. The choreographed movement of 65 suspended aluminum elements depict varying representations of time.”

Overall, we set out to play with temperature, wind speed, humidity and wind direction. We needed to create sketches that could build – increase and decrease – over time when fed weather API’s from cities of our choice…which brought us to our next question…which cities?

We thought in terms of our audience – the most relatively interesting cities would naturally be those of our classmates…displaying the mild, November humidity of Tehran, juxtaposed with the icy, snowy winds of Saskatoon, the dry desert heat of Beersheba, and the moderately cold Toronto would surely hit the mark.

Additional inspirations below:

Data vis- modern approaches

Data vis processing code from Ben Fry (author of visualizing data)

Khan Academy

IBM think Exhibit Data Wall

Amon Tobin’s show


Curtain (like Harjot’s Kinect project)





In creating the Weatherbee project, with the assigned wireless criteria in mind, we set out first to work together on creating something simple, that could be represented wirelessly through various forms of digital and physical light. The digital came first. Ryan and I discussed with Demi that our main goal for the project was to contribute to the coding, since this was not our strength and it was his. We discussed the use of projected light on mirrors, and looked at various examples of code that we found interesting to play with:

Things got particularly frustrating when it came to the code. Ryan and I could create simple shapes that moved, but for whatever the reasons were, we never got to the point of implementing our work into the final product. Little did we know, Demi had been toiling away on a visualization that seemed to check the boxes for all of us in terms of its aesthetics. Here is the code he used:


class Particle {
PVector location;
PVector velocity;
PVector acceleration;
float lifespan;
float wind;
PVector dir;
float temp;
float hum;
color col;

Particle(PVector l, float curLifespan) {
acceleration = new PVector(0,0.07);
velocity = new PVector(random(-1,1),random(-

location = l.get();
lifespan = curLifespan;
}void run(WeatherObject wo) {wind = map(wo.wind,0,100,0,.5);
dir = wo.dir;
temp = wo.temp;
hum = wo.hum;
col = wo.col;update();
}void update() {location.add(dir);
velocity.add(new PVector(wind*dir.x,wind*dir.y));
lifespan -= 2.0;
}void display() {
}boolean isDead() {
if (lifespan < 0.0) {
return true;
} else {
return false;
}class ParticleSystem {
ArrayList<Particle> particles;
float curLifespan = 400;

ParticleSystem() {
particles = new ArrayList<Particle>();

void addParticle() {
particles.add(new Particle(new PVector(width/2,50),curLifespan));

void run(int w, PVector d, int t, int h) {
Iterator<Particle> it = particles.iterator();
while (it.hasNext()) {
Particle p =;
if (p.isDead()) {

class WeatherObject
String city;
float wind;
PVector dir;
float temp;
float hum;
color col;

void WeatherObject()


class XbeeMultiLightControl implements Runnable

int N = 0;
int NE = 1;
int E = 2;
int SE = 3;
int S = 4;
int SW = 5;
int W = 6;
int NW = 7;

int rVal = 100;
int gVal = 0;
int bVal = 0;

int fadeSpeed = 50;
int pulse = 10;

int[] payload;

boolean isRunning;

XBeeAddress64[] addr;

XBee xbee;

void XbeeMultiLightControl() {


void init()

addr = new XBeeAddress64[4];
addr[0] = new XBeeAddress64(“00 13 a2 00 40 98 99 85”);
addr[1] = new XBeeAddress64(“00 13 a2 00 40 98 99 8c”);
addr[2] = new XBeeAddress64(“00 13 a2 00 40 98 99 83”);
addr[3] = new XBeeAddress64(“00 13 a2 00 40 92 d7 c7”);

xbee = new XBee();

try {[0], 9600);
}  catch (Exception e) {
System.out.println(“XBee failed to initialize”);


void pulsate(int dir, int rv, int gv, int bv,int speed, int pulse)
fadeSpeed = speed;

payload = new int[] {rv, gv, bv, speed, pulse};


void run()
if (!isRunning)
//isRunning = true;
sendValue(addr[0], payload);
sendValue(addr[1], payload);
sendValue(addr[2], payload);
sendValue(addr[3], payload);

println(” thread is done!”);
//isRunning = false;

void sendValue(XBeeAddress64 addr64, int[] payload)

ZNetTxRequest tx = new ZNetTxRequest(addr64, payload);


ZNetTxStatusResponse status = (ZNetTxStatusResponse) xbee.sendSynchronous(tx, 500);
if (status.isSuccess()) {


} catch (XBeeException e) {

And here is how it looked:
Demi created the Xbee setup which consisted initially of 4 breadboards with 2 LED’s each connected to 4 individual Xbees drawing from 4 rotating weather APIs. Lights were programmed to change colours according to the colour of the weather data being displayed on screen, which corresponded to weather API’s from 4 different cities (Tehran, Toronto, Bersheeba, Saskatoon). This weather data on screen was represented by a continuous loop of interconnected floating triangles, again, colour corresponding to individual city weather data, and direction and speed corresponding to wind direction and velocity from the weather APIs. Ryan and I toyed with a variety of light setups, and finally settled on using cubes with draft paper and cardboard as a base.
There are many situations where we feel the Weatherbe could be a valuable installation, both indoors and outdoors. Whether displayed at an intersection on north, south, east and west corners of University ave, at an airport or a train terminal, there are many reasons you may be interested in “seeing” the weather. Maybe you’re in a controlled environment, like a car or an office building, and you want to know what it feels like outside. Maybe you’re waiting to board a plane and you want a quick overview of the current weather in the city you’re traveling to relative to where you are now. Or maybe you’re interested in having a smaller version of the installation in your home, representing cities that mean something to you, or to people you care about.
We think Weatherbe presents an efficient, vivid and beautiful way to experience the weather. It’s a unique way to visualize how the weather feels in various cities simultaneously, providing an accurate scope of various pieces of weather data with one simple display technique.

Comments are closed.