Last year for Halloween, our friend Christina put a string of multi-colored LEDs on her kids. I thought it looked pretty cool while we were sitting around waiting to go out. What was really cool was when we wandered the street. Not only were they visible but their wandering created interesting visual paths. It made you interested in why they would walk next to each other and what caused them to split apart. It reminded me of some characteristics of bird flocks. So of course I played around with ideas on how to take this to the next level.
The XBee radio from Digi was a natural choice for the project because of it’s mesh network capabilities that would take care of a lot of the details behind providing the swarm like behavior I was looking to implement.
I’m using Trello to help track and manage tasks. Feel free to have a look at the board to see what’s being worked on now.
For this first round of development, the design specifies a central controller iPhone application and radio that will manage a network of vests. We managed 7 vests at LiB in May and 30 at Burningman in September.
Each computer has a bank of parameterized patterns. Each pattern can be adjusted by color level, speed and various other parameters. The iPhone app exposes these controls on the screen and efficiently broadcasts these commands to the vests that are currently recognized in the network.
Vests get synced to the currently commanded pattern when they come in range of the central coordinator. There are buttons mounted on the vest computer to allow you change your pattern when you’re out of the network. This, however, gets overridden when you get close.
- Pattern command message
- Pattern command identifier (1-20 currently)
- Pattern speed
- Red level
- Green level
- Blue level
- Pattern intensity
- Auxiliary control level
- Heartbeat message to be periodically sent out by the vest computed (currently every 7 seconds)
- Current software version identifier
- Available RAM
- Currently running pattern
- Current Arduino timestamp from millis()
- Message Layout
- Byte 1: Message Id = 0x01
- Byte 2: Version Id
- Byte 3: Available RAM MSB
- Byte 4: Available RAM LSB
- Byte 5: Current Pattern
- Byte 6-9: Arduino timestamp
- Byte 10: RSSI
- Byte 11: Battery Voltage
- Byte 12: Arduino frame rate
The following hardware components will be needed for each member of the swarm:
- A vest
- 50 count LED strand (coolneon.com)
- Arduino compatible board (system was developed on Arduino Uno but any compatible board with a minimum of 2kB RAM running at 16MHz should work) (sparkfun.com)
- XBee Series 2 Radio configured as Router API (AP=2) (sparkfun.com)
- XBee breakout board and TTL level shifter (sparkfun.com)
- Microphone module (sparkfun.com)
- Operator buttons for when the swarm member is outside of radio contact
- Next pattern
- Pause cycle
- Brightness adjustment (up / down?)
- Serial port jumper / switch to XBee (for programming and power)
- Enable / disable status LEDs
- 5V RC regulator (ebay.com, still for sale as of 20120603) to provide power to the LED strand (the Arduino is powered directly off the battery)
- Status LEDs
- Power (solid = initialized, flashing = outputting version of firmware)
- Network status (solid = joined, flashing = searching)
The following hardware components will be needed for the coordinator:
- Serial connection for control phone
- iPod breakout board and connector (sparkfun.com)
- XBee Series 2 Radio configured as Coordinator API (AP=2)
The battery will last for about 4 hours depending on what patterns are used. Some definitely use more power than others. There were some nights that I was able to make it last for about 6. I selected this charger, battery and power supply:
Current Radio Configuration
The current network is running on PAD id 2098. We had 30 radios running out at Burningman. There was a companion network with 3 vests running on PAD id 2099. We were able to be in the same space without interfering with each other.