Browsing articles tagged with " physical computing"
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 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!


Apr 19, 2011
admin

First ProtoBoard Components! (INPUT)



Apr 19, 2011
admin

Live and Learn




My first attempt at salt and vinegar etching a PCB turned out to be a bust. I left the fabric in the solution for almost 24 hours instead of the recommended 12; this disintegrated the traces and lost all the connectivity. I am in the middle of a second attempt at the moment.






Two lessons to take:

  • Do not leave the fabric in the bath for more than 14 hours.
  • Make sure to completely submerge the fabric.
  • Apr 13, 2011
    admin

    PhysComp Final Project Concept 2

    Calm Computing+IR Sensor

    This final project assignment has three parameters: it must be calm computing; it must solve a problem; and it must use a IR sensor. Brainstorming this and avoiding a completely kitsch or overdone concept is much harder than you would think; so, I propose a project that would alleviate the omnipresent ordeal of erasing the spatial divide between user and interactive object. That is, constructing an object that facilitates interaction between the user/audience and an installation piece. Installations are often the preferred method of execution for many projects, yet we all fall into the trap of assuming our project will call people to interact with it. In reality, we have been conditioned with a museum mentality not to touch and we must break this behavior through the affordances of our design.


    By combining the IR sensor to gauge the distance of a potential user, thermochromic ink and fabric traces (copper, specifically), I will construct a “red carpet” of sorts to invite the user to interact with a piece when they pass. As the user gets closer, Arduino triggers voltage from a certain pin to a footprint that leads up to the piece. Once the user is 6″ away, a sign is revealed to them that says “push me”. Not only will this aid in encouraging interaction with the specific piece, but is a form of interaction itself that can be used in a variety of situations.


    Below are the paper prototypes and distance logistics (based on the ideal range of the sensor (4cm – 150cm):





    Proof of Concept:

    Apr 13, 2011
    admin

    PhysComp Final Project Concept 1

    Light+Time

    For my light and time final project, I am stepping away from the modules for a more topical subject more in the line of calm computing: a countdown clock for the p comp room. After a program-wide email stressing our timeliness in cleaning up (I withhold judgment on the validity of sending an email in this particular situation) AND the general state of the p comp room during finals/thesis, I propose a countdown clock that will be programmed in accordance with building closing hours. There are four stages (names are subject to change): get ready, clean up, no really, clean up, and get out.














    Mar 29, 2011
    admin
    Comments Off

    SoftShop Syllabus Draft 1

    Here is the link to my syllabus for a middle school program on soft circuits. It is still in an early malleability stage and its evolution will be closely tied to my major studio final project. Below is the course description:

    SoftShop

    Talking Lights and Stretching Sound
    An Introduction to Physical Computing and SoftWear for Middle School Students

    Shop Hours
    Mondays from 3 – 5pm

    Shop Location
    2 West 13th Street, Rm 1006

    Instructors
    Liza Stark
    TBD

    Course Description and Objectives

    In this course, middle school students will explore the possibilities of physical computing through soft components to offer students a large toolkit to draw from in implementing their designs. There will be a focus on interaction design, computational concepts, and craftsmanship. This course will be held largely in a workshop format with opportunities for group learning and individual work.

    Learning Outcomes

    By the end of this course, students will:

  • Understand basic concepts of physical computing: electricity, basic circuitry, input/output, sensors, etc.;
  • Learn sewing fundamentals and how they can be applied to the creation of soft circuits and e-textiles;
  • Have a basic understanding of Arduino programming environment and basic computational logic;
  • Learn how to communicate between the microcontroller and external prototyping components (hard and soft);
  • Learn the fundamentals of the design process and how to design for interaction by constructing a final project incorporating the skills and concepts learned.