Physical Computing Midterm Project, SVA Interaction Design MFA
Sneha Pai & Matthew Brigante
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).
// // Written for the LoL Shield, designed by Jimmie Rodgers: // http://jimmieprodgers.com/kits/lolshield/ // Adapted from Noisy by Jacob Joaquin <[email protected]> 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() { int windSensor = analogRead(A0); // read wind sensor value // 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); } }