Making Things Interactive

April 30, 2008

Course Feedback

I enjoyed the concept of giving us weekly assignments to keep us occupied as well as learning. There is no better method of learning than by actually doing. Additionally, people in the class all came in with varying levels of knowledge, and for them to have to learn everything about electronics is unnecessary. With doing things by hand, the level of complexity is determined by one’s self.

I enjoyed the classes where jet would bring in and show us various links online of interesting projects. Firstly, it was good inspiration for our projects, and secondly for someone not coming from a purely artistic background, my exposure to this “culture” is very limited. It was very interesting to see what people are doing in this design space.

The idea of having a fairly complex midterm project forced us to push ourselves and understand how long building something would take. I learned from my midterm fiasco and began planning my final project much earlier.

The class blog is also a great place to look for ideas, assistance and just a simple, easy to use information interface for everyone. I’ve never used a blog for a class, but I think it is a great tool.

There was hardly anything I felt negatively about in the class. My comment is more of a suggestion to improve the class for others. I felt that diving straight into Arduino code was difficult for many people who did not have a programming background. I would suggest, the first few classes should be devoted to getting the class to think in steps, block diagrams, flowcharts etc. this way it is a little less daunting than having to decipher a foreign language.

Reflecting on the semester that was, I have really enjoyed this class for two major reasons. The freedom it gave me in pursuing projects that brought enjoyment to me and really giving me confidence in my ability to learn and undertake tasks associated with electronics and microcontrollers.

Final Writing Assignment: Class Critique

Filed under: Assignments,Cat Adams,Final Writing Assignment — catadams @ 10:54 pm

In attempting to come up with ways to improve the class, I have yet to decide if it should be changed or left the way it is. Foremost in my mind is the loose structure. We are taught some basic coding skills and given some fundamental assignments and then left to our own devices. While some would say this lack of structure provides no basis for learning, I believe this unique environment has allowed for maximum exploration and project development. Of course, this means the students must be motivated.

I disagree with anyone who says there should be a programming prerequisite to this course. The resources are available, be it the professors, other students or the internet. I found that between those three resources, I was able to solve the problems I encountered and learn new skills.

Still, there are a few things I would add. I would require students to find more outside projects to share with the class. This is not to say that I feel the projects we did were limited by any means, but an extra push to get us to find out more about the interactive world could only be a benefit.

I wish there had been other scheduled help time during the week. Near the end of the semester Mark invited us to come to the Code Lab a few times, but I would have liked more regular after-hours help sessions.

One of the most successful things in the course was the appearance of guest lecturers. I thoroughly enjoyed them, especially knowing they were right here at CMU. I hope they present again for subsequent classes.

As an addition to the course, it might be interesting to replace the mid-semester project with a group project, or create a second class for doing group projects. It might also be more feasible that way to use some of the technology available at CMU, such as laser cutters and 3d printers. I also believe the projects created could be even more interesting and amazing than the ones we saw this semester.

Overall the course was a very successful one. While, at its core, it should not be changed, a few additions could easily make it one of the most desirable and popular architecture electives.

What is worth interacting with?

Filed under: Final Writing Assignment,Nadeem Haidary — nhaidary @ 1:37 am

Given the opportunity to apply the technology and techniques we learned to anything, for some reason I chose to work in the same problem space I have been in my design classes. With projects like the pushpin and especially the electronic book reader, I have already been applying what we’ve learned to what I currently imagine I’ll be doing for a living.

What I think I need is for my work with sensor technology to not apply to industrial design. In the future, I’d like to apply what I’ve learned to more pointless creations. There is a great opportunity to explore and play with the technology. Having more open-ended goals for what the ‘thing’ might be could result in learning a lot more about the possibilities that a little circuit board, some programming, and a few electrical devices can bring. I’ve made a few finished* products, but what I think I need is less making and more hacking, less finishing and more playing. It’s something I find hard to do at school, and I feel like this class didn’t do enough to promote the process either. Nevertheless, by exploring both extremes of creative problem solving, the conceptual and the technical, I hope there is a lot more meaning that can be brought to the middle, where design can change the world.

Next semester I will be taking a furniture design class where I hope to explore how technology can enhance or change the meaning of objects we sit on, work upon, sleep on, etc.

Having reached the level of accomplishment we have now gotten to, I think more discussion on the merits and demerits of technology-based interaction should be continued. Right now, interactive/smart products and buildings seem to be very attractive. Objects that can adapt to people will last longer and gain more importance in our lives. But still, I wonder how future saturation of these objects might change our perceptions of interaction. Given our biological and cognitive limitations, and the limited resources we have on this planet, what will be worth interacting with?

*hardly

April 29, 2008

Course Feedback Assignment

Filed under: Assignments,Final Writing Assignment,Lingshui Wang — lingshui @ 5:07 pm

Personally I feel as if the class was very well taught and I learned a lot. Having come into this experience with no prior experience and ending the class being able to build and understand projects of the magnitude that we did was very exciting. I never could’ve guessed that I would have achieved this with just a semester.

Some things to make better…well I feel as if we never really go around to the “after class helpsessions” on Thursday. I mean, yes some people did stay after class for a few minutes sometimes to get some help, but we really never had an official worksession at which we were given the opportunity to explain our projects and receive help on a one on one basis. That might be partly our fault because we never really pushed hard for the helpsession and not many of us ever really brought in our projects that we needed help on. I did enjoy having the option of visiting Mark in the CoDe lab though, that was definitely helpful working in that environment. I feel maybe if official helpsessions are incorporated, they should be held there instead of in that classroom because of the various resources available in the CoDe lab.

This is definitely helpful in my future work, already I’ve incorporated things I’ve learned in MTI to my final presentation for my final project this semester. Aside from making models, I have achieved a better understanding of how to make spaces more interactive and therefore (in my opinion) a lot more dynamic and experiential.

Making better video

Filed under: Will Not Count Towards Your Grade — mdgross @ 8:56 am

Make Magazine had a helpful guide to making videos, mistakes not to make:

http://www.make-digital.com/make/vol08/?pg=158&search=bad+video+more:make_magazine

April 25, 2008

“So, what can you do with what you learned?”

Take a look at the products on this blog and count how many you could make now, if you wanted to: talk2myshirt.

April 22, 2008

reading: Malcolm McCullough, Digital Ground

Filed under: References — mdgross @ 6:24 pm

Malcolm McCullough writes elegantly and eloquently about many things, including the integration of technologies into our everyday world.  The MIT Press web site for his book, Digital Ground includes PDF downloads of the introduction and first chapter.

Class Notes – 18 Apr 2008

Filed under: Course Materials,References — jet @ 5:27 pm

Links for stuff we looked at in class:

Something that we didn’t get to look at, but that I think is interesting, a
custom board shield for experimenting with the Arduino.

April 18, 2008

Interactive Hovercraft

Filed under: Assignments,Final Project,Lingshui Wang — lingshui @ 11:13 am

Currently I have a working hovercraft which can hold the weight of an arduino, power pack, and various inputs and outputs. I am looking to improve this to hold more weight (a.k.a. strip down the weight of the hovercraft). I am having a bit of a problem with the interactive bit of it but should have it up and running very soon. Still hopeful about creating movement with the hovercraft, but right now it seems I’ll have to settle for something simpler.

Schematic

Code coming as soon as I fix it

Washroom Penitentiary

Filed under: Final Project,Gaku Sato — ponkotsu @ 3:24 am

Here is my final state diagram, wiring schematic, and code (though I might change some threshold values).  The code is excessively long and definitely not optimized; it was just the easiest way to understand what was going on so I can more easily debug.  It should be relatively self-explanatory therefore.  The state diagram from which the code was derived is similarly not optimal for the same reason.

And I figured out that the reason the bell & buzzer weren’t going off during the demo was because I turned on the batteries improperly, as in apparently I need to turn on the Arduino last, otherwise it will enter some strange inescapable state-change path.  I don’t have it all figured out but it’s hopefully enough such that the effectiveness of Murphy’s Law won’t be consistent.

HELP REQUEST!
I’m having no luck photographing it and I honestly have no idea how to videoscenario it so if anyone has any suggestions or can offer help it would be greatly appreciated!

[State Diagram & Wiring Schematic]

[Code]

#include

// PINS //
int soapLED_R = 10; // warning light
int soapLED_G = 9;  // indicates soap being dispensed
int soapLED_B = 8;  // standard light [GB=white]
int sinkLED = 11;   // indicates running water [B]

int soapsensor = 0;
int sinksensor = 1;

int toiletswitch = 12; // indicates motion detected [into toilet!]
int flushbutton = 13;
int lockbutton = 7;
int doorswitch = 4;

int signservo = 3;
int locksolenoid = 2;
int speaker = 5;
int bell = 6;

Servo sign;

// STATES //
int State = 0;
const int Blank = 0;
const int Locked = 1;
const int Wash = 2;
const int LockWash = 3;
const int Flush = 4;
const int Toilet = 5;
const int DUnlock = 6;
const int DLeaving = 7;
const int DSoap = 8;
const int DRinse = 9;
const int Clean = 10;
const int CLeaving = 11;
const int TUnlock = 12;
const int TLeaving = 13;
const int TSoap = 14;
const int TWater = 15;

int LockState = 0;
const int Auto = 0;
const int Manual = 1;

// OUTPUT CONDITIONS //
int Reward = 0;
const int Off = 0;
const int On = 1;
int Buzzer = 0;
int Sign = 0;
const int Bl_Bl = 125; // in: blank   out: blank
const int Wa_Bl = 107; // in: wash    out: blank
const int Wa_Di = 87;  // in: wash    out: dirty
const int Ri_Bl = 68;  // in: rinse   out: blank
const int Fl_Bl = 51;  // in: flush   out: blank
const int Fl_Fl = 31;  // in: flush   out: flush
const int Th_Cl = 13;  // in: thanks  out: clean!
int Soap = 0;
const int White = 0;  // standard light
const int Red = 1;    // warning light
const int Green = 2;  // indicates soap being dispensed
int Sink = 0;
int Lock = 0;

// ANALOG INPUT THRESHOLDS //
int soapmin = 30;
int soapmax = 100;
int sinkmin = 100;
int sinkmax = 300;

// OTHER //
int lockbuttonpress = 0;
int dooropentime = 0;
int sinkontime = 0;

void setup()
{
  Serial.begin(9600);
 
  pinMode(soapLED_R, OUTPUT); // digital
  pinMode(soapLED_G, OUTPUT); // digital
  pinMode(soapLED_B, OUTPUT); // digital
  pinMode(sinkLED, OUTPUT);   // digital
  pinMode(soapsensor, INPUT); // analog
  pinMode(sinksensor, INPUT); // analog
  pinMode(toiletswitch, INPUT);  // digital
  pinMode(flushbutton, INPUT);   // digital
  pinMode(lockbutton, INPUT);    // digital
  pinMode(doorswitch, INPUT);    // digital: LOW when closed, HIGH when open
  pinMode(signservo, OUTPUT);    // digital PWM
  pinMode(locksolenoid, OUTPUT); // digital
  pinMode(speaker, OUTPUT);      // digital
  pinMode(bell, OUTPUT);         // digital
 
  State = Blank;
  LockState = Auto;
  Reward = Off;
  Buzzer = Off;
  Sign = Bl_Bl;
  Soap = White;
  Sink = White;
  Lock = Off;
 
  lockbuttonpress = 0;
  dooropentime = 0;
  sinkontime = 0;
 
  sign.attach(signservo);
  sign.setMaximumPulse(2400);
  sign.setMinimumPulse(544);
  sign.write(Bl_Bl);
}

void loop()
{
  // SWITCH STATES //
  switch(State)
  {
    case Blank:
      if(lockbuttonpress==0 && digitalRead(lockbutton)==HIGH && digitalRead(doorswitch)==LOW)
      { lockbuttonpress=1; State=Locked; }
      if(digitalRead(lockbutton)==LOW) {lockbuttonpress=0;}
      if(analogRead(soapsensor)1000) {sinkontime=0; State=Clean;} }
      if(analogRead(sinksensor)>sinkmax) {sinkontime=0;}
      if(digitalRead(flushbutton)==HIGH) {State=Flush;}
      if(digitalRead(toiletswitch)==HIGH) {State=Toilet;}
      break;
    case Flush:
      if(lockbuttonpress==0 && digitalRead(lockbutton)==HIGH)
      { lockbuttonpress=1; State=DUnlock;}
      if(digitalRead(lockbutton)==LOW) {lockbuttonpress=0;}
      if(digitalRead(doorswitch)==HIGH)
      { dooropentime=millis(); State=DLeaving; }
      if(analogRead(soapsensor)1000) {dooropentime=0; State=Blank;}
      if(analogRead(soapsensor)1000) {sinkontime=0; State=Clean;} }
      if(analogRead(sinksensor)>sinkmax) {sinkontime=0;}
      if(digitalRead(flushbutton)==HIGH) {State=Flush;}
      if(digitalRead(toiletswitch)==HIGH) {State=Toilet;}
      break;
    case DRinse:
      if(lockbuttonpress==0 && digitalRead(lockbutton)==HIGH)
      { lockbuttonpress=1; State=DUnlock;}
      if(digitalRead(lockbutton)==LOW) {lockbuttonpress=0;}
      if(digitalRead(doorswitch)==HIGH)
      { dooropentime=millis(); State=DLeaving; }
      if(analogRead(soapsensor)1000)
      { dooropentime=0; State=Blank;}
      break;
    case TUnlock:
      if(lockbuttonpress==0 && digitalRead(lockbutton)==HIGH && digitalRead(doorswitch)==LOW)
      { lockbuttonpress=1; State=Toilet; LockState=Manual; }
      if(digitalRead(lockbutton)==LOW) {lockbuttonpress=0;}
      if(digitalRead(doorswitch)==HIGH) {dooropentime=millis(); State=TLeaving;}
      if(analogRead(soapsensor)1000) {dooropentime=0; State=Blank;}
      if(analogRead(soapsensor)

Next Page »

Blog at WordPress.com.