Jul 25, 2012
admin

Check out my THESIS!!

ABSTRACT
Currently, there is an urgent need to integrate computational thinking and computer science in the classroom and in after school settings. Recently, the DIY/Maker movement has become a force in creating new learning spaces to foster innovation and creativity, especially in STEM (Science, Technology,
Engineering, and Math) fields.

This research contributes to the growing movement of educators and designers who are reimagining what circuits and computers can look like and seeks to function as a medium to transform populations of learners and educators into Makers who can find application of their learning above a textbook and beyond a traditional classroom.

BOXES (Building Open Expandable Electronic Systems) is a workshop that introduces educators to a new approach to teaching and learning computational thinking and STEM concepts through craft. Participants collaborate to make “soft”, flexible circuits out of paper, conductive copper tape, and LEDs. Weaving traditional craft techniques with smart materials creates new points of entry that blur the boundaries between craft and computation, low and high technology, and art and computer science.

DOWNLOAD THE FULL PAPER HERE

Jan 31, 2012
admin

Toy Dissection: Piano

Nov 23, 2011
admin

Updates + Action!

Since the onset of thesis, this documentation site has been cast aside for the year and has been (sadly) replaced with a new thesis site. Please visit my thesis site here. And if you haven’t checked out the refined versions of all of these projects above and below and perhaps not even realized yet here, take a gander at my portfolio site.

Thanks and be well!

Aug 18, 2011
admin

Innovative Life Interpretations

As part of Little Big Planet

Aug 18, 2011
admin

Conway’s Game of Life Examples

As thesis approaches, I am slowly starting to gather precedence and inspiration to begin sculpting my concept. In that spirit, here are some video clippings:

3-D Screen


Cubes that actually “grow” into life. Still binary state, but enough dynamic movement to spark some interesting ideas of what could be done if variability was introduced into the mix. (Add link to first concept post here)

3-D LED Cube

(complete with bumpin soundtrack)

Rhythmic patterns.

2-D Screen


With sound!

Patterns

Embedding is disable by the host (Wolfram), but the YouTube is here and quite hypnotic.

http://www.youtube.com/watch?v=vPl7jmMkbqY&feature=related


Jun 1, 2011
admin

Push Me Pull Me :: Construction + Code = User Testing

After a few snags in materials and construction, Paola offered us a fantastic solution. She suggested placing fabric around the boxed structure and focus on using the materials that we know work (i.e. the elastic), instead of forcing the materials we considered more aesthetically in line with our concept. As mentioned in a previous post, the elastic works much better in getting a dynamic range from the painted on liquid graphite; the other materials, such as spandex and jersey, ended up breaking the connection too much after a few uses.

Below are the videos documenting our first working prototype for the final piece and a bit of user testing:


May 13, 2011
admin

SnapToTrace Circuit Mat

May 13, 2011
admin

SnapToTrace Research References (with some links!)

REFERENCES


REFERENCES
With links to resources

Buechley, L., Elumeze, N., and Eisenberg, M. (2006). Electronic/Computational Textiles and Children’s Crafts. In Proceedings of Interaction Design and Children (IDC), Tampere, Finland, June 2006.

Buechley, L., Eisenberg, M. and Elumeze, N. (2007) Towards a Curriculum for Electronic Textiles in the High School Classroom. In Proceedings of the Conference on Innovation and Technology in Computer Science Education (ITiCSE), Dundee, Scotland, June 2007.

Buechley, L., Elumeze, N., Dodson, C., and Eisenberg, M. (2005). Quilt Snaps: A Fabric Based Computational Construction Kit. In Proceedings of IEEE International Workshop on Wireless and Mobile Technologies in Education (WMTE), Tokushima, Japan, November 2005.

Buechley, L. and Hill, B. M. 2010. LilyPad in the Wild: How Hardware’s Long Tail is Supporting New Engineering and Design Communities. In Proceedings of Designing Interactive Systems (DIS), Aarhus, Denmark, 199-207.

Eisenberg, M., Buechley, L., and Elumeze, N. (2004). Computation and Construction Kits: Toward the Next Generation of Tangible Building Media for Children. In Proceedings of Cognition and Exploratory Learning in the Digital Age (CELDA), Lisbon, Portugal, December 2004.

Eisenberg, M. and Buechley, L. (2008). Pervasive Fabrication: Making Construction Ubiquitous in Education. Upcoming in Journal of Software. (Invited submission)

Klemmer, S. and Landay, J. (2009). Toolkit Support for Integrating Physical and Digital Interactions. Human-Computer Interaction, vol 24, pp.315-366.

Marcu, G., Kaufman, S.J., Lee J.K., Black, R.W., Dourish, P., Hayes, G.R., Richardson, D.J.  Design and Evaluation of a Computer Science and Engineering Course for Middle School Girls.  In Proceedings of SIGCSE, 2010.

Rusk, N., Resnick, M., Berg, R., & Pezalla-Granlund, M. (2008). New Pathways into Robotics: Strategies for Broadening Participation. Journal of Science Education and Technology, vol. 17, no. 1, pp. 59-69.

Schweikardt, E. and Gross, M. (2009). Designing Systems to Design Themselves. In Proceedings of SIGCHI, Boston, Massachusetts, USA, April 2009.

Wyeth, P. [2008] How Young Children Learn to Program with Sensor, Action, and Logic Blocks. Journal of the Learning Sciences, 17:4


May 13, 2011
admin

SnapToTrace Final Paper

This paper is in SIGCHI format and was written for submission to the SIGCHI Conference on Tangible Embedded, Embodied Interaction 2012. You can download it here.


ABSTRACT
Modular toolkits and electronic textiles have emerged as highly effective resources to engage new audiences in computational learning. This paper will briefly review past relevant research in these domains, paying close attention to different taxonomies that consider the role of personal fabrication. Based on this analysis and user research, I will then introduce an interface prototype that is pedagogically concerned with user scalability and multiple points of entry. A specific focus is placed on the role materials play in achieving these pedagogical goals. I will close with plans for future iterations of the circuit mat and possible directions for development.

May 13, 2011
admin

SnapToTrace Video Documentation

Prototype Documentation

http://vimeo.com/23669226



Mat Evolution

May 13, 2011
admin

SnapToTrace Component Documentation

Stroke Sensor (back)




Stroke Sensor (front)




Potentiometer (back)




Potentiometer (front)




Triple LED (back)




Triple LED (front)




RGB LED (back)




RGB LED (front)

May 13, 2011
admin

SnapToTrace Final Presentation and Feedback




Final Presentation located here.


The feedback I received from Melanie focused mainly on developing the board as an interface to systems learning in realms outside of computation. This was fantastic feedback, especially since an early concept had framed it in this way. Katherine’s feedback was continued simplification of the components by taking them off the board. This is definitely the goal of the summer moving this project into potential thesis territory, along with some logic-based components.

May 7, 2011
admin

Light+Time Final: PhysComp Room Countdown Clock


















Code:

/*****************************************
* Liza Stark
* Physical Computing Final Project: Light+Time
* May 3, 2011
*
* This sketch uses the Macetech Chronodot and I2C protocol
* to program a cleanup countdown clock for the p comp room.
*
* Code for the I2C communication with the Chronodot was
* adapted from code written by Maurice Ribble. Documentation
* of it can be found here: http://www.glacialwanderer.com/hobbyrobotics/?p=12
*
*
*
*
*
*****************************************/

#include "Wire.h"
#define DS1307_I2C_ADDRESS 0x68

int cleanUpLED = 8; //Set LED action for first alarm
int lastCallLED = 10; //Set LED action for second alarm
int getOutLED = 11; //Set LED action for third alarm

// Convert normal decimal numbers to binary coded decimal
byte decToBcd(byte val)
{
return ( (val/10*16) + (val%10) );
}

// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val)
{
return ( (val/16*10) + (val%16) );
}

void setDateDs1307(byte second, // 0-59
byte minute, // 0-59
byte hour, // 1-23
byte dayOfWeek, // 1-7
byte dayOfMonth, // 1-28/29/30/31
byte month, // 1-12
byte year) // 0-99
{
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.send(0);
Wire.send(decToBcd(second)); // 0 to bit 7 starts the clock
Wire.send(decToBcd(minute));
Wire.send(decToBcd(hour));
Wire.send(decToBcd(dayOfWeek));
Wire.send(decToBcd(dayOfMonth));
Wire.send(decToBcd(month));
Wire.send(decToBcd(year));
Wire.endTransmission();
}

// Gets the date and time from the ds1307
void getDateDs1307(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
// Reset the register pointer
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.send(0);
Wire.endTransmission();

Wire.requestFrom(DS1307_I2C_ADDRESS, 7);

*second = bcdToDec(Wire.receive() & 0x7f);
*minute = bcdToDec(Wire.receive());
*hour = bcdToDec(Wire.receive() & 0x3f);
*dayOfWeek = bcdToDec(Wire.receive());
*dayOfMonth = bcdToDec(Wire.receive());
*month = bcdToDec(Wire.receive());
*year = bcdToDec(Wire.receive());
}

void setup()
{
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
Wire.begin();
Serial.begin(9600);

// Change values to set clock
second = 30;
minute = 15;
hour = 2;
dayOfWeek = 1;
dayOfMonth = 25;
month = 4;
year = 11;
setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year);

pinMode (cleanUpLED,OUTPUT);
pinMode (lastCallLED,OUTPUT);
pinMode (getOutLED,OUTPUT);

}

void loop()
{
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;

getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
Serial.print(hour, DEC);
Serial.print(":");
Serial.print(minute, DEC);
Serial.print(":");
Serial.print(second, DEC);
Serial.print(" ");
Serial.print(month, DEC);
Serial.print("/");
Serial.print(dayOfMonth, DEC);
Serial.print("/");
Serial.print(year, DEC);
Serial.print(" Day_of_week:");
Serial.println(dayOfWeek, DEC);

delay(1000);

//Set tests for each day of the week

//////////////*********************************Initial Test***********************************//////////////////////
// Starts at 2:15:30 on Day 1

//2:15:40 am = Clean Up!
if((dayOfWeek == 4 ||dayOfWeek == 3 ||dayOfWeek == 2 ||dayOfWeek == 1) && hour == 2 && minute == 15 && second == 40)
{
Serial.println("Clean up!");
digitalWrite(cleanUpLED, HIGH);
digitalWrite(lastCallLED, LOW);
digitalWrite(getOutLED, LOW);

delay(4000);

digitalWrite(cleanUpLED, LOW);
}

//2:15:50 am = Last Call_This is not a pub
if((dayOfWeek == 4 ||dayOfWeek == 3 ||dayOfWeek == 2 ||dayOfWeek == 1) && hour == 2 && minute == 15 && second == 50)
{
Serial.println("Last Call - this is not a pub");
digitalWrite(cleanUpLED, LOW);
digitalWrite(lastCallLED, HIGH);
digitalWrite(getOutLED, LOW);

delay(4000);

digitalWrite(lastCallLED, LOW);
}

//2:16:00 am = Get Out
if((dayOfWeek == 4 ||dayOfWeek == 3 ||dayOfWeek == 2 ||dayOfWeek == 1) && hour == 2 && minute == 16 && second == 00)
{
Serial.println("Get out.");
digitalWrite(cleanUpLED, LOW);
digitalWrite(lastCallLED, LOW);
digitalWrite(getOutLED, HIGH);

delay(4000);

digitalWrite(getOutLED, LOW);
}

//////////////*********************************Test Monday - Thursday***********************************//////////////////////

//12:50 am = Clean Up!
if((dayOfWeek == 4 ||dayOfWeek == 3 ||dayOfWeek == 2 ||dayOfWeek == 1) && hour == 0 && minute == 50 && second == 0)
{
Serial.println("Clean up!");
digitalWrite(cleanUpLED, HIGH);
digitalWrite(lastCallLED, LOW);
digitalWrite(getOutLED, LOW);

delay(4000);

digitalWrite(cleanUpLED, LOW);
}

//1:15 am = Last Call_This is not a pub
if((dayOfWeek == 4 ||dayOfWeek == 3 ||dayOfWeek == 2 ||dayOfWeek == 1) && hour == 1 && minute == 15 && second == 0)
{
Serial.println("Last Call - this is not a pub");
digitalWrite(cleanUpLED, LOW);
digitalWrite(lastCallLED, HIGH);
digitalWrite(getOutLED, LOW);

delay(4000);

digitalWrite(lastCallLED, LOW);
}

//1:30 am = Get Out
if((dayOfWeek == 4 ||dayOfWeek == 3 ||dayOfWeek == 2 ||dayOfWeek == 1) && hour == 1 && minute == 30 && second == 0)
{
Serial.println("Get out.");
digitalWrite(cleanUpLED, LOW);
digitalWrite(lastCallLED, LOW);
digitalWrite(getOutLED, HIGH);

delay(4000);

digitalWrite(getOutLED, LOW);

}

//////////////*********************************Test Friday and Sunday***********************************//////////////////////

//10:50 pm = Clean Up!
if((dayOfWeek == 5 || dayOfWeek == 7) && hour == 23 && minute == 50 && second == 0)
{
Serial.println("Clean up!");
digitalWrite(cleanUpLED, HIGH);
digitalWrite(lastCallLED, LOW);
digitalWrite(getOutLED, LOW);

delay(4000);

digitalWrite(cleanUpLED, LOW);
}

//11:15 pm = Last Call_This is not a pub
if((dayOfWeek == 5 || dayOfWeek == 7) && hour == 24 && minute == 15 && second == 0)
{
Serial.println("Last Call - this is not a pub");
digitalWrite(cleanUpLED, LOW);
digitalWrite(lastCallLED, HIGH);
digitalWrite(getOutLED, LOW);

delay(4000);

digitalWrite(lastCallLED, LOW);
}

//11:30 pm = Get Out
if((dayOfWeek == 5 || dayOfWeek == 7) && hour == 24 && minute == 30 && second == 0)
{
Serial.println("Get out.");
digitalWrite(cleanUpLED, LOW);
digitalWrite(lastCallLED, LOW);
digitalWrite(getOutLED, HIGH);

delay(4000);

digitalWrite(getOutLED, LOW);
}

//////////////*********************************Test Saturday***********************************//////////////////////

//6:50 pm = Clean Up!
if(dayOfWeek == 6 && hour == 18 && minute == 50 && second == 0)
{
Serial.println("Clean up!");
digitalWrite(cleanUpLED, HIGH);
digitalWrite(lastCallLED, LOW);
digitalWrite(getOutLED, LOW);

delay(4000);

digitalWrite(cleanUpLED, LOW);
}

//7:15 pm = Last Call_This is not a pub
if(dayOfWeek == 6 && hour == 19 && minute == 15 && second == 0)
{
Serial.println("Last Call - this is not a pub");
digitalWrite(cleanUpLED, LOW);
digitalWrite(lastCallLED, HIGH);
digitalWrite(getOutLED, LOW);

delay(4000);

digitalWrite(lastCallLED, LOW);
}

//7:30 pm = Get Out
if(dayOfWeek == 6 && hour == 19 && minute == 30 && second == 0)
{
Serial.println("Get out.");
digitalWrite(cleanUpLED, LOW);
digitalWrite(lastCallLED, LOW);
digitalWrite(getOutLED, HIGH);

delay(4000);

digitalWrite(getOutLED, LOW);
}

}

May 7, 2011
admin

Calm Computing+IR Sensor Final = SleepWalker Alarm





















Code:

/*****************************************
* Liza Stark
* Physical Computing Final Project: Calm Computing
* May 3, 2011
*
* SleepWalker Alarm Clock
*
* This sketch uses a sharp IR sensor to detect motion
* when a person sits up in bed. The feedback comes in
* two stages: light and sound. When turned on, the dimLED
* acts as a nightlight to let the user know it is on. When the user sits up or moves within
* a range that is less than 60 cm, the dimLED goes off and the alarmLED turns on.
* If the user does not push the button within 15 seconds, the sound alarm goes off.
*
*
*
*
*
*****************************************/

int IRpin = 3; // analog pin for reading the IR sensor
int dimLED = 9; // Feedback LED to tell user it is on
int alarmLED = 10 ; // LED for first alarm
int speakerAlarm = 11; // Speaker alarm

int buttonPin = 7;
int buttonVal = 0;
int lastButtonVal = LOW;

int timer=0;
int lapse=15000;
int counter=0;

float volts;
float distance;
boolean alarm=false;

boolean restState = false;
boolean alarmOne = false; // This will test to see if
boolean alarmTwo = false;

boolean stayOff = false;

void setup() {

pinMode(dimLED, OUTPUT);
pinMode(alarmLED, OUTPUT);
pinMode(speakerAlarm, OUTPUT);
pinMode(buttonPin, INPUT);
Serial.begin(9600); // start the serial port
}
/**********************TIMER EXAMPLE************************/
//int timer=0;
//
//int lapse=2000;
//
//int counter=0;
//
//void setup(){
// Serial.begin(9600);
//}
//
//
//void loop(){
//
// if (millis()-timer>=lapse){
// counter++;
// timer=millis();
//
//
// }
//
// Serial.println(counter);

//}
/******************************************************************/

void loop() {

// Check IR and button values
volts = analogRead(IRpin)*0.0048828125; // value from sensor * (5/1024) - if running 3.3.volts then change 5 to 3.3
distance = 60*pow(volts, -1.0); // worked out from graph 65 = theretical distance / (1/Volts)S - luckylarry.co.uk
Serial.println(distance); // print the distance
delay(100);

buttonVal = digitalRead(buttonPin);

if(buttonVal){
Serial.println("pressed");
digitalWrite(dimLED,HIGH);
digitalWrite(alarmLED,LOW);
noTone(speakerAlarm);
digitalWrite(speakerAlarm,LOW);
alarm=false;

}
else{

if(distance < 60){ digitalWrite(alarmLED,HIGH); digitalWrite(speakerAlarm,LOW); digitalWrite(dimLED,LOW); digitalWrite(speakerAlarm,LOW); noTone(speakerAlarm); alarm=true; } } if(alarm){ if (millis()-timer>=lapse){
counter++;
timer=millis();
//Serial.println(counter);
Serial.println("speaker on");
digitalWrite(speakerAlarm,HIGH);
tone(speakerAlarm,10000);

}

}

}

May 1, 2011
admin

Protoboard Component Testing

Video documentation for proof of (working) concept :: hooray!


Pages:12345»