SmashYourComputer
Background/context
We have all been frustrated with our computers at some point. We are dependent on computers in many ways, and when they fail to work properly
- we have all been frustrated
- lack of empowerment when we don’t understand the internals
-
- but sometimes knowing the insides is even more frustrating
- have had urge to smash the computer
-
- destroy the black box
- take the computational power of computer and use it to simulate it’s own destruction
- provide the opportunity for a physical expression of frustration against the unfeeling computer
- explore issues of simulated violence
-
- does it make us more or less violent?
-
- will you smash your computer when you get home?
Audience
- anyone who has been frustrated with their computer
User scenario
- user sees progress meter on screen
- after certain point (or pressure sensor) computer will crash
- user can press reset button to reboot
- at any point, can hit with sledgehammer
- projected image of computer breaks apart depending on force from sledgehammer
Implementation
- custom software written using OpenGL, Open Dynamics Engine for physics simulation
- AVR microcontroller code written using BASCOM-AVR
- beige computer case instrumented with sensors
- projection screen and projector
- plastic/rubber sledgehammer
Conclusion
- provides a safe environment to vent frustration
- cathartic experience
- computational power of computer can be turned against itself
References
- Survival Research Laboratories
- recurring theme, e.g. in Office Space
- burning Next cube http://photo.simson.net/hacks/cubefire.html
- Perry Hoberman - Cathartic User Interface (1995) http://www.perryhoberman.com/pages/cui/text.html
Code for reading from ADXL210 from PIC (adapted from ITP Sensor Workshop report):
DEFINE OSC 8 xTilt VAR WORD yTilt VAR WORD XPin VAR portc.2 YPin VAR portc.3 tx VAR portc.6 rx VAR portc.7 n9600 CON 16468 inbyte VAR BYTE PAUSE 500 serout2 portc.6, 16468, ["Damn, this works.",10,13] main: SERIN2 rx, n9600, [inbyte] 'serout2 portc.6, 16468, ["Got this thing - ",dec inbyte, 10,13] PULSIN XPin, 1, xTilt PULSIN YPin, 1, yTilt SEROUT2 tx, n9600, [DEC xTilt.HighByte, ",", DEC xTilt.LowByte] SEROUT2 tx, n9600, ["-", DEC yTilt.HighByte, ",", DEC yTilt.LowByte, 10,13] 'SEROUT2 tx, n9600, [xTilt.HighByte, xTilt.LowByte, yTilt.HighByte, yTilt.LowByte] PAUSE 100 GOTO main
More code. Works! Programmed onto chip labelled “16”.
DEFINE OSC 8 xTilt VAR WORD yTilt VAR WORD xTiltMax var word yTiltMax var WORD xTiltMin var word yTiltMin var word XPin VAR portc.2 YPin VAR portc.3 tx VAR portc.6 rx VAR portc.7 n9600 CON 16468 inbyte VAR BYTE PAUSE 500 LEDPin var portb.7 'system test---LED blinks five times to verify code is running i var byte for i = 0 to 4 high LEDpin pause 200 low LEDPin pause 200 next serout2 portc.6, 16468, ["Damn, this works.",10,13] ' Initialize to current value initialize: pulsin xpin, 1, xTilt pulsin ypin, 1, ytilt xtiltMax = XTILT YTILTMAX = YTILT xTiltMin = xTiltMax yTiltMin = yTiltMax main: PULSIN XPin, 1, xTilt PULSIN YPin, 1, yTilt if xTilt > xTiltMax then xtiltMax = xtilt else if xTilt < xTiltMin THEn xTiltMin = xTilt endif endif if ytilt > ytiltmax then ytiltmax = ytilt else if yTilt < yTiltMin THEN yTiltMin = yTilt endif endif 'look for some serial, and if it doesn't arrive, keep sampling SERIN2 rx, n9600, 2, main, [inbyte] 'serout2 portc.6, 16468, ["Got this thing - ",dec inbyte, 10,13] SEROUT2 tx, n9600, ["x",hex2 xTiltMax.HighByte, hex2 xTiltMax.LowByte] SEROUT2 tx, n9600, [",", HEx2 xTiltMin.HighByte, HEX2 xTiltMin.LowByte, 10,13] SEROUT2 tx, n9600, ["y",Hex2 yTiltMax.HighByte, hex2 yTiltMax.LowByte] SEROUT2 tx, n9600, [",", HEx2 yTiltMin.HighByte, HEX2 yTiltMin.LowByte, 10,13] 'SEROUT2 tx, n9600, [xTilt.HighByte, xTilt.LowByte, yTilt.HighByte, yTilt.LowByte ] PAUSE 100 goto initialize GOTO main
M = max, m = min
Untested.. should output as xHMLMhmlmyHMLMhmlm\10\13
DEFINE OSC 8 xTilt VAR WORD yTilt VAR WORD xTiltMax var word yTiltMax var WORD xTiltMin var word yTiltMin var word XPin VAR portc.2 YPin VAR portc.3 tx VAR portc.6 rx VAR portc.7 n9600 CON 16468 inbyte VAR BYTE PAUSE 500 LEDPin var portb.7 'system test---LED blinks five times to verify code is running i var byte for i = 0 to 4 high LEDpin pause 200 low LEDPin pause 200 next serout2 portc.6, 16468, ["Ready to smash.",10,13] ' Initialize to current value initialize: pulsin xpin, 1, xTilt pulsin ypin, 1, ytilt xtiltMax = XTILT YTILTMAX = YTILT xTiltMin = xTiltMax yTiltMin = yTiltMax main: PULSIN XPin, 1, xTilt PULSIN YPin, 1, yTilt if xTilt > xTiltMax then xtiltMax = xtilt else if xTilt < xTiltMin THEn xTiltMin = xTilt endif endif if ytilt > ytiltmax then ytiltmax = ytilt else if yTilt < yTiltMin THEN yTiltMin = yTilt endif endif 'look for some serial, and if it doesn't arrive, keep sampling SERIN2 rx, n9600, 2, main, [inbyte] 'serout2 portc.6, 16468, ["Got this thing - ",dec inbyte, 10,13] SEROUT2 tx, n9600, ["x", HEX2 xTiltMax.HighByte, HEX2 xTiltMax.LowByte] SEROUT2 tx, n9600, [HEX2 xTiltMin.HighByte, HEX2 xTiltMin.LowByte] SEROUT2 tx, n9600, ["y", HEX2 yTiltMax.HighByte, HEX2 yTiltMax.LowByte] SEROUT2 tx, n9600, [HEX2 yTiltMin.HighByte, HEX2 yTiltMin.LowByte, 10,13] PAUSE 10 goto initialize GOTO main