We needed all our superpowers for the Calgary Comic & Entertainment Expo this past weekend, so we decided to create our version of Arc Reactor for the team to wear at the show in order to augment the intelligence and add superhuman-level multitasking and learning capabilities (imagination is key at the Comic Expo).
Not happy with just a blinky light, we added connectivity to our setup, which consists of:
The pendant case is consists of a 3D printed housing made in-house on our Kossel (we'll be selling units shortly), with a laser engraved semi translucent acrylic diffuser on top.
A static Arc Reactor just isn't very visually appealing, so we spiced it up with a flicker, with a "power pulse" on color-mode change.
The box features only 2 input, the main power switch, and the big red button. The button pulls the Synapse module Pin 3 high, which then causes it to transmit a single ASCII character (1 through 8 ) to all the receivers.
Synapse modules have an embedded python interpreter, which is called "SNAPpy". We use this to create "Remote Procedure Calls" ("RPC") that are routines we can call either local or wirelessly from up the network. The script in the transmitter has a global variable which increments each time the button is pressed, and is multicast out to all the Arc Reactor receivers. The auto-mesh-networking of the Synapse modules means that these calls will be aut0-relayed down the chain to all nodes in the network, even if the Activation box is out of range from the furthest Arc Reactor. With an outdoor range of nearly a kilometer, we didn't any signaling problems inside the event hall.
1 x Adafruit Neopixel Ring 24
1 x Synapse RF200P81
1 x Solarbotics Synapse Breakout Board Kit
1 x Arduino Pro Mini
1 x Flora RGB Neo Pixel v2
1 x Polymer Lithium Ion Battery
1 x Vibrating Disk Motor
1 x NPN Transistor
1 x JST-PH-2.0 2 Pin Connector Plug w/Wire
1 x 330 Ohm Resistor
The Synapse radio in each Arc Reactor takes the received value and turns it into binary number output on 3 pins. (1 = 001, 8=111). Time was tight, and we went with a robust, simple method to send this information to the Arduino controlling the LEDs.
The Arduino Pro Mini monitors these pins, and changes the color palette as required. We selected the 24 element Adafruit Neopixel ring to provide illumination connected to the Pro Mini Pin 2. The awesome FastLED.io Library was used to communicate the data to the pixels.
Initial experiments proved power consumption to be a problem. Rather than powering all LEDs to some level of power, we rewrote the code to turn on only 4 adjacent segments at a time, with the first element at 100% power, the second at 50%, the third at 25%, and the fourth at 12%. This created a really nice flicker effect when rapidly cycled through the ring.
At one point during the first day of the event, we discussed how funny it would be if we could feel when the reactor is activated, so we could all "JUMP" in unison when somebody hit the switch. A quick on-the-site hack later with a transistor and vibrating disk motor, with a quick code-update (on the fly through the wireless mesh!), we were all buzzing. Unfortunately, when kids and evil co-workers discovered how nasty it felt to have simulated mild heart palpitations available on-demand, we had to snip the wires on most of the reactors. Haptic feedback, especially mid-chest, can be disturbing.
The technique we outlined here was used in a very similar way on the movie "Tron: Legacy" where similar hardware was used to control the costumes. We found it a very quick and robust way to add group-control to our project.
The Arc Reactor itself was well received by the Cosplay community in attendance. Although not for sale at the time, we've been strongly encouraged to make the visual aspect of the Arc Reactor available as a kit. Stay tuned...
Arc Reactor Button.py - Synapse code for the Button
Arc Reactor Pendant Synapse code.py - Synapse code for the Pendant
Arc_Reactor_Pendant.ino - Arduino code for the Pendant