Introduction: K'OBEN - DIGITAL WOODSTOVE
The high tech stove with the scense of the old wood stove.
This is an academical project, to show how we can make a prototype of things that can be possible.
The idea is to design possible objects to develop with existing technology, changing the way in which the user interacts with them.
With this project I show how it is possible to prototype the stove by showing the interaction without making a real functioning object.
K'OBEN - DIGITAL WOODSTOVE shows you the temperature of the surface where you place the pots with a color feedback.
This is an academical project, to show how we can make a prototype of things that can be possible.
The idea is to design possible objects to develop with existing technology, changing the way in which the user interacts with them.
With this project I show how it is possible to prototype the stove by showing the interaction without making a real functioning object.
K'OBEN - DIGITAL WOODSTOVE shows you the temperature of the surface where you place the pots with a color feedback.
Step 1: MATERIALS
5 LEDS. (40 cents each one.)
5 HALL SENSORS. (1.5 dollars each one.)
5 RESISTORS 10 k - ( 5 cents each one )
5 RESISTORS 0.33 k - ( 5 cents each one )
1 WIRING I /O BOARD ( 60 dollars each one )
1 MAGNET.
1 WISHBOARD ( Protoboard ).
5 HALL SENSORS. (1.5 dollars each one.)
5 RESISTORS 10 k - ( 5 cents each one )
5 RESISTORS 0.33 k - ( 5 cents each one )
1 WIRING I /O BOARD ( 60 dollars each one )
1 MAGNET.
1 WISHBOARD ( Protoboard ).
Step 2: MAKING CONNECTIONS
Visit WIRING home page to review some examples on how to make your sensors or connections.
In this case, you must verify the hall sensor specifications and how to connect it to the I /O Board.
this is the WIRING CODE, you can make a copy paste, WIRING is an open Project.
int ledPin = 48; // diagnostic LED on the Wiring I/O board (pin 48)
int pinHall = 0; // Pin for the Hall sensor
int pinLed = 1; // Pin for the led that turns on if the magnetic field is near
int pinHall2 = 2; // Pin for the Hall sensor
int pinLed2 = 3; // Pin for the led that turns on if the magnetic field is near ...
int pinHall3 = 4;
int pinLed3 = 5;
int pinHall4 = 6;
int pinLed4 = 7;
int pinHall5 = 8;
int pinLed5 = 9;
void setup()
{
pinMode(ledPin, OUTPUT); // sets the digital pin as output
pinMode(pinLed, OUTPUT); // sets the digital pin as output
pinMode(pinHall, INPUT); // sets the digital pin as input
digitalWrite(ledPin, HIGH); //turn on the Wiring board diagnostic LED
pinMode(pinLed2, OUTPUT); // sets the digital pin as output
pinMode(pinHall2, INPUT); // sets the digital pin as input
pinMode(pinLed3, OUTPUT); // sets the digital pin as output
pinMode(pinHall3, INPUT); // sets the digital pin as input
pinMode(pinLed4, OUTPUT); // sets the digital pin as output
pinMode(pinHall4, INPUT); // sets the digital pin as input
pinMode(pinLed5, OUTPUT); // sets the digital pin as output
pinMode(pinHall5, INPUT); // sets the digital pin as input
Serial.begin(9600); //
}
void loop()
{
if (digitalRead(pinHall) == HIGH) // If a magnet is near the Hall sensor
{
digitalWrite(pinLed, LOW); // if not turns OFF the LED
}
if (digitalRead(pinHall2) == HIGH) // If a magnet is near the Hall sensor
{
digitalWrite(pinLed2, LOW); // if not turns OFF the LED
if (digitalRead(pinHall3) == HIGH) // If a magnet is near the Hall sensor
{
digitalWrite(pinLed3, LOW); // if not turns OFF the LED
}
if (digitalRead(pinHall4) == HIGH) // If a magnet is near the Hall sensor
{
digitalWrite(pinLed4, LOW); // if not turns OFF the LED
}
if (digitalRead(pinHall5) == HIGH) // If a magnet is near the Hall sensor
{
digitalWrite(pinLed5, LOW); // if not turns OFF the LED
}
}
if (digitalRead(pinHall) == LOW)
{
digitalWrite(pinLed, HIGH); // if the led turns ON
Serial.print(1, BYTE); // shows a number to be used on PROCESSING
}
else if (digitalRead(pinHall2) == LOW)
{
digitalWrite(pinLed2, HIGH);
Serial.print(2, BYTE); // shows a number to be used on PROCESSING
}
else if (digitalRead(pinHall3) == LOW)
{
digitalWrite(pinLed3, HIGH);
Serial.print(3, BYTE); // shows a number to be used on PROCESSING
}
else if (digitalRead(pinHall4) == LOW)
{
digitalWrite(pinLed4, HIGH);
Serial.print(4, BYTE); // shows a number to be used on PROCESSING
}
else if (digitalRead(pinHall5) == LOW)
{
digitalWrite(pinLed5, HIGH);
Serial.print(5, BYTE); // shows a number to be used on PROCESSING
}
else{
Serial.print(0, BYTE); // if all the LEDS are LOW, PRINT 0.
}
delay(100); // Number of times per second to upload the information.
}
In this case, you must verify the hall sensor specifications and how to connect it to the I /O Board.
this is the WIRING CODE, you can make a copy paste, WIRING is an open Project.
int ledPin = 48; // diagnostic LED on the Wiring I/O board (pin 48)
int pinHall = 0; // Pin for the Hall sensor
int pinLed = 1; // Pin for the led that turns on if the magnetic field is near
int pinHall2 = 2; // Pin for the Hall sensor
int pinLed2 = 3; // Pin for the led that turns on if the magnetic field is near ...
int pinHall3 = 4;
int pinLed3 = 5;
int pinHall4 = 6;
int pinLed4 = 7;
int pinHall5 = 8;
int pinLed5 = 9;
void setup()
{
pinMode(ledPin, OUTPUT); // sets the digital pin as output
pinMode(pinLed, OUTPUT); // sets the digital pin as output
pinMode(pinHall, INPUT); // sets the digital pin as input
digitalWrite(ledPin, HIGH); //turn on the Wiring board diagnostic LED
pinMode(pinLed2, OUTPUT); // sets the digital pin as output
pinMode(pinHall2, INPUT); // sets the digital pin as input
pinMode(pinLed3, OUTPUT); // sets the digital pin as output
pinMode(pinHall3, INPUT); // sets the digital pin as input
pinMode(pinLed4, OUTPUT); // sets the digital pin as output
pinMode(pinHall4, INPUT); // sets the digital pin as input
pinMode(pinLed5, OUTPUT); // sets the digital pin as output
pinMode(pinHall5, INPUT); // sets the digital pin as input
Serial.begin(9600); //
}
void loop()
{
if (digitalRead(pinHall) == HIGH) // If a magnet is near the Hall sensor
{
digitalWrite(pinLed, LOW); // if not turns OFF the LED
}
if (digitalRead(pinHall2) == HIGH) // If a magnet is near the Hall sensor
{
digitalWrite(pinLed2, LOW); // if not turns OFF the LED
if (digitalRead(pinHall3) == HIGH) // If a magnet is near the Hall sensor
{
digitalWrite(pinLed3, LOW); // if not turns OFF the LED
}
if (digitalRead(pinHall4) == HIGH) // If a magnet is near the Hall sensor
{
digitalWrite(pinLed4, LOW); // if not turns OFF the LED
}
if (digitalRead(pinHall5) == HIGH) // If a magnet is near the Hall sensor
{
digitalWrite(pinLed5, LOW); // if not turns OFF the LED
}
}
if (digitalRead(pinHall) == LOW)
{
digitalWrite(pinLed, HIGH); // if the led turns ON
Serial.print(1, BYTE); // shows a number to be used on PROCESSING
}
else if (digitalRead(pinHall2) == LOW)
{
digitalWrite(pinLed2, HIGH);
Serial.print(2, BYTE); // shows a number to be used on PROCESSING
}
else if (digitalRead(pinHall3) == LOW)
{
digitalWrite(pinLed3, HIGH);
Serial.print(3, BYTE); // shows a number to be used on PROCESSING
}
else if (digitalRead(pinHall4) == LOW)
{
digitalWrite(pinLed4, HIGH);
Serial.print(4, BYTE); // shows a number to be used on PROCESSING
}
else if (digitalRead(pinHall5) == LOW)
{
digitalWrite(pinLed5, HIGH);
Serial.print(5, BYTE); // shows a number to be used on PROCESSING
}
else{
Serial.print(0, BYTE); // if all the LEDS are LOW, PRINT 0.
}
delay(100); // Number of times per second to upload the information.
}
Step 3: CREATING THE INTERACTION
With the WIRING software you can " personalize " the sensors. In the software you decide what you want for each sensor. For example, if you put the magnet near to the hall sensor, you can decide if the magnet turn ON or OFF the sensor. In this case, when you put the magnet near the hall sensor, this sends a ON signal, and when the program reads the signal ON , a led turns ON too.
After that, you must make the INTERFACE on PROCESSING software. This software permits you design the visual information. This software reads the information of the Board and show that information on graphical ways, like shapes, images, lines, etc.
With PROCESSING you can make endless ways to show your interaction project.
for more information visit http://processing.org
PROCESSING CODE :
import processing.serial.*;
Serial port; // create serial port object
int val; // variable to receive data from the serial port
PImage fondo; // Name of the images variable
PImage fogon1; // Name of the images variable
void setup()
{
size (800,600);
noStroke();
framerate(10);
fondo = loadImage("fondo.gif");
fogon1 = loadImage("fogon1.gif");
println(Serial.list());
// Open the port that the Wiring board is connected to (in this case # 1)
// Make sure to open the port at the same speed Wiring is using (9600bps)
port = new Serial(this, Serial.list()(1), 9600);
}
void draw()
{
background (fondo);
if( 0 < port.available() ) // if data is available to read
{
val = port.read(); // read it and store it in 'val'
println("val es "+val);
}
if( val == 1 ) // if 1 was received
{
image(fogon1,50,50); // read the image
fill(125,20,150);
}
if( val == 2 ) // if 2 was received
{
ellipse(220,470,150,150);
fill(255,200,150);
}
if( val == 3 ) // if 3 was received
{
ellipse ( 400,300,150,150);
fill(255,100,200); // set fill color
}
if( val == 4 ) // if 4 was received
{
ellipse(620,200,150,150);
fill(0,255,150);
}
if( val == 5 ) // if 5 was received
{
ellipse(700,500,150,150);
fill(0,255,150);
}
}
After that, you must make the INTERFACE on PROCESSING software. This software permits you design the visual information. This software reads the information of the Board and show that information on graphical ways, like shapes, images, lines, etc.
With PROCESSING you can make endless ways to show your interaction project.
for more information visit http://processing.org
PROCESSING CODE :
import processing.serial.*;
Serial port; // create serial port object
int val; // variable to receive data from the serial port
PImage fondo; // Name of the images variable
PImage fogon1; // Name of the images variable
void setup()
{
size (800,600);
noStroke();
framerate(10);
fondo = loadImage("fondo.gif");
fogon1 = loadImage("fogon1.gif");
println(Serial.list());
// Open the port that the Wiring board is connected to (in this case # 1)
// Make sure to open the port at the same speed Wiring is using (9600bps)
port = new Serial(this, Serial.list()(1), 9600);
}
void draw()
{
background (fondo);
if( 0 < port.available() ) // if data is available to read
{
val = port.read(); // read it and store it in 'val'
println("val es "+val);
}
if( val == 1 ) // if 1 was received
{
image(fogon1,50,50); // read the image
fill(125,20,150);
}
if( val == 2 ) // if 2 was received
{
ellipse(220,470,150,150);
fill(255,200,150);
}
if( val == 3 ) // if 3 was received
{
ellipse ( 400,300,150,150);
fill(255,100,200); // set fill color
}
if( val == 4 ) // if 4 was received
{
ellipse(620,200,150,150);
fill(0,255,150);
}
if( val == 5 ) // if 5 was received
{
ellipse(700,500,150,150);
fill(0,255,150);
}
}
Step 4: MAKING THE PHYSICAL INTERACTION
After you have finished the first part (make connections, design the interaction and both programs are working correctly PROCESSING - WIRING ), you will need a proyection surface to show the designed interaction. It is necesary a translucent surface.
This surface will act like the stove's cook surface, and you will need to create a "box" like the actually stoves to put in it all the components, the proyector and the laptop, and to simulate the stove body.
This surface will act like the stove's cook surface, and you will need to create a "box" like the actually stoves to put in it all the components, the proyector and the laptop, and to simulate the stove body.