That’s Design - Salone del Mobile

Picture made by Katrin Svabo Bech
Synopsis
Have another beer. Go ahead, you’ve already had what…5?…8?…13?
Just keep on drinking. You hate these student exhibits. Don’t these kids know that no one is a designer unless they have a line of cutlery and a villa in Tuscany.
Hey look, those puppets did something…hmm…don’t know how they did that….oh well…where’s that fresh beer?
Video
Video editing by Roberto Pansolli
Technical details
“That’s Alcohol” installation is a prototype for innovative ethylometers to be proposed to italian police in order to prevent drunk-driving. The system is based on a TGS-822 Alcohol Sensor (made by Figaro) that detects the alcoholometric level into the user breathe. The data are collected in real-time by an Arduino board that drives analogically a 24.7 Kg-force servo-motor (Hitec HS 805 BB+) depending on the drunkness-level result achieved. Finally, the servo-motor is connected to a plastic table that pushes through some pistons the string-puppets to let them leaning more or less.
For a stronger feedback, Arduino board dialogues through serproxy with a Flash-based animation that displays step-by-step the results and some suggestions on how to reach a better drunkness-level.
More info
Made by
David Boardman, Roberto Pansolli, Pete Knocke
Special thanks
Patrizio Orlandi - Lab advisory & support
Chevady - Furniture design
![]()
That’s Design - FuoriSalone, Superstudio 13 (18-23 April 2007)
Via Bugatti 13, Milano
Reference Websites
http://www.thatsdesign.it/
http://www.zonatortona.it
we-make-money-not-art
Prototype video
Arduino code
/*
THAT’S ALCOHOL ARDUINO CODE
Written by David BoardmanMore info:
http://www.netzfunk.org/idesign/idesign-2007-ma-projects/
thats-design-salone-del-mobile/Credits:
Servo Routine code taken from Tod E. Kurt’s TODBOT
http://todbot.com/arduino/sketches/servo_serial_better/servo_serial_better.pde
*/int alcoholSensor = 3;
int servoPin = 2;int valueA;
int valueS;
int step;int pulseWidth = 0; // Amount to pulse the servo
long lastPulse = 0; // the time in millisecs of the last pulse
int refreshTime = 20; // the time in millisecs needed in between pulses
int minPulse = 700; // minimum pulse width/
int memAlcohol = 0; // store maximum alcohol value each blow
int threshold = 40; // minimo valore di alcol
int counter; // contatore per blocco motore dopo risultato
int stopMovement = 300; // durata blocco motore
boolean check = false;
boolean check2 = false;void setup(){
pinMode(servoPin, OUTPUT); // Set servo pin as an output pin
pulseWidth = minPulse; // Set the motor position to the minimum
beginSerial(9600);
Serial.println(”That’s Alcohol!”);
}void loop(){
valueA = analogRead(alcoholSensor);
if (check2==false){
alcohoolic();
}
else{
if (valueS >= 1 && valueS <= 9) {
valueS = valueS * (180/9); // convert from number to degrees
pulseWidth = (valueS * 9) + minPulse; // convert angle to microseconds
}
updateServo();
}
//printVals();
}void updateServo() {
// pulse the servo again if the refresh time (20 ms) have passed:
if (millis() - lastPulse >= refreshTime) {
digitalWrite(servoPin, HIGH); // Turn the motor on
delayMicroseconds(pulseWidth); // Length of the pulse sets the motor position
digitalWrite(servoPin, LOW); // Turn the motor off
lastPulse = millis(); // save the time of the last pulse
startCounter();
}}
void alcohoolic(){
if(valueA < threshold){
delay(500);
memAlcohol = 0;
check = false;
}
else if (valueA > memAlcohol){
memAlcohol = valueA;
delay(500);
check = true;
}if((check == true) && (valueA < memAlcohol)){
if(memAlcohol>=threshold && memAlcohol<=(threshold+5)){ // step 1
valueS=2;
step=1;
}
else if(memAlcohol>(threshold+5) && memAlcohol <=(threshold+15)){ // step 3
valueS=4;
step=2;
}
else if(memAlcohol>(threshold+15) && memAlcohol <=(threshold+20)){ // step 3
valueS=7;
step=3;
}
else if(memAlcohol>(threshold+20)){ // step 4
valueS=9;
step=4;
}
check2 = true;
sendValue();
}
}void startCounter(){
if(counter < stopMovement){
counter++;
}
else{
check2=false;
counter=0;
pulseWidth = minPulse;
valueA=0;
updateServo();
}
}void printVals(){
/*
Serial.print("moving servo to ");
Serial.print(pulseWidth,DEC);
Serial.print(" ");
Serial.print(lastPulse);
Serial.println("");
Serial.print(" // degrees ");
Serial.println();
Serial.print("ALCOHOL: ");
Serial.print(valueA);
Serial.print(" // PROXIMITY: ");
Serial.print(valueP);
Serial.println(counter);
Serial.println("");
Serial.println(valueS,DEC);
Serial.println(distance);
Serial.println(valueA);
*/
}void sendValue(){ // send Value to Flash (pipe symbol as separator, 2 values each time)
Serial.print(valueA);
Serial.print("|");
Serial.print(step);
printByte(0);
}














