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 |
| 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.