Smart Badge

The Smart Badge, contains an IrDA transceiver, PIC microcontroller and an array of sensors. It periodically polls its sensors, transmits the result of the poll and then waits for commands from the location server. After a time-out period the Smart Badge goes to sleep. When it wakes up it repeats its loop.

If the Smart Badge is left still and in a dark place for a long time (e.g. your desk draw) then it will go into hibernation and will simply wake up and check to see if it has moved or if the lights have come up. If neither event happens it will go back to sleep without transmitting any data. Given that the IrDA interface consumes 1A peak, hibernation dramatically extends battery life.

Specifications

Processor
PIC16C74A-JW
Cycle period
2.3 sec
Data rate
38400 bps
Duty Cycle
1.7% (greater if beeps are generated)
Voltage
5V
Processor On current
1.56mA
Processor Sleep current
0.85mA
Size
54x86mm
Sensors Tilt (4 in quadrature), light, sound, temperature, humidity
Actuators Piezoelectric transducer (beeper)

Badge frame format

Frames are either output frames from the badge (called sensor frames), input frames to the badge from the location server (called command frames) or error frames generated by the badge in response to a command frame (called error frames). The badge is single buffered due to limitations in RAM space. A protocol field is used to distinguish between frame types as PROTO_DUMB and PROTO_SENSOR frames have exactly the same format. They differ only in the protocol field which is used to distinguish between Dumb Badge and Smart Badge devices. All frames contain a random field used to provide some variation in the data content (prior to encryption) of immobile badges, hence improving their resistance to cryptographic analysis.

All frames consists of a sync byte followed by 26 data bytes. Future versions will use IrDA framing. The IrDA framing may replace the sync and crc fields or may simply encapsulate the whole badge message in an IrDA message. The current proposal is to use two broadcast messages in the IrDA SIR protocol for badge-to-sensor communication:

Of course the frame format is subject to change without notice. The next change is likely to be to increase the size of X, Y and Z to 32 bits each to provide positions to 10cm resolution. Although 28 bits would provide sufficient precision, unfortunately 28 bits isn't a convenient size, hence we will use 32 bits.

Sensor Frame

OUT_SYNC
outframe_data[0]
OUT_LENGTH
outframe_data[1]
OUT_RANDOM
outframe_data[2]
OUT_PROTOCOL
outframe_data[3]
OUT_SEQUENCE
outframe_data[4]
OUT_ADDRESS0
outframe_data[5]
OUT_ADDRESS1
outframe_data[6]
OUT_ADDRESS2
outframe_data[7]
OUT_ADDRESS3
outframe_data[8]
OUT_STATUS
outframe_data[9]
OUT_TEMPERATURE
outframe_data[10]
OUT_LIGHT
outframe_data[11]
OUT_HUMIDITY
outframe_data[12]
OUT_ROLL
outframe_data[13]
OUT_PITCH
outframe_data[14]
OUT_YAW
outframe_data[15]
OUT_X1
outframe_data[15]
OUT_X2
outframe_data[17]
OUT_X3
outframe_data[18]
OUT_Y1
outframe_data[19]
OUT_Y2
outframe_data[20]
OUT_Y3
outframe_data[21]
OUT_Z1
outframe_data[22]
OUT_Z2
outframe_data[23]
OUT_Z3
outframe_data[24]
OUT_SOUND
outframe_data[25]
OUT_CRC0
outframe_data[26]
OUT_CRC1
outframe_data[27]

Command Frame

IN_LENGTH inframe_data[0]
IN_RANDOM inframe_date[1]
IN_PROTOCOL inframe_data[2]
IN_SEQUENCE inframe_data[3]
IN_ADDRESS0 inframe_data[4]
IN_ADDRESS1 inframe_data[5]
IN_ADDRESS2 inframe_data[6]
IN_ADDRESS3 inframe_data[7]
IN_COMMAND inframe_data[8]
IN_ARGUMENT_00 inframe_data[9]
IN_ARGUMENT_01 inframe_data[10]
IN_ARGUMENT_02 inframe_data[11]
IN_ARGUMENT_03 inframe_data[12]
IN_ARGUMENT_04 inframe_data[13]
IN_ARGUMENT_05 inframe_data[14]
IN_ARGUMENT_06 inframe_data[15]
IN_ARGUMENT_07 inframe_data[16]
IN_ARGUMENT_08 inframe_data[17]
IN_ARGUMENT_09 inframe_data[18]
IN_ARGUMENT_10 inframe_data[19]
IN_ARGUMENT_11 inframe_data[20]
IN_ARGUMENT_12 inframe_data[21]
IN_ARGUMENT_13 inframe_data[22]
IN_ARGUMENT_14 inframe_data[23]
IN_ARGUMENT_15 inframe_data[24]
IN_CRC0 inframe_data[25]
IN_CRC1 inframe_data[26]

Error Frame

OUT_SYNC
outframe_data[0]
OUT_LENGTH
outframe_data[1]
OUT_RANDOM
outframe_data[2]
OUT_PROTOCOL
outframe_data[3]
OUT_SEQUENCE
outframe_data[4]
OUT_ADDRESS0
outframe_data[5]
OUT_ADDRESS1
outframe_data[6]
OUT_ADDRESS2
outframe_data[7]
OUT_ADDRESS3
outframe_data[8]
ERRORED_FRAMES
outframe_data[9]
ERRORED_COMMANDS
outframe_data[10]
RESERVED
outframe_data[11]
RESERVED
outframe_data[12]
RESERVED
outframe_data[13]
RESERVED
outframe_data[14]
RESERVED
outframe_data[15]
RESERVED
outframe_data[15]
RESERVED
outframe_data[17]
RESERVED
outframe_data[18]
RESERVED
outframe_data[19]
RESERVED
outframe_data[20]
RESERVED
outframe_data[21]
RESERVED
outframe_data[22]
RESERVED
outframe_data[23]
RESERVED
outframe_data[24]
RESERVED
outframe_data[25]
OUT_CRC0
outframe_data[26]
OUT_CRC1
outframe_data[27]

Command Types

COMMAND_NULL 0x00
COMMAND_OUTFRAME 0x01
COMMAND_BEEP 0x02
COMMAND_ERRORS 0x03
COMMAND_ADDRESS 0x04
COMMAND_KEY 0x05

Protocol Field

PROTO_SENSOR 0
PROTO_COMMAND 1
PROTO_ERROR 2
PROTO_DUMB 3

Resources

The complete badge design (schematic, artwork) are available for download. At this time the badge control program is unavailable.

The original badge board and change list for version 1.

Contact

If you use the design or have any comments or suggestions we would like to hear from you.

H. W. Peter Beadle (Email: beadle@elec.uow.edu.au)

March 11, 1997


Back to the Location Aware Home Page