The Sense Bus is a system for collaboration among interactive artworks. The system is based upon the core idea expressed by the three words: sense / transform / express. The Sense Bus is very simple and can be implemented with a minimum of resources (the target implementation platform is the Basic Stamp micro-controller from Parallax). The bus allows the sharing of sense experience amoung a small group of interconnected peers.
Sense / Transform / Express
Sense Bus: Implementation
Activities on the Network
Sample Basic Stamp Implementation
Sense Bus Internet Bridge
The flow of information in an interactive artwork can be modeled by the phrase sense / transform / express. The artwork gathers information from the outside world using various types of sensors (like video cameras, motion detectors, thermometers, etc) and transforms this raw information (with a computer perhaps) so that in turn it can, in some way, be expressed (the turning on/off of video monitors, the playing of music, etc). By defining boundaries between these stages it becomes possible for one artwork to share the sense information it gathers with other artworks. It is possible to allow the sharing of information at the sense/transform and transform/express boundaries but this is not practical for very simple systems. The Sense Bus limits the sharing of information to the sense/transform boundary:
The sense bus protocol requires that all sense types be assigned an ID (which range from 1 to 254) and that the values for those senses be expressable by a number which ranges from 1 to 254, ie:
|ID #||Description||Value Meaning|
|01||temperature||1= -10 degrees; 254 = 40 degrees|
|02||sound volume||1 = quiet; 254 = loud|
|03||sound direction||1 = north; 2 = ne; 3 = e; 4 = se; 5 = s etc|
Each packet of sense information consists of a one byte ID and a one byte value. The protocol allows each peer to express a number of sense packets before releasing control of the network to the next peer. A stream of sense packets consists of the letters 'TS' followed by a number of two byte sense packets and terminated by two zero bytes. All peers on the network must have a unique ID number and the upperlimit of peers that can be on the network must also be known.
All peers must be able to perform the following actions to participate in the Sense Bus: Join, Read Sense, Send Sense, Pass Token, Accept Token.
To join the network:
listen on the network for any activity for 10 seconds if there is activity then Read Sense packets otherwise Send Sense Packets
To read sense packets:
wait for the beginning of the packets: "TS" read the one byte sense ID read the one byte sense value if both ID and value are zero then wait for the Pass Token otherwise do somthing with the sense packet continue reading sense packets
To send sense packets:
send the beginning of the sense packets "TS" send a number of sense packets send the end of the sense packets (two zero bytes) pass the token to the next peer
To pass the token to the next peer:
send the pass token packet "PT" + next ID if there is a response then Read Sense packets otherwise keep incrementing the next ID and send pass token if you get back to your own ID then Send Send packets
To accept the token to send sense:
send the accept packet "A" <pause> "AT" Send Sense packets
Below is a sample implementation for a Basic Stamp I computer. The demonstration arragement allows the turning on and off of something attached to pin 7 (ie a motor) based on a sensed value transmitted by a peer and allows the transmitting of a sensed value (an analog voltage measured on pin 6):
symbol commPin = 0 symbol maxPulseTime = 0 symbol joinTimeout = 5 symbol netID = 1 symbol netSize = 4 symbol interestingID = 20 symbol senseID = 10 dirs = %01111111 pins = 0 ' first thing to do is join the network JOIN: b2 = 0 JOIN1: pulsin commPin, 0, w0 if w0 <> maxPulseTime then WAIT0 b2 = b2 + 1 if b2 < joinTimeout then JOIN1 goto SEND 'wait for an end of sense packet WAIT0: b1 = 0 NOT0: serin commPin, OT2400, b0 if b0 <> 0 then NOT0 b1 = b1 + 1 if b1 <> 2 then NOT0 goto READSP 'read in sense packets READSP: serin commPin, OT2400, ("TS") READ1: serin commPin, OT2400, b0, b1 if b0 = 0 and b1 = 0 then WAITPT 'do something with sense packet in w0 if b0 <> interestingID then READ1 if b1 > 128 then TURNON Pin7 = 0 goto READ1 TURNON: Pin7 = 1 goto READ1 'wait for pass token WAITPT: b2 = 1 NOAT: serin commPin, OT2400, ("PT"), b0 if b0 = netID then ACCEPT pulsin commPin, 0, w0 if w0 <> maxPulseTime then READSP b2 = b2 + 1 if b2 = netSize then READSP goto WAITPT 'accept the token and start sending ACCEPT: serout commPin, T2400, ("A") pause 1 serout commPin, T2400, ("AT") goto SEND 'send out sense packets SEND: pause 10 serout commPin, T2400, ("TS") SEND1: 'write out sense packet b0 = senseID 'value of sense comes from pot on pin6 pot 6, 20, b1 serout commPin, T2400, (b0, b1) pause 2 b0 = 0: b1 = 0 serout commPin, T2400, (b0, b1) pause 10 goto PASS 'pass the token to the next peer PASS: b2 = netID pause 10 PASS1: b2 = b2 + 1 if b2 <= netSize then NOLOOP b2 = 1 NOLOOP: if b2 = netID then SEND serout commPin, T2400, ("PT", b2) pulsin commPin, 0, w0 if w0 <> maxPulseTime then READSP pause 10 goto PASS1
The Sense Bus Internet Bridge is a program that allows two Sense Bus networks to be connected across the Internet, sharing sense information. The bridge program acts as a peer on the network, storing all of the sense packets that have been sent since the last time the program held the token. When the bridge gets the token it sends all of its stored sense packets across the internet to its companion on the other sense network. If the companion computer has sent sense packets to the bridge, it transmits these (on the local sense network) at the same time. The bridge program runs on a computer running Windows NT or Windows 95.