Keep me alive! Community role playing game


The main idea of this project is to strengthen community bonds using a physical and web based game. Influenced by emotional design readings I found it interesting to involve people in a common and shared game, with no limit for expanding and exploring affective relationships among participants. People generally make effort when they feel shared responsibility and act together within the community when something depends on them. The concept of this game is it to take care of an object that depends on “its family” and vice versa. The difference between this project and existing similar projects, like tamagochi or webikinz, is that this one combines the physical and the virtual world to explore feelings and role sharing among people that use this object. The project intent is to develop affective, strategy and community competences across all ages.

Physical sketch

The objects that compose this game are called “dudies”. They have a sphere, a spring and a small box on the bottom and each part of their composition has a specific function. Participants use their own dudie, and all dudies live and act as a family. Each dudie uses a wireless connection to a computer, which is connected to a web server where all dudies share their emotions. As they live as a family, dudies depend on each other, which means that each player should play alone as part of a group and keep them alive. If a dudie dies, the whole family dies. These objects have some common characteristics such as: age; level of anger; level of happiness; self-intelligence; life. The objective of this game is that each participant has to contribute with real life actions to keep them happy and alive.

So the questions at this point are, how do humans interact with these objects and get responses? How do they understand dudies needs and operate to keep them alive?

There are some physical actions humans can operate on dudie, and that actions have real time consequences on all dudie’s lives. The actions that users can perform are:

 Users should show affectivity for dudies, touching them in a very specific way.


 Dudies will feel happy if they know that their owners spend time close to them.


 Dudies, as kids and animals love to play, so owners show dedicate some time playing with them, in a reasonable manner.


 Users can also put their dudies together to save the family, if they are in risk of death. This action will increase the level of happiness to the maximum.


 Dudies have the capability to calculate the time users spend with them.

Dudies will display the following outputs:

 Dudies will increase or decrease temperature depending on their happiness level.

 When they Dudies feel lonely they warn their owners using vibration.

– Taping the sphere make it shakes, which means that players should manage to do that, but carefully because too much taps will result in anger or fury. Anger and fury are represented using lights and/or sounds.

As we can see, these objects are able to recognize the inputs coming from the environment and transform them intelligently to display adequate outputs. These outputs are shared, which means that dudies have a shared “machine brain”.

The web server is where this “machine brain” transforms and compiles information coming from all dudies. Although they depend on the Internet to communicate feelings, each one have the capability to live isolated for a while. This means that each duddie is able to survive lonely storing and working on the last global state, and once connected it will update the global mood and “get back to the family again”.

Since there is no limit bringing dudies to the game, the system is able to self-adapt and recalculate ratio regardless the number of players. This means that there is a global emotional mood that is calculated and updated based on all dudies state. The funniest thing in this game is that you never know who is playing good or playing bad, the only thing you know is that you must do things right to keep the family alive. This may be frustrating if someone is playing good, but the objective is to build develop community bonds.


System diagram


Skills list

Learn how to use accelerometers, heating resistors, and vibration motors. Also I’ll have to learn how to use new libraries in processing and develop some programming techniques, specially using file system and/or databases. 




Source code

Final paper

Programmable t-shirt




This is a programmable t-shirt that reproduces a light sequence in a form of a heart. User can program what sequence he/she wants and after a short amount of time the t-shirt will reproduce the saved sequence. This means that there are two different moments of interaction that combine together to produce an effect. Also, there is no limit of possible sequences, which means that there is no pre-programmed sequences. User has to “teach” the t-shirt how the light sequence will be displayed using a small button on the bottom of the t-shirt. If there is no interaction the t-shirt won’t reproduce anything in order to save power.


Working on clothes with this kind of technology is really hard. First of all I had to come with an idea to friendly embed wires, arduino, external power source, battery, etc. Then I started thinking about the circuit and tried to figure out what materials I would need. After the tests using the breadboard, it comes the hardest part for me – soldering everything in a reasonable manner. The last thing I did was “the consolidation”, which means trying to embed a lot of stuff in the t-shirt, using a reformulation of the first idea.


The materials I used were: 2v external power source, battery, regular wire, luminescent wire, a button, resistors, a relay, the arduino and a t-shirt.

The circuit

The external power and the arduino are connected to the relay, in order to control when to power on the luminescent wire. Also, there is a button connected to a digital pin that works as an input in the system. 




Nuno Laginha

Making things interactive

Fall 2008



int ledPin = 8;                // LED connected to digital pin 8

int button = 0;                // Button connected to analog pin 0

int val = 0;                   

int counter = 0;               // Variable to count the number of button clicks

boolean buttonDown = false;    // Button state

boolean isLightOn = false;     // Light state

int time = 1000;               // Time for programming

int myArray[20];               // List of delays

int crono = 0;                 // Variable for recent delay

int i = 0;                     // Control variable used in the Array


void setup()                    // run once, when the sketch starts


  pinMode(ledPin, OUTPUT);      // sets the digital pin as output

  pinMode(button, INPUT);       // sets the digital pin as input




void loop(){                     // run over and over again


 while(time>0){                  // While time bigger than 0 keep reading inputs


    val = analogRead(button);

    val = val/4;


    if(val == 0){



      while(val == 0){


      val = analogRead(button);

      val = val/4;






    myArray[i] = crono;          // Add recent delay to one of the items in the array list





    counter++;                   // Increment one more click in the button



    delay(10);                   // Regulates time





//When programming time is over and if there the button was clicked at least once, start reproducing sequence



      for(i=0;i<20;i++){          // For each item in the Array

         if(myArray[i]>0){        // If the delay stored is higher than 0


         digitalWrite(ledPin, HIGH);

         delay(myArray[i]/10);    // Use the delay previously stored in one item of the Array list

         digitalWrite(ledPin, LOW);







int f=0;                           


for(f=0;f<20;f++){                 // Clean up the Array

   myArray[f]= 0;  



i=0;                               // Start over the Array

counter=0;                         // Set button clicks to 0

time=1000;                         // Restart timer



Light sensitive bag

This is a light sensitive bag that beeps when the amount of light is higher than the declared threshold. If the light is closer to the sensor it displays a faster sound(beeps). If the light source is far from the sensor it displays a slower sequence of beeps.
This may be useful if you want to carry light sensitive stuff in your bag.

Basically I used a simple circuit with a Piezzo working as a beeper and a light sensor to measure the amount of light.




//Nuno Laginha
//MTI Fall 2008int switchPin = 2;          //switch connected on analog pin 2
int knockPin = 11;          //switch connected on analog pin 11
int val = 0;void setup()                    
    pinMode(knockPin, OUTPUT);
    Serial.begin(9600);       //set speed

void loop()                 //run over and over again
  val = analogRead(switchPin);//reads voltage value
  val = val / 4;
  if(val<80){              //if current value higher than 80 (threshold)

  analogWrite(knockPin, 0); //don’t beep
  analogWrite(knockPin, val); //beep accordingly with the voltage
  delay(val); //set delay equal to actual voltage
  analogWrite(knockPin, 0);
  analogWrite(knockPin, val);
  analogWrite(knockPin, 0);
  analogWrite(knockPin, val);
  analogWrite(knockPin, 0);
  Serial.println(val);            //prints voltage value


Wallet alarm

Wallet alarm


This is a small and simple prototype of a wallet alarm. Basically this wallet displays a red LED when it is opened and a blue LED when it is closed. The circuit is simple and uses 3 resistors, 2 LED(red and blue), a breadboard and a analog home made switch with 2 wires.


The breadboard receives 5V power and the voltage passes from the first resistor to the switch first wire. The second wire of the switch is connected to analog pin 2 and functions as an input. When the voltage is lower than 1000 the blue LED turns on. This LED is connected to pin 12 and uses a less powerful resistor. When the value is higher than 1000 the red LED turns on. This one is connected to pin 13 and also uses a weak resistor.

Possible improvements:

Use a battery

Improve wire connection to stabilize voltage

Embed mechanicals more friendly