Physical Computing Midterm Project, SVA Interaction Design MFA
Matthew Brigante & Sneha Pai

The Weatherbox is a desk or bedside companion that displays an ambient and abstract light-based representation of the temperature and wind-speed outside your window. Throughout the seasons, it will reflect meaningful shifts in temperature with a specific color of LED light emitted for each incremental range.

A reading that is below 35 degrees fahrenheit will be represented by blue lights on both ends of the Weatherbox. For every 15-20 degrees increase in temperature, the Weatherbox will output a warmer color of light. The warmest outdoor temperatures of 80-110 degrees will output a red light. The center panel of the Weatherbox displays the rate of outdoor wind speed with an animated LED array that changes the speed of animation based on the rate of wind passing by your window.

Method

For the wind aspect of the Weatherbox, we used a wind sensor (from Modern Device).

For the temperature aspect, we used a TMP 36 temperature sensor (from Sparkfun).

Arduino code

For temperature sensor:

```int redPin = 11;
int greenPin = 10;
int bluePin = 9;
const int tmp= A0;
void setup()
{
pinMode(bluePin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(redPin, OUTPUT);
Serial.begin(9600);
}
void loop()
{
float mVoltage = sensorValue * 5000.0/1024.0;
float tmpC = (mVoltage - 500) / 10.0;
Serial.print(tmpC);
Serial.println(" degrees C");
delay (1000);
if((tmpC <= -1 ) && (tmpC >= -17))
{ setColor(0, 0, 255); } // blue
else { setColor(0, 0, 0);}
if ((tmpC <= 7 ) && (tmpC >= -0))
{ setColor(0, 255, 255); } // aqua
else {setColor(0, 0, 0);}
if ((tmpC <= 22 ) && (tmpC >= 8))
{ setColor(0, 255, 0);} // green
else {setColor(0, 0, 0);}
if ((tmpC <= 27 ) && (tmpC >= 23))
{setColor(255, 255, 0); } // yellow
else {setColor(0, 0, 0);}
if ((tmpC <= 40 ) && (tmpC >= 28))
{setColor(255, 0, 0); } // red
else {setColor(0, 0, 0);}
}
void setColor(int red, int green, int blue)
{
analogWrite(redPin, red);
analogWrite(greenPin, green);
analogWrite(bluePin, blue);
}```

For wind sensor:

```//
// Written for the LoL Shield, designed by Jimmie Rodgers:
// http://jimmieprodgers.com/kits/lolshield/
// Adapted from Noisy by Jacob Joaquin <jacobjoaquin@gmail.com> 10/3/2012
//wind sensor parts
int windmin;
int windmax;
//lolshield
#include "Charliplexing.h"
void setup()
{
//lolshield setup
LedSign::Init();
//wind sensor setup
Serial.begin(9600);
windmin = analogRead(A0); // calibrate wind sensor on analog pin A0
windmax = windmin+400;  //this is where the range is declared
}
void loop()
{
//
if(windSensor<windmin) windSensor=windmin; // compress ends of scale to avoid going out of range
if(windSensor>windmax) windSensor=windmax;
//
int windoutput = map(windSensor, windmin,windmax,0,100); //remap wind value to length of array
Serial.println(windoutput);
delay(150);
if ((windoutput <= 10) && (windoutput >= 0 ))
{
for(uint8_t y = 0; y < 9; y++)
{
for(uint8_t x = 0; x < 14; x++)
{
LedSign::Set(x, y, random(2));
}
}
delay(2000);
}
else if ((windoutput <= 20) && (windoutput > 10 )) {
for(uint8_t y = 0; y < 9; y++)
{
for(uint8_t x = 0; x < 14; x++)
{
LedSign::Set(x, y, random(2));
}
}
delay(1500);
}
else if ((windoutput <= 30) && (windoutput > 20 )) {
for(uint8_t y = 0; y < 9; y++)
{
for(uint8_t x = 0; x < 14; x++)
{
LedSign::Set(x, y, random(2));
}
}
delay(1000);
}
else if ((windoutput <= 40) && (windoutput > 30 )) {
for(uint8_t y = 0; y < 9; y++)
{
for(uint8_t x = 0; x < 14; x++)
{
LedSign::Set(x, y, random(2));
}
}
delay(750);
}
else if ((windoutput <= 50) && (windoutput > 40 )) {
for(uint8_t y = 0; y < 9; y++)
{
for(uint8_t x = 0; x < 14; x++)
{
LedSign::Set(x, y, random(2));
}
}
delay(500);
}
else if ((windoutput <= 60) && (windoutput > 50 )) {
for(uint8_t y = 0; y < 9; y++)
{
for(uint8_t x = 0; x < 14; x++)
{
LedSign::Set(x, y, random(2));
}
}
delay(300);
}
}```

Putting together the Weatherbox:

The wind and temperature sensor fixture:

The completed Weatherbox: